@odatano/nightgate-mcp
OfficialThis MCP server enables AI agents to interact with the NIGHTGATE attestation layer on the Midnight blockchain for document anchoring, zero-knowledge proofs, and disclosure management, without exposing wallet lifecycle. Verification (read‑only): verify_attestation (payload hash in vault, optional content root), verify_predicate (ZK proof for numeric threshold, byte equality, or set membership), verify_predicate_attestation (by row ID), verify_document (by document ID and hash). Preparation: prepare_document_proof (canonicalize, Merkle root, field inclusion paths; up to 16 fields), prepare_membership_set (allow‑list Merkle tree). Anchoring & Writing (async, wallet required): attest_agent_output (anchor AI provenance), anchor_document (commit hash). ZK Proofs (async): prove_field_predicate (numeric threshold ≤ or ≥), prove_field_equality (string to public digest), prove_field_membership (string in allow‑list), prove_field_predicates_batch (up to 8 claims in one transaction). Disclosure (async, attester‑only): grant_disclosure (levels: public, legitimate‑interest, authority), revoke_disclosure. Job Management: get_job_status to poll async operations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@odatano/nightgate-mcpProve that the salary field is above 50000 without disclosing it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@odatano/nightgate-mcp
MCP server that lets AI agents use NIGHTGATE, the Midnight blockchain attestation layer: anchor documents, prove zero-knowledge predicates over hidden fields, manage disclosure grants, verify everything against live contract state, and poll async jobs. Wallet lifecycle (connect, send, deploy) is deliberately not exposed; writing without a wallet session works through fee sponsoring (build locally, a sponsor pays).
Requirements
Node.js >= 20
A running NIGHTGATE instance, see the compatibility matrix below
Related MCP server: Agent Identity MCP Server
Compatibility
Pick the MCP line that matches your NIGHTGATE server. The pairing is not cosmetic: from NIGHTGATE 0.16.0 on, content-tree leaves are SALTED, so every field proof must carry its slot salt. An older MCP omits it and the server rejects the call with 400.
MCP | NIGHTGATE | Notes |
0.5.1 | >= 0.19.0 for width 32 | Current. Accepts the 32-slot vault: schema and opening take 16 or 32 entries, |
0.5.x | >= 0.18.0 | Adds the parallel sponsoring channel ( |
0.4.x | >= 0.17.0 | Cross-server fee sponsoring, serial channel only ( |
0.3.x | >= 0.16.0 (0.16.2 recommended) | Cross-root proofs, guarded anchoring, schema ids, per-field salts. Does NOT work against 0.15.x and older, which know no salt parameters. |
0.2.x | 0.15.x | Bytes equality and set membership on unsalted leaves. Against 0.16.0 and newer every field proof fails with "fieldSalt is required". |
0.1.x | 0.14.x | Anchoring, numeric field predicates, disclosure, agent provenance. |
The verification tools are the exception: they only read live contract state and keep working across the whole range, they simply cannot express the newer claim kinds on an older server.
Getting a NIGHTGATE instance
The fastest way is the official Docker image; no Node setup, no host app
(published from the NIGHTGATE repo on every release, details in its
docs/docker.md):
docker run -d --name nightgate -p 4004:4004 \
-e ENCRYPTION_KEY=$(openssl rand -hex 32) \
-e NIGHTGATE_HTTP_PASSWORD=change-me \
-v nightgate-data:/data \
ghcr.io/odatano/nightgate:latestThat container targets Midnight preprod by default, serves with HTTP basic
auth (nightgate / your password), persists its database in the
nightgate-data volume, and proves in-process (wasm), so no proof server
is needed to start. Point this MCP server at it with:
NIGHTGATE_BASE_URL=http://localhost:4004
NIGHTGATE_USERNAME=nightgate
NIGHTGATE_PASSWORD=change-meFor agent operation, create a scoped grant once (as the operator, e.g. via
curl against createAgentGrant) and hand the returned ngat_... token to
the agent as NIGHTGATE_TOKEN; the write tools are then limited to the
grant's allowlist, budget and pinned session.
Agents on a hosted NIGHTGATE (fee sponsoring)
An agent does not need a wallet session of its own to write on-chain. With a
grant that allows sponsorUnboundTransaction (or sponsorFinalizedTransaction)
the flow is:
build_sponsorable_transaction: build, prove and sign the contract call LOCALLY (the MCP server wraps the@odatano/nightgate-txtxbuilder; install it next to the MCP server, it is an optional peer dependency because it carries the Midnight SDK). The seed comes fromNIGHTGATE_SEED_HEXin the server environment, the attestation secret is derived from it, nothing secret leaves the machine; the result is ~7 KB of base64 and the effect will carry this builder's attester id (get_attester_identity). Proving runs in-process (20-60 s) or on a proof server (NIGHTGATE_PROOF_SERVER_URL). Without the package or the seed the tool answers with a clear error; an agent can still hand in bytes built elsewhere with the txbuilder directly.sponsor_unbound_transactionwith the operator's sponsor session id, or the platform pool id00000000-0000-0000-0000-706f6f6c0000when the host runs a sponsor pool (the server picks a free pool sponsor and fails over).Poll
get_job_statuswith thesessionIdthe sponsor call RETURNED, thenverify_attestationto read it back crawler-free.
One sponsor wallet serves several agents at once (parallel channel, 0.18.0).
A job that ends failed with CHAIN_EXECUTION_FAILED landed on-chain but its
call did not apply (two calls on the same contract in one block): build again
against the current state and sponsor again; never resubmit the same bytes.
On a host behind transport auth set NIGHTGATE_USERNAME/NIGHTGATE_PASSWORD
next to the token, the two combine.
Alternatively any CAP app using the @odatano/nightgate plugin works,
e.g. the NIGHTGATE repo itself via npm run dev.
Setup
npm install
npm run buildConfiguration is environment-driven:
Variable | Default | Purpose |
|
| NIGHTGATE host app |
| unset | Basic auth (CAP dev/mocked auth) |
| unset |
|
|
| OData service path |
|
| Per-request timeout |
| unset | Caller seed (64 or 128 hex) for |
|
| Network the local builder targets ( |
| public Midnight endpoints of the network | Builder's indexer + node |
|
| Where the builder fetches prover keys (cached on disk, |
| unset | Prove contract circuits on a proof server instead of in-process wasm |
Use with Claude Code
claude mcp add nightgate \
--env NIGHTGATE_BASE_URL=http://localhost:4004 \
--env NIGHTGATE_USERNAME=alice \
-- node /path/to/NIGHTGATE-MCP/dist/index.jsOr in a project .mcp.json:
{
"mcpServers": {
"nightgate": {
"command": "node",
"args": ["/path/to/NIGHTGATE-MCP/dist/index.js"],
"env": {
"NIGHTGATE_BASE_URL": "http://localhost:4004",
"NIGHTGATE_USERNAME": "alice"
}
}
}
}Tools
Tool | What it does |
| Live-state check that a payload hash is attested in an AttestationVault (crawler-free, optional content-root check, optional cross-network read) |
| Live-state check that a ZK claim was recorded true on-chain, id-free: numeric predicates, |
| Verify a server-issued predicate attestation by its row id |
| Verify an anchored document by document id + sha256 |
| Canonicalize a document into payloadHash + salted Merkle contentRoot + schemaId + per-field proof inputs (incl. each slot salt) + the full |
| Build the canonical allow-list set tree: setRoot for verifiers, inclusion path for provers (synchronous) |
| Anchor agent-output provenance (canonical envelope, third-party verifiable; async job, NIGHTGATE >= 0.14.0) |
| Anchor a document content hash on-chain; with a |
| ZK proof that a hidden document field satisfies a threshold, without revealing it (async job) |
| ZK proof that a string field carries exactly the value behind a public digest (async job) |
| ZK proof that a hidden string field is one of a public allow-list, without revealing which (async job) |
| Up to 8 claims on one document in ONE transaction, any mix of numeric / equality / membership / cross-root kinds (async job) |
| ZK proof that a second document differs from the anchored one ONLY in a public slot mask, values hidden (async job) |
| ZK proof that two anchored documents differ at >= k of the vault's slots, without revealing which (async job) |
| Compute the commitment + secret nonce for guarded anchoring (synchronous) |
| Record that commitment on-chain, so a mempool observer cannot front-run the later reveal (async job) |
| Attester-only on-chain disclosure ACL (async jobs) |
| Build, prove and sign an AttestationVault call LOCALLY with the seed from the server environment (attest, anchorContentRoot, grant/revokeDisclosure, register/bindPassport, attestCommit/Reveal); returns the fee-unpaid bytes for the sponsor tools, unbound by default (synchronous, 20-60 s, needs |
| The attester id this server builds under, derived from the seed (synchronous) |
| Submit a transaction that was built, proven and signed ELSEWHERE (e.g. with the |
| Same trust shape for an UNBOUND ( |
| Derive the raw token type a minting contract produces, from contract address + domain separator (synchronous) |
| Poll an async NIGHTGATE job until succeeded/failed |
All verification tools return verified: false as a clean negative rather
than an error when the attestation or proof is absent. Write tools require
a connected wallet session (sessionId); creating sessions stays outside
MCP by design.
Integration check
npm run integrationRuns an in-memory MCP client against the server: asserts the tool set, schemas, and argument validation. Optional live round-trip:
NIGHTGATE_LIVE=1 NIGHTGATE_BASE_URL=... NIGHTGATE_USERNAME=... \
NIGHTGATE_TEST_CONTRACT=<vault address> NIGHTGATE_TEST_PAYLOAD_HASH=<64 hex> \
npm run integrationThe agent sponsoring path has its own live lane, entirely through the MCP
tools with a grant token only: get_attester_identity,
build_sponsorable_transaction (local), sponsor_unbound_transaction,
get_job_status, verify_attestation (the attester id must be ours):
NIGHTGATE_BASE_URL=https://api.nightgate.dev NIGHTGATE_TOKEN=ngat_... \
NIGHTGATE_SEED_HEX=<64 or 128 hex, a throwaway is fine> \
NIGHTGATE_VAULT=<vault address> NIGHTGATE_SPONSOR_SESSION_ID=<sponsor or pool id> \
npm run live:sponsor-unboundLicense
Apache-2.0
Available Tools
12 toolsanchor_documentA
Anchor a document content hash on the Midnight chain via the AttestationVault attest circuit. Commits only the sha256 + public metadata; you are responsible for storing the actual bytes at storageRef. Attestation is first-come-first-served per hash. Async: returns { jobId, status } immediately; poll get_job_status until succeeded or failed. Also returns documentId for verify_document.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Content size in bytes, informational | |
| sha256 | Yes | sha256 of the document content (64 hex), becomes the on-chain payload hash | |
| metadata | No | Public metadata object; its hash is anchored alongside | |
| sessionId | Yes | Wallet session id that signs and submits | |
| storageRef | Yes | Where the bytes live, e.g. file://, s3://, ipfs:// | |
| contentType | No | MIME type, informational | |
| idempotencyKey | No | Dedupes retries of the same anchor request | |
| contractAddress | Yes | AttestationVault deployment to anchor into | |
| sponsorSessionId | No | Optional second session that pays the dust fee | |
| compiledArtifactRef | No | Contract artifact ref, defaults to 'attestation-vault' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries behavioral disclosure. It reveals that only the sha256 and public metadata are committed, that the caller is responsible for storing the raw bytes, that anchoring is first-come-first-served per hash, and that the call returns immediately with a jobId while execution proceeds asynchronously. This is rich, non-obvious context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences with no wasted words. It front-loads the primary action, then packs essential caveats (storage responsibility, hash uniqueness, async behavior, related verification tool) into compact, high-value sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no output schema, the description covers the critical user-facing contract: what is anchored, what the caller must handle, the async polling model, and the return values (jobId, status, documentId). Combined with the detailed schema, this is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description adds meaningful cross-parameter context by explaining that sha256 and public metadata are the committed payload, while storageRef holds the actual bytes—clarifying the division of responsibility between these fields. It does not re-explain each parameter, which is appropriate given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Anchor a document content hash on the Midnight chain via the AttestationVault attest circuit.' It clearly distinguishes this from sibling tools like verify_document and get_job_status by framing the action as anchoring and mentioning the returned documentId for later verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear workflow guidance: the caller must store the bytes at storageRef, the operation is async requiring polling get_job_status, and the returned documentId is used with verify_document. It does not explicitly name alternatives or say 'use this instead of X', but the contextual workflow is sufficiently directional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attest_agent_outputA
Anchor agent-output provenance on the Midnight chain: "agent X produced output O from input I at time T". Builds the canonical v1 envelope server-side, hashes it and anchors it; the response returns the envelopeJson any third party can re-hash and check via verify_attestation, without trusting this server. Async: returns { jobId, status } immediately; poll get_job_status until succeeded or failed.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Agent identity, ideally a registered grantee id | |
| modelId | No | Optional model identifier | |
| inputHash | Yes | Commitment to the agent input (64 hex) | |
| sessionId | Yes | Wallet session id that signs and submits | |
| outputHash | Yes | Commitment to the produced output (64 hex) | |
| policyHash | No | Optional commitment to the governing policy (64 hex) | |
| producedAt | No | Optional ISO-8601 production time, defaults to now | |
| storageRef | No | Where output/envelope live, defaults to agent-output://<agentId> | |
| idempotencyKey | No | Dedupes retries | |
| contractAddress | Yes | AttestationVault deployment | |
| sponsorSessionId | No | Optional second session that pays the dust fee | |
| compiledArtifactRef | No | Contract artifact ref, defaults to 'attestation-vault' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: server-side envelope construction, hashing, anchoring, immediate async response with {jobId, status}, polling requirement, and the trust model ('without trusting this server'). It omits details like fees or permission requirements, but since no annotations exist, this is a solid disclosure of core behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences that front-load the core purpose and then concisely explain the async flow. Every clause adds essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, async, no output schema), the description explains the initial response, the polling action, and the eventual deliverable (envelopeJson). It is slightly ambiguous about which response contains the envelopeJson, but overall it is sufficiently complete for an agent to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with meaningful descriptions, so the baseline is 3. The description adds conceptual mapping (agent X, output O, input I, time T) but provides no additional parameter-level guidance beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action: 'Anchor agent-output provenance on the Midnight chain' and elaborates with the semantic 'agent X produced output O from input I at time T'. This clearly distinguishes the tool from siblings like verify_attestation and anchor_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is async, returns a jobId/status immediately, and instructs polling get_job_status until completion. It also mentions that third parties can verify via verify_attestation. However, it does not explicitly state when not to use this tool or name alternative attestation/document tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_statusA
Poll the status of an async NIGHTGATE job (all submit actions return a jobId). status: pending | running | external_execution | submitted | reconciliation_required | succeeded | failed. Poll every few seconds until succeeded or failed; result carries the job outcome JSON, chainStatus tracks on-chain finalization independently.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Job id returned by a submit action | |
| sessionId | Yes | Wallet session id the job belongs to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does well: it discloses the async nature, the status enum, the recommended polling interval, that the result carries a job outcome JSON, and that chainStatus tracks on-chain finalization independently. Some details like error behavior or timeouts are omitted, so a 4 is fitting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and statuses, followed by actionable polling guidance. No wasted words; every clause contributes necessary behavioral or workflow information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 fully-described parameters, no output schema, no annotations), the description covers essential aspects: why to use it, the status model, how to poll, and what the result contains. It lacks only minor details like error handling or timeout guidance, which are not critical for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already described in the schema. The description adds minor context (jobId comes from submit actions, sessionId belongs to the job) but does not significantly exceed schema semantics. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool polls the status of an async NIGHTGATE job, with a specific verb (poll) and resource (job status). It also lists all possible statuses, which unambiguously defines its scope and distinguishes it from sibling tools that verify or attest.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this after submit actions and provides a polling loop ('Poll every few seconds until succeeded or failed'). This is clear context, though it doesn't mention when not to use it or name alternatives; none of the siblings serve a polling role, so no exclusion is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_disclosureA
Grant a disclosure level for an attestation to a grantee identity, on-chain via the AttestationVault. Attester-only: the transaction is rejected in-circuit unless the session wallet is the original attester. level: 0=public, 1=legitimate-interest, 2=authority. Async: returns { jobId, status } immediately; poll get_job_status until succeeded or failed.
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | 0=public, 1=legitimate-interest, 2=authority | |
| grantee | Yes | Grantee identity (64 hex Bytes<32>) | |
| sessionId | Yes | Wallet session id (must be the attester) | |
| payloadHash | Yes | The attestation payload hash (64 hex) | |
| idempotencyKey | No | Dedupes retries | |
| contractAddress | Yes | AttestationVault deployment | |
| sponsorSessionId | No | Optional second session that pays the dust fee | |
| compiledArtifactRef | No | Contract artifact ref, defaults to 'attestation-vault' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the on-chain execution, the in-circuit rejection for non-attesters, and the async return shape with polling instructions. This goes beyond schema content and gives useful operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences, front-loaded with the core purpose. No fluff; every sentence contributes a distinct piece of information (purpose, constraint, async behavior).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 params, no output schema), the description covers the essential aspects: what it does, who can call it, and how to handle the async result. It leaves idempotency and fee sponsorship to the schema, which is acceptable given high schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage, so the baseline is 3. The description adds value by explaining the consequence for sessionId (transaction rejected unless original attester) and reiterating level meanings, slightly enhancing the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Grant') with a clear resource ('disclosure level for an attestation to a grantee identity') and specifies the mechanism ('on-chain via the AttestationVault'). This clearly distinguishes it from sibling tools like revoke_disclosure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the attester-only constraint and the async polling pattern, which tells the agent when this tool applies and how to follow up. It does not explicitly name alternatives, but the context is unambiguous enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_document_proofA
Turn a structured document into everything the proof tools need: canonical JSON and its payloadHash (what anchor_document anchors), a Merkle contentRoot over an ORDERED list of up to 16 proof fields, and per-field inclusion paths ready for prove_field_predicate. Keep the field order stable across anchor and proof: it is part of the tree identity. Compute-only and synchronous, nothing is stored server-side. The returned fields carry witness material (scaled values): treat as sensitive. Store canonicalDocument at your storageRef; re-serializing with different key order will not re-hash equal.
| Name | Required | Description | Default |
|---|---|---|---|
| document | Yes | The full document as a JSON object; all of it goes into payloadHash | |
| proofFields | Yes | ORDERED list of fields to make provable (leaf index = position) | |
| compiledArtifactRef | No | Contract artifact ref, defaults to 'attestation-vault' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses key behaviors: compute-only, synchronous, no server-side storage, sensitivity of witness material, and the critical non-re-hashing pitfall of re-serializing with different key order. This goes well beyond a basic read/write label.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the main purpose, then adding essential behavioral notes. Every sentence contributes unique, high-value information without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema and annotations, the description adequately explains what the tool returns (canonical JSON, payloadHash, contentRoot, inclusion paths) and its place in the larger workflow. It covers usage caveats and output sensitivity, making it sufficiently complete for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with detailed descriptions for all parameters (document, proofFields, compiledArtifactRef). The description adds contextual relationships (e.g., 'what anchor_document anchors') but doesn't materially enhance parameter semantics beyond the schema's existing clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Turn... into'), enumerating the concrete outputs (canonical JSON, payloadHash, Merkle contentRoot, inclusion paths). It explicitly names downstream tools (anchor_document, prove_field_predicate), distinguishing it from siblings as a preparatory step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this is a prerequisite for proof/anchor tools, with usage guidance on preserving field order and storing canonicalDocument correctly. While it doesn't explicitly say when not to use it, the downstream references imply a specific place in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prove_field_predicateA
Issue a zero-knowledge field-bound predicate proof: prove that a hidden field of an anchored document satisfies "value <= threshold" or "value >= threshold" WITHOUT revealing the value. Needs the depth-4 Merkle inclusion path of the field in the anchored content root. value/threshold are scaled integers (decimal strings); the value is a witness and never persisted. If contentRoot is supplied it is anchored first. A false predicate fails at local proving time, nothing is submitted. Async: returns { jobId, status } immediately; poll get_job_status until succeeded or failed.
| Name | Required | Description | Default |
|---|---|---|---|
| dirs | Yes | Exactly 4 booleans; true means the current node is the LEFT child | |
| unit | No | Informational unit, e.g. kWh | |
| value | Yes | Scaled integer field value (witness only, never persisted) | |
| fieldKey | Yes | Canonical field id (64 hex, public) | |
| siblings | Yes | Depth-4 Merkle inclusion path: exactly 4 sibling digests (64 hex each) | |
| predicate | Yes | Predicate operator | |
| sessionId | Yes | Wallet session id that signs and submits | |
| threshold | Yes | Scaled integer threshold (same scaling as value) | |
| contentRoot | No | Optional Merkle root (64 hex) to anchor first | |
| payloadHash | Yes | Attestation payload hash (64 hex) | |
| idempotencyKey | No | Dedupes retries | |
| contractAddress | Yes | AttestationVault deployment | |
| sponsorSessionId | No | Optional second session that pays the dust fee | |
| compiledArtifactRef | No | Contract artifact ref, defaults to 'attestation-vault' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and fulfills it thoroughly: it discloses the zero-knowledge property, that the value is a witness and never persisted, that a false predicate fails locally with nothing submitted, and the immediate async return. It also adds context about scaling and contentRoot anchoring, offering a comprehensive behavioral profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the first sentence states the primary function, subsequent sentences cover prerequisites, scaling, anchoring, failure behavior, and the async pattern. The description is tightly written with no fluff and is appropriately front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 14-parameter tool with no output schema, the description covers the core aspects: purpose, prerequisites, behavioral nuances, and the return format. It could further describe error scenarios or the verification flow, but the essential operational context is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the scaled integer semantics for value and threshold, the witness-only role of value, the depth-4 Merkle path requirement for siblings/dirs, and the contentRoot anchoring behavior. This enriches the parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb phrase 'Issue a zero-knowledge field-bound predicate proof' and precisely defines the predicate as 'value <= threshold' or 'value >= threshold' while emphasizing non-revelation. It clearly differentiates from verification siblings (verify_*) by focusing on proof generation, and the singular 'field' distinguishes it from the plural sibling 'prove_field_predicates_batch'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete usage context: it requires the depth-4 Merkle inclusion path, explains the optional contentRoot anchoring behavior, and describes the async flow with get_job_status polling. It does not explicitly name the batch alternative or state 'when not to use', but the strong contextual detail makes the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prove_field_predicates_batchA
Batch variant of prove_field_predicate: prove up to 8 field-bound predicates on ONE anchored document in ONE transaction (7 if contentRoot is supplied, since the anchor occupies one call slot). Duplicate claim tuples are dropped server-side. One false predicate aborts the whole batch at local proving time with zero on-chain effect. After submission the chain can finalize a PARTIAL_SUCCESS subset; verify per claim via verify_predicate_attestation instead of assuming all-or-nothing. Async: returns { jobId, status } immediately; poll get_job_status until succeeded or failed.
| Name | Required | Description | Default |
|---|---|---|---|
| claims | Yes | 1-8 claims on the same payload hash | |
| sessionId | Yes | Wallet session id that signs and submits | |
| contentRoot | No | Optional Merkle root anchored as first call of the same batch | |
| payloadHash | Yes | Shared attestation payload hash (64 hex) | |
| idempotencyKey | No | Dedupes retries | |
| contractAddress | Yes | AttestationVault deployment | |
| sponsorSessionId | No | Optional second session that pays the dust fee | |
| compiledArtifactRef | No | Contract artifact ref, defaults to 'attestation-vault' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility and excels: it discloses duplicate tuples dropped server-side, whole-batch abort on false predicate with zero on-chain effect, possible PARTIAL_SUCCESS subset, and async behavior returning { jobId, status } to poll via get_job_status. This is thorough and policy-relevant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences deliver the core purpose, edge cases, failure modes, and async pattern without redundancy. Every sentence adds value and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the batch complexity, partial-success behavior, and absence of an output schema, the description is highly complete: it covers the claim limit, duplicate handling, abort semantics, verification path, and async polling contract. Sibling tools round out the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3 applies. The description adds the 8-claim cap and the contentRoot slot trade-off, but does not otherwise enrich parameter meaning beyond what the schema already explains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Batch variant of prove_field_predicate' and specifies 'prove up to 8 field-bound predicates on ONE anchored document in ONE transaction', which clearly states the tool's action, scope, and distinguishes it from the singular sibling prove_field_predicate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It identifies itself as a batch variant, implying use when multiple predicates are needed, and advises verifying per-claim via verify_predicate_attestation after partial success. However, it does not explicitly state when to prefer this over prove_field_predicate or exclude single-predicate cases, leaving that to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_disclosureA
Revoke a previously granted disclosure on-chain (removes the grantee entry). Attester-only, enforced in-circuit. Async: returns { jobId, status } immediately; poll get_job_status until succeeded or failed.
| Name | Required | Description | Default |
|---|---|---|---|
| grantee | Yes | Grantee identity (64 hex Bytes<32>) | |
| sessionId | Yes | Wallet session id (must be the attester) | |
| payloadHash | Yes | The attestation payload hash (64 hex) | |
| idempotencyKey | No | Dedupes retries | |
| contractAddress | Yes | AttestationVault deployment | |
| sponsorSessionId | No | Optional second session that pays the dust fee | |
| compiledArtifactRef | No | Contract artifact ref, defaults to 'attestation-vault' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden of behavioral disclosure. It explicitly states the on-chain effect ('removes the grantee entry'), the permission model ('Attester-only, enforced in-circuit'), and the async pattern with a clear follow-up mechanism. It stops short of detailing failure modes or response statuses, but the provided information is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first explains the action and effect, the second explains the async behavior and next step. No redundancy, information is front-loaded, and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex async on-chain mutation with 7 parameters and no output schema, this description covers the essential contract: what it does, who can call it, and how to track completion. It does not enumerate possible failure statuses, but that is reasonably delegated to get_job_status, making it complete enough for an agent to invoke and monitor correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes all 7 parameters with 100% coverage, so the baseline is 3. The tool description adds no param-specific meaning beyond what the schema already provides, but it does not need to compensate since the schema is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Revoke a previously granted disclosure on-chain'), identifies the resource (the grantee entry), and clearly differentiates from sibling grant_disclosure by using 'previously granted' and 'removes'. The verb is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operational context: 'Attester-only' establishes who can invoke it, and the async instruction to poll get_job_status gives actionable next steps. However, it does not explicitly name alternatives or when-not-to-use scenarios, though the verb 'revoke' makes the intended use case obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_attestationA
Verify against LIVE Midnight contract state that a payload hash is attested in an AttestationVault (crawler-free, no txHash needed). Optionally also checks that the anchored content root matches. Returns verified:false (not an error) when absent.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Read from another network public indexer instead of the configured one | |
| contentRoot | No | Optional anchored content root to check (64 hex) | |
| payloadHash | Yes | The attested payload hash (sha256, 64 hex) | |
| contractAddress | Yes | AttestationVault contract address | |
| compiledArtifactRef | No | Contract artifact ref, defaults to 'attestation-vault' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses important behavioral traits: it reads LIVE state, returns verified:false (not an error) when absent, and optionally checks content root. This is substantive, though it does not address all possible behaviors (e.g., network handling, error conditions).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two well-structured sentences that front-load the core purpose. No wasted words; each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description explicitly clarifies the return behavior for the absent case, which is important. It also explains the key differentiators. It does not cover every nuance, but the schema fills in parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all five parameters with 100% coverage, so the description adds only a little extra meaning by linking 'contentRoot' to 'anchored content root' and implying payloadHash. This matches the baseline for good schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (verify) and resource (LIVE Midnight contract state, AttestationVault), and specifies that it checks payload hash attestation. It also distinguishes from sibling tools like verify_predicate_attestation by highlighting 'crawler-free, no txHash needed'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful context by noting it is crawler-free and does not require a txHash, which hints at appropriate use cases. However, it does not explicitly name alternatives or state when not to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_documentA
Verify an anchored document by its NIGHTGATE document id: compares the provided sha256 against the anchored original and confirms the anchoring transaction, with a crawler-free live-state fallback when contractAddress is supplied.
| Name | Required | Description | Default |
|---|---|---|---|
| documentId | Yes | Documents row id | |
| providedSha256 | Yes | sha256 of the document to check (64 hex) | |
| contractAddress | No | Optional vault address, enables the crawler-free fallback | |
| compiledArtifactRef | No | Contract artifact ref, defaults to 'attestation-vault' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It reveals the core verification steps and the fallback behavior, but does not mention whether the operation is read-only, potential error conditions, or the shape of the return value. It gives useful insight without full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that begins with the action and resource, followed by the mechanism and the fallback condition. Every phrase adds value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, no output schema, no annotations), the description covers the essential purpose, the mechanism, and the conditional fallback. It does not describe the return format, but for a verification tool the output is likely self-evident. The description is sufficient for correct selection and initial invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all parameters, so the baseline is 3. The description adds context beyond the schema by introducing 'NIGHTGATE document id' and the fallback condition tied to contractAddress, which clarifies the domain and the conditional behavior. This adds meaningful semantics over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Verify') and resource ('anchored document'), identifies the primary identifier ('NIGHTGATE document id'), and explains the verification mechanism (comparing sha256 and confirming the anchoring transaction). This clearly distinguishes the tool from sibling verification tools focused on predicates or attestations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the main use case (verifying an anchored document by document id) and provides a conditional alternative ('crawler-free live-state fallback when contractAddress is supplied'). It does not explicitly say when not to use this tool versus siblings, but the focus on documents is implied. This is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_predicateA
Verify against LIVE Midnight contract state that a ZK predicate proof (e.g. "hidden value <= threshold") was recorded true on-chain. Id-free: works for proofs NIGHTGATE never saw. threshold must be the SAME scaled integer the circuit hashed (scaling mismatch yields verified:false). Supply fieldKey for a field-bound proof, omit it for a plain one.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Read from another network public indexer instead of the configured one | |
| fieldKey | No | Optional field key (64 hex) for field-bound proofs | |
| predicate | Yes | Predicate operator | |
| threshold | Yes | Scaled circuit integer threshold (same scaling the circuit hashed) | |
| payloadHash | Yes | The attestation payload hash (64 hex) | |
| contractAddress | Yes | AttestationVault contract address | |
| compiledArtifactRef | No | Contract artifact ref, defaults to 'attestation-vault' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers behavioral traits: it reads live contract state, is id-free, and warns about scaling mismatch causing verified:false. This is useful caveat-level transparency, though it stops short of describing return shape or other edge-case behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all front-loaded and information-dense. The primary action is stated first, followed by the id-free differentiation, then the scaling warning and fieldKey instruction. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, key caveat, and param conditioning. It lacks explicit return value details (e.g., whether the response is a simple boolean or includes proof metadata), but given no output schema, it still gives enough to invoke the tool. Minor gap for a verification tool where result interpretation matters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Though schema coverage is 100%, the description adds critical param semantics: threshold must be the same scaled integer the circuit hashed, and fieldKey distinguishes field-bound vs plain proofs. This directly supplements the schema entries and prevents misuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete action: verifying against LIVE Midnight contract state that a ZK predicate proof was recorded true on-chain. It clearly identifies the resource (on-chain state), the verb (verify), and the specific proof form (predicate), while the 'Id-free' distinction separates it from sibling tools like verify_predicate_attestation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives practical usage context: works for proofs NIGHTGATE never saw (id-free), and explains when to supply or omit fieldKey. It does not explicitly name alternative tools or exclusions, but the 'Id-free' note implies a differentiation from attestation-bound verifiers, making the guidance clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_predicate_attestationA
Verify a server-issued predicate attestation by its NIGHTGATE row id (UUID). Confirms the proving transaction succeeded, with a crawler-free live-state fallback. Use verify_predicate instead when you only have on-chain coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| predicateAttestationId | Yes | PredicateAttestations row id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, but the description discloses meaningful behavior: it confirms the proving transaction succeeded and mentions a 'crawler-free live-state fallback.' It could add return/error details, but the essentials of the read-only verification operation are conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences: first states action and mechanism, second gives alternative. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter verify tool without output schema, the description covers purpose, input semantics, and fallback behavior. It lacks explicit output/return shape, but the phrase 'Confirms... succeeded' implies the verification result, and complexity is low.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a standard UUID field, and the description adds the operational meaning: 'NIGHTGATE row id' and 'server-issued predicate attestation,' clarifying what to pass beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Verify' and resource 'server-issued predicate attestation' identified by NIGHTGATE row id, and explicitly contrasts with verify_predicate for on-chain coordinates. This clearly distinguishes it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative 'verify_predicate' and the condition ('when you only have on-chain coordinates'), and implicitly states when to use this tool (when you have the NIGHTGATE row id). This is strong guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct purposes, but the four verify-* tools (verify_predicate_attestation, verify_attestation, verify_predicate, verify_document) all perform verification with different inputs and contexts, which could cause some confusion. However, the detailed descriptions help differentiate them, so it's mostly clear.
All tool names follow a consistent verb_noun pattern using lowercase and underscores, such as verify_predicate, anchor_document, grant_disclosure, and get_job_status. This makes the naming predictable and easy to understand.
With 12 tools, the server provides a well-scoped set of operations for its domain: anchoring, proving, verifying, and disclosure management. The number is appropriate and each tool serves a distinct purpose without redundancy.
The tool set covers the core lifecycle: anchoring documents and agent outputs, proving predicates (single and batch), verifying various attestations, and managing disclosures. Minor gaps exist, such as no dedicated tool for proving plain (non-field-bound) predicates and no listing/querying of all attestations, but these are workaroundable.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted AgentLux MCP server for marketplace, identity, creator, services, and social flows.
MCP server for verifying EUDI/Talao wallet data via OIDC4VP (pull) for AI agents.
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
Hosted MCP server for live Bittensor chain reads and self-custodial on-chain writes.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for AI agent identity — verify agents with Ed25519 signatures, check trust scores, sign and verify content, exchange encrypted messages. Built on the Agent Identity Protocol (AIP).8MIT
- AlicenseNot gradedqualityDmaintenanceMCP Server for AI agent identity and authorization. Create, verify, and manage agent identities with trust scores and scoped authorization tokens.MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for AI agent security guardrails. Provides input validation, prompt injection detection, PII redaction, output filtering, policy enforcement, rate limiting, and comprehensive audit logging.761MIT
- AlicenseAqualityBmaintenanceMCP server that gives AI assistants access to Midnight blockchain—search contracts, analyze code, and explore documentation.3010637MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ODATANO/NIGHTGATE-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server