
Mina Mcp Server
io.github.MinaProtocol由 GitHub 账号 MinaProtocol 发布v0.7.3更新于 Oct 24, 2026
Query Mina Protocol: accounts, blocks, transactions, zkApp events/actions, archive SQL, Rosetta.
概览
面向 Mina Protocol 区块链的 MCP 服务器,让助手查询账户、区块、交易、zkApp 事件和归档 SQL,并可选地发送测试网交易。
- 可以做什么
- 查询实时链上状态:从 Mina 守护进程获取账户、区块、最佳链、内存池、交易状态、同步状态、创世常量和网络 ID,并读取归档节点的事件、操作和区块,以及一次性的 describe_state 概览。查询归档数据库:只读 SQL、表结构查看、区块与交易检索、质押账本和归档统计。在网络提供 Rosetta 端点时,使用标准 Rosetta Data API 工具查询网络状态、账户余额、区块和内存池。教程模式下从水龙头获取并归还预充值测试账户、发送支付与委托,并可暂停周期性链重置。实时写入模式下列出已加载钱包并签名、提交支付或委托。
- 适用场景
- 当你希望助手以对话方式探索 Mina 区块链数据时使用:无需本地环境即可查询公共 devnet 或 mainnet,或针对本地 lightnet 做演示与测试,或针对冻结的归档转储做 SQL 探索。实时写入模式适合 devnet 或 mesa 上的临时测试钱包,不适合生产资金。
- 运行要求
- 通过 npx 在本地运行,需要 Node.js 20.18 或更高版本;实时模式无需本地基础设施,只需选择网络(devnet、mainnet、mesa)。教程和快照模式需要 Docker 及本地服务:PostgreSQL 归档数据库、Mina 守护进程 GraphQL、归档节点 API 和账户管理器,需用 compose 文件启动,而这些文件不包含在 npm 包中。实时写入模式需通过 --wallets 或 MINA_MCP_WALLETS 指定 wallets.json 路径,向 mainnet 发送还需 --allow-mainnet-writes 或 MINA_MCP_ALLOW_MAINNET_WRITES。
安装
在 SourceWeft 中
- 打开 控制台中的 Mina Mcp Server,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
mina-mcp-server
MCP (Model Context Protocol) server for the Mina Protocol blockchain. Exposes Mina blockchain data and operations through MCP-compatible tools that can be used by AI assistants and other MCP clients.
New here? Jump to Which mode do I want? → Connect your MCP client → Verify it works. For copy-paste prompts, see the prompt cookbook.
Status: beta / preview. Live mode talks to public Mina networks (devnet / mainnet / mesa) and needs no local infrastructure — run
npx @o1-labs/mina-mcp-server --mode live --network devnet, or point your client at the hosted sandbox. Snapshot and tutorial modes are thin MCP layers over backing services (PostgreSQL, and for tutorial a local Mina lightnet) that you must stand up yourself first — see Prerequisites. A bundled SQLite snapshot for zero-infra snapshot mode is planned (#28).
Features
- 40+ MCP tools for querying accounts, blocks, transactions, zkApp events/actions, network/sync status, Rosetta, and archive SQL.
- Three operating modes:
- Live — read-only proxy to a public Mina network (devnet/mainnet/mesa). No local infra — the zero-setup default.
- Tutorial — full read/write against a local Mina lightnet (daemon, archive, test-account faucet).
- Snapshot — schema-only SQL access (
query_archive_sql,get_archive_schema) against a frozen archive Postgres dump.
- Standardized Rosetta Data API tools (live mode) alongside the native GraphQL ones.
- Safe SQL access — read-only queries against the archive DB with timeout protection.
- Test-account faucet — acquire/release pre-funded accounts (tutorial mode).
- Prompt cookbook — copy-paste prompts that drive end-to-end tool sequences.
Which mode do I want?
Most people want live — it needs nothing installed beyond Node.
Connect your MCP client
Local (recommended), via npx — no clone, no infra:
Swap devnet for mainnet or mesa. For other modes, change --mode (and drop --network); see Configuration.
Hosted sandbox (zero install) — point your client at the URL:
The hosted sandbox runs tutorial mode against a shared lightnet (best-effort, no SLA). Use local live mode for real networks.
Where the config lives, per client:
All clients except Zed take the same { command, args } object; only the file location differs. Hosted-URL configs work in any client that supports a remote/streamable-HTTP MCP server.
Verify it works
After wiring it up, ask your assistant:
"Describe the current Mina network state."
It should call describe_state and return a snapshot with syncStatus (e.g. SYNCED), the network name, and mempool size. That's your green light. (On mesa, expect a PREFLIGHT caveat in the hints.)
Configuration
All flags have environment-variable equivalents; run npx @o1-labs/mina-mcp-server --help for the full surface.
Troubleshooting
Prerequisites
Only needed for
tutorialandsnapshotmodes.livemode needs none of this.
Common:
- Node.js >= 20.18
- Docker & Docker Compose (to run the backing services below)
Snapshot mode additionally requires:
You can bring this up with docker-compose.snapshot.yml (ships in the repo). A snapshot dump under ./snapshots/devnet-latest — or downloaded via the compose download profile — is required.
Tutorial mode additionally requires a full local lightnet:
All four are brought up by docker-compose.tutorial.yml. Expect ~1–2 minutes for the network to sync before tools respond correctly.
Note: if you install from npm (
npx @o1-labs/mina-mcp-server), the docker-compose files are not included in the tarball — you will need to clone this repo, or copy thedocker-compose.*.ymlfiles out of it, to start the infra.
Quick Start
Live mode against a public Mina network
Live mode is a thin read-only proxy that turns MCP tool calls into GraphQL/HTTP requests against the o1Labs-hosted public endpoints. There is nothing to host — run it locally next to your MCP client:
Endpoints are best-effort services without SLAs and URLs are subject to change. Networks are classified by stability tier:
When a LiveProvider is constructed against a preflight network, the server emits a [WARN] Network '<name>' is a PREFLIGHT network… line at startup and prepends a PREFLIGHT hint to describe_state's hints[] — so any LLM consuming the output sees the caveat before reasoning about the data. If you build downstream automation against a preflight network, treat any data you gather as ephemeral and have a fallback to a stable network.
Rosetta Data API (live mode)
When a live-mode network has a Rosetta endpoint configured (devnet, mainnet, and mesa do today; mesa-mut does not), the server registers five Rosetta Data API tools alongside the daemon/archive ones. On a network without a Rosetta endpoint the rosetta_* tools are not registered at all, so the advertised tool list reflects what the network can actually do. These return responses in standardized Rosetta format — useful for LLMs and integrations that already speak Rosetta:
Construction API (offline signing flow) is intentionally not included in this set; it's a follow-up with its own tool-shape design (macro-vs-literal).
Each network also carries optional pointers that the MCP server doesn't proxy itself but surfaces via describe_state.hints[] so an LLM can hand them to a human or a Rosetta-aware client:
Mesa hardfork upgrade tracking (mesa-mut)
mesa-mut rehearses the Mesa hardfork upgrade. On --network mesa-mut the server
registers an extra tool, get_upgrade_status, which joins the upgrade tracker
(status.json) with the
live daemon's current global slot to report the phase: current slot vs
stopTransactionSlot / stopNetworkSlot, slots/minutes remaining, the Mesa genesis
timestamp, and a transactionsOpen boolean with phase-aware hints[]. Check
transactionsOpen before submitting a send — transactions sent after
stopTransactionSlot are dropped.
For agent workflows, a companion Claude skill — .claude/skills/mesa-upgrade —
wraps this tool with a per-phase operator runbook (what to do / not do before, during,
and after the fork).
Live write mode (experimental — client-side signing)
Live mode can be promoted from read-only to read+write by handing the server one or more wallet keys. Sends are signed in this process with mina-signer and submitted as pre-signed transactions to the daemon. No daemon-side wallet, no faucet on devnet/mainnet, no key material on the wire.
EXPERIMENTAL — read this before pointing it at real value. Wallet private keys are loaded unencrypted from disk into this process's memory. That's fine for ephemeral test wallets on devnet/mesa; it's not fine for production keys. Either:
- only load wallets containing money you can afford to lose, or
- don't use this mode for mainnet at all — use a hardware wallet or an offline signer for anything material.
Pointing this at mainnet additionally requires
--allow-mainnet-writes(orMINA_MCP_ALLOW_MAINNET_WRITES=1) as a deliberate speedbump against config typos.
wallets.json schema
keyPathfiles must contain exactly oneEK…base58check private key (one line, no other content). Encrypted JSON key files are not supported in this revision.keyPathfiles must bechmod 600; the loader refuses to start otherwise.publicKeyis verified at startup against the loaded key — catches "wrong key for this alias" mistakes before any tool runs.caps(optional, per wallet) bound a single transaction:maxFeeNanominaandmaxAmountNanomina(decimal nanomina, 1 MINA = 1e9). A send exceeding a cap is refused before signing — a guardrail against a runaway/adversarial LLM draining a wallet. Memos are always capped at 32 bytes.defaultWalletis optional; if omitted, everysend_payment/send_delegationcall must passfrom_aliasorfrom.- Paths may be relative to the config file's directory (so the whole bundle is portable).
Tool surface added in live-write mode (on top of the live-mode read tools):
describe_state in live-write mode adds a wallets[] block (aliases, publicKeys, balances — never keys) and prepends a Live-WRITE mode… hint, so an LLM picks up the new capabilities on the first orient.
Safety guarantees (enforced, not just documented):
- Permission gate. Any key file with mode wider than
0600fails startup loudly. - Mainnet writes opt-in.
--allow-mainnet-writesis a hard requirement for--network mainnet --wallets …. - Nonce cache.
max(daemon_nonce, last_submitted+1)— survives archive-lag races without burning a nonce on failed submits. - Dry-run.
send_payment(dry_run: true)returns the signed payload + computed hash without hitting the daemon. - Automated redaction sweep.
test/mcp/wallets-redaction.test.tsfires every registered tool with bogus args and asserts the server's loaded private key never appears in any response.
Snapshot mode against other public networks
The --profile download path of docker-compose.snapshot.yml fetches dumps from the public bucket https://storage.googleapis.com/mina-archive-dumps. The URL layout is <prefix>-<YYYY-MM-DD>_<HOUR>.sql.tar.gz. To target a different network, override ARCHIVE_DUMP_PREFIX:
Mesa is a preflight network. The dump prefix above is internal ops naming and is not a stable convention — it may change or stop being published without notice when mesa graduates or is retired. Treat snapshot data from mesa as ephemeral.
In live mode the server hides every tool that would need infra it doesn't have:
- no archive Postgres → no
query_archive_sql,get_archive_schema,list_blocks,search_transactions,get_transaction,get_staking_ledger,get_archive_stats; - no accounts-manager / faucet → no
faucet,return_account,reset_session; - no reset janitor → no
freeze_reset,unfreeze_reset,freeze_status; - public daemons don't sign for you → no
send_payment,send_delegation,get_tracked_accounts.
get_block requires a stateHash in live mode — use get_archive_blocks (Archive-Node-API) to discover one first.
Demo: end-to-end payment in tutorial mode
The point of running this server is that a single natural-language prompt can drive a multi-step on-chain flow that would otherwise need half a dozen separate GraphQL calls. Once the lightnet is up and your MCP client is connected, this prompt:
Grab two funded test accounts from the faucet. Send 10 MINA from the first to the second, then poll until it lands in a block — show me the mempool state right after submission and the block height it gets included in. Once confirmed, check both balances and return both accounts.
drives the following tool sequence (excerpted from a real tutorial-mode run):
End-to-end wall-clock was a few seconds on a synced lightnet. The flow exercises every tutorial-only tool family in one go — faucet/return, payment submission, mempool, status polling, block/account lookup — making it a useful smoke check after deploy.
Infrastructure configuration (tutorial / snapshot)
These configure where the backing services live; live mode doesn't use them. Copy .env.example to .env and adjust as needed:
Key variables:
MCP Tools
Tool registration is mode-aware — tools whose backing infra isn't available in a given mode aren't registered at all (so they don't show up in tools/list, and an LLM never reasons about them).
Snapshot mode (schema explorer)
Tutorial mode (live lightnet — superset of snapshot)
All snapshot tools, plus:
Live mode (public Mina network — read-only)
Development
Build
Running Tests
Test Structure
The MCP tests use @modelcontextprotocol/sdk's InMemoryTransport to create a linked client-server pair in-process. This tests the full MCP protocol layer (tool registration, schema validation, request/response) without needing any network or database.
Project Structure
Daemon GraphQL access goes through @o1-labs/mina-sdk's MinaClient — typed
methods (getAccount, getBestChain, getBlock, sendPayment, …) own the
query strings, response shapes, and retry/timeout policy. mcp-server is
deliberately a thin adapter: it adds tutorial-mode test-account orchestration
and the MCP tool registration layer on top of the SDK.
Tutorial Mode Services
When running in tutorial mode with docker-compose.tutorial.yml, the following services are available:
Using with tutorial / snapshot mode
Client config is the same { command, args } shown in Connect your MCP client — just change --mode to tutorial or snapshot (and drop --network). The difference is the infrastructure: these modes talk to local services, so bring those up first (see Prerequisites and Quick Start).
The MCP server will not start the infrastructure for you. If Postgres / daemon / archive-node-api / accounts-manager are not reachable, tools return connection errors — that's expected, not a bug.
Deploying on Fly.io
The repo ships a Dockerfile and fly.toml that bundle the MCP server with the lightnet image into a single Fly machine. The MCP server runs in HTTP/SSE mode behind Fly's TLS terminator; the lightnet's Explorer UI + GraphQL playground are exposed on a second port for humans.
After deploy:
Rename the app to your own subdomain with flyctl apps rename or attach a custom domain via flyctl certs add mcp.your-domain.com (CNAME the domain to mina-mcp-sandbox.fly.dev).
Connecting an MCP client to the hosted server
Claude Desktop / Claude Code config (.mcp.json):
The first session call returns a Mcp-Session-Id header that the client must echo on every subsequent request. When the session disconnects, every test account it acquired via faucet is automatically released.
Operational notes
auto_stop_machines = "stop"+min_machines_running = 0lets the machine scale to zero when idle. First request after idle pays a ~60–120s cold-start while the lightnet syncs.- The chain-reset janitor (planned) reads
provider.resetController.isFrozen(); admins / demo presenters can pause it via thefreeze_resetMCP tool. - See
deploy/start.shfor the in-container boot order: lightnet first, MCP server last.
Roadmap
Tracked in GitHub issues. Highlights:
- Bundled SQLite snapshot (#28) — ship a SQLite archive snapshot inside the package so
npx @o1-labs/mina-mcp-server --mode snapshotruns with zero infra, the same zero-setup story live mode already has. - Rosetta Construction API — the offline signing flow (derive → preprocess → metadata → payloads → sign → combine → submit). The read-only Rosetta Data API tools already ship today.
Shipped recently: live mode against public networks (devnet / mainnet / mesa), a hosted Fly.io sandbox, live-write mode (in-process signing), and adoption of the published @o1-labs/mina-* SDKs as the transport layer. Tutorial mode stays infrastructure-dependent (local lightnet) by design — it's for development against a controllable network.
Contributing
See CONTRIBUTING.md for dev setup, testing, and PR conventions. Found a vulnerability? See SECURITY.md.
License
来源:README.md,提交 2404419
工具
0版本历史
1- v0.7.3最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分