CAIN-42 MCPGate

CAIN-42 · E55 · federated governance

A signature proves authorship. It does not grant authority.

Two organizations with separate keys and separate policies. Organization A issues a signed, scoped, single-use grant. Organization B verifies it against pinned trust and its own policy. Either side can refuse. Evidence is portable and independently verifiable.

14/14
federation + Node interop tests
2
independent policy checks per action
0
side effects on denied cross-org actions
1
use per capability (nonce)
4.06/11.19/70.20 ms
cross-org p50/p95/p99

Decision matrix (tested)

AttemptResult
Valid grant, both policies allowALLOW
Valid grant, target policy deniesDENY — target authority is independent
Origin policy denies at issuanceDENY — no grant exists
Replay the same grantDENY — nonce consumed
Trust revoked or expiredDENY
Forged origin key / wrong target orgDENY
Amount or resource outside trustDENY
Registry record tamperedINVALID signature
Evidence envelope tamperedINVALID digest
Execution claims success, observation says noDISPUTED

What a cross-org grant contains

origin_org, target_org, agent, action, resource, amount,
nonce, issued_at, expires_at  -- signed Ed25519, domain separated

The target stores the origin's pinned key, allowed actions/resources, max amount, expiry and a revoked flag. All are checked before any allow. The nonce is claimed only after every check passes.

Registry is discovery, not trust

Signed implementation records (protocol versions, adapters, conformance level, endpoints, security contact, sequence). Multiple registries are allowed; none is mandatory. A listing is not a certification and does not grant authorization.

Try it

pip install cryptography httpx pytest
python3 -m pytest tests/test_evolution55_federation.py -q

# 10 tests: allow, target deny, origin deny, replay, revoke, expiry,
# forged key, wrong target, scope abuse, registry/evidence tampering

Measured this cycle

TestResult
100,000 registered identities5.722 s (inventory)
cross-org authorization, 500 attemptsp50 4.06 ms · p95 11.19 ms · p99 70.20 ms
replay attempts100/100 denied
restart with durable storetrust persists; consumed nonce still refused
second implementation (Node.js)envelope + grant + Merkle agree with Python, 3/3
real LangGraph ToolNodeauthorized EXECUTED; unauthorized DENIED; file absent

Honest limits

← open core · E53 · E52 · claims