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" } } } }
ToolInputReturns
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.