ICP Control Plane MCP Server
Provides comprehensive DevOps capabilities for the Internet Computer blockchain, enabling management of canisters, authentication, finances, development, and more.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ICP Control Plane MCP Servercheck my ICP balance"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ICP Control Plane MCP Server
A production-ready Model Context Protocol (MCP) server providing comprehensive DevOps capabilities for the Internet Computer blockchain.
What It Does
ICP Control Plane enables AI agents (Claude, GPT, etc.) to:
Authenticate via Internet Identity, NFID, or PEM files
Manage canisters - Create, install, upgrade, start, stop, delete
Call any canister - Query and update with full Candid type support
Handle finances - ICP balance, transfers, cycles management
Build & deploy - Scaffold projects, compile to WASM, deploy
Stay safe - Preflight checks, controller validation, upgrade-safe defaults
36 tools organized into 7 categories: Authentication, Canister Lifecycle, Financial, Development, Frontend, Tokens, and Safety.
Related MCP server: mcp-suite
Installation
Prerequisites
Node.js 20+ - Download here
Git - For cloning the repository
Step 1: Clone & Build
# Clone the repository
git clone https://github.com/Jesse-pink-lab/icp-control-plane-mcp-dist.git
# Navigate to the directory
cd icp-control-plane-mcp-dist
# Install dependencies
npm install
# Build the project
npm run buildAfter building, the compiled server will be at dist/index.js.
Step 2: Note the Full Path
You'll need the full absolute path to dist/index.js for your MCP configuration.
Example paths:
Windows:
C:/Users/YourName/icp-control-plane-mcp-dist/dist/index.jsmacOS/Linux:
/home/yourname/icp-control-plane-mcp-dist/dist/index.js
Understanding Your Identity (IMPORTANT)
Read this before using the MCP server with real funds or production canisters.
How Identity Works
On first run, the MCP server automatically generates a unique Ed25519 cryptographic identity for you. This identity determines your Principal ID - your unique identifier on the Internet Computer.
Your identity is saved to a file called mcp-identity.json in your current working directory (typically your project folder or home directory).
What Your Identity Controls
Your Principal ID (derived from your identity) is used to:
Own and control canisters you create
Hold ICP tokens sent to your account
Hold cycles in the Cycles Ledger
Own tokens and NFTs in your wallet
Authenticate to dApps and services
If You Lose Your Identity File
There is NO recovery mechanism. If you delete or lose mcp-identity.json:
You permanently lose access to any canisters where this Principal is the sole controller
You permanently lose any ICP, cycles, or tokens held by that Principal
You cannot recover the same Principal ID
This is how blockchain works - your private key IS your access.
Back Up Your Identity
Immediately after first run:
Locate your identity file:
# The file is in your current working directory # Check the MCP server logs - it prints the path on startupBack it up securely:
# Copy to a safe location cp mcp-identity.json ~/backups/icp-identity-backup.jsonProtect the backup:
Store on encrypted storage or password manager
Keep offline copies for critical identities
Never share or commit to git
Using a Custom Identity Location
Set the ICP_IDENTITY_FILE environment variable to control where the identity is stored:
{
"mcpServers": {
"icp-control-plane": {
"command": "node",
"args": ["/path/to/dist/index.js"],
"env": {
"ICP_IDENTITY_FILE": "/secure/location/my-icp-identity.json"
}
}
}
}Using an Existing dfx Identity
If you already have a dfx identity you want to use:
# Export your dfx identity to a PEM file
dfx identity export default > ~/my-identity.pemThen configure the MCP server to use it:
{
"env": {
"IDENTITY_PEM_PATH": "/path/to/my-identity.pem"
}
}Setup by Platform
Cursor IDE
Open Settings (
Ctrl+,/Cmd+,)Search for MCP or go to Features > MCP Servers
Click Edit in mcp.json (or find your
~/.cursor/mcp.jsonfile)Add the following to your
mcpServersobject:
{
"mcpServers": {
"icp-control-plane": {
"command": "node",
"args": [
"C:/Users/YourName/icp-control-plane-mcp-dist/dist/index.js"
]
}
}
}Important: Replace the path with your actual full path to
dist/index.js. Use forward slashes/even on Windows.
Restart Cursor - The 36 ICP tools will appear in your AI assistant
Claude Desktop
Open config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Add:
{
"mcpServers": {
"icp-control-plane": {
"command": "node",
"args": [
"/full/path/to/icp-control-plane-mcp-dist/dist/index.js"
]
}
}
}Restart Claude Desktop
VS Code / Windsurf / Zed
See docs/INSTALLATION.md for detailed instructions for these and other MCP clients.
Using with Local IC Replica
When developing locally with dfx:
# Start local replica first
dfx start --backgroundAdd ICP_HOST environment variable to your MCP config:
{
"mcpServers": {
"icp-control-plane": {
"command": "node",
"args": [
"/path/to/icp-control-plane-mcp-dist/dist/index.js"
],
"env": {
"ICP_HOST": "http://127.0.0.1:4943"
}
}
}
}For mainnet, either omit ICP_HOST (defaults to mainnet) or set:
{
"env": {
"ICP_HOST": "https://icp-api.io"
}
}Quickstart Workflows
1. Check Your Identity
get_principal_idIf is_anonymous: true, authenticate:
icp_login2. Check Your Balances
icp_check_balance → ICP tokens
icp_cycles_balance → Cycles on Cycles Ledger3. Create and Deploy a Canister (Local)
# Start local replica first
dfx start --backgroundicp_create_project { project_name: "my-app", project_type: "backend", language: "motoko" }
icp_build_motoko_canister { project_path: "./my-app" }
icp_create_canister {}
icp_install_code { canister_id: "...", wasm_path: "...", mode: "install" }Mainnet Note:
icp_create_canisterusesprovisional_create_canister_with_cycleswhich works on local replica only. For mainnet, useicp_to_cyclesto convert ICP to cycles via the Cycles Minting Canister (CMC), then create canisters through the Cycles Ledger. See README_AI.md for the full mainnet workflow.
4. Safe Canister Upgrade
icp_preflight_check { canister_id: "...", mode: "upgrade", wasm_path: "..." }
icp_upgrade_canister { canister_id: "...", wasm_path: "...", project_path: "./" }5. Call Any Canister Method
call_canister {
canister_id: "ryjl3-tyaaa-aaaaa-aaaba-cai",
method_name: "icrc1_balance_of",
args: [{ "owner": "YOUR_PRINCIPAL", "subaccount": null }],
arg_types: ["record { owner: principal; subaccount: opt blob }"],
ret_types: ["nat"],
is_query: true
}6. Top Up a Canister with Cycles
icp_top_up_canister { canister_id: "...", amount_icp: 0.5 }Environment Variables
Variable | Default | Description |
|
| Mainnet or |
| - | Optional PEM file for identity |
|
| Persistent identity storage |
|
| Port for Internet Identity auth |
Tool Categories
Category | Count | Key Tools |
Authentication | 4 |
|
Canister Lifecycle | 4 |
|
Canister Calls | 2 |
|
Financial | 7 |
|
Development | 6 |
|
Frontend | 4 |
|
Tokens | 2 |
|
Safety | 5 |
|
Total: 36 tools
See docs/TOOLS.md for complete tool contracts with parameters, outputs, and examples.
Candid Type Support
call_canister supports all Candid types:
Category | Types |
Primitives |
|
Complex |
|
BigInt types (nat, int, nat64, int64) are automatically handled. Use strings for values > 2^53.
Security
Identity File Security
The mcp-identity.json file contains your private key in plain text. Anyone with this file can:
Control all your canisters
Spend your ICP tokens
Transfer your assets
Impersonate your identity
Security best practices:
Practice | Command/Action |
Restrict file permissions |
|
Use encrypted storage | Store on encrypted disk or in a password manager |
Set custom location | Use |
Never commit to git | Already in |
Back up securely | Keep offline copies for important identities |
Canister Safety Features
The MCP server includes safety features to prevent accidents:
Preflight checks -
icp_preflight_checkvalidates deployments before executingController validation - Verifies you have permission before management operations
Upgrade mode by default - Preserves canister state (use
reinstallonly when intentional)Confirmation for destructive ops - Extra warnings for delete/reinstall operations
Recommended Workflow for Production
Development: Use local replica (
dfx start) - cycles are free, mistakes don't matterTesting: Deploy to mainnet with small amounts first
Production:
Add a second controller (another Principal or a multisig)
Keep WASM hashes for rollback capability
Monitor cycle balances regularly
SDK Compatibility
This server uses the modern ICP JavaScript SDK:
Package | Version | Purpose |
| ^4.0.0 | Agent, Candid, Identity, Principal |
| ^1.0.0 | MCP server implementation |
Follows best practices from:
Development
Build from Source
git clone https://github.com/Jesse-pink-lab/icp-control-plane-mcp-dist.git
cd icp-control-plane-mcp-dist
npm install
npm run buildRun Tests
npm testProject Structure
src/
├── index.ts # MCP server entry point
├── identity.ts # PEM identity loading
├── auth/ # Authentication (store, server, vault)
├── tools/
│ ├── auth.ts # Login/logout tools
│ ├── canister.ts # Generic canister calls
│ ├── lifecycle.ts # Create/install/manage
│ ├── banker.ts # ICP/cycles operations
│ ├── safety.ts # Preflight/upgrade safety
│ └── developer/ # Build/deploy tools
└── utils/
└── converter.ts # Candid type conversionDocumentation
Installation Guide - Platform-specific setup (Cursor, Claude Desktop, VS Code, etc.)
Tool Reference - Complete tool contracts for all 36 tools
Troubleshooting - Common issues and solutions
AI Agent Manual - Operating instructions for AI agents
Contributing - How to contribute
Changelog - Version history
Resources
License
MIT - see LICENSE
Built for the Internet Computer ecosystem
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jesse-pink-lab/icp-control-plane-mcp-dist'
If you have feedback or need assistance with the MCP directory API, please join our Discord server