{"serverId":"mcp-registry/dev.kamy/kamy","tools":[{"name":"record_agent_action","fixed":{"name":"record_agent_action","description":"Append one signed tool_call -> tool_result pair to a tamper-evident ledger. Call it after any consequential tool invocation — a payment, an outbound email, a write into a customer system — so there is a hash-chained record of what the agent asked for and what came back, signed at write time. Pass a stable run_id to keep an entire agent run in one chain, and parent_sha256 to link records explicitly; read the result back with get_provenance_chain. Returns { record_id, content_sha256, signature, re","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["server","tool"],"properties":{"tool":{"type":"string","maxLength":200,"minLength":1,"description":"Name of the tool that was invoked."},"run_id":{"type":"string","maxLength":200,"description":"Your identifier for this agent run. Reuse it across records to build one chain."},"server":{"type":"string","maxLength":200,"minLength":1,"description":"Identifier of the MCP server (or tool provider) the call went to, e.g. 'kamy'."},"status":{"enum":["ok","error","flagged"],"type":"string","description":"Outcome of the call. Defaults to ok."},"tool_call":{"description":"The request you sent — typically the arguments object, verbatim.","type":"string"},"latency_ms":{"type":"integer","minimum":0,"description":"Wall-clock duration of the call."},"tool_result":{"description":"The result you received back, verbatim.","type":"string"},"parent_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"content_sha256 of the previous record in this run, to link the chain explicitly."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":false},"title":"Record agent action"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: tool_call, tool_result. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":454,"tokensAfter":462},{"name":"trace_record","fixed":{"name":"trace_record","description":"Record one LLM call — prompt, output, provider, model, tokens, latency — into Kamy Trace, a signed retention ledger. Each record is hashed and signed at write time, so it can be produced later without the 'you could have edited this' objection. Reach for it when model calls need a reviewable history: regulated workflows, customer-facing generations, anything you may have to explain months later. Set status 'flagged' with status_detail on calls a human should revisit. Returns { id, content_sha256","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["provider","model"],"properties":{"tags":{"type":"array","items":{"type":"string","maxLength":64},"maxItems":20,"description":"Up to 20 free-form labels. trace_search can filter on any one of them."},"model":{"type":"string","maxLength":200,"minLength":1,"description":"Model identifier exactly as the provider reports it, e.g. 'claude-sonnet-4-6'."},"output":{"description":"The model's response, verbatim. Any JSON value.","type":"string"},"prompt":{"description":"The prompt / request you sent, verbatim. Any JSON value (string, array, object).","type":"string"},"status":{"enum":["ok","flagged","error"],"type":"string","description":"Outcome. 'flagged' marks a call you want a human to review later. Defaults to 'ok'."},"feature":{"type":"string","maxLength":120,"description":"Product area the call belongs to, e.g. 'support_reply'. Filterable in trace_search."},"provider":{"enum":["anthropic","openai","custom"],"type":"string","description":"Which model vendor served the call. Use 'custom' for anything self-hosted."},"latency_ms":{"type":"integer","minimum":0,"description":"Wall-clock duration of the call."},"input_tokens":{"type":"integer","minimum":0,"description":"Prompt tokens billed."},"output_tokens":{"type":"integer","minimum":0,"description":"Completion tokens billed."},"status_detail":{"type":"string","maxLength":500,"description":"Why the call was flagged or failed. Free text."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":false},"title":"Record LLM call (Kamy Trace)"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: output, prompt. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":567,"tokensAfter":576},{"name":"verify_mcp_server","fixed":{"name":"verify_mcp_server","description":"Detect when an MCP server changes its tool manifest after you adopted it — the 'rug pull' case, where a server you already trusted silently rewrites a tool's description or input schema. Pass server_url and Kamy fetches that third-party server's manifest itself, or pass manifest when you already hold it (local or private servers). Returns status 'new' (first fingerprint for this account — nothing to compare against yet), 'unchanged', or 'mutated', plus a per-tool changes list with previous and c","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"manifest":{"description":"A tool manifest you already hold — the `tools/list` result, or an object with a `tools` array. Use this when the server isn't reachable from Kamy (local stdio server, private network). Supply either server_url or manifest.","type":"string"},"server_url":{"type":"string","format":"uri","description":"URL of the MCP server to fingerprint. Kamy fetches its tool manifest server-side. Supply either server_url or manifest."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"openWorldHint":true,"destructiveHint":false},"title":"Verify MCP server manifest"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: manifest. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":308,"tokensAfter":312}],"toolsChanged":3,"tokensSaved":0,"todo":[{"tool":"render_pdf","params":["format"]},{"tool":"render_pptx","params":["theme"]},{"tool":"update_template","params":["name","tags","isPublic","description"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}