Swarme

by Unknown

Not rated yet

About

Governed remote MCP access to Swarme tools with discovery, exact schemas, quotes, spend controls, and structured runs.

GET /api/capabilitiessearches by natural-language query and category. Describe the selected slug before constructing input: its schema is the source of truth for fields, pricing, file requirements, and execution support.
- SearchFind candidates with?q=compress%20pdf.
- DescribeReadexecution.machine_run_statusand the input schema.
- QuoteConfirm price, wallet clearance, and save the returnedquote_id.
- RunSend the same input, quote ID, and a unique idempotency key.

export SWARME_API_KEY="YOUR_SWARME_API_KEY" export SWARME_BASE_URL="https://YOUR_SWARME_HOST" curl "$SWARME_BASE_URL/api/capabilities?q=compress%20pdf&limit=10" curl "$SWARME_BASE_URL/api/capabilities/compress-pdf" curl -X POST "$SWARME_BASE_URL/api/capabilities/uuid-generator/quote" \ -H "Authorization: Bearer $SWARME_API_KEY" -H "Content-Type: application/json" \ -d '{"input":{},"client_type":"api"}' curl -X POST "$SWARME_BASE_URL/api/capabilities/uuid-generator/run" \ -H "Authorization: Bearer $SWARME_API_KEY" \ -H "Idempotency-Key: YOUR_UNIQUE_REQUEST_ID" -H "Content-Type: application/json" \ -d '{"input":{},"client_type":"api","quote_id":"YOUR_QUOTE_ID"}'

Create a scoped API key fromDashboard → Developers. SendAuthorization: Bearer YOUR_SWARME_API_KEY. Never put a key in client-side code, URLs, logs, or a repository.

Use only the needed scopes:capabilities:read,capabilities:quote,capabilities:run,uploads:write,artifacts:read, andbilling:read.

Each client may have a USD cap. CheckGET /api/account/balancebefore paid work; wallet or spend-limit failures are hard stops.

Use one stableIdempotency-Keyper logical quote/run attempt. Replays return the original work; a key cannot safely represent different input. Paid API runs may require it.

Quote immediately before execution and pass itsquote_id. Surface the price or policy failure to the user.

Create a session for the selected slug, upload raw bytes to its returned URL with the dedicated token, then supplyupload_id(orupload_ids) in quote and run input. Validate filename, MIME type, and size against describe. Never reuse or log an upload token.

# Create a session. Keep its upload_token private. curl -X POST "$SWARME_BASE_URL/api/capabilities/compress-pdf/upload-session" \ -H "Authorization: Bearer $SWARME_API_KEY" -H "Content-Type: application/json" \ -d '{"input":{"filename":"document.pdf","content_type":"application/pdf","size_bytes":12345},"client_type":"api"}' # Read upload_url and upload_token from the response, then: curl -X PUT "YOUR_UPLOAD_URL" -H "Authorization: Bearer YOUR_UPLOAD_TOKEN" \ -H "Content-Type: application/pdf" --data-binary @document.pdf # Quote and run with upload_id; then poll /api/capability-runs/YOUR_RUN_ID.

GET /api/capability-runs/{run_id}Read queued, running, retrying, completed, failed, or cancelled state.POST /api/capability-runs/{run_id}/cancelCancel queued work or request cooperative cancellation.GET /api/capability-runs/{run_id}/artifactsList permission-checked artifacts, then follow their download links.

The canonical values aresupported,requires_worker,plan_only, anddescribe_only.supportedexecutes in the declared mode.requires_workerpreserves the worker-required response until that runtime is ready.plan_onlyreturns a client plan without server processing.describe_onlyblocks quote/run. The legacy valuerunnableis accepted assupportedfor backward compatibility. Treat missing or unknown values asdescribe_onlyand re-describe before execution.

Connect a streamable HTTP client tohttps://swarme.io/mcp. Begin withtools/list; do not assume a cached list.

swarme_capabilities_searchswarme_capability_describeswarme_account_balanceswarme_tool_quoteswarme_tool_runswarme_tool_statusswarme_tool_cancelswarme_tool_artifactsswarme_upload_session_create

Inspectmachine_run_statusafter describe. Quote/run onlysupported,requires_worker, orplan_only; refusedescribe_only, missing, and unknown values. Keep approval boundaries around paid runs and file access.

{ "mcpServers": { "swarme": { "type": "streamable-http", "url": "https://YOUR_SWARME_HOST/mcp", "headers": { "Authorization": "Bearer ${SWARME_API_KEY}" } } } }

Version and deprecate contracts explicitly.

Thecontract manifestinventories REST, MCP tools, execution and run states, quote/run and file lifecycles, errors, and scopes. Themachine-readable changelogclassifies changes asadditive,behavioral-risk, orbreaking. Unknown manifest elements fail compatibility checks conservatively.

