Verifiable provenance for AI agents — ZK proofs over confidential documents, no plaintext exposure.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Lemma API key as Bearer token. Format: 'Bearer <LEMMA_API_KEY>'. Get a key at https://lemma.frame00.com/services
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Retrieve a zero-knowledge proof circuit by its circuitId via GET /v1/circuits/{circuitId}. A circuit defines the constraints that proofs must satisfy and binds to a single schema. Returns CircuitMeta { circuitId, schema, description?, inputs?, verifier?: { type: 'onchain'|'offchain', address?, chainId? }, artifact?: { location: { type: 'ipfs'|'https', wasm, zkey } } }. Use this before lemma_submit_proof to confirm the circuit's schema, public inputs, and verifier configuration. Circuits are immutable; new variants get new circuitIds.
Circuit ID. Returned in the `proof.circuitId` field of VerifiedAttributesQueryResponseItem from lemma_query_verified_attributes, or registered via POST /v1/circuits. NOTE: this matches the OpenAPI field name `circuitId`, not a generic `id`.
Retrieve a zero-knowledge proof circuit by its circuitId via GET /v1/circuits/{circuitId}. A circuit defines the constraints that proofs must satisfy and binds to a single schema. Returns CircuitMeta { circuitId, schema, description?, inputs?, verifier?: { type: 'onchain'|'offchain', address?, chainId? }, artifact?: { location: { type: 'ipfs'|'https', wasm, zkey } } }. Use this before lemma_submit_proof to confirm the circuit's schema, public inputs, and verifier configuration. Circuits are immutable; new variants get new circuitIds.
| Argument | Type | Description |
|---|---|---|
| circuitId* | string | Circuit ID. Returned in the `proof.circuitId` field of VerifiedAttributesQueryResponseItem from lemma_query_verified_attributes, or registered via POST /v1/circuits. NOTE: this matches the OpenAPI field name `circuitId`, not a generic `id`. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"circuitId"
],
"properties": {
"circuitId": {
"type": "string",
"description": "Circuit ID. Returned in the `proof.circuitId` field of VerifiedAttributesQueryResponseItem from lemma_query_verified_attributes, or registered via POST /v1/circuits. NOTE: this matches the OpenAPI field name `circuitId`, not a generic `id`."
}
},
"additionalProperties": false
}Retrieve a Lemma document generator by generatorId via GET /v1/doc-generators/{generatorId}. A generator describes how a class of source documents is produced (e.g., what fields a 'KYC-v2' issuer must populate). Returns GeneratorMeta { generatorId, schema, description?, language?, source?: { type: 'url', uri }, inputsSpec?, outputsSpec? }. Each generator is bound to one schema. Use this when onboarding a new issuer or auditing how an existing schema is being populated.
| Argument | Type | Description |
|---|---|---|
| generatorId* | string | Generator ID. Each generator is bound to a single schema and describes how source documents are produced. Registered via POST /v1/doc-generators. NOTE: this matches the OpenAPI field name `generatorId`, not a generic `id`. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"generatorId"
],
"properties": {
"generatorId": {
"type": "string",
"description": "Generator ID. Each generator is bound to a single schema and describes how source documents are produced. Registered via POST /v1/doc-generators. NOTE: this matches the OpenAPI field name `generatorId`, not a generic `id`."
}
},
"additionalProperties": false
}Get the verification status of a proof. NOTE: the v2 API does not yet expose a dedicated GET /v1/proofs/{id} endpoint, so this tool internally calls POST /v1/verified-attributes/query filtered by docHash (treating the verificationId returned from lemma_submit_proof as a docHash filter). Returns { status, circuitId, chainId, docHash } extracted from the matched item, or undefined if the verificationId is unknown. Status enum: received | verified | onchain-verified | rejected. Use the SDK's isVerified() helper (or check status === 'verified' || status === 'onchain-verified') to determine cryptographic validity.
| Argument | Type | Description |
|---|---|---|
| verificationId* | string | verificationId returned by lemma_submit_proof. Internally treated as a docHash filter on POST /v1/verified-attributes/query (no dedicated GET /v1/proofs/{id} endpoint in v2 API). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"verificationId"
],
"properties": {
"verificationId": {
"type": "string",
"description": "verificationId returned by lemma_submit_proof. Internally treated as a docHash filter on POST /v1/verified-attributes/query (no dedicated GET /v1/proofs/{id} endpoint in v2 API)."
}
},
"additionalProperties": false
}Retrieve a Lemma schema by its ID via GET /v1/schemas/{id}. A schema declares how documents of a given type are interpreted and normalized. Returns SchemaMeta { id, description? } with additionalProperties open — implementations commonly include a `normalize` artifact (WASM that maps raw documents to canonical form) and its content hash. Use this when you need to interpret attribute keys returned by lemma_query_verified_attributes.
| Argument | Type | Description |
|---|---|---|
| id* | string | Schema ID. Returned in the `schema` field of VerifiedAttributesQueryResponseItem from lemma_query_verified_attributes, or registered via POST /v1/schemas. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Schema ID. Returned in the `schema` field of VerifiedAttributesQueryResponseItem from lemma_query_verified_attributes, or registered via POST /v1/schemas."
}
},
"additionalProperties": false
}Query cryptographically verified attributes from Lemma. Use this as the primary tool for finding documents whose attributes match given conditions (e.g., "subject's birthYear lt 2008"). Returns { results: Array<{ docHash, schema, issuerId, subjectId, attributes, isVerified, proof?: { status, circuitId, chainId }, disclosure? }>, hasMore }. The MCP layer enriches each item with an `isVerified` flag derived from `proof.status` (true when status is 'verified' or 'onchain-verified'). Use lemma_get_proof_status to monitor a specific proof; use lemma_get_schema to interpret the keys returned in `attributes`.
| Argument | Type | Description |
|---|---|---|
| limit | number | Max results per page (1–200). Defaults to API server default (50). |
| offset | number | Pagination offset. Pair with `hasMore` in the response to walk pages. |
| schemas | array | Restrict results to documents conforming to these schema IDs. |
| chainIds | array | Restrict results to attributes verified on these chain IDs (EVM). |
| attributes | array | Attribute predicates to AND-combine. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "number",
"maximum": 200,
"minimum": 1,
"description": "Max results per page (1–200). Defaults to API server default (50)."
},
"offset": {
"type": "number",
"minimum": 0,
"description": "Pagination offset. Pair with `hasMore` in the response to walk pages."
},
"schemas": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restrict results to documents conforming to these schema IDs."
},
"chainIds": {
"type": "array",
"items": {
"type": "number"
},
"description": "Restrict results to attributes verified on these chain IDs (EVM)."
},
"attributes": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Attribute key as defined by the schema."
},
"value": {
"description": "Comparison target value. Type depends on the schema's attribute definition. For 'in', pass an array."
},
"operator": {
"enum": [
"eq",
"neq",
"gt",
"gte",
"lt",
"lte",
"in",
"contains"
],
"type": "string",
"description": "Comparison operator. Defaults to eq when omitted. 'in' takes an array value; 'contains' is substring/array-element match."
}
},
"additionalProperties": false
},
"description": "Attribute predicates to AND-combine."
}
},
"additionalProperties": false
}