Machine surface
The Trust MCP Server
A hosted MCP server that answers questions about ECZ-ID records.
This is one named surface of the ECZ-ID Trust MCP layer, not the layer itself. It exposes seven tools over Streamable HTTP: six are anonymous and read-only, and one is protected by OAuth2. Everything it returns is derived from the public resolver projection, and nothing it does writes canonical state.
There is no console on this page and nothing here calls the endpoint. This is documentation of a machine surface, written for a person deciding whether to point a client at it.
The endpoint
One address, one transport, two protocol revisions
Everything below is a statement about the connection. It is deliberately specific, because a reader deciding whether to integrate needs facts they can check against their own client rather than an adjective.
- Endpoint
- https://trust-mcp.ecocitizenz.com/mcp
- Transport
- Streamable HTTP, carrying JSON-RPC 2.0.
- Protocol revisions
- The Trust MCP Server accepts protocol 2026-07-28 and negotiates the session version with the client; a client that offers 2025-11-25 is served on 2025-11-25.
- Contract
- The ECZ-ID Trust MCP Contract, frozen at milestone MS-032 on 19 August 2026. Frozen means the tool set, the argument schemas and the claims wording do not move without a new contract.
- Provider neutrality
- The contract is provider-neutral. It names no cloud, no marketplace and no authorisation vendor as a requirement, and a different deployment may substitute its own authorisation server while serving the same contract.
Two request headers are load-bearing on this deployment. Accept must list both application/json and text/event-stream, or the request is answered with 406. This deployment also requires the Mcp-Method header on the request. It is not part of the MCP HTTP transport; a client that does not send it will not receive this response shape.
How to connect
Point an MCP client at the endpoint above, over Streamable HTTP, speaking JSON-RPC 2.0. For the six anonymous tools there is nothing to install, no account and no key — any client that can address a remote MCP server can address this one, and the seventh tool answers 401 until a bearer token is supplied. Reading the response is a separate step from making the call, and the reliance boundary published in the payload still governs what may be inferred from it.
Runnable connection instructions — a working call, and host configuration
The tool boundary
Seven tools. Six anonymous and read-only, one protected.
The split is the whole design. Six tools read what is already public and need no token, so a relying client can ask its questions without an account, a contract or a conversation. One tool is protected, and even that one writes no truth.
resolve_identity
- Access
- anonymous
- Read-only
- yes
- Required arguments
- ecz_id
- What it does
- Resolves an ECZ-ID to its current published state, the moment it was checked, the public proof link and the re-check action. Never asserts safety, approval or compliance.
get_current_state
- Access
- anonymous
- Read-only
- yes
- Required arguments
- ecz_id
- What it does
- Returns the narrow current state derived from the resolver projection, with no risk, safety or compliance inference attached to it.
get_resolver_link
- Access
- anonymous
- Read-only
- yes
- Required arguments
- ecz_id
- What it does
- Builds the deterministic public proof and re-check URL for an identifier. It makes no network call, so it cannot itself be a source of staleness.
explain_status
- Access
- anonymous
- Read-only
- yes
- Required arguments
- ecz_id
- What it does
- Renders a status in the approved neutral wording, deterministically and without a language model. Where evidence is absent it says so, and it never says unsafe.
find_product
- Access
- anonymous
- Read-only
- yes
- Required arguments
- none
- What it does
- Takes optional context flags and routes to the single best next ECZ-ID action. It returns one action rather than a ranked list, because ranking would make this a recommendation surface.
get_install_instructions
- Access
- anonymous
- Read-only
- yes
- Required arguments
- product
- What it does
- Returns the official install and usage routes for a named ECZ-ID product. This tool is the estate's own machine-readable install index, and no page may contradict it.
create_request_to_resolve
- Access
- OAuth2 bearer
- Read-only
- no
- Required arguments
- target_type, target_descriptor, requested_evidence_category, consent_mode
- What it does
- Opens a neutral Request-to-Resolve record. That record is not authoritative ECZ-ID state, it confers no status on anyone, and creating one is not a verification, an application or an approval.
Claims discipline is in the tool descriptions themselves
The strongest available evidence that the layer's anti-overclaim posture is real rather than marketing is that it is encoded at the protocol level, where no page editor can soften it. These four lines are quoted from the frozen contract.
- resolve_identity — Never asserts safety, approval or compliance.
- get_current_state — No risk/safety/compliance inference.
- explain_status — VERIFIED is an ECZ-ID state, not a Microsoft certification. Absence of evidence renders the approved neutral wording — never “unsafe”. No LLM.
- get_resolver_link — No network call.
The one protected tool
What the token proves, and what it does not
One tool of the seven requires a bearer token. Everything about how that token is obtained is a deployment choice, and the contract says so — which is what keeps this surface provider-neutral rather than tied to one identity vendor.
- Scheme
- OAuth2 bearer token, presented in the Authorization header. A missing token is answered with 401 and a WWW-Authenticate challenge.
- Scope
- api://16aef5c0-300c-471a-a6da-be4a822ac471/RequestToResolve.Create
- Protected Resource Metadata
- RFC 9728 metadata is published and live. The 401 challenge advertises the unsuffixed location, /.well-known/oauth-protected-resource, while the RFC 9728 path-derived location for this resource is the /mcp-suffixed variant. Both return 200. Neither is stale; this deployment simply chooses to advertise the shorter one.
- Authorisation server
- This deployment uses Microsoft Entra as its authorisation server. Entra is a deployment profile and is explicitly not part of the canonical contract: another operator may substitute any RFC 9728-compliant authorisation server and serve the same contract unchanged.
Platform authentication is not ECZ-ID verification
A token proves that a caller was authorised by an authorisation server to make a request. It says nothing about identity, authority, control or reliance, and the server's own challenge message states as much. An authorisation failure is never an ECZ-ID judgement about anybody, and a successful call is never an endorsement of anything.
create_request_to_resolve is the only tool that changes anything, and what it changes is not canonical. It opens a neutral Request-to-Resolve record, which is not authoritative ECZ-ID state. Canonical state is written in ECZ-ID Core and nowhere else; the Resolver publishes a read-only projection of it; this server reads that projection. No tool on this surface writes truth.
Next
Where to go from here
You want the schemas
Reference documentation for every ECZ-ID interface lives at the ECZ-ID Developer Gateway, which is a separate host and the canonical place for schemas.
You want to check a target from CI
The ECZ-ID MCP Verifier — the layer's CI and command-line surface — checks a target against public resolver proof from a pipeline or a terminal. It is free to use under the ECZ-ID Proprietary Limited-Use License.
You want to read a real record
The ECZ-ID Resolver is the proof surface, and the only place in this estate where proof is read. Everything this server returns can be checked there.
This page documents one surface. The layer it belongs to, and the other surfaces of that layer, are explained on the layer page. What ECZ-ID Trust MCP is