EVIDE MCP Server
- 1. The Identity Requirement
- 2. Architecture - Three Separated Layers
- 3. Setup
- 4. evide_intake - Standard Decision Deposit
- 5. evide_escalate - Evidentiary Crystallization
- 6. Epistemic Stabilization Buffer
- 7. execution_identity and escalation_context
- 8. Boundary Readiness - The Gate Is Never Fabricated
- 9. Claude Desktop Configuration
- 10. The Governance Principle
Before an AI agent can deposit any record into EVIDE, its owner must complete a one-time identity setup. The API key and DAPI number must belong to the human or organization responsible for the agent - not to the agent itself.
The owner is responsible for it.
EVIDE makes that responsibility permanent and independently verifiable.
DAPI (Digital Authentication & Personal Identity) is the identity verification layer used by EVIDE to bind API access to a real, verifiable human or organizational identity. A DAPI number is a 10-digit verified identity code issued after completing the DAPI certification process. Every record deposited through the MCP server permanently embeds the owner's DAPI identity - making responsibility attribution independently verifiable by any third party.
DAPI certification: dapi-certification.com
The MCP server introduces a clean three-layer identity separation that maps directly to the EVIDE evidentiary model:
Repository: github.com/emanuelcelano/evide-mcp
git clone https://github.com/emanuelcelano/evide-mcpcd evide-mcp && npm installRequires Node.js >= 18. DAPI identity and active EVIDE subscription required before use.
To request API access, contact: info@informaticainazienda.it
| Variable | Required | Description |
|---|---|---|
| EVIDE_API_KEY | ✅ | API key (starts with evd_). Belongs to agent owner. |
| EVIDE_DAPI_NUMBER | ✅ | DAPI number (10 digits). Verified identity of agent owner. |
| EVIDE_OWNER_ID | ✅ | Owner identifier in source system. Embedded in every deposit. |
| EVIDE_OWNER_ROLE | Declared role. Default: AI System Operator. | |
| EVIDE_AGENT_SYSTEM | Name of the agent system (e.g. CLARIXO). Used in execution_identity. | |
| EVIDE_AGENT_ID | Specific agent identifier within the system. Used in execution_identity. | |
| EVIDE_API_ENDPOINT | Override API endpoint. Default: production. |
EVIDE_API_KEY, EVIDE_DAPI_NUMBER, or EVIDE_OWNER_ID are missing. Active key validity is verified at first deposit. An agent without owner-bound identity cannot deposit into EVIDE.evide_escalate.source_reference, decision_type, decision_summaryOptional:
classification_status - stable | provisional | contested (default: stable)threshold_status - met | not_met | unknown | not_defined (default: not_defined)boundary_status - candidate | verified | verified_partial | unverifiable (default: candidate)unresolved_signals - required for verified_partial and unverifiablehuman_oversight_level - L1 | L2 | L3 (default: L2)rationale, trace_reference, fedis_requestedEvidentiary Continuity:
parent_evide_id - EVIDE ID of a previously deposited record this one continues fromchain_type - free text describing the continuation (max 50 chars)matter_reference - matter this lineage belongs to; inherited from the parent when omittedExternal artifacts:
evidence_references - array of declared external artifacts. Per item: artifact_type, pointer, declared_origin, declared_relationship, declared_description, declared_retention_status, and optionally hash_algorithm + hash_value + hash_scope + hashed_byOperational perimeter declarations (EVIDE ANCHOR): NEW in v1.3.0
declarations - array of explicit, attributable, time-bound statements of the operational perimeter (environment, privileges, purpose, tools, prohibited operations, agent configuration) the agent was authorized within, before it acted. Per item: declaration_type, declared_value, declarant, declared_at, and optionally declared_description + declared_attribution_status
The natural use of parent_evide_id in an agent workflow is to pass the evide_id returned by an earlier evide_escalate to the evide_intake that resolves it. The result is a declared lineage from the agent stopped here to this is how it was closed - two records, each independently verifiable, bound in a stated order.
matter_reference, the entire deposit fails rather than silently starting a new chain. The refusals are chain_parent_not_found (422), chain_parent_not_owned (403), chain_parent_invalid_status (422) and chain_matter_mismatch (422). The 403 is the only one in the family that is an authorization decision rather than a payload error: an agent cannot correct it by changing what it sends.
EVIDE anchors the declaration that an artifact exists. The file itself is never uploaded, and EVIDE never computes or verifies its integrity hash - it anchors the digest exactly as the submitter declared it.
hashed_by is mandatory whenever a hash is declared. A digest that EVIDE does not verify is worth only as much as its stated provenance. The MCP server validates this before the request leaves, so a missing field produces a message naming it rather than a server rejection after the round trip - and it never fills the field in with the agent's own identity. An agent that merely relayed a hash computed elsewhere would otherwise be recorded as having computed it, which is precisely the kind of inference this layer exists to prevent.
evidence_references automatically sets the required extensions registry entry. That registry is opt-in in both directions - a block present but undeclared is rejected, and a declaration with no content is rejected too - so the MCP server keeps the two aligned by construction and the agent cannot get it wrong.
A Declaration is an explicit, attributable, time-bound statement of the operational perimeter (environment, privileges, purpose, tools, prohibited operations, agent configuration) the agent was authorized within, before it acted. EVIDE preserves the declaration only - it never verifies its correctness, applies it as policy, or compares it against observed behavior.
declaration_type values are accepted by the schema (it is free text by design) but discouraged: a merged declaration cannot later be superseded, clarified, or revoked independently from the facts it bundles together.
declarations automatically sets the required extensions registry entry, using the same opt-in mechanism as evidence_references - both can be declared together in the same deposit. This MCP-level schema is deliberately simplified relative to the full API: nested subject_references, authority_source.references and declared_relations are not exposed here - they remain available through the direct intake API for callers who need the nested form.
source_reference, agent_state_summary, escalation_trigger, escalation_reasonescalation_trigger values:
high_stakes_decision - contestable_state - legal_ambiguityregulatory_threshold - governance_uncertainty - semantic_instabilityhuman_review_required - authority_incoherenceOptional:
trace_reference, boundary_status - candidate | verified | verified_partial | unverifiable (default: candidate), readiness_gate_id + readiness_gate_scope - required for any status other than candidate, unresolved_signals - identifiers a gate could not resolve; only with a non-candidate status, and never invented by the clientAlso accepts the same
parent_evide_id / chain_type / matter_reference, evidence_references, and declarations parameters as evide_intake - for an escalation that continues from an earlier record, that points at the artifacts which triggered it, or that declares the operational perimeter in effect at the moment of escalation.
Three tools let an agent drive the full ESB lifecycle. The closure is anchored immediately, exactly as with evide_intake: the buffer opens alongside it, it does not delay or replace it. What the buffer adds is the trajectory — how the conditions settled over a real window, rather than only what they were at the crossing.
evide_intake, including evidence_references, declarations, and the chain fields. Returns evide_id, the evidentiary profile, and a buffer_id.buffer_id, stability_trend (improving | degrading | oscillating | static), continuity_state (coherent | partially_coherent | fragmented | unverifiable), causal_persistence_signal (present | attenuated | absent | inconclusive), stabilization_source, signal_count_total, buffer_notesbuffer_id, buffer_verdict (stable | unstable | deferred), closure_trigger, stabilization_score, instability_reason, buffer_notes, unresolved_at_closewindow_seconds. A close by timeout is forensically distinct from a close by convergence, and closure_trigger records which one it was.
stabilization_score is declared, never computed. Neither EVIDE nor the MCP client calculates it — it is a statement by whoever observed the window. Out-of-range values are rejected rather than clamped, because clamping would hide a client error. If an agent has no basis for a score, it omits the field: the client does not supply one on its behalf. Same principle as hashed_by and readiness_gate.
buffer/update and buffer/close accept different key sets. Sending stabilization_score to an observation, or stability_trend to a close, is refused with a message naming the tool it belongs to — rather than being silently discarded.
Every deposit made through the MCP server includes an execution_identity block. This separates the accountable identity (owner) from the operational identity (agent) in a way that is preserved in the evidentiary record.
accountability_model: "owner_bound" declares that all responsibility for this agent's outputs converges on the DAPI-verified owner. This prevents agents from self-certifying and ensures that even fully autonomous agent populations remain bound to a finite, attributable accountability structure.
execution_identity block identifies which agent is accountable for a deposit - it does not expose model weights, reasoning chains, confidence scores, or internal decision alternatives. What EVIDE anchors is the declared outcome, the declared authority, and the declared boundary condition at the moment of deposit, not the agent's internal cognitive process.
boundary_readiness declares whether an independent gate assessed the boundary at the moment of crossing. A depositing agent is not that gate: it cannot attest to its own readiness any more than a system can self-certify. The intake schema states it directly — a system cannot self-certify boundary_readiness.status = verified; that evaluation must come from an independent gate declared in readiness_gate.identifier.
MyAgentSystem_boundary_gate with scope evide:mcp:intake:MyAgentSystem. That was self-certification wearing the shape of a convenience: the agent declaring that the agent had verified the boundary it was itself crossing. The client no longer constructs a gate under any circumstance.
candidate, and its Forensic Cross-Check, DWC and FAC dimensions will read unknown. That is an evidentiary result, not a processing failure: with no independent assessment there is nothing to cross-check against. If a gate — a human supervisor, an orchestrator, an external governance component — later assesses the boundary, it can declare its own verified_partial with its own gate identity. The agent never has to impersonate it.
unresolved_signals belongs to the gate, not to the agent: it carries the identifiers a gate could not resolve during its assessment. With candidate the array is empty by definition rather than by restriction, because no assessment took place. What the agent could not decide is a different thing, and lives in escalation_reason and agent_state_summary.
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
intake_hash against the live EVIDE registry using the canonicalization algorithm at docs/payload-canonicalization/.The MCP server does not expose the full EVIDE intake schema. It exposes the subset an autonomous agent can declare truthfully about its own closure, and fixes the rest.
approval for evide_intake, escalation for evide_escalate. Additional intervention semantics — for example override or rejection — will be introduced only when a concrete agent workflow requires them, rather than speculating about future use cases.
The same reasoning applies to human_oversight.is_declared, which the server always sends as true. This is not a shortcut. The server refuses to start without a DAPI number, so every deposit made through it is by construction attributable to a declared accountable human: there is no anonymous path to leave open. The oversight level remains the caller's choice — L1, L2 or L3 — and only the existence of a declared authority is fixed, because the transport itself guarantees it.
The owner is responsible.
EVIDE makes that responsibility permanent.
As agent populations grow and decision velocity increases, the accountability structure remains anchored at the owner level. One human or organization can own many agents. All their deposits converge on a single DAPI-verified accountability identity.
This is where the Decision Wave Compression (DWC) framework becomes relevant: as aggregate agent throughput grows, the pressure on the owner's accountability capacity may itself become a governance signal. The MCP server's accountability_model: owner_bound declaration is what makes that signal computable.
never the internal state of the system that produced it.
EVIDE API Documentation: app.certifywebcontent.com/docs/evide-intake-schema/
Payload Canonicalization: app.certifywebcontent.com/docs/payload-canonicalization/
DWC / FAC Framework: Decision Wave Compression - Technical Note v0.1
EVIDE Framework: certifywebcontent.com - Evidentiary Deposit
DAPI Identity Certification: dapi-certification.com
GitHub Repository: github.com/emanuelcelano/evide-mcp
Pricing & Service Conditions: app.certifywebcontent.com/pricing
API access: info@informaticainazienda.it
evide_intake - deposit a finalized decision
evide_escalate - crystallize a high-stakes boundary state
evide_intake_esb + observe + close - observe stabilization over a real window
All bound to the owner. All independently verifiable.
"The agent produces. The owner is responsible.
EVIDE makes that responsibility permanent."