SwarmIO
by ioswarm.io · remote · no sign-in to list tools · v1.0.1 · published by io.ioswarm
AI that does real work for you: cited web research, plans, finance, horoscopes. Self-serve.
14 tools: 1 can delete or cancel things, 1 do something that can't be undone, 8 change things and 4 only read.
Scanned Oct 21, 2026
- Deletes or cancels1Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things8Claude Code: ask: see these tools
- Only reads4Claude Code: allow: see these tools
6 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http swarmio https://ioswarm.io/mcp --header 'Authorization: <your-authorization>'Findings
Matches of fixed checks, with the text they matched.
- Warnruns.get
The server marks "runs.get" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.get" says "run": a word for a change.
- Warnruns.wait
The server marks "runs.wait" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.wait" says "run": a word for a change.
- Warnruns.report
The server marks "runs.report" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.report" says "run": a word for a change.
The server marks "billing.topup_terms" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "billing.topup_terms" says "topup": a word that usually means money moves, which cannot be taken back.
The description mentions "credentials".
What this check looks forMatched text
description: "...address, minimum, and rate. Public — no credentials needed."
- Infomodes.list
The description mentions "credentials".
What this check looks forMatched text
description: "...act for each. Static; never charged, no credentials needed."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
14 tools
Deletes or cancels 1Claude Code: deny
runs.cancelStop a running job.No findings
Why it is in this group
- The name "runs.cancel" says "run": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Stop a running job.
Annotations the server declares
- destructiveHint: true
- openWorldHint: false
- readOnlyHint: false
Can't be undone 1Claude Code: ask
billing.topup_termsHow to refill credits machine-to-machine: USDC on Base to a published address, verified on-chain.2 findings
Why it is in this group
- The name "billing.topup_terms" says "topup": a word that usually means money moves, which cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "...address, minimum, and rate. Public — no credentials needed."
- Warn
The server marks "billing.topup_terms" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "billing.topup_terms" says "topup": a word that usually means money moves, which cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
- readOnlyHint: true
Changes things 8Claude Code: ask
billing.balanceThe caller's credit balance and plan state.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it The caller's credit balance and plan state.
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
- readOnlyHint: true
market.pulseFREE, 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 storie…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
- readOnlyHint: true
news.briefPAID, 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 …No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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).
Annotations the server declares
- destructiveHint: false
- openWorldHint: true
- readOnlyHint: true
route.classifyClassify a freeform request into the right mode (research, news, finance, astrology, …) before spending a run.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Classify a freeform request into the right mode (research, news, finance, astrology, …) before spending a run. Never charged.
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
- readOnlyHint: true
runs.getA run's status and metadata.1 finding
Why it is in this group
- The name "runs.get" says "run": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "runs.get" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.get" says "run": a word for a change.
Description, as the server wrote it A run's status and metadata. Poll until status is completed/failed/cancelled.
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
- readOnlyHint: true
runs.launchLaunch a run: agents search the web, read sources, and write a cited report — real work, done for the caller.No findings
Why it is in this group
- The name "runs.launch" says "run": a word for a change.
Description, as the server wrote it 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).
Annotations the server declares
- destructiveHint: false
- openWorldHint: true
- readOnlyHint: false
runs.reportThe finished, cited report for a completed run (report_text is markdown).1 finding
Why it is in this group
- The name "runs.report" says "run": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "runs.report" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.report" says "run": a word for a change.
Description, as the server wrote it The finished, cited report for a completed run (report_text is markdown).
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
- readOnlyHint: true
runs.waitBlock until a run finishes, then return its record — and its report when it completed.1 finding
Why it is in this group
- The name "runs.wait" says "run": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "runs.wait" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.wait" says "run": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
- readOnlyHint: true
Only reads 4Claude Code: allow
fetchRead one report by the id search returned: the full markdown text with its citations and evidence header, plus title, url and metadata.No findings
Why it is in this group
- The name "fetch" says "fetch": a word for reading.
Description, as the server wrote it Read one report by the id search returned: the full markdown text with its citations and evidence header, plus title, url and metadata. Public reports need no key; a caller's own reports need theirs.
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
- readOnlyHint: true
modes.listThe launchable modes with a one-line contract for each.1 finding
Why it is in this group
- The name "modes.list" says "list": a word for reading.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "...act for each. Static; never charged, no credentials needed."
Description, as the server wrote it The launchable modes with a one-line contract for each. Static; never charged, no credentials needed.
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
- readOnlyHint: true
searchSearch the swarm's published research: the featured shelf, the operator's daily news / markets / AI digests, and — when a key is presented — the caller's own reports.No findings
Why it is in this group
- The name "search" says "search": a word for reading.
Description, as the server wrote it Search the swarm's published research: the featured shelf, the operator's daily news / markets / AI digests, and — when a key is presented — the caller's own reports. Every hit is a finished, cited, evidence-graded report. Returns {results:[{id,title,url}]}; pass an id to fetch. No key needed for the public corpus. (The research-connector contract: this is what a ChatGPT or Claude connector calls.)
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
- readOnlyHint: true
web.searchFREE, 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}).No findings
Why it is in this group
- The name "web.search" says "search": a word for reading.
Description, as the server wrote it 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-SIGNATURE (v2) — no account is created. The response's `report` field shows the one-call cited research brief (5¢, pay-only) for when raw results are not enough.
Annotations the server declares
- destructiveHint: false
- openWorldHint: true
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http swarmio https://ioswarm.io/mcp --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__swarmio__search",
"mcp__swarmio__fetch",
"mcp__swarmio__web_search",
"mcp__swarmio__modes_list"
],
"ask": [
"mcp__swarmio__market_pulse",
"mcp__swarmio__news_brief",
"mcp__swarmio__route_classify",
"mcp__swarmio__runs_launch",
"mcp__swarmio__runs_get",
"mcp__swarmio__runs_wait",
"mcp__swarmio__runs_report",
"mcp__swarmio__billing_balance",
"mcp__swarmio__billing_topup_terms"
],
"deny": [
"mcp__swarmio__runs_cancel"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as swarmio. Review it before you use it.