SwarmIO

AI that does real work for you: cited web research, plans, finance, horoscopes. Self-serve.

사용해야 할까요

품질 및 안전성

B
설명 품질
95%
스키마 완전성
77%
이름 품질
67%
오염 위험
80%
권한 일치
90%
프로토콜 준수
100%

발견 사항 (14)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainruns.launch에서
  • LOWTool 'modes.list' description lacks action verbmodes.list에서
  • LOWTool 'market.pulse' doesn't follow camelCase/snake_casemarket.pulse에서
  • LOWTool 'route.classify' doesn't follow camelCase/snake_caseroute.classify에서
  • LOWTool 'runs.launch' doesn't follow camelCase/snake_caseruns.launch에서
  • LOWTool 'runs.get' doesn't follow camelCase/snake_caseruns.get에서
  • LOWTool 'runs.wait' doesn't follow camelCase/snake_caseruns.wait에서
  • LOWTool 'runs.report' doesn't follow camelCase/snake_caseruns.report에서
  • LOWTool 'runs.cancel' doesn't follow camelCase/snake_caseruns.cancel에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~2,865토큰 (도구 정의)
~2.1 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.24%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "swarmio": {
      "url": "https://ioswarm.io/mcp"
    }
  }
}

원격 엔드포인트

https://ioswarm.io/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (12)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢market.pulse

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.

입력 스키마

{
  "type": "object",
  "properties": {}
}

출력 스키마

