veya_describe
Service info: AES-256-GCM sealed execution and the selected settlement profile
无需输入参数。

io.github.veyanet由 GitHub 账号 veyanet 发布v1.2.8更新于 Nov 4, 2026
Check, limit, record and prove AI agent actions with 2-of-3 validators and onchain proofs.
VEYA 让助手对代理操作做哈希、生成证明与验证,提供后量子密码工具,并在 Robinhood Chain 上锚定承诺。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/io.github.veyanet%2Fveya/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。把它添加到你客户端的 mcpServers 配置中。
{
"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.
来源:README.md,提交 c68123c
Service info: AES-256-GCM sealed execution and the selected settlement profile
无需输入参数。
Ping Robinhood Chain RPC — chain id, block, contract
无需输入参数。
Compute BLAKE3 hex digest (commitment helper)
data必填Verify a Veya.sol commitment from a Robinhood Chain tx hash
txHash必填Check the VEYA API /health status (api.veyanet.tech), including fleet status
无需输入参数。
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.
apiKeydecision必填evidenceId必填environmentIdpayerPrivateKeyGenerate an ML-DSA-44 post-quantum identity keypair (local, no chain write)
无需输入参数。
Sign UTF-8 text with ML-DSA-44
message必填privateKeyHex必填Verify an ML-DSA-44 signature over UTF-8 text
message必填publicKeyHex必填signatureHex必填Run 2-of-3 BLAKE3 consensus on this server's validator list. Needs a product API key. Returns consensus_reached: false if validators are unreachable.
apiKeytaskId必填payloadAES-256-GCM protected execution on this server's sealed node. Needs a product API key. The call fails closed when that capacity is unreachable.
apiKeyagentId必填payload必填eventType必填environmentId必填sessionEntropyHex必填Allow or deny a tool for an agent. Requires the API key that owns the environment. Saved on that account.
tool必填apiKeyagentId必填allowed必填environmentId必填Check the saved tool rule for this API key before routing. Deny stays deny.
id必填tool必填apiKeypayloadtoAgent必填fromAgent必填environmentId必填Check the saved tool rule for this API key, then wrap an allowed message in a Kyber-768 session and an ML-DSA-44 signature.
id必填tool必填apiKeypayloadtoAgent必填fromAgent必填environmentId必填senderPublicKeyHex必填senderPrivateKeyHex必填Verify ML-DSA signature on a secure routed message envelope
message必填senderPublicKeyHex必填Store agent memory for the account behind this API key. No key, no write.
data必填apiKeyagentId必填environmentId必填Read one memory row owned by this API key.
id必填apiKeyenvironmentId必填Nullify one memory row owned by this API key.
id必填apiKeyenvironmentId必填Deprecated: use veya_run_consensus. Same server validator list. Needs a product API key.
apiKeytaskId必填payloadBLAKE3 fingerprint of an ML-DSA public key hex
publicKeyHex必填Public registry stats from the product API (verified agents / proofs)
无需输入参数。
List public agent registry rows
limitoffsetFetch one public agent by id
id必填List public certificate / attestation rows
limitoffsetFetch one public certificate by id
id必填Fetch a public execution proof by id
id必填Parse Veya.sol events from a tx and eth_call commitments(digest) for each CommitmentStored
txHash必填eth_call Veya.sol commitments(bytes32) for a digest
digestHex必填Read environment record from Veya.sol by 16-byte UUID hex
environmentUuidHex必填Read agent record from Veya.sol by 16-byte UUID hex
agentUuidHex必填Create a guest session on the product API (Use listing only). Guest cannot mint API keys or write from MCP.
无需输入参数。
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
apiKeysessionTokenenvironmentId必填Create 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.
name必填typeapiKeysessionTokenList agents in an environment
apiKeysessionTokenenvironmentId必填Create 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.
typeapiKeyagentKindsessionTokenenvironmentId必填permissionConfigList memory entries via product API for an environment
scopeapiKeysessionTokenenvironmentId必填List executions for an environment via product API
apiKeysessionTokenenvironmentId必填Run protected execution via product API (Build). Product API key required.
sealapiKeyagentId必填payload必填discloseeventType必填sessionTokenenvironmentId必填Invoke a Boundnet / coordination tool via product API (policy gated)
apiKeyagentId必填toolName必填argumentssessionTokenenvironmentId必填List 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.
label必填apiKeycontent必填sessionTokenenvironmentIdpayerPrivateKeyCheck a commitment or anchor transaction through the product API. A registration transaction is not a proof and returns NOT_VEYA_TX.
signature必填Reports how on-chain writes work on this server: your own wallet sends them, the host relayer does not
无需输入参数。
Write a 32-byte commitment to Veya.sol from YOUR wallet (apiKey + payerPrivateKey)
apiKeycommitmentHex必填payerPrivateKeyenvironmentUuidHex必填attestExecution on Veya.sol from YOUR wallet with ML-DSA bytes
apiKeymldsaSigHex必填blake3HashHex必填payerPrivateKeyenvironmentUuidHex必填registerEnvironment 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
apiKeyidentityHashHex必填payerPrivateKeyexecutionHashHex必填environmentUuidHex必填已满足适用检查项的 100%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
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 .