FirstKey

io.github.FirstKeyHQPublished by GitHub account FirstKeyHQv0.1.0Updated Oct 24, 2026

FirstKey MCP: agent wallets, free cycles faucet, and one-command site deploys on ICP.

The publisher's own server: First

VerifiedStreamable HTTPWeb executableCloud & InfrastructureFinance

Overview

AI-generated overview

Remote MCP server on the Internet Computer that lets an assistant create agent wallets, claim free cycles, deploy static sites and read swap quotes.

What you can do
  • Create an Ed25519 wallet and return its principal plus a one-time private key
  • Claim a one-time free cycles grant and check a principal's cycles balance
  • Deploy a static site canister, upload large files in chunks, and get the live site URL
  • Get a Fuel card-payment link to refuel an agent
  • Fetch read-only ICPSwap swap quotes between tokens or ledger principals
When to use it
Useful when an agent needs its own on-chain identity and hosting on the Internet Computer without running infrastructure: spinning up a wallet, getting starter cycles, publishing a small static site, or checking swap prices before acting.
Requirements
A remote Streamable HTTP endpoint at mcp.firstkey.io; no package, API key or environment variable is declared. The client must speak JSON-RPC 2.0 over HTTP and accept plain JSON responses; the server is stateless and CORS is open.
Before you install
create_wallet returns a PKCS#8 private key once and never stores it, so whoever sees the response controls the wallet. Deploys and faucet grants are limited to one free use per agent principal, and further deploys need payment through the Fuel link. Deploy tools create canisters and upload files, which writes on-chain state and spends cycles.

Installation

In SourceWeft

  1. Open FirstKey in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.FirstKeyHQ%2Ffirstkey-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "firstkey": {
      "type": "http",
      "url": "https://mcp.firstkey.io/mcp"
    }
  }
}

README

FirstKey MCP Server

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 (*).

Tools

ToolWhat it does
create_walletGenerates a fresh Ed25519 wallet (principal + PKCS#8 PEM private key). The key is returned once and never stored.
claim_faucet_grantClaims the one-time free 1T cycles grant from the FirstKey faucet for an agent principal.
deploy_siteCreates 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_chunkChunked upload of large files to an already-deployed agent site.
check_cyclesReads a principal's cycles balance on the cycles ledger.
get_fuel_linkReturns the FirstKey Fuel card-payment link to refuel an agent (https://firstkey.io/fuel?for=<principal>).
get_swap_quoteLive read-only ICPSwap quote (on-chain factory→pool): pay token/amount → receive amount + implied price. Symbols or ledger principals; no tokens move.

Quick test

bash
URL=https://mcp.firstkey.io/mcp# initializecurl -s $URL -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}' | head -c 600# list toolscurl -s $URL -H 'Content-Type: application/json' \  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | python3 -c "import json,sys; [print(t['name']) for t in json.load(sys.stdin)['result']['tools']]"# create a walletcurl -s $URL -H 'Content-Type: application/json' \  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"create_wallet","arguments":{}}}'

Architecture

  • 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).
  • The static-site host WASM (firstkey-static-host) is embedded via include_bytes! and installed into every deployed site canister.
  • Deploy pool: the canister's own cycles balance. One free deploy per agent principal (tracked in stable memory); when the pool can't cover a deploy the tool returns the Fuel link instead.

Build & deploy

bash
export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"cd ~/workspace/firstkey-static-host && cargo build --target wasm32-unknown-unknown --releasecd ~/workspace/firstkey-mcp && cargo build --target wasm32-unknown-unknown --release
# create (needs ~5.5T cycles on the strider identity's cycles ledger)icp canister create -n ic --detached --cycles "5.5t" \  --controller fhvid-ondyx-ziq2v-udsry-cfgki-okcur-gcryu-2wwai-b63ku-ptgkk-yqe \  --controller o5joj-543gr-ibdnq-q6f26-sbevy-iorvz-lqo2i-ocyr7-crp2u-sggj7-cae \  --identity strider -q# installicp canister install <CANISTER> \  --wasm ~/workspace/firstkey-mcp/target/wasm32-unknown-unknown/release/firstkey_mcp.wasm \  -n ic --identity ops -y# authorize on the fauceticp canister call --network ic 3l667-lyaaa-aaaam-ajkqa-cai set_mcp_canister \  --candid ~/workspace/firstkey-faucet/faucet.did --identity ops \  '(principal "<MCP_CANISTER>")'

Custom domain (mcp.firstkey.io)

DNS records needed at Porkbun (see DNS.md):

  1. CNAME mcp.firstkey.io → mcp.firstkey.io.icp1.io
  2. TXT _canister-id.mcp.firstkey.io → <canister-id>
  3. CNAME _acme-challenge.mcp.firstkey.io → _acme-challenge.mcp.firstkey.io.icp2.io

Then validate + register:

bash
curl 'https://icp.net/custom-domains/v1/mcp.firstkey.io/validate'curl -X POST 'https://icp.net/custom-domains/v1/mcp.firstkey.io'curl 'https://icp.net/custom-domains/v1/mcp.firstkey.io'  # poll until "registered"

The canister already serves /.well-known/ic-domains.

Registry publishing

  • Official MCP registry (registry.modelcontextprotocol.io): see registry/server.json (draft). Publish via GitHub OIDC from the repo's CI.
  • Smithery (smithery.ai/new): submit the public HTTPS URL once mcp.firstkey.io is live.

Faucet counterpart

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.

Source: README.md at commit 90944a4

Tools

0
SourceWeft has not read this server's tools yet.

Version history

1
  1. v0.1.0LatestSep 24, 2026

Score

75% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.

Other First integrations