{
  "type": "object",
  "properties": {
    "as_of": {
      "description": "RFC 3339 time this document was rendered.",
      "type": "string"
    },
    "attribution": {
      "type": "string"
    },
    "free": {
      "description": "Always true — this call is never charged.",
      "type": "boolean"
    },
    "news": {
      "additionalProperties": true,
      "properties": {
        "as_of": {
          "type": [
            "string",
            "null"
          ]
        },
        "digest": {
          "description": "The newest published news digest, parsed: {title, as_of, report_url, stories:[{headline, link, source, excerpt}]}. Null when no digest ran in the last 36 hours.",
          "type": [
            "object",
            "null"
          ]
        },
        "headlines": {
          "description": "Latest market-wire headlines: {headline, link, publisher, published, summary}.",
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "next": {
      "additionalProperties": true,
      "description": "How to get the same data over MCP and how to commission a real report.",
      "type": "object"
    },
    "prices": {
      "description": "One entry per symbol that priced this cycle, in list order.",
      "items": {
        "additionalProperties": true,
        "properties": {
          "as_of": {
            "type": "string"
          },
          "change_pct": {
            "description": "Session change in percent; null where the source has no session (crypto spot).",
            "type": [
              "number",
              "null"
            ]
          },
          "currency": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "source": {
            "description": "pyth | yahoo.",
            "type": "string"
          },
          "symbol": {
            "type": "string"
          }
        },
        "required": [
          "symbol",
          "price",
          "currency",
          "source",
          "as_of"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "prices_as_of": {
      "type": [
        "string",
        "null"
      ]
    },
    "symbols": {
      "description": "The fixed symbol list served.",
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "as_of",
    "prices",
    "news"
  ],
  "additionalProperties": true
}
🟢search(query)

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

입력 스키마

{
  "type": "object",
  "properties": {
    "query": {
      "description": "Words to match against report titles and text.",
      "type": "string"
    }
  },
  "required": [
    "query"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "results": {
      "items": {
        "additionalProperties": true,
        "properties": {
          "finished_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "Pass to fetch.",
            "type": "string"
          },
          "kind": {
            "description": "featured | free | own.",
            "type": "string"
          },
          "mode": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "url": {
            "description": "The public report page, or the API report URL for a private run.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "url"
        ],
        "type": "object"
      },
      "type": "array"
    }
  },
  "required": [
    "results"
  ],
  "additionalProperties": true
}
🟢fetch(id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "description": "A result id from search (a run id).",
      "type": "string"
    }
  },
  "required": [
    "id"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "metadata": {
      "additionalProperties": true,
      "type": "object"
    },
    "text": {
      "description": "The report as markdown.",
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "url": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "title",
    "text",
    "url"
  ],
  "additionalProperties": true
}
🟢route.classify(prompt)

Classify a freeform request into the right mode (research, news, finance, astrology, …) before spending a run. Never charged.

입력 스키마

{
  "type": "object",
  "properties": {
    "prompt": {
      "description": "The freeform request to classify, e.g. 'compare the best espresso grinders under $300'.",
      "type": "string"
    }
  },
  "required": [
    "prompt"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "alternates": {
      "description": "Other plausible modes, best first.",
      "type": "array"
    },
    "confidence": {
      "description": "Router confidence, 0–1.",
      "type": "number"
    },
    "fields": {
      "description": "Fields the router extracted from the prompt (mode-specific).",
      "type": "object"
    },
    "from_llm": {
      "description": "True when the LLM router answered, false for the offline heuristic.",
      "type": "boolean"
    },
    "mode": {
      "description": "The chosen mode id — pass it to runs.launch.",
      "type": "string"
    },
    "rationale": {
      "description": "Why this mode was picked.",
      "type": "string"
    }
  },
  "required": [
    "mode",
    "confidence"
  ],
  "additionalProperties": true
}
🟡runs.launch(input, max_workers, mode)

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

입력 스키마

{
  "type": "object",
  "properties": {
    "input": {
      "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.",
      "type": "string"
    },
    "max_workers": {
      "description": "Optional parallelism override (worker count). Omit for the mode default.",
      "type": "integer"
    },
    "mode": {
      "description": "A mode id from modes.list, e.g. 'research'.",
      "type": "string"
    }
  },
  "required": [
    "mode",
    "input"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "estimated_credits": {
      "description": "The credit estimate reserved at launch; settled from real usage at completion.",
      "type": "number"
    },
    "run_id": {
      "description": "The run's id — pass to runs.get / runs.report / runs.cancel.",
      "type": "string"
    },
    "status": {
      "description": "'running' on acceptance.",
      "type": "string"
    }
  },
  "required": [
    "run_id",
    "status"
  ],
  "additionalProperties": true
}
🟢runs.get(run_id)

A run's status and metadata. Poll until status is completed/failed/cancelled.

입력 스키마

{
  "type": "object",
  "properties": {
    "run_id": {
      "description": "The run_id returned by runs.launch.",
      "type": "string"
    }
  },
  "required": [
    "run_id"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "cancelling": {
      "description": "A stop was requested but the run has not unwound yet.",
      "type": "boolean"
    },
    "error": {
      "description": "Failure detail when status is failed, else null.",
      "type": [
        "string",
        "object",
        "null"
      ]
    },
    "finished_at": {
      "description": "RFC 3339 completion time; null while running.",
      "type": [
        "string",
        "null"
      ]
    },
    "has_report": {
      "description": "True once runs.report will answer with the report.",
      "type": "boolean"
    },
    "meta": {
      "description": "Run metadata: id, mode, title, timing.",
      "type": "object"
    },
    "status": {
      "description": "running | completed | failed | cancelled.",
      "type": "string"
    },
    "usage": {
      "description": "Token meters for the run — null while the run is still running, an object once it settles.",
      "type": [
        "object",
        "null"
      ]
    }
  },
  "additionalProperties": true
}
🟢runs.wait(run_id, timeout_secs)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "run_id": {
      "description": "The run_id returned by runs.launch.",
      "type": "string"
    },
    "timeout_secs": {
      "description": "How long this call may wait before returning the current status. Default 90, max 240.",
      "type": "integer"
    }
  },
  "required": [
    "run_id"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "report": {
      "description": "The report (as runs.report) when status is completed, else null.",
      "type": [
        "object",
        "null"
      ]
    },
    "run": {
      "description": "The run record (as runs.get).",
      "type": "object"
    },
    "run_id": {
      "type": "string"
    },
    "status": {
      "description": "running | completed | failed | cancelled.",
      "type": "string"
    },
    "timed_out": {
      "description": "True when the wait window elapsed first — call again.",
      "type": "boolean"
    },
    "waited_secs": {
      "type": "integer"
    }
  },
  "required": [
    "run_id",
    "status",
    "timed_out"
  ],
  "additionalProperties": true
}
🟢runs.report(run_id)

The finished, cited report for a completed run (report_text is markdown).

입력 스키마

{
  "type": "object",
  "properties": {
    "run_id": {
      "description": "The run_id returned by runs.launch.",
      "type": "string"
    }
  },
  "required": [
    "run_id"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "report_text": {
      "description": "The full report as markdown, citations inline.",
      "type": "string"
    }
  },
  "additionalProperties": true
}
🔴runs.cancel(run_id)

Stop a running job.

입력 스키마

{
  "type": "object",
  "properties": {
    "run_id": {
      "description": "The run_id returned by runs.launch.",
      "type": "string"
    }
  },
  "required": [
    "run_id"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "run_id": {
      "type": "string"
    },
    "status": {
      "description": "'cancelling' — the run unwinds itself; poll runs.get for the terminal state.",
      "type": "string"
    }
  },
  "required": [
    "run_id",
    "status"
  ],
  "additionalProperties": true
}
🟢billing.balance

The caller's credit balance and plan state.

입력 스키마

{
  "type": "object",
  "properties": {}
}

출력 스키마

{
  "type": "object",
  "properties": {
    "balance": {
      "description": "Credits available right now.",
      "type": "number"
    },
    "currency": {
      "type": "string"
    },
    "granted_total": {
      "description": "Credits ever granted (welcome + top-ups).",
      "type": "number"
    },
    "plan": {
      "type": "string"
    },
    "spent_total": {
      "description": "Credits ever spent on runs.",
      "type": "number"
    },
    "user_id": {
      "type": "string"
    }
  },
  "required": [
    "balance"
  ],
  "additionalProperties": true
}
🟢billing.topup_terms

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.

입력 스키마

{
  "type": "object",
  "properties": {}
}

출력 스키마

{
  "type": "object",
  "properties": {
    "asset": {
      "description": "'USDC'.",
      "type": "string"
    },
    "chain_id": {
      "description": "8453 (Base mainnet).",
      "type": "integer"
    },
    "contract": {
      "description": "The USDC token contract to transfer.",
      "type": "string"
    },
    "credits_per_usd": {
      "description": "Base rate; volume bonus applies on top.",
      "type": "number"
    },
    "enabled": {
      "description": "False while the operator has published no receiving address.",
      "type": "boolean"
    },
    "how": {
      "description": "The exact top-up procedure, step by step.",
      "type": "string"
    },
    "min_confirmations": {
      "description": "Confirmations required before crediting.",
      "type": "integer"
    },
    "min_usd": {
      "description": "Smallest top-up accepted, in USD.",
      "type": "number"
    },
    "network": {
      "description": "'base'.",
      "type": "string"
    },
    "pay_to": {
      "description": "The receiving address — present when enabled is true.",
      "type": "string"
    }
  },
  "required": [
    "enabled",
    "network",
    "asset",
    "contract",
    "min_usd",
    "credits_per_usd",
    "min_confirmations",
    "how"
  ],
  "additionalProperties": true
}
🟢modes.list

The launchable modes with a one-line contract for each. Static; never charged, no credentials needed.

입력 스키마

{
  "type": "object",
  "properties": {}
}

출력 스키마

{
  "type": "object",
  "properties": {
    "modes": {
      "items": {
        "additionalProperties": true,
        "properties": {
          "contract": {
            "description": "What the mode does, one line.",
            "type": "string"
          },
          "id": {
            "description": "Pass to runs.launch as mode.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "contract"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "route_first": {
      "description": "How to classify a freeform prompt into a mode id.",
      "type": "string"
    }
  },
  "required": [
    "modes"
  ],
  "additionalProperties": true
}

권장 프롬프트

search_research
Search for information about [topic] using SwarmIO
예상 도구: search
find_specific
Find [specific item] using SwarmIO
예상 도구: search
retrieve_data
Get details about [item] from SwarmIO
예상 도구: fetch
fetch_info
Fetch [information type] using SwarmIO
예상 도구: fetch
list_items
List all [items] available in SwarmIO
예상 도구: modes.list

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 12개
검증됨버전이 기록되지 않음도구 12개