{
  "markdown": "# touchstone-mcp\n\nLocal [MCP](https://modelcontextprotocol.io) server for **[Touchstone](https://touchstone.cv)** — record what your\nagent did into a tamper-evident, externally-anchored log.\n\nThis server runs on **your** machine and holds **your** Ed25519 signing key. It signs each\nevent locally and appends it to your recorder, so an agent only has to call\n`touchstone_record({ event_type, payload })`. **The key never leaves this process.**\nCanonicalization (JCS / RFC 8785) is done locally too, so a malicious or compromised server\ncan't trick you into signing a different commitment than you intended.\n\nZero dependencies — Node 18+ built-ins only. It's a single file: read it before you trust it.\n\n> The remote MCP at `https://touchstone.cv/mcp` can't sign for you (Touchstone never holds your\n> key), so its `touchstone_record` expects a signature you computed yourself. Run **this** server\n> when you want frictionless local signing.\n\n## Install\n\n```bash\n# one-off, no install:\nnpx -y @touchstone-cv/mcp\n\n# or vendor the single file:\ncurl -O https://touchstone.cv/touchstone-mcp.mjs\n\n# or clone:\ngit clone https://github.com/Touchstone-CV/touchstone-mcp && cd touchstone-mcp\n```\n\n## Configure\n\nPoint your MCP client at it over stdio:\n\n```json\n{\n  \"mcpServers\": {\n    \"touchstone\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@touchstone-cv/mcp\"],\n      \"env\": {\n        \"TOUCHSTONE_RECORDER\": \"rec_...\",\n        \"TOUCHSTONE_SUBJECT\": \"<your-colony-sub>\",\n        \"TOUCHSTONE_API_KEY\": \"tsk_...\",\n        \"TOUCHSTONE_SIGNING_KEY\": \"<base64 Ed25519 32-byte seed>\"\n      }\n    }\n  }\n}\n```\n\n| Env var | Required | Meaning |\n|---|---|---|\n| `TOUCHSTONE_RECORDER` | yes | Your recorder public id (`rec_…`) |\n| `TOUCHSTONE_SUBJECT` | to record | Your Colony `sub` — the recorder's subject |\n| `TOUCHSTONE_API_KEY` | yes | API key minted on the recorder (`tsk_…`) |\n| `TOUCHSTONE_SIGNING_KEY` | to record | base64 Ed25519 32-byte seed — **kept by you, never sent** |\n| `TOUCHSTONE_KEY_FILE` | alt | Path to JSON `{\"seed_b64\":\"…\"}` instead of the inline seed |\n| `TOUCHSTONE_BASE_URL` | no | Defaults to `https://touchstone.cv` |\n\nTo get a recorder + key, see **[touchstone.cv/developers](https://touchstone.cv/developers)** — agents can\nself-provision one with their own Colony token (OAuth Token Exchange, RFC 8693), no browser required.\n\n## Tools\n\n| Tool | What it does |\n|---|---|\n| `touchstone_record` | JCS-canonicalizes `payload`, signs the commitment **locally**, appends the entry |\n| `touchstone_disclose` | Create a shareable `/d/<token>` disclosure link (proxies to the service) |\n| `touchstone_verify` | Verify a disclosure bundle (proxies to the service) |\n| `touchstone_recorder_info` | Fetch your recorder's public info / checkpoint state |\n\nOnly `touchstone_record` uses your signing key; the rest proxy to the remote service over your API key.\n\n### Selective field disclosure\n\nCall `touchstone_record({ event_type, payload, selective_disclosure: true })` to commit each\npayload field separately — the client computes a salted-field Merkle root locally and signs\n*that* as `payload_hash`, storing the per-field salts. Later you can reveal only a subset:\n\n```js\ntouchstone_disclose({ seqs: [n], reveal: { n: [\"field_a\", \"field_b\"] } })\n```\n\nRevealed fields ship with Merkle proofs against `payload_hash` (which your signature already\ncovers); withheld fields are salt-bound and their values never appear in the disclosure. The\nroot computation matches the server and the verifiers byte-for-byte.\n\n## Verifying the log\n\nA disclosure can be checked by anyone, with no trust in Touchstone — in the\n[browser verifier](https://touchstone.cv/verify), the standalone\n[`verify.php`](https://touchstone.cv/verify.php), or the\n[`gossip_check.py`](https://touchstone.cv/gossip_check.py) split-view checker. Those tools are served\nfrom the site (and are each a single auditable file); this repo is just the recording client.\n\n## License\n\n[Apache-2.0](./LICENSE).\n",
  "bytes": 3969,
  "sha": "f8cb7ffa72b542353bd3420b26301514cdce509916f9bee5e3753b0587afc5f6",
  "repo_slug": "touchstone-cv/touchstone-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_cv_touchstone_touchstone_1ed4f3f5/readme"
}