API reference
The server registers 25 MCP tools, three fixed resources, one parameterized resource, and an optional authenticated HTTP transport.
MCP request and response
{
"name": "get_block_count",
"arguments": { "network": "testnet" }
}
Tool results are returned in MCP content. Most successful tools place formatted JSON in content[0].text.
{
"blockCount": 12346,
"height": 12345,
"network": "testnet"
}
blockCount is the RPC count. The latest block index is max(0, blockCount - 1).
Registered tools
| Area | Tool | Purpose |
|---|---|---|
| Network | get_network_mode | Return configured mode, available networks, and default network. |
| Network | set_network_mode | Change the configured mode; service state is reinitialized. |
| Blockchain | get_blockchain_info | Return chain information for the selected network. |
| Blockchain | get_block_count | Return block count and latest block height. |
| Blockchain | get_block | Fetch a block by height or hash. |
| Blockchain | get_transaction | Fetch a transaction by hash. |
| Blockchain | get_application_log | Fetch an application log by transaction hash. |
| Blockchain | wait_for_transaction | Poll for confirmation with optional application log. |
| Accounts | get_balance | Return NEO, GAS, and NEP-17 balances. |
| Accounts | get_unclaimed_gas | Return claimable GAS for an address. |
| Accounts | get_nep17_transfers | Return NEP-17 transfer history when the node supports it. |
| Accounts | get_nep11_balances | Return NEP-11 balances when the node supports it. |
| Accounts | get_nep11_transfers | Return NEP-11 transfer history when the node supports it. |
| Wallets | get_wallet | Return sanitized local wallet metadata. |
| Transactions | transfer_assets | Build and broadcast a confirmed NEP-17 transfer. |
| Transactions | estimate_transfer_fees | Estimate fees without broadcasting. |
| Transactions | claim_gas | Build and broadcast a confirmed GAS claim. |
| Contracts | list_famous_contracts | Return the verified curated registry, currently empty until entries are validated. |
| Contracts | get_contract_info | Resolve metadata and operations for a generic reference. |
| Contracts | get_contract_status | Resolve and check current on-chain deployment status. |
| Contracts | invoke_contract | Run a strictly read-only invocation. |
| Contracts | invoke_contract_write | Create and approve an idempotent write. |
| Contracts | estimate_invoke_fees | Estimate invocation fees for a signer. |
| Contracts | deploy_contract | Deploy a complete compiler-produced serialized NEF artifact and manifest. |
network and accept only confirm: true as a JSON boolean, even when one network is enabled. Strings and numbers are rejected.Fee estimate fields
{
"networkFeeDatos": "10000000",
"systemFeeDatos": "5000000",
"networkFeeGas": "0.1",
"systemFeeGas": "0.05"
}
The datos fields are exact integer decimal strings; the GAS fields are formatted decimal strings. Signed transactions are rejected before broadcast when combined fees exceed NEO_MAX_TRANSACTION_FEE_GAS, which defaults to 20 GAS. Contract deployment needs headroom above Neo's 10 GAS native deployment minimum for network fee and invocation overhead.
Resources
| URI | Behavior |
|---|---|
neo://network/status | Status for the default configured network. |
neo://mainnet/status | Mainnet status when mainnet is enabled. |
neo://testnet/status | Testnet status when testnet is enabled. |
neo://block/{height} | Parameterized block lookup on the default network. |
Generic contract flow
A contract reference can be a known name, script hash, or Neo address. Resolve and verify the reference on the selected network before invoking it. Local names and descriptions are not deployment or protocol guarantees.
{
"name": "get_contract_status",
"arguments": {
"network": "testnet",
"contract": "0x0123456789abcdef0123456789abcdef01234567"
}
}
Contract deployment input
{
"idempotencyKey": "deployment-2026-07-11-001",
"network": "testnet",
"nef": {
"encoding": "base64",
"data": "<complete compiler-produced serialized NEF>"
},
"manifest": { "name": "ExampleContract" }
}
nef.data is the complete serialized .nef file, including its header and checksum. Raw VM bytecode is not accepted.
{
"name": "invoke_contract",
"arguments": {
"network": "testnet",
"scriptHash": "0x0123456789abcdef0123456789abcdef01234567",
"operation": "symbol",
"args": []
}
}
HTTP transport
HTTP binds to 127.0.0.1:3000 by default and requires one Neo network. A non-loopback host requires HTTP_API_KEY; every configured key must contain at least 32 bytes.
When a key is configured, every route except GET /live and GET /health requires:
Authorization: Bearer <HTTP_API_KEY>
POST and PUT bodies must be JSON objects. HTTP_MAX_BODY_BYTES defaults to 1 MiB. HTTP_CORS_ORIGINS is an exact comma-separated origin allowlist; wildcard CORS is not supported.
Selected routes
| Method | Path | Notes |
|---|---|---|
| GET | /live | Unauthenticated process liveness; does not call Neo RPC. |
| GET | /health | Unauthenticated RPC readiness check. |
| GET | /metrics | Bearer-protected when a key is set. |
| GET | /api/blockchain/height | Returns blockCount and height. |
| GET | /api/blocks/:hashOrHeight | Fetch block details. |
| GET | /api/transactions/:txid | Fetch transaction details. |
| POST | /api/transfers | Requires WIF and boolean confirmation. |
| POST | /api/contracts/invoke | Read without WIF; write requires WIF and confirmation. |
| POST | /api/contracts/deploy | Requires WIF, a complete serialized nef object, manifest, and confirmation. |
Errors
MCP validation errors are returned as error content with descriptive messages. HTTP responses use JSON and commonly return 400, 401, 404, 413, 415, 429, 500, 503, or 504 according to the failure.