Provena
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Provenawhat sources influenced line 42 in src/index.ts?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Provena
Track where every line of AI-generated code came from.
When Claude (or any agent) writes code, Provena records what it saw (files read, pages fetched, your instructions) and what it produced, then lets you ask:
provena_why src/auth.ts:42
โ โ docs/oauth-spec.md [file] via declared (conf 1.00)
evidence: "access tokens expire after 15 minutes"Lines with no backing source are flagged ungrounded โ model knowledge to verify by hand. That honesty is the point.
๐ Paper: PAPER.md โ Hook-Mediated, Span-Level Provenance for Code Written by LLM Agents. Method, benchmarks, and results (0% false attribution across all configs; held-out F1 90.9โ94.7%, ceiling 95.7โ100%).
How it works
Claude Code session
Read / WebFetch / Grep โโ PostToolUse hook
your prompts โโโโโโโโโโโโค โ captured as `source`
Write / Edit โโโโโโโโโโโโ โ captured as `artifact`
โ
.provena/provenance.db (SQLite)
โ
provena_* MCP tools (query ยท cite ยท audit)Capture needs no cooperation from the model โ hooks sit in the tool path.
Storage is local SQLite (Node's built-in node:sqlite), so nothing leaves your machine.
Related MCP server: Bicameral MCP
Requirements
Node โฅ 23.6 (runs TypeScript directly; uses built-in
node:sqlite)
Setup
npm install # installs @modelcontextprotocol/sdk + zod
node src/cli.ts init # wires hooks into .claude/settings.json + registers MCP in .mcp.jsonThen restart Claude Code in this project so it loads the hooks and the provena MCP server.
CLI
command | what it does |
| configure Claude Code hooks + register the MCP server |
| counts of captured sources / artifact versions / links |
| list captured sources |
| attribute a generated file and print its coverage report |
| CI gate: exit non-zero if a file's ungrounded ratio exceeds the budget |
| write a signed (ed25519) provenance attestation |
| verify a signed attestation is authentic and unaltered |
| wipe the local provenance graph |
MCP tools
tool | purpose |
| how much provenance has been captured |
| list sources the model saw |
| declare that a line range derives from a source |
| explain where a given line came from |
LLM judge (optional)
Embedding attribution decides the confident cases on its own. For the borderline band, an LLM judge reads the candidate sources and decides derivation. Set one key:
export GEMINI_API_KEY=... # uses gemini-2.0-flash
# or
export ANTHROPIC_API_KEY=... # uses claude-haiku-4-5
# optional overrides:
export PROVENA_JUDGE_MODEL=... # pick a specific model
export PROVENA_JUDGE_PROVIDER=gemini # force a provider if both keys are setWithout a key, borderline spans are honestly reported as uncertain rather than guessed.
Status
Phase 0 โ attribution-accuracy spike (
spike/) โ 100% top-1 retrieval, ungrounded cleanly separatedPhase 1 โ capture + store + MCP query
Phase 2 โ embedding attribution engine + LLM judge + audit report + eval harness. Embedding-only F1 94.7%, 0% false-attribution.
Phase 3 โ live judge (gemini-2.5-flash-lite) reaches F1 100% on Benchmark A; multi-language held-out Benchmark B (TS/Python/Go): embedding-only test F1 90.9%, 0% false-attribution, oracle ceiling 95.7%, live 90.9% (
eval/RESULTS.mditer 3โ4). CI gate (provena gate) shipped. Paper in PAPER.md.Next โฌ larger naturally-occurring corpus, judge-model sweep, signed regulatory export.
Try the evaluation
node src/eval.ts # labeled benchmark: precision / recall / F1 / false-attribution
node test-judge.ts # judge wiring unit test (mocked transport)This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/parkseokjune/provena'
If you have feedback or need assistance with the MCP directory API, please join our Discord server