Runphp bin/check-contract-compatibility.php --baseline=BASELINE.json --candidate=CANDIDATE.jsonlocally or in CI. Breaking changes fail unless their stable change IDs appear in an explicit local approvals file.

When deprecation is activated for an element, publish manifestdeprecatedmetadata and use standardDeprecation,Sunset, andLink: <...>; rel=deprecationheaders plusSwarme-Contract-Version. The configured target is at least 90 days' notice when practical. It is a governance target—not an SLA—and urgent security, legal, abuse-prevention, or uncontrollable upstream changes may require less notice. This increment configures and documents the convention only; it does not deprecate or remove any endpoint.

These examples use environment variables and placeholders only. They contain no credentials. The source distribution also includes copyable, dependency-freeexamples/rest-agent.phpandexamples/mcp-agent.phprecipes covering search through artifacts or cancellation, with an explicit--approveboundary and optional--file=PATHupload.

Before integration, runphp bin/check-agent-contract.phpagainst bundled versioned fixtures. Supplying--base-url=URLis explicit and performs only read-only public discovery checks. These are reusable starter clients—not a generated SDK or a frozen SDK API.

const baseUrl = process.env.SWARME_BASE_URL ?? "https://YOUR_SWARME_HOST"; const apiKey = process.env.SWARME_API_KEY; if (!apiKey) throw new Error("Set SWARME_API_KEY"); const request = async (path: string, init: RequestInit = {}) => { const response = await fetch(\${baseUrl}${path}\, { ...init, headers: { Authorization: \Bearer ${apiKey}\, "Content-Type": "application/json", ...init.headers }, }); if (!response.ok) throw new Error(\${response.status}: ${await response.text()}\); return response.json(); }; const described = await request("/api/capabilities/uuid-generator"); const rawStatus = described.capability?.execution?.machine_run_status; const machineStatus = rawStatus === "runnable" ? "supported" : rawStatus; const allowedStatuses = new Set(["supported", "requires_worker", "plan_only"]); if (!allowedStatuses.has(machineStatus)) throw new Error("Capability is describe-only; describe again before execution"); const quote = await request("/api/capabilities/uuid-generator/quote", { method: "POST", body: JSON.stringify({ input: {}, client_type: "api" }), }); const run = await request("/api/capabilities/uuid-generator/run", { method: "POST", headers: { "Idempotency-Key": crypto.randomUUID() }, body: JSON.stringify({ input: {}, client_type: "api", quote_id: quote.quote.quote_id }), }); const status = await request(\/api/capability-runs/${run.run_id}\);
import os, uuid, requests base_url = os.getenv("SWARME_BASE_URL", "https://YOUR_SWARME_HOST") api_key = os.environ["SWARME_API_KEY"] headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"} described = requests.get(f"{base_url}/api/capabilities/uuid-generator", headers=headers, timeout=30).json() raw_status = described.get("capability", {}).get("execution", {}).get("machine_run_status") machine_status = "supported" if raw_status == "runnable" else raw_status if machine_status not in {"supported", "requires_worker", "plan_only"}: raise RuntimeError("Capability is describe-only; describe again before execution") quote = requests.post( f"{base_url}/api/capabilities/uuid-generator/quote", headers=headers, json={"input": {}, "client_type": "api"}, timeout=30, ).json() run = requests.post( f"{base_url}/api/capabilities/uuid-generator/run", headers={**headers, "Idempotency-Key": str(uuid.uuid4())}, json={"input": {}, "client_type": "api", "quote_id": quote["quote"]["quote_id"]}, timeout=30, ).json() status = requests.get(f"{base_url}/api/capability-runs/{run['run_id']}", headers=headers, timeout=30).json()

This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.

Securely manage secrets and policies in HashiCorp Vault through an MCP interface.

A RESTful API to programmatically interact with the Opal Security platform.

ClawManager Fleet Control is a paid hosted remote MCP for ClawManager. It exposes Streamable HTTP tool calls, bearer-token access, public server-card metadata, usage logs, and receipt-orient

Give your AI agents access to production without the risks of sharing SSH keys.

A secure MCP gateway that acts as a proxy, providing authentication, tool discovery, caching, and guardrail enforcement.

A feature-rich gateway and proxy that federates MCP and REST services, unifying discovery, authentication, rate-limiting, and observability into a single endpoint for AI clients.

Network reconnaissance and security scanning with port scanning, DNS analysis, and vulnerability assessment

A comprehensive MCP server for managing OPNsense firewalls, offering over 300 tools for configuration and monitoring.

Manage OPNsense firewalls using Infrastructure as Code (IaC) principles.

Security gateway for MCP servers — per-tool policies, Ed25519-signed receipts, human approval gates, and Cedar WASM policy engine.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.