<!-- markdown mirror of https://mintid.net/en/sdk/mcp-server — generated at build time -->

> @mintid/verifier-mcp: the three frozen contract operations as Model Context Protocol tools over stdio — transport-only, zero external runtime dependencies, inside your own perimeter.

index — 12 documents

1.  [overviewsdk/00](/en/sdk)
2.  [getting startedsdk/01](/en/sdk/getting-started)
3.  [python sdksdk/02](/en/sdk/python)
4.  [service modesdk/03](/en/sdk/service-mode)
5.  [typescript clientsdk/04](/en/sdk/typescript-client)
6.  [mcp serversdk/mcp](/en/sdk/mcp-server)
    *   [quickstart](#quickstart)
    *   [the three tools](#tools)
    *   [error semantics](#error-semantics)
    *   [trust boundary](#trust-boundary)
7.  [conformancesdk/05](/en/sdk/conformance)
8.  [reason codessdk/06](/en/sdk/reason-codes)
9.  [adr-0001 · kyc trust modeladr/0001](/en/sdk/adr-0001-kyc-trust-model)
10.  [adr-0002 · packagingadr/0002](/en/sdk/adr-0002-packaging)
11.  [adr-0003 · multi-languageadr/0003](/en/sdk/adr-0003-multilanguage)
12.  [bip-0001 · contract freezebip/0001](/en/sdk/bip-0001-verifier-service-contract)

SDK docs · sdk/mcp

# MCP server

@mintid/verifier-mcp: the three frozen contract operations as Model Context Protocol tools over stdio — transport-only, zero external runtime dependencies, inside your own perimeter.

## Quickstart

`@mintid/verifier-mcp` is an MCP server you run **inside your own perimeter**, next to the verifier service you already self-deploy. Register it as a stdio MCP server in your agent runtime and the three contract operations appear as tools any MCP-capable framework can list and call.

Like `@mintid/verifier-client` — its only dependency, and its transport — it is **transport-only**: no cryptography, no chain access, no nonce store, no policy, and **zero external runtime dependencies** (the JSON-RPC framing is a few dozen auditable lines, not a framework). Nonce, session id and the ten-second expiry are generated by the verifying core; no tool argument can mention them.

jsonsdk/mcp · verbatim

```
{
  "mcpServers": {
    "mintid-verifier": {
      "command": "mintid-verifier-mcp",
      "args": ["--service-url", "http://127.0.0.1:8471"]
    }
  }
}
```

## The three tools

One tool per operation of the frozen contract v1 — no aggregate helpers, no convenience wrappers that could reorder a flow:

Tool

Contract operation

`mintid_build_info`

`GET /v1/build-info`

`mintid_create_challenge`

`POST /v1/challenges`

`mintid_validate_presentation`

`POST /v1/presentations`

The contract is untouched by this package: same request and response shapes, same closed reason-code vocabulary, same decisions as every other client in every other language.

## Error semantics (the part that survives the protocol hop)

**A rejection is a successful tool result.** A presentation that fails — replayed nonce, stale status root, missing predicate — comes back as `{ accepted: false, reason_code }`, so the calling agent can reason about _why_ instead of retrying blindly.

Only transport failures are tool errors: a body the service cannot parse, proven chain state unavailable (fail-closed — retry later, never bypass), or the service unreachable. Branch on data, not on exceptions.

## Trust boundary

This server is part of _your_ verifier deployment. Run it inside your perimeter, pointed exclusively at your own service instance. Pointing it at anyone else’s service would delegate the decision itself — which the protocol’s paid-verification permission (R26) explicitly does not cover.

The server **persists nothing and logs nothing**; your service keeps the only decision record (R18). Node ≥ 20, same as the TypeScript client.

bashsdk/mcp · verbatim

```
mintid-verifier-mcp --service-url http://127.0.0.1:8471
# or: MINTID_VERIFIER_SERVICE_URL=http://127.0.0.1:8471 mintid-verifier-mcp
```

[previous← typescript client](/en/sdk/typescript-client)[nextconformance →](/en/sdk/conformance)

---
Source: https://mintid.net/en/sdk/mcp-server · MCP server — MintID verifier SDK docs
