AgentWatch
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Read-only watchtower for AI agents on-chain: decoded receipts, plan vs execution, Safe audits.
| Author | dev.workers.agentwatch.agentwatch |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 594 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"AgentWatch": {
"url": "https://agentwatch.agentwatch.workers.dev/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (21)
list_watchedList watched addresses for this connector principal. NEW USERS: if empty, call watch_demo_set next (do not invent a global feed), then get_dashboard.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_feedDecoded activity feed for an address. Use when reviewing what an agent did on-chain.
Parameters:
address(required) — string — Watched address (0x…40 hex)since— number — Unix seconds lower bound
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
run_auditRun provenance audit on a Safe/address. Use when the user asks 'is this fake?' or wants a shareable verdict.
Parameters:
address(required) — string — Safe/address to audit (0x…40 hex)chain— stringagents— string — Comma-separated agent keys
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_capabilitiesBlast-radius / historical capability for an agent key. Use before trusting an agent with funds.
Parameters:
agent_key(required) — string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_alertsList alerts scoped to this principal's watched addresses (empty watch list → call watch_demo_set first). Use when checking what needs attention.
Parameters:
status— string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_pending_proposalsPending Safe multisig proposals from the Safe Transaction Service (indexer confidence). Pass safe=0x… or omit to scan all watched addresses.
Parameters:
safe— string — Optional Safe address; default = all watchedchains— string — Optional comma-separated chain ids
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_fidelityIntent↔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.
Parameters:
agent_key(required) — string — Agent EOA address (0x…40 hex)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_leaderboardPublic 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.
Parameters:
limit— number — How many ranked rows to return (default 10, max 50)agent_key— string — Optional: address to locate in the standings
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_benchmarkCounterfactual P&L / agent alpha vs do-nothing baselines. Use for performance honesty checks. Check matched_agent — false means the key has no indexed activity.
Parameters:
agent_key(required) — string — Agent EOA address (0x…40 hex)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_tcaTCA market-context snapshot for an event_id (chain:txHash). Use when judging execution quality.
Parameters:
event_id(required) — string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
register_intentDeclare 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.
Parameters:
agent_key(required) — stringdescription(required) — stringexpected— object — Structured shape. Use steps: ['approve','other'] (or similar) so one intent covers approve+supply/swap companions.declared_at— numberdeadline_minutes— number — Relative window; stored as absolute constraints.deadline
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
add_watchStart watching an address. Use when onboarding a new agent or Safe.
Parameters:
address(required) — string — Address to watch (0x…40 hex)label— string — Optional short label (e.g. Agent EOA)chains— string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
watch_demo_setONE-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.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
refresh_watchesForce 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.
Parameters:
chains— string — Optional csv of chains (default: ethereum,base first, then the rest)address— string — Optional single address to refresh (0x…40 hex)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_agent_passportRead 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.
Parameters:
address(required) — string — Watched agent address (0x…40 hex)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
set_agent_passportDeclare 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.
Parameters:
address(required) — string — Watched agent address (0x…40 hex)role— stringmodel— string — Optional model or framework detailpublic— boolean — Publish a public passport pagecadence— string — always_on, scheduled, event_driven, on_demandpurpose— string — One or two sentences on what it is foroperator— string — Who runs itprovider— string — Which model drives the agentdisplay_name— string — Name shown instead of the raw address
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_recovery_ownersList 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.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
set_recovery_ownerSave 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.
Parameters:
address(required) — string — 0x recovery wallet the human controlslabel— string — Short name, e.g. hardware, treasury, personalpurpose— string — What this recovery is for, e.g. default, tradingmake_default— boolean — Prefer this label for default Safes
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
remove_recovery_ownerRemove a saved recovery address for this user.
Parameters:
address(required) — string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_safe_defaultsReturn 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.
Parameters:
agent_key(required) — string — Agent EOA that will be an owner/signerchain— string — Optional chain hint for the intent constraintspurpose— string — Optional purpose filter (e.g. trading)all_recoveries— boolean — If true, include all matching recoveries (1/n) instead of just the default onerecovery_label— string — Optional label to pick among several recoveries
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_dashboardPersona-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.
Parameters:
persona— string — Optional override; otherwise uses saved persona
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.