nado-mcp
MCP server for the Nado Protocol on the Ink blockchain, enabling AI assistants to query market data, manage positions, place orders, and access historical trading data.
README
nado-mcp
MCP server for the Nado Protocol — perpetual futures, spot trading, and liquidity provision on the Ink blockchain.
Gives AI assistants tools to query market data, manage positions, place orders, and access historical trading data. Works with Cursor, Claude Desktop, VS Code, Windsurf, Codex, Gemini CLI, and any MCP-compatible client.
[!CAUTION] Experimental software. Interacts with the live Nado Protocol on the Ink blockchain and can execute real financial transactions including leveraged perpetual futures. Read DISCLAIMER.md before using with real funds or AI agents.
Contents
Installation
No manual install needed. MCP clients like Cursor and Claude Desktop resolve the package automatically when configured with npx (see MCP Client Setup).
MCP Client Setup
Cursor
Add to your .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"nado": {
"command": "npx",
"args": ["@nadohq/nado-mcp"],
"env": {
"DATA_ENV": "nadoMainnet",
"PRIVATE_KEY": "0xLINKED_SIGNER_PRIVATE_KEY",
"SUBACCOUNT_OWNER": "0xMAIN_WALLET_ADDRESS"
}
}
}
}
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"nado": {
"command": "npx",
"args": ["@nadohq/nado-mcp"],
"env": {
"DATA_ENV": "nadoMainnet",
"PRIVATE_KEY": "0xLINKED_SIGNER_PRIVATE_KEY",
"SUBACCOUNT_OWNER": "0xMAIN_WALLET_ADDRESS"
}
}
}
}
Set DATA_ENV to nadoTestnet to connect to the testnet instead.
Security
MCP servers run locally on your machine as child processes spawned by the MCP client (Cursor, Claude Desktop, etc.). Communication happens over stdio - there are no open ports and no network exposure. Environment variables like PRIVATE_KEY stay on your machine and are never sent to any AI provider; the model only sees tool definitions and tool results.
That said, never put your main wallet private key in the MCP config. The config file is stored in plain text on disk, readable by any process running as your user. If accidentally committed to version control, the key is permanently exposed.
The server supports three operating modes, from most to least secure:
1. Read-Only Mode (No Key)
Omit PRIVATE_KEY entirely. All query tools work (market data, account info, history), but any tool that submits a transaction will return an error.
{
"env": {
"DATA_ENV": "nadoMainnet"
}
}
2. Linked Signer (Recommended for Mainnet)
Use a linked signer — a disposable hot key that is authorized to sign transactions on behalf of your main wallet. Your main wallet key never touches the MCP config.
How It Works
Nado allows any subaccount to designate a linked signer address. Once linked, the engine accepts EIP-712 signatures from either the subaccount owner or the linked signer for off-chain operations (placing/cancelling orders, withdrawals, transfers).
Setup
Step 1: Generate a hot key
Any tool that creates an Ethereum keypair will work. Pick whichever you have available:
Option A - Node.js (no extra install, uses viem from this project)
node -e "const{generatePrivateKey,privateKeyToAddress}=require('viem/accounts');const k=generatePrivateKey();console.log('Address: '+privateKeyToAddress(k)+'\nPrivate key: '+k)"
Option B - OpenSSL (available on most systems)
openssl rand -hex 32 | awk '{print "0x"$1}'
This gives you a private key. To derive the address, paste the key into any wallet (e.g. MetaMask import) or use Option A.
Option C - Foundry (cast)
If you have Foundry installed:
cast wallet new
Save the printed address and private key.
Step 2: Link the hot key to your subaccount
From your main wallet, authorize the hot key address. You can do this via:
- The Nado frontend (Settings → Linked Signer)
- The
link_signertool in this MCP server (requires the main key to be configured temporarily) - A direct contract call
Step 3: Configure the MCP server
{
"env": {
"DATA_ENV": "nadoMainnet",
"PRIVATE_KEY": "0xHOT_KEY_PRIVATE_KEY",
"SUBACCOUNT_OWNER": "0xMAIN_WALLET_ADDRESS"
}
}
PRIVATE_KEY is the hot key (used for signing). SUBACCOUNT_OWNER is the main wallet (used to identify the subaccount for queries and order parameters).
Step 4 (if compromised): Revoke
From your main wallet, call link_signer with the zero address (0x0000000000000000000000000000000000000000). This immediately invalidates the hot key.
What a Linked Signer Can Do
- Place, cancel, and modify orders
- Place trigger orders (stop-loss, take-profit, TWAP)
- Withdraw collateral (off-chain signed via the engine)
- Transfer between subaccounts
What a Linked Signer Cannot Do
- Deposit collateral (on-chain
msg.sendermust be the wallet holding the tokens) - Link or revoke signers (requires the subaccount owner's signature)
- Any on-chain transaction that checks
msg.sender
Limitations
- No permission scoping: a linked signer has full access to all off-chain operations, including withdrawals. The security boundary is revocability, not restriction. If the key leaks, act fast to revoke it.
- One signer per subaccount: each subaccount can have at most one linked signer. Linking a new address replaces the previous one.
- Rate limits: linked signers may have separate rate limits from the subaccount owner.
3. Direct Key
You can use your wallet key directly. Omit SUBACCOUNT_OWNER and the server derives it from PRIVATE_KEY:
{
"env": {
"DATA_ENV": "nadoMainnet",
"PRIVATE_KEY": "0xYOUR_PRIVATE_KEY"
}
}
Because MCP servers run locally as child processes with no network exposure, your key never leaves your machine. This is a valid option for users who prefer simplicity over the revocability that a linked signer provides.
That said, the key is stored in plain text in your MCP client config, so keep these risks in mind:
- Any process running as your OS user can read the config file.
- If accidentally committed to version control, the key is permanently exposed.
- If the key is compromised, you must move funds — there is nothing to "revoke".
For mainnet with significant funds, a linked signer (Option 2) is still recommended because it limits the blast radius to a disposable key you can revoke instantly.
Environment Variables
Set these in the "env" block of your MCP client config (recommended). A .env file can be used as a fallback for local development.
| Variable | Required | Default | Description |
|---|---|---|---|
DATA_ENV |
Yes | — | nadoMainnet or nadoTestnet |
RPC_URL |
No | Chain default | Custom RPC URL |
PRIVATE_KEY |
No | — | Private key for signing (linked signer recommended) |
SUBACCOUNT_OWNER |
No | — | Main wallet address (required when using a linked signer) |
SUBACCOUNT_NAME |
No | default |
Default subaccount name |
Development
git clone https://github.com/nadohq/nado-mcp.git && cd nado-mcp
bun install
bun run build
bun run dev # Watch mode
bun run build # Build for production
bun run typecheck # Type check
bun run lint # Lint and format
Contributing
- Fork the repo and create a feature branch
- Install dependencies:
bun install - Make your changes and ensure
bun run typecheck && bun run lint:check && bun run buildpasses - Open a pull request against
main
Disclaimer
See DISCLAIMER.md.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.