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.
What you need
- MiroThinker cloned, with
uv syncrun inapps/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_searchposts each query toSERPER_BASE_URLplus/search, with the key in theX-API-KEYheader. SpecStream answers Serper's calls at its own address, reads the key from the same header and replies in Serper's shape:organic[]withtitle,link,snippetandposition.In
apps/miroflow-agent/.env, replace the two Serper lines. Give the address without/search: MiroThinker adds it.apps/miroflow-agent/.env - 2
2. Set the page reading lines
scrape_and_extract_inforeads a page by callingJINA_BASE_URL, a slash and the page's address, withJINA_API_KEYas 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 - 3
3. Run a task
src/config/settings.pyloads.envwhen the agent starts and passes both addresses to every tool server that uses them. Run the default task fromapps/miroflow-agent, with the preset and model you use:Terminal - 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_searchruns on SpecStream's Search API.jina_scrape_llm_summary:scrape_and_extract_inforeads pages through SpecStream's Extract API.tool-google-search: itsgoogle_searchandscrape_websiteboth move.tool-sogou-search:scrape_websitereads 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_KEYempty,google_searchanswersSERPER_API_KEY environment variable not setand sends nothing. - With
JINA_API_KEYempty, the Jina call is skipped andscrape_and_extract_infofetches 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
429withRetry-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].