Skip to content

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.

Deletes · 1Final · 1Changes · 8

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

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.

4 warn2 info
  • The server marks "runs.get" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.get" says "run": a word for a change.

    What this check looks for
  • The server marks "runs.wait" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.wait" says "run": a word for a change.

    What this check looks for
  • The server marks "runs.report" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.report" says "run": a word for a change.

    What this check looks for
  • The server marks "billing.topup_terms" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched 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.

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "...address, minimum, and rate. Public — no credentials needed."

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "...act for each. Static; never charged, no credentials needed."

    What this check looks for

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".

      Matched text

      description: "...address, minimum, and rate. Public — no credentials needed."

      What this check looks for
    • Warn

      The server marks "billing.topup_terms" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched 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.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.get" says "run": a word for a change.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.report" says "run": a word for a change.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "runs.wait" says "run": a word for a change.

      What this check looks for
    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".

      Matched text

      description: "...act for each. Static; never charged, no credentials needed."

      What this check looks for
    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
  • 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.

.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.