Neo Chat
Point Neo Chat's web search at SpecStream with three lines in the server's .env. Neo Chat keeps its own Firecrawl search code, and every search from a chat runs on SpecStream's Search API at $1 per 1,000 searches.
What you need
- A Neo Chat deployment whose server environment you can set. This guide follows the source of Neo Chat 2.7.0.
- A SpecStream key. Get your key on the Search API screen of your SpecStream workspace. New accounts start with $10 of credit, no card.
- 1
1. Set the search defaults
In the environment Neo Chat's server reads (
.envnext todocker-compose.yml, or.env.localwhen you run from source), set the provider tofirecrawl, your SpecStream key, and SpecStream's address with no path, in place ofYOUR_SPECSTREAM_KEY:.env - 2
2. Restart Neo Chat
Neo Chat reads these variables when its server starts. With Docker Compose, run
docker compose up -dagain. From source, stop the server and start it again. - 3
3. Check the search service
Open Settings, then Search Service. Default Service now appears, with the line "Ready: the server default search service is available." Browsers that were on Firecrawl with no key of their own switch to it on their own. Anyone who picked another provider selects Default Service once.
Deployment Health in the same settings shows "Search is available through the server default."
- 4
4. Ask with search on
In a chat, turn search on with the search button in the message box, and ask about something recent:
In a Neo Chat chat
Why the Firecrawl setting and not Tavily
Neo Chat also lists Tavily, Exa and SearXNG, and SpecStream answers all three APIs. In Neo Chat they do not reach it. Each one builds its address as new URL("/search", baseUrl), and a path that starts with / replaces the path of the base URL: https://api.specstream.ai/tavily becomes https://api.specstream.ai/search, which is not a SpecStream route.
Neo Chat's Firecrawl search calls /v2/search at the root of the host. SpecStream answers Firecrawl's v2 search at that path, because Firecrawl's own SDKs call it there too. So the base URL is https://api.specstream.ai, with nothing after it.
One key per browser instead
To leave the server unchanged, each person can set it in the app. In Settings, Search Service, open Firecrawl and select Enable. Put a SpecStream key in API Key and https://api.specstream.ai in Base URL. With a key set, Neo Chat sends the search through its own server route, so the browser never calls SpecStream directly.
What comes back
- Neo Chat posts a Firecrawl search with
limitset to Result Limit (5 by default),sourcesset to web and images, andscrapeOptionsthat ask for markdown. - SpecStream answers in Firecrawl's shape:
data.web[]withurl,title,descriptionandmarkdown, which holds a passage read from the page. Neo Chat cites each result by its URL. - Time range is sent as Firecrawl's
tbs, and SpecStream applies it. - A call answers the first source it names, so
data.imagesstays empty, and research reports get no images from search.
What each search costs
Each search is one call on the Search API's fast tier: $1 per 1,000 searches of up to 10 results. It comes out of your balance, with no quote and no approval. A search that returns nothing costs nothing, and every call, charged or not, is in your account's request log. The Search API scores 97.9 F-score on all 1,000 SimpleQA Verified questions; scores and method are on the benchmarks page.
Limits and errors
- When the account has used its calls for the minute, SpecStream answers
429withRetry-After, and Neo Chat passes the wait on with its error. - "Firecrawl search failed" with a
401behind it means the key was refused. CheckDEFAULT_SEARCH_API_KEY, or the API Key field, and restart after a change to.env. - No Default Service in Search Service: the server did not read the variables. Check the file name and that the server was restarted.
Add SpecStream's MCP tools too
Neo Chat takes remote MCP servers as plugins. Open Plugins, then Custom MCP, and choose Add Custom MCP Server. Set Server Name to SpecStream, MCP Server URL to https://api.specstream.ai/mcp, and paste a SpecStream API key in Bearer Token (optional). Create the key in Agents & API with a spending limit.
The agent can then call search_web at $5 per 1,000 searches, read_pages at $0.80 per 1,000 pages, and the tools that build lists of records, which quote a price and run only after it is approved. See the MCP server.
Go back
Empty DEFAULT_SEARCH_PROVIDER and restart. Browsers on Default Service move back to Firecrawl's public search, called from each browser. Questions: [email protected].
More
SpecStream for Neo Chat covers what it does in Neo Chat on one page. Every other tool has its guide in Connect your tools. You see the most a request can cost before it starts, and the matches are paid from your balance. Billing has the details. For help, email [email protected].