The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the FirstKey listing page.
An MCP (Model Context Protocol) server running as a canister on the Internet Computer. One integration point that every MCP-compatible agent framework consumes natively: LangChain/LangGraph, CrewAI, AutoGen, Vercel AI SDK, OpenAI Agents SDK, Google ADK, Claude Desktop, Cursor, and more.
Endpoint: POST https://mcp.firstkey.io/mcp (JSON-RPC 2.0, Streamable HTTP)
Plain JSON responses, stateless (no session ids). CORS enabled (*).
| Tool | What it does |
|---|---|
create_wallet | Generates a fresh Ed25519 wallet (principal + PKCS#8 PEM private key). The key is returned once and never stored. |
claim_faucet_grant | Claims the one-time free 1T cycles grant from the FirstKey faucet for an agent principal. |
deploy_site | Creates a site canister, installs the static host, uploads files, returns the live https://<canister>.icp.net URL. The agent becomes a controller of its own site. One free deploy per agent. |
deploy_upload_chunk | Chunked upload of large files to an already-deployed agent site. |
check_cycles | Reads a principal's cycles balance on the cycles ledger. |
get_fuel_link | Returns the FirstKey Fuel card-payment link to refuel an agent (https://firstkey.io/fuel?for=<principal>). |
get_swap_quote | Live read-only ICPSwap quote (on-chain factory→pool): pay token/amount → receive amount + implied price. Symbols or ledger principals; no tokens move. |
http_request (query): serves initialize, tools/list, ping, CORS preflight,
/.well-known/ic-domains, and a landing page.tools/call upgrades to http_request_update (update context) because it makes
inter-canister calls: raw_rand (wallet), the faucet's claim_for (grants),
the cycles ledger (balances), and the management canister
(create_canister_with_extra_cycles / install_code / update_settings for deploys).firstkey-static-host) is embedded via include_bytes!
and installed into every deployed site canister.mcp.firstkey.io)DNS records needed at Porkbun (see DNS.md):
CNAME mcp.firstkey.io → mcp.firstkey.io.icp1.ioTXT _canister-id.mcp.firstkey.io → <canister-id>CNAME _acme-challenge.mcp.firstkey.io → _acme-challenge.mcp.firstkey.io.icp2.ioThen validate + register:
The canister already serves /.well-known/ic-domains.
registry.modelcontextprotocol.io): see registry/server.json
(draft). Publish via GitHub OIDC from the repo's CI.smithery.ai/new): submit the public HTTPS URL once mcp.firstkey.io
is live.claim_for(agent) lives on the faucet canister (3l667-lyaaa-aaaam-ajkqa-cai,
source ~/workspace/firstkey-faucet/). It enforces the once-per-principal rule
against the agent principal and performs the standard 1T ledger grant. Only the
principal set via set_mcp_canister (controller-only) may call it.