LangChain
Give a LangChain agent any list from the live web. The langchain-specstream package adds two tools and a retriever: the agent asks in plain words, like “dental clinics in Lisbon with online booking”, and gets back every matching row, each with the page it was read from. You set what one list may cost, in code. The model can’t raise it.
Install
Create the key under Agents & API in your workspace (more on keys). A free account comes with $10 of work to use within 30 days and needs no card: sign up. The package works with LangChain 0.3 and 1.x on Python 3.10 or later.
An agent that finds lists
The agent writes the request and picks how many rows. You decide what one list may cost.
| Tool | The model gives | What happens |
|---|---|---|
specstream_find_list | request, max_results | Reads the request, prices it, starts it only within max_price_usd, waits up to five minutes and returns every row. You pay only for rows that match. |
specstream_get_list_results | list_id | Every row found so far, for a list that was still running. Free. |
When the price is above your maximum, nothing runs: the tool returns the price, so the agent can ask for fewer rows or tell the user. When a request is too vague to price (“clinics”), it returns how SpecStream read it, so the agent can add the place or the conditions.
Use the classes directly when you want different settings per tool:
What comes back
One flat row per match: the list’s own columns, then where the row was read. This is a real row from the request above.
Columns follow the request. Ask for breweries with their website and the rows carry the brewery and its website instead. A fact a source doesn’t publish comes back empty, never guessed. The list_link opens the same list in your workspace, where you can map it, export it or keep it current.
As a retriever
One document per row, its facts as text and its source in the metadata, so a chain can cite every claim. Above the maximum, the retriever raises SpecStreamError and nothing runs.
Money, plainly
max_price_usdlives on the tool, in your code. The model never sees it and can’t change it.- You pay for rows that match. Candidates SpecStream couldn’t confirm are left out and aren’t billed.
- A retried step asking for the same list within the hour gets the list it already started, not a second bill.
- Rates and plans: pricing. How charges work: billing.
Every tool over MCP
The package covers finding a list and reading it. For everything else (schedules, exports, sharing, enrichment of your own list), load the whole MCP server with langchain-mcp-adapters:
Source and issues: GitHub (opens in a new tab). Package: PyPI (opens in a new tab).