AgentWatch

Read-only watchtower for AI agents on-chain: decoded receipts, plan vs execution, Safe audits.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
98%
Integridad del esquema
82%
Calidad de los nombres
97%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~2,272Tokens (definiciones de herramientas)
~677 BTamaño de respuesta típico
Impacto moderado en la atención (1.77% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "agentwatch": {
      "url": "https://agentwatch.agentwatch.workers.dev/mcp"
    }
  }
}

Puntos de conexión remotos

https://agentwatch.agentwatch.workers.dev/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (21)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟡list_watched

List watched addresses for this connector principal. NEW USERS: if empty, call watch_demo_set next (do not invent a global feed), then get_dashboard.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_feed(address, since)

Decoded activity feed for an address. Use when reviewing what an agent did on-chain.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Watched address (0x…40 hex)"
    },
    "since": {
      "type": "number",
      "description": "Unix seconds lower bound"
    }
  },
  "required": [
    "address"
  ]
}
⚪run_audit(address, chain, agents)

Run provenance audit on a Safe/address. Use when the user asks 'is this fake?' or wants a shareable verdict.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Safe/address to audit (0x…40 hex)"
    },
    "chain": {
      "type": "string",
      "enum": [
        "base",
        "ethereum"
      ]
    },
    "agents": {
      "type": "string",
      "description": "Comma-separated agent keys"
    }
  },
  "required": [
    "address"
  ]
}
🟢get_capabilities(agent_key)

Blast-radius / historical capability for an agent key. Use before trusting an agent with funds.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "agent_key": {
      "type": "string"
    }
  },
  "required": [
    "agent_key"
  ]
}
🟡get_alerts(status)

List alerts scoped to this principal's watched addresses (empty watch list → call watch_demo_set first). Use when checking what needs attention.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string"
    }
  }
}
🟢get_pending_proposals(safe, chains)

Pending Safe multisig proposals from the Safe Transaction Service (indexer confidence). Pass safe=0x… or omit to scan all watched addresses.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "safe": {
      "type": "string",
      "description": "Optional Safe address; default = all watched"
    },
    "chains": {
      "type": "string",
      "description": "Optional comma-separated chain ids"
    }
  }
}
🟢get_fidelity(agent_key)

Intent↔execution fidelity score for an agent or Safe. Use for accountability / coverage meter. Check matched_agent — false means the address has no indexed activity (as signer or as the Safe that executed), so the score is vacuous.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "agent_key": {
      "type": "string",
      "description": "Agent EOA address (0x…40 hex)"
    }
  },
  "required": [
    "agent_key"
  ]
}
🟢get_leaderboard(agent_key, limit)

Public standings for agents with a published passport, ranked from receipts (declared-first coverage, fidelity, reliability, hygiene, sustained work). Pass agent_key to get that agent's own rank, its component scores, and what it would need to climb. Read-only: nothing here can be self-reported.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "agent_key": {
      "type": "string",
      "description": "Optional: address to locate in the standings"
    },
    "limit": {
      "type": "number",
      "description": "How many ranked rows to return (default 10, max 50)"
    }
  }
}
🟢get_benchmark(agent_key)

Counterfactual P&L / agent alpha vs do-nothing baselines. Use for performance honesty checks. Check matched_agent — false means the key has no indexed activity.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "agent_key": {
      "type": "string",
      "description": "Agent EOA address (0x…40 hex)"
    }
  },
  "required": [
    "agent_key"
  ]
}
🟢get_tca(event_id)

TCA market-context snapshot for an event_id (chain:txHash). Use when judging execution quality.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string"
    }
  },
  "required": [
    "event_id"
  ]
}
⚪register_intent(agent_key, description, declared_at, deadline_minutes, expected)

Declare an intent BEFORE broadcasting. Returns {intent_id, pairing_code}. Append the 16-hex pairing_code as the last 8 bytes of calldata (no magic prefix), then broadcast — EXCEPT bare ETH transfers to contracts (empty data + value>0): appending reverts on Safe/fallback handlers; register without a suffix and use expected.steps for multi-leg flows (e.g. approve+supply). Pairing codes are single-use and only consumed by successful (non-reverted) txs. Use deadline_minutes (relative) — normalized to absolute constraints.deadline at registration.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "agent_key": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "declared_at": {
      "type": "number"
    },
    "deadline_minutes": {
      "type": "number",
      "description": "Relative window; stored as absolute constraints.deadline"
    },
    "expected": {
      "type": "object",
      "description": "Structured shape. Use steps: ['approve','other'] (or similar) so one intent covers approve+supply/swap companions."
    }
  },
  "required": [
    "agent_key",
    "description"
  ]
}
🟡add_watch(address, chains, label)

Start watching an address. Use when onboarding a new agent or Safe.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Address to watch (0x…40 hex)"
    },
    "chains": {
      "type": "string"
    },
    "label": {
      "type": "string",
      "description": "Optional short label (e.g. Agent EOA)"
    }
  },
  "required": [
    "address"
  ]
}
🟡watch_demo_set

