Tenzro MCP Server
The official Model Context Protocol server for Tenzro Network — giving AI agents direct access to blockchain operations, token management, cross-chain bridges, NFTs, identity, compliance, event streaming, and more.
Overview
The Tenzro MCP server is an installable Python package that exposes 360 blockchain and multi-modal AI tools to any MCP-compatible AI agent (Claude, GPT, Cursor, Windsurf, etc.) via stdio or Streamable HTTP transport. Install with pip install tenzro-mcp-server and run locally, or connect directly to the live testnet endpoint. Agents can query balances, send transactions, mint NFTs, bridge tokens, check compliance, subscribe to events, run timeseries forecasts, embed images and text, segment and detect objects, transcribe audio, and interact with AI models — all through the standard MCP tool interface.
The companion Tenzro Rust node MCP server (crates/tenzro-node/src/mcp/server.rs) registers 535 tools (Tenzro Ledger + multi-modal AI + distributed MoE serving + ERC-8004 calldata encoders + AgentBond/insurance + agent memory + app hosting + multi-tenant file storage) and is the authoritative tool inventory; this Python distributable exposes a subset over stdio + Streamable HTTP.
The Rust server also carries an RPC gateway pair — list_rpc_methods enumerates the JSON-RPC methods the node serves with how each is gated (admin token vs API-key scope), and call_rpc invokes anything you find there. The named tools cover the surfaces worth a dedicated schema; the node serves roughly 900 methods in total, so the gateway is how an agent reaches capability added since its tool list was built. Filter with namespace or contains — the unfiltered directory is ~900 entries. Authorization is unchanged: a gateway call passes the same gates as any other, so it reaches exactly what the presented credentials already allow.
Testnet endpoint: https://mcp.tenzro.xyz/mcp
Local: http://localhost:3001/mcp
Installation
pip install tenzro-mcp-server
Or from source:
git clone https://github.com/tenzro/tenzro-network.git
cd integrations/mcp
pip install .
Quick Start
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
Option A: Connect to live testnet
{
"mcpServers": {
"tenzro": {
"url": "https://mcp.tenzro.xyz/mcp"
}
}
}
Option B: Run locally
{
"mcpServers": {
"tenzro": {
"command": "tenzro-mcp-server"
}
}
}
Claude Code
Add to your project's .mcp.json:
Option A: Connect to live testnet
{
"mcpServers": {
"tenzro": {
"type": "url",
"url": "https://mcp.tenzro.xyz/mcp"
}
}
}
Option B: Run locally
{
"mcpServers": {
"tenzro": {
"type": "stdio",
"command": "tenzro-mcp-server"
}
}
}
Cursor / Windsurf / Other MCP Clients
Option A: Connect to live testnet
- Name: tenzro
- Transport: Streamable HTTP
- URL:
https://mcp.tenzro.xyz/mcp
Option B: Run locally
- Name: tenzro
- Command:
tenzro-mcp-server
Or with Streamable HTTP transport:
- URL:
http://localhost:3001/mcp - Start the server first:
tenzro-mcp-server --transport http --port 3001
Available Tools
The server exposes a Python subset across the categories below. The authoritative tool inventory lives on the Rust server (crates/tenzro-node/src/mcp/server.rs); consult that source for the complete list.
Authentication (OAuth 2.1 + DPoP + AAP)
The Tenzro Agent Access Protocol (AAP) layers seven aap_* claims on top of OAuth 2.1, DPoP-bound JWTs (RFC 9449), and Rich Authorization Requests (RFC 9396).
onboard_human— Provision adid:tenzro:human:*identity, FROST-Ed25519 threshold wallet, and access + refresh tokens (RFC 6749 + RFC 9449).onboard_delegated_agent— Issue an agent identity bound to a controller DID with a delegation scope.onboard_autonomous_agent— Issue a fully autonomous agent identity backed by a TNZO bond.refresh_token— Exchange a refresh token for a fresh access token (refresh tokens are not rotated in V1).link_wallet_for_auth— Mint a fresh access + refresh token pair against an existing FROST-Ed25519 threshold wallet.revoke_did— Cascade-invalidate every JWT minted under a DID and mark the identityRevoked.oauth_discovery— RFC 8414 Authorization Server Metadata discovery document.exchange_token— RFC 8693 OAuth 2.0 Token Exchange for delegated/impersonation flows.introspect_token— RFC 7662 OAuth 2.0 Token Introspection.
Pass dpop_jkt (RFC 7638 thumbprint of the holder's Ed25519 public key) to bind the issued token — every subsequent privileged call must then carry a fresh DPoP proof signed by the same key.
The RAR types the authorization server accepts are transfer, create_escrow, discharge_escrow, inference, stake, vote, contract, register_identity, and resource_invocation. The last of these is how a controller caps what its agent may spend on a marketplace resource: it takes a max_amount_per_call ceiling and optionally narrows to one resource class and a list of allowed_resource_ids. A controller that instead lists resource.invoke in the AAP oversight claim's requires_human_approval_for parks every paid invocation for review.
Wallet & Balance (7 tools)
get_balance— Get TNZO balance in weicreate_wallet— Provision a chain-agnostic 2-of-3 FROST-Ed25519 (RFC 9591) threshold wallet (no seed phrase). Tenzro wallets are not per-chain — a single wallet projects into EVM, SVM, and Canton via the pointer-token model, so there is nochainparameter. Usecross_vm_transfer/wrap_tnzofor VM-specific operations and the bridge tools (bridge_tokens, deBridge, Wormhole, Li.Fi) for sends to external chains.send_transaction— Send TNZO transfer via server-sidetenzro_signAndSendTransaction(live nonce + gas-price lookup; acceptsvalueoramountalias; rejects self-sends withcannot transfer to self)send_self_custody_transaction— Submit a transaction the caller signed itself. The node never sees the private key; it verifies the supplied signature against the transaction hash and broadcasts.request_faucet— Request testnet TNZO (24h cooldown). The amount is set by the node's genesis faucet config and reported in the response.token_balance— Get TNZO balance via token subsystemtotal_supply— Get total TNZO supply
Node & Blocks (10 tools)
get_node_status— Node health, block height, peers, uptime, roleget_block— Get block by height with transactionsget_block_range— Batch-fetch a contiguous range of blocks for catch-up sync (max 256/call; returnsnextHeight+moreAvailablefor pagination)get_transaction_receipt— Look up a transaction receipt by hash: sender, recipient, status, gas used, logsget_gas_price— Current effective gas price in wei (base fee + suggested tip)get_max_priority_fee_per_gas— Suggested EIP-1559 priority fee in weiget_fee_history— Base-fee history and gas-usage ratios over the last N blocksget_price— Read one or more asset prices from the node's price oraclelist_mandates— List the persisted AP2 mandates authorized by a controller DIDget_svm_cross_vm_program_info— Canonical Tenzro Cross-VM SVM-native program id and instruction layout
Identity (7 tools)
register_identity— Register human or machine DID via TDIPresolve_did— Resolve DID to identity info and delegation scoperevoke_did— Revoke a DID and cascade the revocation to every JWT minted under itforget_identity— GDPR Article 17 right-to-erasure. Hard-deletes aRevokedDID from the registry and persistent storage. The DID must already be inRevokedstatus; callrevoke_didfirst and allow the cascading broadcaster to propagate.set_delegation_scope— Set spending limits and allowed operations for machine DIDset_username— Set human-readable username for a DIDresolve_username— Resolve username to DID
Payments (11 tools)
create_payment_challenge— Create MPP, x402, or native payment challengeverify_payment— Verify payment credential and settle on-chainlist_payment_protocols— List supported payment protocolslist_x402_schemes— Discover registered x402 scheme adapters (tenzro-hybriddefault,exact-eip3009,permit2,erc7710)settle_payment— Execute immediate settlementcreate_escrow— Build & sign aCreateEscrowtransaction (consensus-mediated, gas: 75,000). VM derivesescrow_idand locks funds at a derived vault address.release_escrow— Build & sign aReleaseEscrowtransaction (payer-only, gas: 60,000)refund_escrow— Build & sign aRefundEscrowtransaction (after expiry, payer-only, gas: 50,000)get_escrow— Read an escrow record by id (callstenzro_getEscrow)open_payment_channel— Open micropayment channelclose_payment_channel— Close payment channel with final balance
x402 Bazaar (6 tools)
A discovery catalog over the x402 payment surface: sellers register paid resources, buyers browse and verify offers before paying.
x402_protocol_info— x402 protocol metadata and registered scheme adapters (tenzro-hybrid,exact-eip3009,permit2,erc7710)x402_register_resource— Register a paid resource listing (resource, scheme, network, asset, pay-to, max amount required, tags). Listing id is derived from(seller_did, resource), so re-registration is idempotent.x402_discover_resources— Browse listings, filtered by scheme / network / asset / tagsx402_deregister_resource— Remove a listing by id (seller-scoped)x402_verify_offer— Validate a payment requirement against the registered scheme adapters before a buyer commitsx402_payment_id— Derive the deterministic payment id for a settlement
AP2 v0.2 (Agent Payments Protocol)
ap2_sign_mandate— Sign acheckoutorpaymentmandate. The wallet bound tosigner_didsigns the canonical preimage with its Ed25519 key. Only AP2 v0.2"ed25519"alg is supported.ap2_verify_mandate— Verify a single Verifiable Digital Credential (VDC) envelope (checkout or payment mandate)ap2_validate_mandate_pair— Nested-ceiling validation of a checkout → payment mandate pair: AP2 CheckoutMandate constraints + TDIPDelegationScope(enforce_operation) + runtimeSpendingPolicy(SpendingPolicySnapshot::check) + on-chain escrow balance when the pair carries anescrow_id+ Stripe SPTusage_limitswhen it carries anspt_grant_id. An identifier that fails to resolve is a refusal, not a skip.ap2_protocol_info— AP2 protocol metadata and supported features
The ERC-8004 Trustless Agents calldata encoders (erc8004_encode_* / erc8004_decode_* for the Identity, Reputation, and Validation registries) are registered on the Rust node MCP server, not on this Python package. Agent registration itself happens through TDIP: a single register_machine_with_fee write mirrors into the EVM registry proxies and, when the operator has wired them, into the SVM and DAML backends. agentId is server-allocated by each backing registry (sequential uint256 on EVM, 32-byte Pubkey on SVM, 8-byte LE u64 on DAML) — never derivable client-side.
AI Models (16 tools)
list_models— List available AI modelschat_completion— Send chat completion request to a named modelroute_by_intent— Select a model from a use case plus budget, quality floor and cost-quality knob instead of naming one. Returns the model, tier, estimated cost, fallback chain, the difficulty cluster the prompt landed in, that model's observed error rate there, and the winning provider's address and endpoint when the offer came from another operator. Discovery only, though the per-DID budget gate and the wallet-balance ceiling still apply.chat_by_intent— Select and run in one call. Dispatch is pinned to the offer that was scored, so the price quoted is the price settled and the provider share goes to the address that offer named. The decision is attached underroute.record_route_outcome— Report how a routed call turned out (resolved/escalated/failed) so per-cluster error rates reflect what happened. In practice this carriesescalated; the other two are recorded from the dispatch itself.retained: falsemeans the node has no difficulty index and the report was discarded.route_difficulty_stats— Read the cluster map and a model's per-cluster outcome counters. An operator diagnostic;enabled: falsemeans the node routes on declared metadata alone.list_model_endpoints— List model service endpoints. Each endpoint carriesiroh_endpoint_id, the hex irohEndpointIdof the serving node (empty for local-only services); cross-node inference routes to it over thetenzro/inferALPN.get_provenance— Read the cached provenance manifest for generated content by content hash (the synthetic-content marker per EU AI Act Art. 50(2))get_trainer_daemon_status— Report the trainer auto-provisioning daemon statusdiscover_models— Discover models on networkdownload_model— Download model from registryserve_model— Start serving a model. Auto-clusters when one host cannot hold the model: reads the GGUF header for layer count and hidden dimension, discovers LAN members from gossipedClusterProfileannouncements, and runs a layer-wise pipeline across them. Passforce_singleto keep it on one host, orcluster_membersto override discovery.stop_model— Stop serving a modeldelete_model— Delete a downloaded modelget_download_progress— Check model download progresslist_providers— List registered providers
Multi-Modal AI (41 tools)
Per-modality list_*_catalog, list_*_models, load_*_model, unload_*_model, plus the modality verb. Catalogs draw from OnnxForecastEntry, OnnxVisionEntry, OnnxTextEmbeddingEntry, OnnxSegmentationEntry, OnnxTextSegmentationEntry, OnnxDetectionEntry, OnnxAudioEntry, and OnnxVideoEntry in tenzro-model.
Passing catalog_id to a loader inherits the structural parameters from the catalog entry and runs the license-tier check (Permissive / Attribution / CommercialCustom / NonCommercial) — a CommercialCustom entry such as DINOv3 or SAM is refused with JSON-RPC -32010 unless the node operator started tenzro-node accepting that license. Supplying the structural parameters explicitly skips the check. model_id on a loader is the id you register under; model_id on an inference call is that registered id, never the catalog id.
- Forecast —
list_forecast_catalog,list_forecast_models,load_forecast_model,unload_forecast_model,forecast(TimesFM 2.5 200M, TiRex 35M) - Vision —
list_vision_catalog,list_vision_models,load_vision_model,unload_vision_model,vision_embed,vision_similarity(CLIP ViT-B/32 + L/14, SigLIP base/224, SigLIP2 base/large/so400m, DINOv3 vits16/vitb16/vitl16) - Text Embedding —
list_text_embedding_catalog,list_text_embedding_models,load_text_embedding_model,unload_text_embedding_model,text_embed(Qwen3-Embedding 0.6B/4B/8B, EmbeddingGemma-300M Matryoshka, BGE-M3, ModernBERT-embed base/large) - Segmentation —
list_segmentation_catalog,list_segmentation_models,load_segmentation_model,unload_segmentation_model,segment(SAM 2 base/large, EdgeSAM, MobileSAM — point and box prompts) - Text-Promptable Segmentation —
list_text_segmentation_catalog,list_text_segmentation_models,load_text_segmentation_model,unload_text_segmentation_model,text_segment(SAM 3 ViT-H — open-vocabulary noun phrases, its own runtime and decoder ABI) - Detection —
list_detection_catalog,list_detection_models,load_detection_model,unload_detection_model,detect(RF-DETR n/s/m/b/l/2xl, D-FINE n/s/m/l/x) - Audio (ASR) —
list_audio_catalog,list_audio_models,load_audio_model,unload_audio_model,transcribe(Moonshine tiny/base, Distil-Whisper small.en/medium.en/large-v3, Whisper-large-v3-turbo, Parakeet-TDT-0.6B-v3, Canary-1B-Flash) - Video —
list_video_catalog,list_video_models,load_video_model,unload_video_model,video_embed(V-JEPA 2 ViT-L/H/g in the catalog;load_video_modelregisters aVisionFallbackVideoEncoderover an already-loaded image encoder, so it takesvision_model_id+num_framesrather than a path)
Staking & Governance (7 tools)
stake_tokens— Stake TNZO as Validator, ModelProvider, or TeeProviderunstake_tokens— Unstake TNZO (initiates unbonding)register_provider— Register as network providerget_provider_stats— Get provider statisticslist_proposals— List active governance proposalsvote_on_proposal— Vote on a proposal (for/against/abstain)get_voting_power— Get voting power based on staked TNZO
Validator Registry (4 tools)
get_validator_state— Read one validator's registry recordlist_validators— List every validator known to the registrylist_active_validators— List the validators in the active set for the current epochrotate_validator_key— Rotate a validator's signing key without leaving the active set
Bridge (5 tools)
bridge_tokens— Bridge tokens via LayerZero, CCIP, or deBridgeget_bridge_routes— Get available routes with fees and timinglist_bridge_adapters— List bridge adaptersbridge_quote— Get bridge fee quotebridge_with_hook— Bridge with post-delivery hook
Tokens (7 tools)
create_token— Create ERC-20 token via factoryget_token_info— Look up token by symbol, address, or IDlist_tokens— List registered tokensdeploy_contract— Deploy bytecode to EVM/SVM/DAMLcross_vm_transfer— Atomic cross-VM token transferwrap_tnzo— Wrap native TNZO to VM representationget_token_balance— Get TNZO balance across all VMs
Tasks (7 tools)
post_task— Post task to marketplacelist_tasks— List tasks by type or statusget_task— Get task detailsquote_task— Submit price quote for a taskassign_task— Assign task to agentcomplete_task— Mark task complete with resultcancel_task— Cancel a task
Agents (9 tools)
register_agent— Register AI agent with capabilitiessend_agent_message— Send inter-agent message via A2Aspawn_agent— Spawn child agentcreate_swarm— Create multi-agent swarmget_swarm_status— Get swarm statusterminate_swarm— Terminate swarmlist_agents— List all registered agentsget_agent_info— Get agent detailsderegister_agent— Deregister an agent
Capability Registry (4 tools)
list_capabilities— List every capability registered on this nodeget_capability_attestations— Fetch attestations backing a capability claimget_agent_capability_attestations— Fetch every attestation issued for one agentfind_best_agent_for_capability— Pick the best agent for a capability
Agent Templates (7 tools)
register_agent_template— Register reusable templatelist_agent_templates— List available templatesget_agent_template— Get template detailssearch_agent_templates— Search by name or descriptionspawn_from_template— Spawn agent from templaterate_template— Rate template (1-5 stars)get_template_stats— Get template usage stats
NFTs (6 tools)
create_nft_collection— Create ERC-721 or ERC-1155 collectionmint_nft— Mint NFT in collectiontransfer_nft— Transfer NFT ownershipget_nft_info— Query collection or token infolist_nft_collections— List NFT collectionsregister_nft_pointer— Register cross-VM NFT pointer
Compliance (3 tools)
check_compliance— Check if transfer is compliantregister_compliance— Register compliance rulesfreeze_address— Freeze address for compliance
Canton / DAML (Canton 3.5+ JSON Ledger API)
Canton is an operator-brokered resource: the ledger sits outside Tenzro and
the node reaches it with credentials the operator supplies. Every tool here
needs an API key with the canton scope, set as TENZRO_API_KEY. A node
serves each Canton network independently and a key is authorized for a
subset of them — set TENZRO_CANTON_NETWORK to devnet or mainnet and
the client merges it into each call as canton_network. A key authorizing
exactly one network needs no selector; a key authorizing more than one and
given none returns -32004 naming the authorized set.
Each key carries a tier bounding its budget over a sliding 60-second
window: free at 60 requests/min with writes refused, standard at 600,
priority at 6,000. Over-budget returns -32005 with retry_after_ms,
requests_per_minute, and tier.
Keys gate operator-brokered resources only. Publishing to the marketplace registry — agents, skills, workflows, MCP servers — is permissionless, priced by the provider in TNZO or offered free, and needs no operator approval.
Reads:
canton_list_domains— List Canton synchronization domains the node is configured againstcanton_list_contracts— Active-contracts query withtemplate_idsfilter (Canton 3.5+ requires a non-empty filter; the node attaches the resolved FQ party id automatically)canton_list_parties—GET /v2/parties/knowncanton_list_packages—GET /v2/packages— installed DAR package idscanton_health— combined/livez+/readyz+/v2/versionprobecanton_version—GET /v2/version— participant version + CIP feature flags (verified Canton 3.5.1)canton_get_my_user— Canton user record for the calling principal (CIP-26 User Management)canton_coin_balance— CIP-56 Canton Coin balance (sums everySplice.Amulet:Amuletcontract the party signs)canton_fee_schedule— latestSplice.AmuletRules:AmuletRulesactive contractcanton_connected_synchronizers—GET /v2/state/connected-synchronizers— currently-subscribed synchronizers with permission classescanton_get_transaction—GET /v2/updates/transaction-tree-by-id/{hex}?requestingParties=...
Writes:
canton_submit_command— DAMLcreate/exercisevia the JSON Ledger API submit-and-wait path. When the presenting API key carries a boundcanton_user_id, the node forwardsactAsas that user'sprimaryParty, scoping the submission to the tenant. Canton's AuthService enforces per-user CanActAs rights server-side.canton_allocate_party—POST /v2/parties— returns the fully-qualified party id<hint>::<participant-hash>canton_grant_user_rights—POST /v2/users/{userId}/rights— grant CanActAs / CanReadAs on a party to a tenant's user (CIP-26). Required before a newly-allocated party can be acted on.canton_list_user_rights—GET /v2/users/{userId}/rights— inspect what a tenant can act/read as.canton_upload_dar— DAR upload viaPOST /v2/packageswith a singleContent-Type: application/octet-streamheader (Canton 3.5+ rejects duplicates). Legacy/admin/packages/upload-daris NOT used — that's gRPC-only and not exposed on the Tenzro-operated DevNet.
Per-tenant analytics:
canton_get_my_analytics— Subject self-read: per-tenant call counters for the API key configured on this client. Returns{key_id, canton_user_id, calls_total, errors_total, calls_by_method, errors_by_method, first_seen_at, last_called_at}.canton_list_api_key_analytics— Operator admin-read: every tenant's counters (admin-token-gated). Optionalkey_idfilter.
Node-scoped equivalents that go through the node's own Canton adapter rather than the tenant-scoped path: list_canton_domains, list_daml_contracts, submit_daml_create, submit_daml_exercise.
Verification (1 tool)
verify_zk_proof— Verify Plonky3 STARK proof over the KoalaBear field; requirescircuit_id∈ {inference, settlement, identity} and 4-byte LE field-chunk public inputs
Tenzro Train (1 tool)
get_trainer_daemon_status— Report the node's trainer auto-provisioning daemon: running state, trainer DID, live trainer subprocess count, and concurrent-trainer ceiling
Events (3 tools)
get_events— Query historical eventssubscribe_events— Subscribe to real-time eventsregister_webhook— Register webhook for notifications
Join (1 tool)
join_as_participant— Join network as MicroNode
Skills Registry (5 tools)
list_skills— List registered skillsregister_skill— Register new skillsearch_skills— Search by keyword or tagget_skill— Get skill detailsuse_skill— Invoke a skill
Tools Registry (5 tools)
list_registered_tools— List registered MCP toolsregister_tool— Register MCP server endpointsearch_tools— Search tools by keywordget_tool_info— Get tool detailsuse_registered_tool— Invoke a registered tool
Hardware (1 tool)
get_hardware_profile— Detect hardware capabilities
Usage (2 tools)
get_skill_usage— Get skill usage statisticsget_tool_usage— Get tool usage statistics
Crypto (9 tools)
sign_message— Sign message with Ed25519 or Secp256k1verify_signature— Verify signatureencrypt_data— AES-256-GCM encryptiondecrypt_data— AES-256-GCM decryptionderive_key— Derive child key from seedgenerate_keypair— Generate new keypairhash_sha256— Compute SHA-256 hashhash_keccak256— Compute Keccak-256 hashx25519_key_exchange— X25519 Diffie-Hellman key exchange
TEE (6 tools)
detect_tee— Detect available TEE hardwareget_tee_attestation— Get TEE attestation quoteverify_tee_attestation_rpc— Verify attestation quoteseal_data— Seal data inside TEE enclaveunseal_data— Unseal TEE-sealed datalist_tee_providers— List registered TEE providers
ZK (2 tools)
create_zk_proof— Create a Plonky3 STARK proof over KoalaBear (inference,settlement,identitycircuits)list_zk_circuits— List available ZK circuits
Custody (9 tools)
create_mpc_wallet— Create FROST-Ed25519 (RFC 9591) threshold walletexport_keystore— Export encrypted keystoreimport_keystore— Import from keystoreget_key_shares— Get FROST-Ed25519 secret share configurationrotate_keys— Rotate FROST-Ed25519 secret sharesset_spending_limits— Set daily and per-tx limitsget_spending_limits— Get spending limits and usageauthorize_session— Create time-limited session keyrevoke_session— Revoke active session key
App (6 tools)
register_app— Register a developer app in the on-chain app registry (developer-signed DID envelope; app wallet is the developer's own TNZO treasury)set_app_status— Activate or deactivate a registered appget_app— Look up a registered app by idlist_apps— List apps in the on-chain app registrysettle_authorized— Execute a developer-signed settlement authorizationget_settle_authorized_outcome— Fetch the recorded outcome for a settlement authorization
Contract Encoding (2 tools)
encode_function— ABI-encode smart contract function calldecode_result— ABI-decode return data
Streaming (2 tools)
chat_stream— Stream chat completion token by tokensubscribe_events_stream— Subscribe to events via streaming
deBridge Cross-Chain (5 tools)
debridge_search_tokens— Search tokens on deBridge DLNdebridge_get_chains— Get supported chainsdebridge_get_instructions— Get operational instructionsdebridge_create_tx— Create cross-chain transactiondebridge_same_chain_swap— Execute same-chain swap
Capital Intent (regulated capital allocation)
capital_intent_open— Open a signed Capital Intent (capital-markets analog of an AP2 Intent Mandate)capital_intent_quote— Solver submits a bid against an opened intentcapital_intent_assign— Auto-rank by ERC-8004 reputation, price, ETAcapital_intent_execute— Execute a legcapital_intent_verify— Verify a stepcapital_intent_compensate— Roll back a stepcapital_intent_settle— Release escrow to the payeeget_capital_intent— Read intent statesubmit_reserve_attestation— 1:1 backing attestationget_reserve— Read latest reserve attestationattested_mint— Token issuance gated by a fresh reserve attestation
Multi-party workflows (8 tools)
workflow_open— Declare a saga workflow with ordered stepsworkflow_step_execute— Transition step Pending → Executing (with optional per-step escrow)workflow_step_verify— Verify a step's outcomeworkflow_step_compensate— Roll back a stepworkflow_set_step_deadline— Set or clear a step's execution deadlineworkflow_finalize— Emit on-chain WorkflowReceiptget_workflow_saga— Read the saga state: steps, statuses, escrows, participantsverify_did_envelope— Verify a DID-signed step payload
EVM-side primitives (EIP-7702 / Permit2 / Secure-Mint)
eip7702_signing_hash,eip7702_build_designator,eip7702_parse_designator,eip7702_protocol_info— Pectra Type-4 authorization hashing and the 23-byte0xef0100 || addr20delegation designatorpermit2_domain_separator,permit2_digest,permit2_verify_and_consume,permit2_nonce_used— Permit2 SignatureTransfer (optional witness for cross-chain intent origin opens)set_secure_mint_policy,get_secure_mint_policy,clear_secure_mint_policy,secure_mint_check,secure_mint_apply,secure_mint_record_burn,set_secure_mint_paused,set_global_issuance_pause— per-token 1:1 reserve-attestation invariant for tokenized RWAs (token-keyed; fail-closed gate order with freshness/heartbeat/velocity guards; per-token + global issuance circuit breakers)
Chain-agnostic discovery (CAIP)
caip2,caip10,caip19— Canonical Tenzro CAIP identifiers per the submittedtenzronamespace spec (ChainAgnostic/namespaces#184). CAIP-2 reference is the lowercase hex of the first 16 bytes of the genesis block hash; CAIP-19 supportsslip44/token/nftasset namespaces.
Hyperlane V3 (4 tools)
hyperlane_list_chains— Chain domains the Hyperlane adapter recognizeshyperlane_quote_dispatch— Quote the interchain gas payment for a dispatchhyperlane_dispatch— Dispatch a message through the Mailboxhyperlane_get_message— Read a dispatched message by id
Axelar GMP (4 tools)
axelar_list_chains— Canonical Axelar chain identifiers the adapter recognizesaxelar_call_contract— General Message Passing call to a contract on another chainaxelar_pay_gas— Pre-pay the Gas Service for a GMP callaxelar_get_message— Read a GMP message by payload hash
Babylon Bitcoin Staking (6 tools)
babylon_register_finality_provider— Register a Tenzro validator as a Babylon finality providerbabylon_get_finality_provider— Read one finality provider's recordbabylon_list_finality_providers— List registered finality providersbabylon_total_stake_for_provider— Aggregate delegated BTC stake for a providerbabylon_submit_finality_signature— Submit an EOTS finality signature over a Tenzro block hashbabylon_list_delegations— List BTC delegations tracked by the adapter
Bridge fees, sponsorship, and analytics (7 tools)
wormhole_ntt_list_chains— Chains the Wormhole NTT path coversquote_bridge_fee_in_tnzo— Quote a bridge fee denominated in TNZOset_bridge_fee_rate— Set the fee rate applied to a bridge lanelist_bridge_sponsorship_pools— List pools that can cover a user's bridge feesponsor_bridge_fee— Draw a bridge fee from a sponsorship poolset_sponsorship_refill_threshold— Set the balance at which a sponsorship pool refillsget_bridge_analytics/list_bridge_analytics— Per-lane and fleet-wide bridge counters
Stable-Asset Issuance (4 tools)
register_stable_asset— Register a reserve-backed asset with its issuance policyget_stable_asset— Read a registered stable assetmint_stable_asset— Mint against attested reservesredeem_stable_asset— Redeem and decrement circulating supply
Regulated-asset controls (7 tools)
urwa_is_kill_switched— Whether a token is under a kill switchurwa_trigger_kill_switch/urwa_clear_kill_switch— Halt and resume transfers for a tokenurwa_get_frozen_tokens/urwa_set_frozen_tokens— Read and set the frozen balance on a holderivms101_canonical_hash— Canonical hash of an IVMS 101 originator/beneficiary record for travel-rule messagingattested_clock_now— Attested wall-clock reading for time-bound compliance checks
Signed agent cards (1 tool)
signed_agent_card_canonical_hash— Canonical hash of an A2A Agent Card, the preimage a publisher signs
Decentralized Storage (6 tools)
storage_store_object— Store an object with an erasure-coded redundancy schemestorage_open_deal— Open a streaming deal (renter pre-funds total epochs from deposit)storage_charge_epoch— Run one proof-of-retrievability-gated charge epochstorage_get_deal— Look up a storage deal by idstorage_set_pricing— Set the byte-epoch pricing policy (fixed or network-dynamic)storage_status— Read this node's storage-provider status
Compute Rental (5 tools)
compute_book_rental— Book a rental (renter pre-funds total epochs from deposit)compute_settle_epoch— Settle one epoch, gated on the provider's availability proofcompute_get_rental— Look up a compute rental by idcompute_set_pricing— Set the per-epoch pricing policy (fixed or network-dynamic)compute_status— Read this node's compute-rental status
Distributed MoE Serving (8 tools)
moe_shard_map— Providers holding each (layer, expert), replication, hot / under-replicated experts, role countsmoe_plan_dispatch— Build a dispatch plan from per-token top-k routing decisionsmoe_replication_policy— Read the governance-tuned replication policymoe_catalog_shape— Read the catalog-side MoE topology for a modelmoe_prepare_experts— Slice a checkpoint into per-expert blobs, optionally block-quantizing each projection (q4_k_m/q8_0/q4_k/q6_kpreset or a per-projectiongate/up/downmix), and publish them for holders; returns ajob_idmoe_prepare_status— Poll a preparation job for its state and prepared per-expert blob URIsmoe_expert_status— Resident experts / gates with residency tier (memory/disk), byte footprint, memory budget, and GPU-active flagmoe_forward— Run one distributed MoE layer forward: gate locally, fan experts out to holders, combine gate-weighted outputs
Treasury Multisig (3 tools)
treasury_approve_withdrawal— Approve a treasury withdrawal with a signed approval (Ed25519 or Secp256k1 over thetenzro/treasury/withdrawal-approvalpreimage)treasury_execute_withdrawal— Execute a withdrawal once approvals reach the thresholdtreasury_get_pending_withdrawal— Read a pending withdrawal: approvers, approvals, threshold
Treasury config mutations (add/remove withdrawer, threshold) are admin-token-gated RPCs reserved for the node operator and are not exposed as MCP tools.
Local Discovery & LAN Clustering (5 tools)
local_peers— Peers discovered on this node's local segment via mDNSnode_reachability— Sustained connectivity tier (direct/relay_only/unreachable)node_profile— Hardware self-profile: build commit, CPU arch, OS, devices, derived serving capacity / backend / capability keycluster_plan— Deterministic layer-wise LAN cluster placement for a model across candidate memberscluster_preview— Dry-run a placement against the currently discovered members without committing it
Managed Databases (11 tools)
An engine-agnostic protocol layer over persistent state. A node either holds a thin stateless client to an operator-run engine (PostgreSQL / Qdrant / Valkey via URL config) or serves an embedded engine in-process (Lance / Tantivy). Milvus and Dgraph are catalog-only until a driver is linked. Placement is local, lan_cluster, or network; query bodies are per-engine dialects (SQL, vector search, full-text, command array).
list_database_engines— The engine catalog with placement modes and driver statuscreate_database— Create a database from a descriptor (engine, placement, access policy, optional confidential seal)get_database— Read a database descriptor by idlist_databases— List databases on this nodelist_database_partitions— List partitions for a databaseget_database_partition— Read a single partition by indexissue_database_connection— Mint a scoped connection to the backing enginedatabase_query— Run an engine-native query (SQL / vector / full-text / command array)authorize_database_read— Grant a reader access under the database's access policyrescale_database— Change partition/replica countdrop_database— Delete a database and its partitions
Ecosystem MCP Servers
In addition to the main Tenzro MCP server, the node runs specialized servers for direct blockchain interaction:
| Server | Port | Endpoint | Description |
|---|---|---|---|
| Tenzro | 3001 | /mcp |
535 tools — Tenzro Ledger + multi-modal AI (forecast, vision, text-embed, segmentation, detection, audio ASR, video) + distributed MoE serving + AgentBond/insurance + agent memory + app hosting |
| Solana | 3003 | /mcp |
14 tools — Jupiter swaps, SPL tokens, Metaplex NFTs, SNS, staking |
| Ethereum | 3004 | /mcp |
17 tools — Chainlink feeds, ENS, ERC-20, EAS, ERC-8004 |
| Canton | 3005 | /mcp |
23 tools — Canton 3.5+ JSON Ledger API (active-contracts queries with live offset + FQ party id, party / package / connected-synchronizer / version / health reads, CIP-56 Canton Coin balance, AmuletRules fee schedule, DAR upload via /v2/packages, submit-and-wait DAML commands, DvP settlement) |
| LayerZero | 3006 | /mcp |
21 tools — V2 messaging, OFT, Stargate V2, Value Transfer API |
| Chainlink | 3007 | /mcp |
21 tools — CCIP, data feeds, Data Streams, VRF v2.5, PoR, automation, Functions |
| Li.Fi | 3008 | /mcp |
9 tools — cross-chain aggregation, quotes, routes, status |
Programmatic Usage
TypeScript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://mcp.tenzro.xyz/mcp"),
);
const client = new Client({ name: "my-app", version: "1.0.0" }, {});
await client.connect(transport);
// List all tools
const tools = await client.listTools();
console.log(`${tools.tools.length} tools available`);
// Check balance
const balance = await client.callTool({
name: "get_balance",
arguments: { address: "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD68" },
});
// Mint an NFT
const nft = await client.callTool({
name: "mint_nft",
arguments: {
collection_id: "0xabc...",
to: "0x742d...",
token_id: 1,
uri: "ipfs://Qm...",
},
});
Python
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client("https://mcp.tenzro.xyz/mcp") as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# List tools
tools = await session.list_tools()
print(f"{len(tools.tools)} tools available")
# Check compliance before transfer
compliance = await session.call_tool(
"check_compliance",
arguments={
"token_id": "0xtoken...",
"from": "0xsender...",
"to": "0xrecipient...",
"amount": "1000000",
},
)
curl
# Initialize
curl -s -X POST https://mcp.tenzro.xyz/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}'
# List tools
curl -s -X POST https://mcp.tenzro.xyz/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# Call a tool
curl -s -X POST https://mcp.tenzro.xyz/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_node_status","arguments":{}}}'
Running the Server
stdio (Claude Desktop, Cursor)
tenzro-mcp-server
Streamable HTTP
tenzro-mcp-server --transport http --port 3001
Test the server
curl -s -X POST http://localhost:3001/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
Configuration
| Variable | Default | Description |
|---|---|---|
TENZRO_RPC_URL |
https://rpc.tenzro.xyz |
Tenzro JSON-RPC endpoint |
TENZRO_API_URL |
https://api.tenzro.xyz |
Tenzro Web API endpoint |
TENZRO_BEARER_JWT |
unset | OAuth 2.1 access token forwarded as Authorization: Bearer |
TENZRO_DPOP_PROOF |
unset | DPoP proof forwarded as the DPoP header, binding the token to a key |
TENZRO_API_KEY |
unset | Operator-issued tnz_... key forwarded as X-Tenzro-Api-Key |
TENZRO_CANTON_NETWORK |
unset | Canton network selector forwarded as X-Canton-Network |
Command-line options:
| Flag | Default | Description |
|---|---|---|
--transport |
stdio |
Transport type (stdio or http) |
--port |
3001 |
HTTP server port (when using http transport) |
Protocol Details
- MCP Version: 2025-11-25
- Transport: Streamable HTTP (stateless JSON mode)
- Content Types:
application/json,text/event-stream - Framework: fastmcp
Related
| Resource | URL |
|---|---|
| Tenzro Network | tenzro.com |
| A2A Server | github.com/tenzro/tenzro-network |
| MCP Specification | modelcontextprotocol.io |
Contact
- Website: tenzro.com
- Engineering: eng@tenzro.com
- GitHub: github.com/tenzro
Owner-proof on resource mutations
Several tools that previously took only an identifier now also require a signed
DID envelope proving control of the resource. An identifier is not a credential:
a jti travels in every audit row, a webhook_id comes back from every list
call, and a session_id is a handle the node hands back.
| Tool | Proof required |
|---|---|
revoke_did |
operator admin token and an envelope from the DID (or a machine's controller) |
register_webhook |
owner_did plus an envelope over the URL |
authorize_session / revoke_session |
envelope from the DID that owns the wallet |
Each envelope is bound to the method name and to that call's parameters, so one produced for a given action cannot be replayed as another.
License
Apache 2.0. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tenzro_mcp_server-0.1.0.tar.gz.
File metadata
- Download URL: tenzro_mcp_server-0.1.0.tar.gz
- Upload date:
- Size: 192.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73ee922b4c1d6c8b8e23c515a32cba673b6cbf5095219bc22d72bd72bc31ce44
|
|
| MD5 |
fcabbab6a584b3a3667571eec9cc7224
|
|
| BLAKE2b-256 |
677aaf704e0231b8b0f82c4c734ee703edae5e45e2f80c6b3c280b6a69228636
|
File details
Details for the file tenzro_mcp_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tenzro_mcp_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 74.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2f6dc4805ceeb01a43694393af1b0306a14c40b841f6604a7bff6d71b0ecf83
|
|
| MD5 |
d7e6558ba4d776e03c53a5ebc5e2d5a3
|
|
| BLAKE2b-256 |
0d1c9d8b4865572812990b15f1586c43e85f34d9fdfe0d36fe10cbd30db801b0
|