zkproofport-ai
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Express server port | 4002 |
| BB_PATH | No | Barretenberg CLI path | bb |
| NODE_ENV | No | Node environment | development |
| TEE_MODE | No | TEE mode: disabled / nitro | disabled |
| REDIS_URL | Yes | Redis connection string | |
| NARGO_PATH | No | Nargo CLI path | nargo |
| ENCLAVE_CID | No | Nitro Enclave CID (required when TEE_MODE=nitro) | |
| A2A_BASE_URL | Yes | Public-facing service URL (for Agent Card) | |
| BASE_RPC_URL | Yes | Base chain RPC endpoint | |
| CIRCUITS_DIR | No | Circuit artifacts directory | /app/circuits |
| ENCLAVE_PORT | No | Nitro Enclave port | 5000 |
| PAYMENT_MODE | Yes | Payment mode: disabled / testnet / mainnet | |
| AGENT_VERSION | No | Agent version string | 1.0.0 |
| CHAIN_RPC_URL | Yes | RPC for proof verification | |
| GEMINI_API_KEY | No | Gemini API key for chat | |
| OPENAI_API_KEY | No | OpenAI API key for chat | |
| PAYMENT_PAY_TO | No | Operator wallet (required when payment enabled) | |
| TEE_ATTESTATION | No | Enable attestation verification | false |
| CIRCUITS_REPO_URL | No | Circuit artifacts download URL | |
| PROVER_PRIVATE_KEY | Yes | Agent wallet private key (64 hex chars, no 0x) | |
| PAYMENT_PROOF_PRICE | No | Price per proof (USD) | $0.10 |
| EAS_GRAPHQL_ENDPOINT | Yes | EAS GraphQL endpoint for attestation queries | |
| ERC8004_IDENTITY_ADDRESS | No | ERC-8004 Identity contract | |
| ERC8004_REPUTATION_ADDRESS | No | ERC-8004 Reputation contract | |
| PHOENIX_COLLECTOR_ENDPOINT | No | Phoenix OTLP endpoint for tracing |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_action_approvalA | Read the status of a human wallet approval created by this MCP client. This operation never starts a proof or payment. |
| generate_proofA | All-in-one ZK proof generation. Handles: prepare inputs, request challenge, and submit proof in a single call. Use this when you want the simplest path to a proof. For fine-grained control over each step, use prepare_inputs, request_challenge, and submit_proof individually. CIRCUITS:
WITH ACTION: Returns awaiting_approval with an approval URL for the HUMAN to review and sign in their wallet. Keep the request parameters unchanged, query get_action_approval, then repeat with approval_id when approved. ATTESTATION_KEY cannot authorize an action on the human's behalf. Ordinary proofs without action retain automatic signing. RETURNS: awaiting_approval or the full ProofResult with proof bytes, public inputs, and timing information. Use verify_proof separately to verify on-chain. |
| deposit_to_gatewayA | Deposit USDC into Circle Gateway on Arc, so later proofs can be paid for with nanopayments (pay_on: "arc-testnet-nano"). Do this ONCE, not per proof. The deposit is the only on-chain step and it costs gas; every payment drawn against the balance costs almost none. Paying with "arc-testnet-nano" against an empty Gateway balance is refused. Requires PAYMENT_PRIVATE_KEY -- the buyer signs authorizations with it and never sends a transaction per payment. RETURNS: whether a deposit was made, its transaction hash, and the Gateway balance afterwards (in USDC's smallest units, so 1000000 is one USDC). |
| gateway_balanceA | What the buyer currently holds inside Circle Gateway on Arc — the balance nanopayments are drawn against. Amounts are in USDC's smallest units (1000000 = 1 USDC). Requires PAYMENT_PRIVATE_KEY. |
| get_supported_circuitsA | List all ZK circuits supported by ZKProofport, including verifier addresses and authorized signers. No parameters required. Call this first to discover available circuits before starting proof generation. |
| request_challengeA | Step 2 of the step-by-step flow: Request a challenge from the server. Pass inputs: {} to discover the live payment offers, nonce and optional TEE key without transmitting private witness inputs. You MUST pass the returned "nonce" to submit_proof — without it the server just issues another challenge. MCP submit_proof does not sign payments or encrypt inputs; use generate_proof or the SDK for paid/encrypted orchestration. |
| prepare_inputsA | Step 1 of the step-by-step flow. WITH ACTION: human wallet approval is required; returns awaiting_approval until resumed with approval_id. Approved action witnesses stay in private local storage; pass the returned prepared_inputs_id to submit_proof. WITHOUT ACTION: retains the existing credential-key signature and private witness result. Handle private witness inputs only in trusted local code, never expose them to the dApp, model or logs. Call this BEFORE request_challenge. For oidc_domain provide jwt and scope. |
| submit_proofA | Step 3 of the step-by-step flow: Submit prepared inputs to generate the ZK proof. The TEE server runs the Noir circuit and returns the UltraHonk proof. This step may take 30-90 seconds. The TEE server builds Prover.toml from these inputs. You MUST pass the nonce returned by request_challenge. POST /api/v1/prove answers every request that arrives without that nonce with a fresh 402 challenge, so a submission that omits it can never produce a proof. |
| verify_proofA | Step 4 (optional): Verify a ZK proof on-chain against the deployed verifier contract. Pass the full generate_proof result object directly — verification info (verifierAddress, chainId, rpcUrl) is extracted automatically. Returns { valid: true } if the proof is valid. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| config |
TDQS
Scored across 9 tools
Each tool maps to a distinct workflow stage (deposit, challenge, submit, verify) or resource (circuits, balance, approvals). The only overlap is generate_proof bundling prepare_inputs/request_challenge/submit_proof, but its description explicitly frames it as the all-in-one alternative to the step-by-step tools.
Most tools follow a verb_object pattern: prepare_inputs, submit_proof, verify_proof, request_challenge, get_supported_circuits, get_action_approval. gateway_balance breaks the pattern by omitting the verb, and deposit_to_gateway includes a preposition, but the naming is otherwise consistent and predictable.
Nine tools is well-scoped for the domain: payment management, proof-generation steps, an all-in-one path, approval handling, and verification. Each tool has a distinct role and none feel redundant or excessive.
The set covers the full proof lifecycle: discovering circuits, depositing and checking funds, preparing inputs, requesting challenges, submitting proofs, verifying on-chain, and handling human approvals. There are no dead ends in the core workflow, and the all-in-one generate_proof covers the paid/encrypted pathway that individual steps cannot.