veya_describe
Service info: AES-256-GCM sealed execution and the selected settlement profile
Takes no parameters.

io.github.veyanetPublished by GitHub account veyanetv1.2.8Updated Nov 4, 2026
Check, limit, record and prove AI agent actions with 2-of-3 validators and onchain proofs.
VEYA lets an assistant hash, prove and verify agent actions, run post-quantum crypto helpers, and anchor commitments on Robinhood Chain.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.veyanet%2Fveya/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"veya": {
"type": "http",
"url": "https://mcp.veyanet.tech/mcp",
"headers": {
"Authorization": "Bearer <YOUR_TOKEN>"
}
}
}
}The official Model Context Protocol server for post-quantum agent tools, chain verification, sealed-execution service info, and protocol settlement on Robinhood Chain.
[License: MIT] [Package] [Node Version] [TypeScript] [MCP Endpoint]
Official Website • X (Twitter) • Public MCP URL • Documentation Index • Network Specifications • Security Policy
The VEYA Protocol is a cryptographically shielded execution layer engineered for post-quantum resilient autonomous agent fleets on Robinhood Chain. Traditional LLM agent frameworks suffer from severe structural vulnerabilities: because agents require private execution contexts—such as API integration credentials, proprietary system prompts, treasury authority, and policy rules—running them in standard host runtimes exposes sensitive state in plaintext to host operators, database administrators, and network intermediaries.
VEYA solves this security gap by establishing client-side cryptographic boundaries and post-quantum attestation primitives. Sensitive agent workloads are protected through local post-quantum key generation (ML-DSA-44), quantum-resistant session negotiation (Kyber-768), high-throughput cryptographic digests (BLAKE3-256), sealed execution with AES-256-GCM, and 2-of-3 multi-node consensus. This tree defaults to Mainnet. Veya.sol there is the protocol contract 0x87dC582eEA544A434a5C1e30Ca3d12c1e548a674. ROBINHOOD_NETWORK=testnet keeps Testnet.
The @veyanet/mcp package is the canonical Model Context Protocol surface for VEYA — the full agent-facing tool set. It speaks Streamable HTTP so Claude, Cursor, and other MCP clients can paste a single URL and invoke crypto, fleet, registry, product API, and own-wallet on-chain write tools without cloning @veyanet/sdk. Cryptography, chain-id guards, and receipt parsing are delegated to @veyanet/sdk; this package owns the HTTP transport, tool registration, product apiKey forwarding, and the public service info.
By connecting an MCP client to @veyanet/mcp, you enable the following core capabilities:
https://mcp.veyanet.tech/mcp (Streamable HTTP).Veya.sol txs, PQ crypto, registry, product sessions via https://api.veyanet.tech.veya_dev_ / veya_live_) and your funded wallet. The hosted signer is not the gas payer.@veyanet/sdk. The default profile is Mainnet. Testnet is ROBINHOOD_NETWORK=testnet.https://api.veyanet.tech).The design of @veyanet/mcp is governed by the paradigm of Thin Protocol Gate over Thick Cryptographic Client. In naive MCP servers, business logic, secrets, and chain writes are mixed into tool handlers with soft auth. VEYA separates those concerns: the MCP process is a transport and policy shell; @veyanet/sdk remains the cryptographic engine that executes hashing, verification, and EvmAnchor writes.
This core philosophy is implemented through three primary architectural pillars:
Public users and agent runtimes connect with a single URL. The server implements MCP Streamable HTTP (POST /mcp) using @modelcontextprotocol/sdk.
On-chain write tools are always registered. Product writes need a product apiKey and your payerPrivateKey. veya_prove is separate: a read needs no key, and an anchor needs environmentId plus payerPrivateKey only. msg.sender is your address. An empty wallet returns: Mainnet: 'Your wallet has no ETH on Robinhood Chain.' Testnet: 'You don't have testnet tokens. Please get them for the transaction.'
GET /health and veya_describe name the selected profile, sealed = AES-256-GCM, and whether writes are enabled. The default profile is Mainnet. Quorum is matching hashes; unreachable nodes return consensus_reached: false. Veya.sol is a protocol contract.
The following diagram illustrates how @veyanet/mcp accepts Streamable HTTP tool calls, gates writes, and settles through @veyanet/sdk onto Robinhood Chain:
Paste into Claude / Cursor (Streamable HTTP):
Optional TypeScript library:
Starts a Streamable HTTP server. After TLS, point clients at your public HTTPS connector. Keep PUBLIC_MCP_URL=https://mcp.veyanet.tech/mcp as the product paste URL in docs and landing. See docs/DEPLOYMENT.md.
https://api.veyanet.tech@veyanet/sdk from npmThe process loads configuration from environment variables. Unset ROBINHOOD_NETWORK is Mainnet. ROBINHOOD_NETWORK=testnet is Testnet. Copy .env.example to .env for local overrides. Never commit .env.
Parameters resolve from process environment first, then the Mainnet profile (PUBLIC_MCP_URL=https://mcp.veyanet.tech/mcp). Testnet is ROBINHOOD_NETWORK=testnet. Addresses are in docs/NETWORK_PIN.md.
Host-only settings (fleet URLs and host signing keys) are covered in the operator guide, docs/DEPLOYMENT.md. Public users never set them.
Paste into a custom MCP connector using Streamable HTTP transport:
No API key is required for public tools, including veya_prove. Product tools need apiKey. Product on-chain writes need that key plus your funded wallet. An anchor through veya_prove needs environmentId and payerPrivateKey only.
Settings → MCP → Add custom MCP server / connector → URL:
GET https://mcp.veyanet.tech/ returns an info page (overview, capabilities, API key steps). Opening https://mcp.veyanet.tech/mcp in a browser shows setup for Cursor, Claude Code and Codex, plus an FAQ. Health: https://mcp.veyanet.tech/health. Product docs: https://veyanet.tech/mcp. Product API: https://api.veyanet.tech.
@veyanet/mcp 1.2.11 exposes the full agent surface. Full schemas: docs/TOOLS.md. Reads need no key. Product tools need a site API key. Product on-chain writes spend your wallet and also need that API key. veya_prove does not. veya_seal_decision seals an evidence id and a decision. The receipt is written when that call passes payerPrivateKey, or when VEYA_SEAL_DECISION_RELAYER=1.
One proof from text, a JSON string, or a receipt hash. Paste https://mcp.veyanet.tech/mcp in Cursor before the run, or the tool is not in the agent's tool list. The URL accepts POST. The response is a stream (event: message and a data: line).
A read sends nothing:
Text hello returns mode digest, anchored false, and digest ea8f163db38682925e4491c5e58d4bb3506ef8c14eb78a86e908c5624a67200f.
An anchor sends one storeCommitment from the wallet in payerPrivateKey. It does not use a product apiKey, and it does not use the host signer. The environment id must already exist on Veya.sol. This one does: 7d0af0ba-2ae3-4d0e-bc75-0bbaccb3dd71. A 32-hex bytes16 also parses. A hyphenated id must be a real UUID, so 00000000-0000-0000-0000-000000000001 is refused.
A receipt with no VEYA log and a receipt that called another contract both return the full proof object: ok false, mode refused, inputKind tx, anchored false, plus txHash, explorerUrl, and refusal.
Returns the service info: package name @veyanet/mcp, public URL, settlement, product API, sealed = AES-256-GCM, write policy.
Always registered. Explains own-wallet writes: product apiKey + your wallet. Empty wallet message is included.
Uses @veyanet/sdk VeyaClient.pingChain() against the selected profile and returns block metadata.
Parses Veya.sol receipt events via SDK verifyTransaction (CommitmentStored / ExecutionAttested / related). Use a real Robinhood explorer hash.
Example testnet commitment tx:
Computes a BLAKE3-256 hex digest through the SDK. Useful before an authenticated veya_store_commitment or for local commitment previews.
GET {VEYA_API_URL}/health (default https://api.veyanet.tech/health). Returns HTTP status and JSON body, including fleet status.
Always available. msg.sender is your wallet, not the hosted signer.
Writes go through SDK EvmAnchor, which calls ensureRobinhoodChain() before submit so a mis-pointed RPC cannot silently land on another EVM. If the wallet has no ETH: Mainnet: 'Your wallet has no ETH on Robinhood Chain.' Testnet: 'You don't have testnet tokens. Please get them for the transaction.'
An agent calls a metered x402 resource through one guarded tool. VEYA checks the call against a fixed policy before anything is signed, checks your API key and both wallet balances, pays exactly the approved quote from your Solana wallet, verifies the payment on Solana at finalized, gets 2-of-3 validator signatures, anchors a commitment on Veya.sol from your Robinhood Chain address and saves the run to your VEYA account. A blocked call is never signed and moves no money. The same idempotencyKey never pays twice. Every run gets a receipt at /receipts/paid/<runId>. Receipt links are public: anyone with the link can read the proof, and a receipt never holds keys, your apiKey or your input. Every refusal returns decision: "blocked", a stable code and payment: null. veya_paid_discover shows the per-call cap, the task budget maximum (0.04 USDC) and default, and for each resource the provider quote and the total charged to your task budget. See docs/PAID_CALLS.md.
Try it from any MCP client connected to https://mcp.veyanet.tech/mcp:
veya_paid_discover to see allowed resources, input fields and a live quote.veya_paid_call with taskId, a new idempotencyKey, resourceId, input, your apiKey, your Solana secret key in solanaPrivateKey and your Robinhood Chain key in robinhoodPrivateKey.veya_paid_run with your apiKey lists the runs saved to your account.Keys are used in memory for that one call and never stored, logged or returned. Use dedicated wallets: a little USDC and SOL on Solana, a little ETH on Robinhood Chain. A missing value returns API_KEY_REQUIRED, SOLANA_KEY_REQUIRED or ROBINHOOD_KEY_REQUIRED and nothing happens. Servers without VEYA_PAID_CALLS=1 list 51 tools; with it, 54. Guide: docs/PAID_CALLS.md.
https://mcp.veyanet.tech/mcp.veya_prove with { "text": "hello" }.veya_describe.veya_ping_chain and confirm the profile is the one you selected.In another terminal:
Smoke starts an in-process server, performs MCP initialize + tools/list, then calls veya_describe and veya_ping_chain against live RPC.
These tools need a product apiKey. veya_prove does not. An anchor on veya_prove is environmentId plus payerPrivateKey only.
veya_dev_ / veya_live_ key at app.veyanet.tech: connect your wallet, open System → API Keys, and create a Dev (veya_dev_…) or Live (veya_live_…) key. The key is shown once.VEYA_PAYER_PRIVATE_KEY on a self-hosted server, or pass payerPrivateKey on the tool. The public veya_prove tool reads only the argument.veya_store_commitment (or veya_anchor_proof) with apiKey.from in the result is your address, and open the explorer txHash.Mainnet: 'Your wallet has no ETH on Robinhood Chain.' Testnet: 'You don't have testnet tokens. Please get them for the transaction.'CORS_ORIGIN is an allowlist. Empty allowlist rejects credentialed browser Origin values. Server-to-server MCP clients (no Origin) are unaffected.
apiKey from the product site (X-Api-Key toward api.veyanet.tech).apiKey plus your payerPrivateKey. from is your address./health or success payloads.CHAIN_MISMATCH (fail closed).apiKey → { "error": "apiKey required" }.Mainnet: 'Your wallet has no ETH on Robinhood Chain.' Testnet: 'You don't have testnet tokens. Please get them for the transaction.'veya_api_health returns the API status.@veyanet/mcp does not re-implement PQ algorithms. It calls @veyanet/sdk, which provides:
Used when operators submit attestation signature bytes through veya_attest_execution. Verification of ML-DSA remains off-chain in the SDK / auditors; the chain stores bounded attestation bytes and hashes.
veya_hash_blake3 and commitment writes use 32-byte digests. Use-mode human content proofs on the product console may use SHA-256 for browser convenience; MCP commitment helpers follow the SDK BLAKE3 path.
Sealed execution runs in the operator sealed node with AES-256-GCM.
EvmAnchor.ensureRobinhoodChain() runs before on-chain writes so MCP operators cannot accidentally settle on the wrong EVM.
The package ships with verification scripts for operators and publishers:
Health probe:
Expected service info fields include service: "@veyanet/mcp", network for the selected profile, sealed mentioning AES-256-GCM, and writesEnabled boolean. This tree's default network is mainnet.
Production TLS for mcp.veyanet.tech: see Deployment Guide.
This README serves as the entry point. For detailed operational and integrator material, refer to the documentation directory:
No for public tools (veya_describe, veya_ping_chain, veya_hash_blake3, veya_verify_transaction, veya_api_health). Product rooms and on-chain writes need a veya_dev_ / veya_live_ key from the product site. On-chain writes also need your funded wallet.
No in tool results or /health. If you pass payerPrivateKey to the public HTTP URL, that host holds it for the call — prefer self-host with VEYA_PAYER_PRIVATE_KEY. Never use a mainnet key.
Veya.sol is a protocol contract for environments, agents, commitments, spending limits (wei), nullifiers, and attestations.
The service info names AES-256-GCM sealed-node cryptography (software process boundary).
@veyanet/sdk?The SDK is a TypeScript library you import. MCP is a network service that exposes selected SDK capabilities as MCP tools over Streamable HTTP so agents can paste a URL.
Paste https://mcp.veyanet.tech/mcp. Consensus and sealed capacity belong to the product API (https://api.veyanet.tech). Use @veyanet/sdk from npm for TypeScript.
veya_ping_chain and verify tools fail with transport / RPC errors. Check https://mcp.veyanet.tech/health and the Robinhood RPC separately.
Select Mainnet or Testnet with ROBINHOOD_NETWORK. Do not point the RPC at a different chain from the profile. SDK writes reject that mismatch. Mainnet is the default profile in this tree.
We welcome contributions to @veyanet/mcp. Pull requests must preserve security integrity:
msg.sender must be the user's wallet.apiKey, payerPrivateKey, or dump .env into docs.@veyanet/sdk over re-implementing hashing, verify, or EvmAnchor inside tool handlers.If you discover a security vulnerability, do not file a public GitHub issue. Submit findings confidentially to [email protected]. See our Security Policy for full details.
This package is licensed under the MIT License. See the LICENSE file for legal details.
Source: README.md at commit c68123c
Service info: AES-256-GCM sealed execution and the selected settlement profile
Takes no parameters.
Ping Robinhood Chain RPC — chain id, block, contract
Takes no parameters.
Compute BLAKE3 hex digest (commitment helper)
datarequiredVerify a Veya.sol commitment from a Robinhood Chain tx hash
txHashrequiredCheck the VEYA API /health status (api.veyanet.tech), including fleet status
Takes no parameters.
Prove text, canonical JSON, or a receipt hash. Anchor writes only when a product API key and a payer key are passed.
jsontextanchorapiKeytxHashenvironmentIdpayerPrivateKeySeal an evidence id and a decision. attestExecution is sent only when a payer key is passed, or when this host's seal-decision relayer switch is on. On Mainnet pass environmentId or set VEYA_SEAL_DECISION_ENVIRONMENT_ID. Without either, the result is SEAL_ENVIRONMENT_REQUIRED and nothing is sent.
apiKeydecisionrequiredevidenceIdrequiredenvironmentIdpayerPrivateKeyGenerate an ML-DSA-44 post-quantum identity keypair (local, no chain write)
Takes no parameters.
Sign UTF-8 text with ML-DSA-44
messagerequiredprivateKeyHexrequiredVerify an ML-DSA-44 signature over UTF-8 text
messagerequiredpublicKeyHexrequiredsignatureHexrequiredRun 2-of-3 BLAKE3 consensus on this server's validator list. Needs a product API key. Returns consensus_reached: false if validators are unreachable.
apiKeytaskIdrequiredpayloadAES-256-GCM protected execution on this server's sealed node. Needs a product API key. The call fails closed when that capacity is unreachable.
apiKeyagentIdrequiredpayloadrequiredeventTyperequiredenvironmentIdrequiredsessionEntropyHexrequiredAllow or deny a tool for an agent. Requires the API key that owns the environment. Saved on that account.
toolrequiredapiKeyagentIdrequiredallowedrequiredenvironmentIdrequiredCheck the saved tool rule for this API key before routing. Deny stays deny.
idrequiredtoolrequiredapiKeypayloadtoAgentrequiredfromAgentrequiredenvironmentIdrequiredCheck the saved tool rule for this API key, then wrap an allowed message in a Kyber-768 session and an ML-DSA-44 signature.
idrequiredtoolrequiredapiKeypayloadtoAgentrequiredfromAgentrequiredenvironmentIdrequiredsenderPublicKeyHexrequiredsenderPrivateKeyHexrequiredVerify ML-DSA signature on a secure routed message envelope
messagerequiredsenderPublicKeyHexrequiredStore agent memory for the account behind this API key. No key, no write.
datarequiredapiKeyagentIdrequiredenvironmentIdrequiredRead one memory row owned by this API key.
idrequiredapiKeyenvironmentIdrequiredNullify one memory row owned by this API key.
idrequiredapiKeyenvironmentIdrequiredDeprecated: use veya_run_consensus. Same server validator list. Needs a product API key.
apiKeytaskIdrequiredpayloadBLAKE3 fingerprint of an ML-DSA public key hex
publicKeyHexrequiredPublic registry stats from the product API (verified agents / proofs)
Takes no parameters.
List public agent registry rows
limitoffsetFetch one public agent by id
idrequiredList public certificate / attestation rows
limitoffsetFetch one public certificate by id
idrequiredFetch a public execution proof by id
idrequiredParse Veya.sol events from a tx and eth_call commitments(digest) for each CommitmentStored
txHashrequiredeth_call Veya.sol commitments(bytes32) for a digest
digestHexrequiredRead environment record from Veya.sol by 16-byte UUID hex
environmentUuidHexrequiredRead agent record from Veya.sol by 16-byte UUID hex
agentUuidHexrequiredCreate a guest session on the product API (Use listing only). Guest cannot mint API keys or write from MCP.
Takes no parameters.
Return the wallet bound to a product API key
apiKeysessionTokenList environments for a product API key (guest JWT sees showcase / Use scope only)
apiKeysessionTokenGet one environment by id
apiKeysessionTokenenvironmentIdrequiredCreate a workspace in the product API. This does not spend gas and sends no transaction. Guests and non-keys are refused. type is stored for the API and defaults to research when omitted. Names that start with test, demo, tmp, sandbox, or e2e are refused. Use a real workspace name of at least 6 characters, or a name that starts with VEYA.
namerequiredtypeapiKeysessionTokenList agents in an environment
apiKeysessionTokenenvironmentIdrequiredCreate an agent in a workspace. This does not spend gas and sends no transaction. Limit the agent with permissionConfig.allowedTools. If allowedTools is omitted, the agent cannot call a tool. type is stored for the API and defaults to coordination when omitted.
typeapiKeyagentKindsessionTokenenvironmentIdrequiredpermissionConfigList memory entries via product API for an environment
scopeapiKeysessionTokenenvironmentIdrequiredList executions for an environment via product API
apiKeysessionTokenenvironmentIdrequiredRun protected execution via product API (Build). Product API key required.
sealapiKeyagentIdrequiredpayloadrequireddiscloseeventTyperequiredsessionTokenenvironmentIdrequiredInvoke a Boundnet / coordination tool via product API (policy gated)
apiKeyagentIdrequiredtoolNamerequiredargumentssessionTokenenvironmentIdrequiredList Use-mode proof anchors for the account
apiKeysessionTokenAnchor a content proof on Veya.sol from YOUR wallet (apiKey + payerPrivateKey). Does not use the hosted relayer.
labelrequiredapiKeycontentrequiredsessionTokenenvironmentIdpayerPrivateKeyCheck a commitment or anchor transaction through the product API. A registration transaction is not a proof and returns NOT_VEYA_TX.
signaturerequiredReports how on-chain writes work on this server: your own wallet sends them, the host relayer does not
Takes no parameters.
Write a 32-byte commitment to Veya.sol from YOUR wallet (apiKey + payerPrivateKey)
apiKeycommitmentHexrequiredpayerPrivateKeyenvironmentUuidHexrequiredattestExecution on Veya.sol from YOUR wallet with ML-DSA bytes
apiKeymldsaSigHexrequiredblake3HashHexrequiredpayerPrivateKeyenvironmentUuidHexrequiredregisterEnvironment on Veya.sol from YOUR wallet. Pass product environmentId to confirm the tx on the product API.
apiKeyenvTypeenvironmentIdpayerPrivateKeypqPubkeyHashHexenvironmentUuidHexGenerate ML-DSA identity and register environment + commitment on Veya.sol from YOUR wallet
apiKeyenvTypepayerPrivateKeyLink PQ identity hash to execution hash on Veya.sol from YOUR wallet
apiKeyidentityHashHexrequiredpayerPrivateKeyexecutionHashHexrequiredenvironmentUuidHexrequired100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
flowchart TB subgraph ClientSpace["MCP Client (Claude / Cursor / Agent Runtime)"] PasteURL["Paste https://mcp.veyanet.tech/mcp"] ToolCall["veya_* tool invocation"] end
subgraph McpBoundary["@veyanet/mcp Streamable HTTP"] Landing["GET /"] Health["GET /health"] PostMcp["POST /mcp"] Auth{"product apiKey + your wallet?"} PublicTools["Public tools"] WriteTools["Own-wallet write tools"] end
subgraph SdkBoundary["@veyanet/sdk"] ReadClient["VeyaClient read / verify / hash"] EvmAnchor["EvmAnchor writes + eth_chainId guard"] end
subgraph ApiBoundary["VEYA Product API"] ApiHealth["https://api.veyanet.tech/health"] end
subgraph Blockchain["Protocol settlement (Mainnet by default)"] VeyaSol["Veya.sol\nCommitments · Environments · Attestations"] end
PasteURL --> PostMcp ToolCall --> PostMcp PostMcp --> Auth Auth -->|"no key / public tools"| PublicTools Auth -->|"apiKey + funded payer"| WriteTools PublicTools --> ReadClient PublicTools -->|"veya_api_health"| ApiHealth WriteTools --> EvmAnchor ReadClient --> VeyaSol EvmAnchor --> VeyaSol Landing --> McpBoundary Health --> McpBoundaryhttps://mcp.veyanet.tech/mcpnpm install @veyanet/sdknpm install -g @veyanet/mcpveya-mcp# or: npx -y @veyanet/mcpimport { loadConfig, createHttpApp, startHttpServer } from "@veyanet/mcp";
// 1. Zero-config start (Mainnet)startHttpServer();
// 2. Explicit config for operatorsconst cfg = loadConfig();const app = createHttpApp(cfg);app.listen(cfg.port, cfg.host);https://mcp.veyanet.tech/mcpclaude mcp add veya --transport http https://mcp.veyanet.tech/mcphttps://mcp.veyanet.tech/mcpTool: veya_proveArgs: exactly one of text, json, txHash anchor, environmentId, payerPrivateKey only when anchoring{ "text": "hello" }{ "text": "a unique string", "anchor": true, "environmentId": "7d0af0ba-2ae3-4d0e-bc75-0bbaccb3dd71", "payerPrivateKey": "<funded private key>"}Tool: veya_describeArgs: (none)Tool: veya_writes_statusArgs: (none)Tool: veya_ping_chainArgs: (none)Tool: veya_verify_transactionArgs: txHash (0x…, min 66 chars)0xd68ab19671f0a3be63651cb6d6e24f5decf591da981708502827bca3689d31d8Tool: veya_hash_blake3Args: data (string, min length 1)Tool: veya_api_healthArgs: (none)Tools: veya_paid_discover, veya_paid_call, veya_paid_runOn the hosted URL: yes (check paidCallGuard in /health or veya_describe)Needs: your VEYA apiKey + your own Solana key (pays USDC) + your own Robinhood Chain key (signs the record, pays gas)Runs: saved to your VEYA account; veya_paid_run is private to that accountReceipts: public proof links (no keys, apiKey or input)Kill switch: operator-only; callers cannot change it{ "name": "veya_paid_call", "arguments": { "taskId": "task-1", "idempotencyKey": "<new uuid>", "resourceId": "tokens.asset-risk-summary", "input": { "assetId": "solana" }, "apiKey": "<your VEYA API key>", "solanaPrivateKey": "<your Solana secret key>", "robinhoodPrivateKey": "<your Robinhood Chain key>" }}git clone https://github.com/veyanet/veya-mcp.gitcd veya-mcpnpm installcp .env.example .env # do not commit .envnpm run buildnpm startnpm testnpm run smoke# Typechecknpm run lint
# Unit + HTTP /health service info (service name, network, AES string)npm test
# Live MCP initialize + tools/list + ping (needs network)npm run smoke
# Production-style processnpm run build && npm startcurl -s https://mcp.veyanet.tech/health | jq .# or local:curl -s https://mcp.veyanet.tech/health | jq .