Skip to the page

MiroThinker

Run MiroThinker's web search and page reading on SpecStream by changing two addresses and two keys in apps/miroflow-agent/.env. MiroThinker's Serper and Jina clients stay as they are. Each search costs $1 per 1,000, and each page $0.80 per 1,000.

SpecStream for MiroThinkerAgent frameworks & builders

What you need

  • MiroThinker cloned, with uv sync run in apps/miroflow-agent, and a model to drive it: your own MiroThinker server, or a Claude or GPT model as its README shows.
  • 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 lines in .env

    MiroThinker's google_search posts each query to SERPER_BASE_URL plus /search, with the key in the X-API-KEY header. SpecStream answers Serper's calls at its own address, reads the key from the same header and replies in Serper's shape: organic[] with title, link, snippet and position.

    In apps/miroflow-agent/.env, replace the two Serper lines. Give the address without /search: MiroThinker adds it.

    apps/miroflow-agent/.env
    SERPER_API_KEY=YOUR_SPECSTREAM_KEY
    SERPER_BASE_URL="https://api.specstream.ai/serper"
  2. 2. Set the page reading lines

    scrape_and_extract_info reads a page by calling JINA_BASE_URL, a slash and the page's address, with JINA_API_KEY as a Bearer token. SpecStream answers that call in Jina Reader's text form, so the tool hands the page's text to your summary model as before.

    Replace the two Jina lines with the same key:

    apps/miroflow-agent/.env
    JINA_API_KEY=YOUR_SPECSTREAM_KEY
    JINA_BASE_URL="https://api.specstream.ai/jina"
  3. 3. Run a task

    src/config/settings.py loads .env when the agent starts and passes both addresses to every tool server that uses them. Run the default task from apps/miroflow-agent, with the preset and model you use:

    Terminal
    cd apps/miroflow-agent
    uv run python main.py llm=qwen-3 agent=mirothinker_1.7_keep5_max200 llm.base_url=http://localhost:61002/v1
  4. 4. Check the calls

    The default task asks for the title of today's arxiv paper in computer science, so the agent has to search and read live pages. Each search and each page read is in the request log of your SpecStream workspace, with the Serper or Jina route as its endpoint and the price it cost.

Which tools move

Every preset that lists these servers uses the new addresses, from mirothinker_1.7_keep5_max200 to multi_agent. Nothing in conf/agent/ changes.

  • search_and_scrape_webpage: google_search runs on SpecStream's Search API.
  • jina_scrape_llm_summary: scrape_and_extract_info reads pages through SpecStream's Extract API.
  • tool-google-search: its google_search and scrape_website both move.
  • tool-sogou-search: scrape_website reads pages through SpecStream. Its search stays on Tencent Cloud.

What stays as it was

Only the addresses and the keys change. MiroThinker's retries, its filter on Hugging Face dataset and space links, its second try of a quoted query without the quotes, and its summary model all work as before.

The arguments the agent sets reach the search: num and page, hl and gl as the language and country, and tbs values such as qdr:w as the time window. When a page read fails, scrape_and_extract_info fetches the page itself, as it does with Jina.

Why SpecStream for a research agent

MiroThinker's answers on BrowseComp and GAIA depend on what each search returns. SpecStream's Search API reads each answer from the live web at the moment of the call. It scores 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on all 200 WideSearch tasks. Scores and method are on the benchmarks page.

One key pays for searches and pages, so a long run has one balance and one request log. Over MCP, the same account also asks for structured records, with a source URL and read time on every value.

What a run costs

Each google_search is one Search API call on the fast tier: $1 per 1,000 searches of up to 10 results, a fifth of the default search's $5. MiroThinker asks for 10 results unless the agent sets num. Each started block of 10 more results costs in the same proportion, so a call for 50 results is $0.0058. A search that returns no results costs nothing.

Each page read is one Extract API page at $0.80 per 1,000 pages, and a page with no text is not charged. Calls come out of your balance with no quote and no approval. Give the key a spending limit before a benchmark run: it is the most the run can spend. Rates are on pricing, and billing covers the rest.

Limits and errors

  • With SERPER_API_KEY empty, google_search answers SERPER_API_KEY environment variable not set and sends nothing.
  • With JINA_API_KEY empty, the Jina call is skipped and scrape_and_extract_info fetches the page itself.
  • A missing or wrong key is refused with 401, and nothing is charged.
  • When the account has used its calls for the minute, SpecStream answers 429 with Retry-After, and nothing is charged. MiroThinker's Serper client tries a failed call three times, waiting 4 to 10 seconds between tries.

Undo

Set SERPER_BASE_URL back to https://google.serper.dev with a Serper key, and JINA_BASE_URL back to https://r.jina.ai with a Jina key. Revoke the SpecStream key on the Search API screen of your workspace. The Serper and Jina moves for other tools are on Serper and Jina. Questions go to [email protected].

More

SpecStream for MiroThinker covers what it does in MiroThinker 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].