{"serverId":"mcp-registry/io.ioswarm/swarmio","tools":[{"name":"billing.balance","fixed":{"name":"billing_balance","description":"The caller's credit balance and plan state.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"billing.balance\" → \"billing_balance\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":38,"tokensAfter":38},{"name":"billing.topup_terms","fixed":{"name":"billing_topup_terms","description":"How to refill credits machine-to-machine: USDC on Base to a published address, verified on-chain. Returns the pay_to address, minimum, and rate. Public — no credentials needed.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"billing.topup_terms\" → \"billing_topup_terms\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":76,"tokensAfter":76},{"name":"market.pulse","fixed":{"name":"market_pulse","description":"FREE, no key, no account: live prices for BTC, ETH, SOL, AMZN and NVDA with the session's change, plus today's news — the platform's newest published news digest parsed into stories with source links, and the market wire's latest headlines. Refreshed every minute (prices) and every ten minutes (news). Call this first to see what the swarm's data looks like before spending anything.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"market.pulse\" → \"market_pulse\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":132,"tokensAfter":132},{"name":"modes.list","fixed":{"name":"modes_list","description":"The launchable modes with a one-line contract for each. Static; never charged, no credentials needed.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"modes.list\" → \"modes_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":52,"tokensAfter":52},{"name":"news.brief","fixed":{"name":"news_brief","description":"PAID, 5¢ per call over x402 (USDC on Base, no account): today's market-news brief — this platform's newest published news digest synthesized with the live market wire into a cited bullet list, every finding ending with its source URL. No input required; the settle happens over HTTP, where the payment headers live: this tool returns the exact steps. The FREE raw material it is written from is market.pulse on this same server (the digest stories and wire headlines, un-synthesized).","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"news.brief\" → \"news_brief\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":159,"tokensAfter":159},{"name":"route.classify","fixed":{"name":"route_classify","description":"Classify a freeform request into the right mode (research, news, finance, astrology, …) before spending a run. Never charged.","inputSchema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string","description":"The freeform request to classify, e.g. 'compare the best espresso grinders under $300'."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"route.classify\" → \"route_classify\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"runs.cancel","fixed":{"name":"runs_cancel","description":"Stop a running job.","inputSchema":{"type":"object","required":["run_id"],"properties":{"run_id":{"type":"string","description":"The run_id returned by runs.launch."}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"runs.cancel\" → \"runs_cancel\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":58,"tokensAfter":58},{"name":"runs.get","fixed":{"name":"runs_get","description":"A run's status and metadata. Poll until status is completed/failed/cancelled.","inputSchema":{"type":"object","required":["run_id"],"properties":{"run_id":{"type":"string","description":"The run_id returned by runs.launch."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"runs.get\" → \"runs_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":73,"tokensAfter":73},{"name":"runs.launch","fixed":{"name":"runs_launch","description":"Launch a run: agents search the web, read sources, and write a cited report — real work, done for the caller. BILLED from the caller's credits. Returns the run record; poll runs.get until completed, then runs.report. Modes: research, news, product, trips, trainer, finance, astrology, horoscope (astrology/horoscope take Birth date constraint lines — see https://ioswarm.io/llms.txt).","inputSchema":{"type":"object","required":["mode","input"],"properties":{"mode":{"type":"string","description":"A mode id from modes.list, e.g. 'research'."},"input":{"type":"string","description":"The question or brief. astrology/horoscope take constraint lines ('- Birth date: YYYY-MM-DD', optional Birth time + Timezone, Latitude/Longitude) — contract at https://ioswarm.io/llms.txt."},"max_workers":{"type":"integer","description":"Optional parallelism override (worker count). Omit for the mode default."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"runs.launch\" → \"runs_launch\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":260,"tokensAfter":260},{"name":"runs.report","fixed":{"name":"runs_report","description":"The finished, cited report for a completed run (report_text is markdown).","inputSchema":{"type":"object","required":["run_id"],"properties":{"run_id":{"type":"string","description":"The run_id returned by runs.launch."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"runs.report\" → \"runs_report\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":73,"tokensAfter":73},{"name":"runs.wait","fixed":{"name":"runs_wait","description":"Block until a run finishes, then return its record — and its report when it completed. Runs take 3–10 minutes; call this instead of polling runs.get in a loop. Returns early with timed_out=true after timeout_secs (default 90, max 240): call it again with the same run_id to keep waiting. Never charged.","inputSchema":{"type":"object","required":["run_id"],"properties":{"run_id":{"type":"string","description":"The run_id returned by runs.launch."},"timeout_secs":{"type":"integer","description":"How long this call may wait before returning the current status. Default 90, max 240."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"runs.wait\" → \"runs_wait\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":174,"tokensAfter":174},{"name":"web.search","fixed":{"name":"web_search","description":"FREE, no key, no account: LIVE web search, 25 queries a day per caller, up to 5 results each ({results:[{url,title,snippet,published}], quota, report}). This is the open web, not the published corpus — for the platform's finished reports use `search`. Over the daily quota the paid leg is $0.02 per call over x402 (USDC on Base): POST https://ioswarm.io/api/v1/search with the same JSON body and no payment header, read the 402, sign the EIP-3009 authorization, re-send with X-PAYMENT (v1) or PAYMENT","inputSchema":{"type":"object","required":["query"],"properties":{"k":{"type":"integer","description":"Results wanted, 1-5 (free-leg cap)."},"query":{"type":"string","description":"The live-web query, up to 500 characters."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"web.search\" → \"web_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":213,"tokensAfter":213}],"toolsChanged":12,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}