Skip to main content
Version: v4

Verana MCP server

The server exposes the registry, the indexer, the graph and VS Agents to Model Context Protocol clients, acting for one corporation with one operator key. Source: the mcp-server repository and the MCP server v4 specification.

Configuration​

VariableRequiredDefaultMeaning
MCP_VERANA_MNEMONICyesOperator account mnemonic; read once, scrubbed from the environment, never logged
VERANA_CORPORATIONyesThe bound corporation id
VERANA_RPCyesNode RPC origin (WebSocket at /websocket)
VERANA_INDEXERyesIndexer origin (WebSocket at /v4/indexer/subscribe)
VERANA_GRAPHnoGraph origin; graph tools are advertised only when set
VERANA_CHAIN_IDnofrom RPCBoot aborts on mismatch
VERANA_DENOM, VERANA_GAS_PRICEno0.025uvnaFee denom and gas price
VERANA_TX_TIMEOUT_MSno30000Chain confirmation wait
VERANA_INDEXER_TIMEOUT_MSno15000Read-after-write barrier cap
VERANA_CACHE_REFRESH_MSno60000Periodic re-discovery of authorizations, fee grant, corporation, agents
MCP_TRANSPORTnohttphttp or stdio
MCP_HTTP_PORT, MCP_HTTP_BINDno3000, 0.0.0.0HTTP listener
MCP_BEARER_TOKENhttpShared secret, at least 32 characters
VERANA_LOG_LEVELnoinfo

HTTP endpoints: POST, GET, DELETE /mcp (bearer, sessions), GET /healthz, GET /metrics.

Authorization model​

The server signs with the operator key. Ledger tools are advertised only for the message types the corporation currently grants that operator, and the list changes live. VS Agent tools reach an agent by DID: the agent must run in corporation auth mode, publish its admin origin in its DID Document, and list the operator in its allowlist; the server authenticates with the agent's challenge and token exchange.

Transaction flow​

Build the message with corporation and operator filled in; set the corporation as fee granter when an active fee grant covers the type; simulate; sign; broadcast; wait for inclusion (pre-armed subscription); wait for the indexer to reach the block; answer with indexer_synced and the height. On timeout, return the hash and advise reconciliation with verana.cosmos.tx.getTx.

Tools​

Named verana.<surface>.<module>.<verb>.

Ledger (write, as operator)​

co.createCorporation, co.updateCorporation; es.createEcosystem, es.updateEcosystem, es.archiveEcosystem; gf.addGovernanceFrameworkDocument, gf.increaseActiveGovernanceFrameworkVersion; cs.createCredentialSchema, cs.updateCredentialSchema, cs.archiveCredentialSchema; pp.startParticipantOp, pp.renewParticipantOp, pp.setParticipantOpToValidated, pp.cancelParticipantOpLastRequest, pp.createRootParticipant, pp.selfCreateParticipant, pp.setParticipantEffectiveUntil, pp.revokeParticipant, pp.slashParticipantTrustDeposit, pp.repayParticipantSlashedTrustDeposit, pp.createOrUpdateParticipantSession, pp.triggerResolver; de.grantOperatorAuthorization, de.revokeOperatorAuthorization; di.storeDigest; td.reclaimTrustDepositYield, td.repaySlashedTrustDeposit.

Indexer (read)​

co.getCorporation, listCorporations, getCorporationHistory, getCorporationParams; es.getEcosystem, listEcosystems, getEcosystemHistory, getEcosystemParams; gf.getGovernanceFrameworkVersion, listGovernanceFrameworkVersions; cs.getCredentialSchema, listCredentialSchemas, getJsonSchema, getCredentialSchemaHistory, getCredentialSchemaParams; pp.getParticipant, listParticipants, pendingFlat, findBeneficiaries, getParticipantSession, getParticipantHistory, getParticipantSessionHistory, getParticipantParams; td.getTrustDeposit, getTrustDepositHistory, getTrustDepositParams; de.listOperatorAuthorizations, getOperatorAuthorization, listVSOperatorAuthorizations, getVSOperatorAuthorization, listFeeGrants; gr.getCorporationGroup, listCorporationsByMember, listProposals, getProposal, listVotes; di.getDigest; xr.getExchangeRate, listExchangeRates, getPrice; stats.getStats, getStatsRange, countParticipants, getStatsSnapshot; indexer.getBlockHeight, getStatus, getVersion, getSnapshot, listChanges, listEvents; vt.resolve, listIndexedDids, listChanges; trqp.authorize, recognize, getProfile.

Graph​

Search: search.did, search.ecosystem, search.corporation, search.schema, search.serviceEndpoint. Traversals: did.trustSummary, did.participantsByRole, did.heldCredentials, did.issuedCredentials, did.linkedVps, did.serviceEndpoints, did.governingChain; ecosystem.ownedSchemas, ecosystem.participantsByRole, ecosystem.governanceDocs; schema.credentials, schema.participantsByRole; corporation.ownedDids, corporation.controlledEcosystems, corporation.governanceDocs; participant.validatorChain; credential.issuer, credential.holder; path.shortest.

VS Agent​

flow.listFlows, getFlow, editCredentialClaims, sendOobLink, startValidation, validateFlow, rejectFlow; se.listServiceEndpoints, addServiceEndpoint, updateServiceEndpoint, deleteServiceEndpoint.

Cosmos (read)​

bank.getBalance, getAllBalances; auth.getAccount; tx.getTx; tendermint.getStatus, getBlock; group.listProposals, getProposal, listVotes; feegrant.listAllowances; authz.listGrants.

Wallet​

getAddress, getCorporation, listAuthorizations, listVSAgents, getStatus.

Resources​

verana://own/operator, corporation, authorizations, fee-grant, vs-agents, status.

Prompts​

Operations: diagnose-server, reconcile-transaction. Governance: bootstrap-corporation, delegate-operator, update-governance-framework, rotate-dids, audit-corporation. Ecosystem: create-ecosystem-with-schema, create-root-participant, manage-credential-schema. Participants: onboard-participant, manage-participant, validate-participants. Discovery: explore-network, check-trust-status.

Errors​

One envelope with a stage (validation, authorization, broadcast, confirmation, indexer, upstream) and a code; BCAST_TIMEOUT and VSA_AUTH_FAILED are the two a client handles specially.