ONE-SHOT cold-start for brand-new Claude / MCP users with an empty watch list. Adds the July 18 fixture (Agent EOA + Safe A + Safe B on Base, with declared intents) and one live Polygon trading bot, so the first dashboard has recent activity. Call this FIRST after connect when list_watched is empty, then call get_dashboard (Always allow the App). Idempotent — skips addresses already watched.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟡refresh_watches(address, chains)

Force an immediate poller pass over this principal's watched addresses (catch up txs from explorers into AgentWatch). Use after add_watch / a fresh broadcast when get_feed is still empty. Optional address / chains to focus the pass.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Optional single address to refresh (0x…40 hex)"
    },
    "chains": {
      "type": "string",
      "description": "Optional csv of chains (default: ethereum,base first, then the rest)"
    }
  }
}
🟢get_agent_passport(address)

Read the declared identity of a watched agent (name, model provider, how often it runs, role, purpose, operator) and whether its public passport page is published.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Watched agent address (0x…40 hex)"
    }
  },
  "required": [
    "address"
  ]
}
🟡set_agent_passport(address, display_name, provider, model, cadence, ...)

Declare who a watched agent is: model provider, run cadence, role, purpose, operator, and whether to publish a shareable public passport at /a/<slug>. Declarations never change the receipt-derived numbers next to them; publishing exposes only this address, never the rest of the watch list.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Watched agent address (0x…40 hex)"
    },
    "display_name": {
      "type": "string",
      "description": "Name shown instead of the raw address"
    },
    "provider": {
      "type": "string",
      "enum": [
        "anthropic",
        "openai",
        "google",
        "xai",
        "meta",
        "mistral",
        "deepseek",
        "qwen",
        "open_source",
        "multi",
        "none",
        "unknown"
      ],
      "description": "Which model drives the agent"
    },
    "model": {
      "type": "string",
      "description": "Optional model or framework detail"
    },
    "cadence": {
      "type": "string",
      "enum": [
        "always_on",
        "scheduled",
        "event_driven",
        "on_demand",
        "unknown"
      ],
      "description": "always_on, scheduled, event_driven, on_demand"
    },
    "role": {
      "type": "string",
      "enum": [
        "trading",
        "market_making",
        "prediction",
        "treasury",
        "payments",
        "research",
        "infra",
        "personal",
        "other"
      ]
    },
    "purpose": {
      "type": "string",
      "description": "One or two sentences on what it is for"
    },
    "operator": {
      "type": "string",
      "description": "Who runs it"
    },
    "public": {
      "type": "boolean",
      "description": "Publish a public passport page"
    }
  },
  "required": [
    "address"
  ]
}
🟢list_recovery_owners

List this user's saved recovery wallets (human co-signers for default 1/2 Safes). Each may have a label/purpose — users often keep several for different vaults.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟡set_recovery_owner(address, label, purpose, make_default)

Save or update a recovery address for this user. Product default Safe is then 1/2: threshold 1, owners = [agent, this recovery]. Use make_default=true to prefer this label in get_safe_defaults.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "0x recovery wallet the human controls"
    },
    "label": {
      "type": "string",
      "description": "Short name, e.g. hardware, treasury, personal"
    },
    "purpose": {
      "type": "string",
      "description": "What this recovery is for, e.g. default, trading"
    },
    "make_default": {
      "type": "boolean",
      "description": "Prefer this label for default Safes"
    }
  },
  "required": [
    "address"
  ]
}
🔴remove_recovery_owner(address)

Remove a saved recovery address for this user.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string"
    }
  },
  "required": [
    "address"
  ]
}
🟢get_safe_defaults(agent_key, recovery_label, purpose, chain, all_recoveries)

Return the default Safe ownership plan for an agent EOA: threshold 1 + agent + selected recovery (1/2 when one recovery is set). Call before register_intent for Safe deploys. AgentWatch never deploys or signs.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "agent_key": {
      "type": "string",
      "description": "Agent EOA that will be an owner/signer"
    },
    "recovery_label": {
      "type": "string",
      "description": "Optional label to pick among several recoveries"
    },
    "purpose": {
      "type": "string",
      "description": "Optional purpose filter (e.g. trading)"
    },
    "chain": {
      "type": "string",
      "description": "Optional chain hint for the intent constraints"
    },
    "all_recoveries": {
      "type": "boolean",
      "description": "If true, include all matching recoveries (1/n) instead of just the default one"
    }
  },
  "required": [
    "agent_key"
  ]
}
🟡get_dashboard(persona)

Persona-tailored dashboard brief (fidelity, alerts, pending plans, recent planned-vs-executed). NEW USERS with empty watches: call watch_demo_set first, then get_dashboard again. Narrate in plain language; ask the user to Always allow the AgentWatch MCP App widget when the host prompts.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "persona": {
      "type": "string",
      "description": "Optional override; otherwise uses saved persona"
    }
  }
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada21 herramientas