Server definition
- Hash
- sha256:0b97477c1cb2ffc20fe135f1c04e2c9e11abc5a6ac33dc659449d26961fb6ca1
- What it is
- What a remote MCP server returned when asked what it offers: 7 tools
The blob, as servednamed by its sha256
{
"instructions": "CTRL is a workflow automation system on Base mainnet. Workflows run inside a non-custodial V3 vault (verified on Basescan) that enforces the on-chain maxPerSwap and maxPerDay caps the user signs once. The keeper polls every ~5s. Built-in safety primitives include the pool.created safetyEnabled flag (GoPlus honeypot + tax + score gate) and pauseVault/revokeRule kill-switches. Call ctrl_get_block_catalog to read the live list of available blocks before assembling a workflow. Two equivalent surfaces exist: this JSON-RPC MCP server (tool execution needs an sk_ctrl_ key) and the anonymous REST API at /api/mcp/* (no key — the wallet signature at activate-time is the trust boundary). The REST surface is canonical for wallet-native agents; this MCP server is for key-based clients like Cursor and Claude Desktop. Both drive the same workflows.",
"tools": [
{
"description": "Return an EIP-5792 transactions[] batch the user signs ONCE to deploy their vault + register spending rules. After signing, the keeper runs the workflow autonomously per the on-chain caps.",
"inputSchema": {
"properties": {
"depositEth": {
"default": "0",
"type": "string"
},
"expiryDays": {
"default": 30,
"type": "number"
},
"maxPerDayEth": {
"default": "0.1",
"type": "string"
},
"maxPerSwapEth": {
"default": "0.01",
"type": "string"
},
"workflowId": {
"type": "string"
}
},
"required": [
"workflowId"
],
"type": "object"
},
"name": "ctrl_activate",
"outputSchema": null
},
{
"description": "Create a CTRL workflow draft. ONE trigger + an ordered chain of up to 20 actions/conditions/utilities. Returns { workflowId, activateUrl }. Pass `targetChain` to pick which chain the workflow runs on — \"base\" (default, launchpads + Aerodrome + UniV4) or \"ethereum\" (UniV3 only, no launchpads, no clanker/zora). CRITICAL: call ctrl_get_block_catalog FIRST (with the same `chain` value) to discover field names — every key in trigger.config and chain[].config must exactly match catalog fields[].key. Populate EVERY field the user expressed intent for. For pool.created (Token Launch, Base-only) set launchpad (e.g. [\"bankr\"]), keywordIncludes (\"ai,agent,claw\"), keywordMatchMode \"any\", keywordCategories ([\"ai_agents\"]), safetyEnabled true, safetyRejectHoneypot true, safetyMinScore 50. For cypher.swap set tokenIn (\"ETH\"), tokenOut (\"{{trigger.tokenAddress}}\"), tokenOutMode \"dynamic\", amount (ETH units, e.g. 0.005 — ASK USER if not specified), slippage (15 for snipes), and autoSell* if user wants an exit (autoSellEnabled true, autoSellMode \"multiple\", autoSellMultiplier 2, autoSellPercent 100, autoSellReceiveToken \"USDC\"). For notify.telegram set message with {{token}}/{{amount}}/{{txHash}} placeholders. Interview the user for missing critical fields (amount, exit strategy, keywords) — do not silently default.",
"inputSchema": {
"properties": {
"chain": {
"items": {
"properties": {
"config": {
"additionalProperties": true,
"description": "Passthrough — for cypher.swap include amount, slippage, autoSell* if user wants exit.",
"type": "object"
},
"type": {
"description": "Block id from ctrl_get_block_catalog (e.g. \"cypher.swap\", \"notify.telegram\").",
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
"maxItems": 20,
"minItems": 1,
"type": "array"
},
"description": {
"maxLength": 500,
"type": "string"
},
"name": {
"maxLength": 120,
"type": "string"
},
"targetChain": {
"description": "Chain to run the workflow on. Default: \"base\". \"ethereum\" disables launchpad-only blocks (pool.created/clanker/zora/bankr/flaunch) and UniV4/Aerodrome routing.",
"enum": [
"base",
"ethereum"
],
"type": "string"
},
"trigger": {
"properties": {
"config": {
"additionalProperties": true,
"description": "Passthrough — see ctrl_get_block_catalog for valid keys.",
"type": "object"
},
"type": {
"description": "Block id from ctrl_get_block_catalog.triggers (e.g. \"pool.created\").",
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"name",
"trigger",
"chain"
],
"type": "object"
},
"name": "ctrl_create_workflow",
"outputSchema": null
},
{
"description": "Manually fire a workflow once. Keeper picks up within ~5s. Use to test a workflow without waiting for its natural trigger.",
"inputSchema": {
"properties": {
"workflowId": {
"type": "string"
}
},
"required": [
"workflowId"
],
"type": "object"
},
"name": "ctrl_fire_manual",
"outputSchema": null
},
{
"description": "Return the live catalog of every CTRL workflow block with id, label, description, and config-field schemas. Call this before ctrl_create_workflow when unsure of a block's config shape. Pass `chain` to filter to blocks that are compatible with the target chain (Base = launchpads + Aerodrome + UniV4; Ethereum = no launchpads, V3 only). Default is \"base\".",
"inputSchema": {
"properties": {
"category": {
"description": "Optional. Filter to a single block bucket.",
"enum": [
"trigger",
"action",
"condition",
"utility"
],
"type": "string"
},
"chain": {
"description": "Optional. Filter the catalog to blocks compatible with this chain. Default: \"base\".",
"enum": [
"base",
"ethereum"
],
"type": "string"
}
},
"type": "object"
},
"name": "ctrl_get_block_catalog",
"outputSchema": null
},
{
"description": "Read recent workflow executions: trigger, status, BaseScan tx hash, gas, timing. Without workflowId returns the user's most recent across all workflows.",
"inputSchema": {
"properties": {
"limit": {
"default": 10,
"type": "number"
},
"workflowId": {
"type": "string"
}
},
"type": "object"
},
"name": "ctrl_get_execution_logs",
"outputSchema": null
},
{
"description": "Read the user's CTRL vault address, ETH + WETH balance, and active rules. Call this BEFORE ctrl_activate so you can tell the user how much they need to fund.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "ctrl_get_vault_status",
"outputSchema": null
},
{
"description": "Return an EIP-5792 batch the user signs to withdraw funds from their CTRL vault back to their wallet. The agent never signs. token defaults to ETH; pass WETH or a 0x token address for other assets; omit amount to withdraw the full balance.",
"inputSchema": {
"properties": {
"amount": {
"description": "Decimal amount, e.g. '0.05'. Omit for full balance.",
"type": "string"
},
"token": {
"description": "'ETH' (default), 'WETH', or a 0x token address.",
"type": "string"
},
"wallet": {
"description": "Vault owner address (0x…).",
"type": "string"
}
},
"required": [
"wallet"
],
"type": "object"
},
"name": "ctrl_withdraw",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:0b97477c1cb2ffc20fe135f1c04e2c9e11abc5a6ac33dc659449d26961fb6ca1 | sha256sum