{
  "markdown": "<p align=\"center\">\n  <img src=\"hero.jpg\" alt=\"ctrl/mcp\" width=\"100%\">\n</p>\n\n# ctrl-mcp\n\n> the mcp for on-chain automation. sign once, agent does the rest, forever.\n\nctrl is workflow automation for on-chain actions on base. you compose **trigger → action → condition** graphs in plain english, sign one batch to deploy a vault + spending caps, and a keeper runs your workflow under those caps forever.\n\nthis is the mcp surface. agents talk to it. users sign in their wallet.\n\n```bash\n$ claude mcp add ctrl https://ctrl.build/api/mcp\n```\n\nor paste into your client's mcp config:\n\n```json\n{\n  \"mcpServers\": {\n    \"ctrl\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-remote\", \"https://ctrl.build/api/mcp\",\n               \"--header\", \"Authorization:Bearer ${CTRL_API_KEY}\"],\n      \"env\": { \"CTRL_API_KEY\": \"sk_ctrl_...\" }\n    }\n  }\n}\n```\n\nmint a key at [ctrl.build/settings/api-keys](https://ctrl.build/settings/api-keys).\n\n## prompt your agent. that's it.\n\n<p align=\"center\">\n  <img src=\"prompt.png\" alt=\"example prompt — bankr snipe workflow\" width=\"720\">\n</p>\n\n## what your agent gets\n\nseven tools. that's it.\n\n| tool | what it does |\n|---|---|\n| `ctrl_get_vault_status` | read user's vault address, balance, active rules |\n| `ctrl_get_block_catalog` | live list of every block + field schema |\n| `ctrl_create_workflow` | assemble + save a workflow draft from a prompt |\n| `ctrl_activate` | encode the eip-5792 batch the user signs to deploy |\n| `ctrl_withdraw` | encode the batch to pull funds out of the vault back to the user's wallet (eth, weth, or any erc-20) |\n| `ctrl_fire_manual` | fire a workflow once for testing — no waiting |\n| `ctrl_get_execution_logs` | basescan tx hashes, gas, status — keeper history |\n\n## 24 blocks under the hood\n\n**triggers** — `time.interval`, `trigger.manual`, `price.above/below/change`, `pool.created` (clanker / flaunch / zora / bankr), `watch.whale`, `event.transfer`, `event.balance`, `trending.token`\n\n**actions** — `cypher.swap`, `read.balance`, `notify.telegram`, `notify.discord`, `util.webhook`\n\n**conditions** — `cond.price`, `cond.balance`, `cond.allowed_weekdays`, `cond.time_window`\n\n**utilities** — `util.delay`, `util.note`, `util.log`, `util.stop`, `util.snapshot`\n\nthe agent calls `ctrl_get_block_catalog` first to see the live shape. every block id maps 1:1 to keeper execution.\n\n## example prompts\n\ndrop these into your agent and watch:\n\n- \"dca $50 eth into usdc every monday at 14:00 utc\"\n- \"snipe new flaunch launches with `milady` in the name, 0.005 eth each, auto-sell at 2x\"\n- \"watch wallet 0x6cc5...c01b. when they buy anything over $10k, copy with 0.01 eth\"\n- \"sell 50% of my pepe if price drops 20% in an hour\"\n- \"every monday noon, check moonwell usdc apy. if lower than morpho by 1%, move 80%\"\n\n## security\n\nvault-direct model. agent never holds keys.\n\n- on-chain caps: every rule signs immutable `maxPerSwap` + `maxPerDay`. enforced by the vault contract.\n- kill switches: `pauseVault()` halts everything; `revokeRule(id)` kills one workflow. both 1-tx, user-callable.\n- safety primitives: `pool.created` runs goplus honeypot + tax + score checks before any swap.\n- keeper bounded: the keeper fleet can only call methods the vault permits. compromised keeper costs at most one tick's per-swap cap.\n\nverified contracts on base:\n- v13 vault factory — [0x5Df25e79efd7f9dc86841b404b3EA6F4b7951DBB](https://basescan.org/address/0x5Df25e79efd7f9dc86841b404b3EA6F4b7951DBB)\n- vault implementation — [0xc98137a6df7fb91ab91b568bf923490a278aa702](https://basescan.org/address/0xc98137a6df7fb91ab91b568bf923490a278aa702)\n- timelock beacon — [0x5760A6D62743860F27843fA314E22166dBEF7d73](https://basescan.org/address/0x5760A6D62743860F27843fA314E22166dBEF7d73)\n\n## ecosystem\n\nworks with any mcp client. tested with:\n- claude code · `~/.claude.json`\n- claude desktop · `~/Library/Application Support/Claude/claude_desktop_config.json`\n- cursor · `~/.cursor/mcp.json`\n- hermes ([nousresearch/hermes-agent](https://github.com/nousresearch/hermes-agent))\n- aeon ([aaronjmars/aeon](https://github.com/aaronjmars/aeon))\n\n---\n\n- app · [ctrl.build](https://ctrl.build)\n- docs · [ctrl.build/docs](https://ctrl.build/docs)\n- mcp hub · [ctrl.build/mcp](https://ctrl.build/mcp)\n- sibling repo · [ctrl-skill](https://github.com/CTRLabs/ctrl-skill)\n\nmit\n",
  "bytes": 4301,
  "sha": "97cd6b55e877b9cb2b68bea48995aea10170af4e8b276c418257bfd58d895556",
  "repo_slug": "ctrlabs/ctrl-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_ctrlabs_ctrl_mcp_9b9c7fb6/readme"
}