Put a signed, verifiable verdict on every action your agent takes, at the action boundary, with no code change. @fidacy/mcp is a Model Context Protocol server any MCP-native host loads over stdio, so OpenClaw, Hermes, the Claude Code agent, and anything else that speaks MCP can call it. The verdict is the same neutral, EdDSA-signed seal anyone can check against the public JWKS.
Add one server to your MCP host config. It speaks MCP over stdio. The only thing you need to start issuing verdicts is an engine key:
{
"mcpServers": {
"fidacy": {
"command": "npx",
"args": ["-y", "@fidacy/mcp"],
"env": {
"FIDACY_ENGINE_URL": "https://api.fidacy.com",
"FIDACY_ENGINE_API_KEY": "fky_test_…"
}
}
}
}To also gate real payments, add FIDACY_MODE=http, FIDACY_API_URL and FIDACY_API_KEY pointing at a firewall core you run. The server boots fine with either one, both, or neither.
assess_actionA signed trust verdict (approve / review / deny) on a proposed action, a JWS verifiable by anyone against the public JWKS.
request_paymentGates a payment against a signed mandate. ALLOW mints a short-lived Ed25519 grant; DENY returns the violated rule.
verify_mandateThe active mandate for a subject, the rules the agent is bound to.
get_audit_proofThe append-only, hash-chained audit proof for a decision.
OpenClaw loads MCP servers natively. Add the fidacy server and the agent gets the four tools directly. Have it call assess_action before it runs a tool, then act on decision:
// the agent calls assess_action; the host returns structuredContent:
{
"decision": "approve", // approve | review | deny
"score": 0.12,
"riskPayloadJws": "eyJ…", // the signed, verifiable proof
"outcome": { /* signals, reasons */ }
}
// approve -> run the action; review -> step up to a human; deny -> block@fidacy/langchain wraps the tool itself, not a callback, callbacks fire around a call and cannot cancel it. Wrapping the execution path is the only place that stops a payment. It fails closed: if the engine is unreachable or the key is wrong, the call is denied, never run.
npm i @fidacy/langchain @langchain/core
import { guardTools, FidacyDenied } from "@fidacy/langchain";
const tools = guardTools([payTool, searchTool], {
apiKey: process.env.FIDACY_ENGINE_API_KEY,
});
// payTool is assessed before every call; searchTool is returned untouched.@fidacy/openai-agents gates the tool’s invoke, the point between the model deciding to pay and the money moving. A blocked call returns a refusal the model can read, so the agent explains what happened instead of dying with a stack trace. The payment still did not run.
npm i @fidacy/openai-agents @openai/agents
import { guardTools } from "@fidacy/openai-agents";
const tools = guardTools([payTool, searchTool], {
apiKey: process.env.FIDACY_ENGINE_API_KEY,
});
// Set throwOnDeny: true for a hard stop carrying the signed proof.@fidacy/crabtrap observes CrabTrap’s local decisions and turns each into an independently signed Fidacy verdict. CrabTrap keeps deciding; Fidacy makes the record hold up to someone who trusts neither side. No change to your CrabTrap setup.
Fail safe: on any error, treat it as review, never approve. The verifier packages are open source (Apache-2.0): @fidacy/sdk and @fidacy/verify.