MCP server
Openwake exposes the registry as tools any MCP-capable agent can call.
Local (stdio): one config line:
{ "mcpServers": { "openwake": { "command": "pnpm", "args": ["--dir", "/path/to/openwake", "mcp"], "env": { "DATABASE_URL": "postgres://...", "OPENWAKE_API_KEY": "ow_live_…", "OPENWAKE_AGENT_ID": "acme/procurement-agent" } } } }
Remote (Streamable HTTP): a URL, no process:
{ "mcpServers": { "openwake": { "url": "https://api.openwake.ai/mcp", "headers": { "Authorization": "Bearer ow_live_…", "X-Openwake-Agent": "acme/procurement-agent" } } } }
| Tool | Input | Returns |
|---|---|---|
list_vendors | { query?, trains? } | indexed vendors with training stance, optionally filtered |
match_vendor_list | { text } | your pasted list or CSV export matched against the registry: per-vendor summary, unmatched rows, coverage |
lookup_vendor | { vendor } | the cited profile |
lookup_agent | { agent_id } | operator, issuer, verification |
check_counterparty | { counterparty, data_classes[] } | advisory allow / review / deny with quoted reasons and a self-contained signed receipt (statement + ledger entry + anchor; verifiable with the public key alone) |
register_agent | { agent_id, name, operator_vendor?, issuer?, scopes?, parent_agent_id?, kind?, policy? } | registers an agent you operate, or a submodule under its parent (tool, mcp_server, subagent), with an optional policy: the data classes it may send and to whom (needs an org key) |
log_activity | { agent_id?, kind, counterparty?, data_classes?, outcome?, check_id?, detail?, tool?, action?, acting_for?, delegated_by?, parent_event_id?, task_id?, purpose?, authority? } | records what the agent did: scored against its policy, appended to the signed ledger, shown in the org's agent graph. Data classes and one line of context only, never the data (needs an org key) |
verify_receipt | { receipt } | offline checks plus "still in the chain" for a receipt from check_counterparty |
Resources: openwake://vendor/{slug} returns a profile as JSON for hosts that prefer reading to calling.
Recording the other servers. @openwake/recorder wraps any MCP server the host already uses (openwake-recorder wrap ~/.claude.json --agent acme/claude-code) so every tool call to it is logged as a tool_call event under acme/claude-code/mcp/<server> without the agent calling log_activity itself; --enforce runs check_counterparty first and blocks a deny. See docs/recorder.md.
Advisory by design. The oracle never blocks. If it is unreachable, the caller's own policy decides (fail-open). The call itself is the record of the question being asked: data classes only, never payloads.