Daemon

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.

ToolDoes
search_serversSearch the listings by name, publisher or tool.
plug / unplugAdd or remove a server behind the gateway.
balanceUSDG, cr and today's allowance.
buy_creditsBuy cr at par.
spawnBurn 100,000 $DMN and start a daemon.
ps / logsList 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 table

x402 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