EP-1 is an evidential metadata protocol for AI agents. Inspired by the Matsés language of the Amazon, where grammar makes unattributed claims impossible.
The Matsés people of the Peru-Brazil Amazon speak one of the most epistemically rigorous languages on Earth. Their grammar requires every verb to carry a suffix declaring how the speaker knows what they claim.
EP-1 applies this constraint to AI systems. No agent output, no MCP tool response, no generated content can exist without declaring its epistemic basis.
| Matsés Suffix | Meaning | EP-1 Class | AI Example |
|---|---|---|---|
| -ek | I experienced it | direct | RPC returned 2.5 SOL |
| -ësh | I deduced it | inferred | Token abandoned (no txns 90d) |
| -ash | Someone told me | reported | CoinGecko lists price at $142 |
| -ash | I'm guessing | conjecture | Project will likely gain traction |
Ordered by epistemic strength. A chain is only as strong as its weakest link.
First-hand observation. The system made the API call, read the file, queried the chain.
Derived from direct evidence through reasoning. Pattern matching, statistical correlation, log analysis.
Sourced from another agent, external API, third-party content, or cached data of unknown freshness.
Speculation based on incomplete information. Must include explicit reasoning. Flagged for review.
Works with any MCP server, agent framework, or content pipeline.
import { McpEvidenceWrapper } from 'evidential-protocol/mcp'; const wrapper = new McpEvidenceWrapper(); // Wrap any tool handler const getBalance = wrapper.wrap( 'solana-rpc:getBalance', async (args) => rpc.getBalance(args) ); const result = await getBalance({ pubkey }); // result._evidence.class === "direct" // result._evidence.confidence === 0.95 // result._evidence.ttl === 30
import { AgentOutputBuilder } from 'evidential-protocol/agent'; const output = new AgentOutputBuilder({ team: 'security', role: 'auditor' }) .direct('3 keys valid', 'vault:scan') .inferred('Key revoked', 'api:401', '3 failures') .conjecture('Token stale', 'mtime', '94 days old') .build({ expired: 1 }); // Validates on build. Throws if invalid.
import { publishGate } from 'evidential-protocol/content'; const content = ` Market cap is $5B. [ev:reported|messari|0.7] Growth projected at 40%. [ev:conjecture|model|0.2] `; const gate = publishGate(content); // gate.approved === false // gate.trust.score === 0.33 // "Trust below 0.5 — review required"
import { inheritClaim, verifyClaim } from 'evidential-protocol'; // Inherit: never upgrades class const inherited = inheritClaim( upstreamClaim, 'agent-B' ); // direct@0.95 → inferred@0.855 // (10% penalty, class downgrade) // Verify: upgrade only with proof const verified = verifyClaim( inherited, 'agent-C', 'solana-rpc:verify', 'direct' );
Every response includes at least one claim. Every claim includes an evidence object with class, confidence, source, and timestamp.
direct ≥ 0.9, inferred ≥ 0.5, reported ≥ 0.3, conjecture ≥ 0.1. Enforced by the validator on build.
Conjecture claims require an explicit reasoning field. If you're guessing, say why.
The aggregate evidence class of a response is the lowest class among all claims. One guess poisons the batch.
Inherited claims can only stay the same class or degrade. Only independent verification can upgrade.
Don't hide low-confidence claims. Surface them with their evidence class so humans can evaluate.
Evidence decays. Direct observations become stale reports, then conjecture.
EP-1 is open source, zero dependencies, and ready to drop into any TypeScript agent framework. Built by Purple Squirrel Media.
evidential-protocol ·
evidential-protocol/validate ·
evidential-protocol/middleware ·
evidential-protocol/mcp ·
evidential-protocol/agent ·
evidential-protocol/content ·
evidential-protocol/dashboard