For builders: MCP, SDK, x402
Everything a builder needs is served from this site: the Daemon MCP server, an SDK, an x402 client and the publisher kit.
Remote endpoints
Every listing is served at https://daemonmcp.com/mcp/<server> (Streamable HTTP). Daemon forwards each request to the publisher's own endpoint and hashes every tools/list answer against the manifest pinned in the Servers contract: a match passes with the header x-daemon-manifest: match, a drift is refused with a JSON-RPC error. Paid house tools answer HTTP 402 with their x402 terms; add ?via=connector for clients without x402 and the terms come back as a tool error you can read.
The web terminal uses these endpoints with your own Anthropic API key, and the servers page has one-click installs for Cursor, VS Code, Claude Code, Claude.ai and Claude Desktop.
The Daemon MCP server
It runs inside the gateway, so an agent can install its own tools.
| Tool | Does |
|---|---|
search_servers | Search the listings by name, publisher or tool. |
plug / unplug | Add or remove a server behind the gateway. |
balance | USDG, cr and today's allowance. |
buy_credits | Buy cr at par. |
spawn | Burn 100,000 $DMN and start a daemon. |
ps / logs | List processes and read a PID's last lines. |
SDK
One ESM file, no dependencies besides viem. Its SHA-256 is published in /install/manifest.json.
import { listings, receipts, allowance, daemons } from "https://daemonmcp.com/sdk/daemon.mjs";
const servers = await listings(); // pinned listings with hash, stake, uptime, price
const today = await allowance("0xYourAddress"); // cr for today, from the posted epoch
const ps = await daemons(); // the process tablex402 client
import { payFetch } from "https://daemonmcp.com/sdk/x402.mjs";
// wraps fetch: on 402 it signs a ReceiveWithAuthorization to Meter in cr or USDG and retries
const res = await payFetch(url, init, { account, asset: "cr" });Publisher kit
import { manifestHash, screenManifest } from "https://daemonmcp.com/sdk/publish.mjs";
const problems = screenManifest(tools); // [] means it passes the listing screen
const hash = manifestHash(tools); // what the gateway will compare against