Skip to the page

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.

SpecStream for Neo ChatAI assistants

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 (.env next to docker-compose.yml, or .env.local when you run from source), set the provider to firecrawl, your SpecStream key, and SpecStream's address with no path, in place of YOUR_SPECSTREAM_KEY:

    .env
    DEFAULT_SEARCH_PROVIDER="firecrawl"
    DEFAULT_SEARCH_API_KEY="YOUR_SPECSTREAM_KEY"
    DEFAULT_SEARCH_BASE_URL="https://api.specstream.ai"
  2. 2. Restart Neo Chat

    Neo Chat reads these variables when its server starts. With Docker Compose, run docker compose up -d again. 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
    What changed in the latest PostgreSQL release?

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 limit set to Result Limit (5 by default), sources set to web and images, and scrapeOptions that ask for markdown.
  • SpecStream answers in Firecrawl's shape: data.web[] with url, title, description and markdown, 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.images stays 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 429 with Retry-After, and Neo Chat passes the wait on with its error.
  • "Firecrawl search failed" with a 401 behind it means the key was refused. Check DEFAULT_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].