/setup-mcp
Configure MCP server API keys in .env and add the optional MCP servers
> /plugin marketplace add solanabr/ai-kit> /plugin install solana-ai-kit@stbr
Command definition
setup-mcp.mddescription: "Configure MCP server API keys in .env and add the optional MCP servers"
model: sonnet
Walk the user through filling in `.env`. Secrets go in `.env`, never in `.mcp.json`.
Never read `.env` — safe-ai-skill denies it while it is on, High denies it regardless, and at every tier a value read into the transcript has already left the machine. Appending is the only contact this command has with the file.
Steps
1. Don't create `.env` yourself. If it may be missing, print this for the user to run and wait for them:
cp .env.example .env
2. See which keys are already set, by name only:
bash .claude/bin/env-keys.sh 2>/dev/null || echo "HELPER_UNAVAILABLE"
It prints one `KEY set|empty` line per key and never a value. Skip keys it reports as `set` unless the user asks to replace one; for a replacement, print the edit for the user to make rather than rewriting the file. On `HELPER_UNAVAILABLE`, ask which keys they want to set instead of guessing. 3. For each remaining key below, in order, ask the user to paste a value or say "skip". Append accepted values; leave skipped keys alone; never echo a value back.
printf '%s=%s\n' "$KEY" "$VALUE" >> .env
Append, never read-modify-write: there is nothing to read first. If the append is refused (Medium denies `.env` writes), print the line for the user to run.
MCP server key (the only one `.mcp.json` reads):
- `HELIUS_API_KEY`: Helius RPC and DAS API for the `helius` MCP server (https://dev.helius.xyz)
Optional skill/CLI keys, read at runtime by skill CLIs in `.claude/skills/ext/`, not by any MCP server:
- `MISTRAL_API_KEY`: QEDGen formal-verification CLI, for `fill-sorry` and `generate` (https://console.mistral.ai)
- `ARISTOTLE_API_KEY`: QEDGen formal-verification CLI, for the `aristotle` proof-search commands (https://aristotle.harmonic.fun)
- `THEGRID_API_KEY`: TheGrid Colosseum project-graph queries (https://thegrid.id)
- `THEGRID_GRAPHQL_ENDPOINT`: the default `https://beta.node.thegrid.id/graphql` works for most
- `QUICKNODE_RPC_URL`, `QUICKNODE_WSS_URL`, `QUICKNODE_API_KEY`: QuickNode RPC, WebSocket/Streams and DAS for the `quicknode` skill (https://www.quicknode.com)
- `X_BEARER_TOKEN`: X API bearer token for the `ct-alpha` CT research skill (https://developer.x.com)
- `DFLOW_API_KEY`: DFlow order-flow integration skill (credentials from hello@dflow.net)
Not an env key: the core `colosseum` skill signs in through its own helper, which keeps the credential in the OS store. If the user wants it working now, have them run `npx @colosseum-org/copilot-connect login` (Node 20+; `--device` where no browser can open) and check it with `status`. Never ask for a `COLOSSEUM_COPILOT_PAT` — that mechanism is retired. 4. Ask which optional MCP servers to add; the default is none, since each one starts with every session. Print the command for each one the user picks, for them to run — `Bash(claude mcp add*)` is denied at every firewall tier: an MCP server runs outside the sandbox, so adding one is the user's call. Each adds the server for this user and project only; append `--scope project` only if the user wants to share it through `.mcp.json`.
- Playwright, browser automation (needs a browser Playwright can launch): `claude mcp add playwright -- npx -y @playwright/mcp@latest --headless`
- Chrome DevTools, real performance traces and Core Web Vitals off a running page: `claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@1.10.1`. Google's own server, published on npm. It drives a Chrome instance, so it reads and acts on whatever that browser can reach, including any session the user is signed into — offer it for performance work against a local dev server, not as a default extra. Pin the version as above rather than `@latest`, so an upstream change cannot alter what attaches.
- Surfpool, local validator and mainnet-fork control: `claude mcp add surfpool -- surfpool mcp`. It needs the `surfpool` CLI on PATH; check with `command -v surfpool`, and if it is missing give the user the install command (`curl -L https://surfpool.run/install | sh` or `brew install txtx/taps/surfpool`) rather than running it.
- Chainstack, multi-chain RPC platform control: `claude mcp add --transport http chainstack https://mcp.chainstack.com/mcp`. It needs a key from https://console.chainstack.com/user/settings/api-keys for most of what it does — node deployment, project management and testnet funding — passed as `--header "Authorization: Bearer <key>"` on that command. Five read-only tools (docs search, platform status, pricing) answer without one. Every tool is listed either way, so a keyless install looks complete and fails at the call; say which half works before the user adds it.
- Supabase, the Postgres backend behind an indexer or dApp. Offer the read-only, project-scoped form first, as the recommended default: `claude mcp add --transport http supabase "https://mcp.supabase.com/mcp?read_only=true&project_ref=<ref>"`. Say what each parameter does and let the user choose — `read_only=true` hides the 12 write tools and forces `execute_sql` into a read-only Postgres session; `project_ref` drops the whole `account` group, which is what removes cross-project reach and `create_project`. Unflagged, `DEFAULT_FEATURES` gives 31 tools of which 12 write (36 exist, 13 of them not read-only). If the user wants write access — applying a migration, seeding a table — give them the form without the parameters they don't want, and tell them what it reaches: `execute_sql` is an unrestricted SQL channel into the app's database, `DROP`, `DELETE` and `TRUNCATE` included with no statement filtering, and `apply_migration` is the same reach with DDL. `create_project` and `create_branch` also spend money, branches hourly-billed on paid plans. Which form fits is the user's call; make it an informed one rather than a narrow one. Quote the path exactly: `https
Read more
description: "Configure MCP server API keys in .env and add the optional MCP servers" model: sonnet
Walk the user through filling in `.env`. Secrets go in `.env`, never in `.mcp.json`.
Never read `.env` — safe-ai-skill denies it while it is on, High denies it regardless, and at every tier a value read into the transcript has already left the machine. Appending is the only contact this command has with the file.
Steps
1. Don't create `.env` yourself. If it may be missing, print this for the user to run and wait for them:
cp .env.example .env
2. See which keys are already set, by name only:
bash .claude/bin/env-keys.sh 2>/dev/null || echo "HELPER_UNAVAILABLE"
It prints one `KEY set|empty` line per key and never a value. Skip keys it reports as `set` unless the user asks to replace one; for a replacement, print the edit for the user to make rather than rewriting the file. On `HELPER_UNAVAILABLE`, ask which keys they want to set instead of guessing. 3. For each remaining key below, in order, ask the user to paste a value or say "skip". Append accepted values; leave skipped keys alone; never echo a value back.
printf '%s=%s\n' "$KEY" "$VALUE" >> .env
Append, never read-modify-write: there is nothing to read first. If the append is refused (Medium denies `.env` writes), print the line for the user to run.
MCP server key (the only one `.mcp.json` reads):
- `HELIUS_API_KEY`: Helius RPC and DAS API for the `helius` MCP server (https://dev.helius.xyz)
Optional skill/CLI keys, read at runtime by skill CLIs in `.claude/skills/ext/`, not by any MCP server:
- `MISTRAL_API_KEY`: QEDGen formal-verification CLI, for `fill-sorry` and `generate` (https://console.mistral.ai)
- `ARISTOTLE_API_KEY`: QEDGen formal-verification CLI, for the `aristotle` proof-search commands (https://aristotle.harmonic.fun)
- `THEGRID_API_KEY`: TheGrid Colosseum project-graph queries (https://thegrid.id)
- `THEGRID_GRAPHQL_ENDPOINT`: the default `https://beta.node.thegrid.id/graphql` works for most
- `QUICKNODE_RPC_URL`, `QUICKNODE_WSS_URL`, `QUICKNODE_API_KEY`: QuickNode RPC, WebSocket/Streams and DAS for the `quicknode` skill (https://www.quicknode.com)
- `X_BEARER_TOKEN`: X API bearer token for the `ct-alpha` CT research skill (https://developer.x.com)
- `DFLOW_API_KEY`: DFlow order-flow integration skill (credentials from hello@dflow.net)
Not an env key: the core `colosseum` skill signs in through its own helper, which keeps the credential in the OS store. If the user wants it working now, have them run `npx @colosseum-org/copilot-connect login` (Node 20+; `--device` where no browser can open) and check it with `status`. Never ask for a `COLOSSEUM_COPILOT_PAT` — that mechanism is retired. 4. Ask which optional MCP servers to add; the default is none, since each one starts with every session. Print the command for each one the user picks, for them to run — `Bash(claude mcp add*)` is denied at every firewall tier: an MCP server runs outside the sandbox, so adding one is the user's call. Each adds the server for this user and project only; append `--scope project` only if the user wants to share it through `.mcp.json`.
- Playwright, browser automation (needs a browser Playwright can launch): `claude mcp add playwright -- npx -y @playwright/mcp@latest --headless`
- Chrome DevTools, real performance traces and Core Web Vitals off a running page: `claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@1.10.1`. Google's own server, published on npm. It drives a Chrome instance, so it reads and acts on whatever that browser can reach, including any session the user is signed into — offer it for performance work against a local dev server, not as a default extra. Pin the version as above rather than `@latest`, so an upstream change cannot alter what attaches.
- Surfpool, local validator and mainnet-fork control: `claude mcp add surfpool -- surfpool mcp`. It needs the `surfpool` CLI on PATH; check with `command -v surfpool`, and if it is missing give the user the install command (`curl -L https://surfpool.run/install | sh` or `brew install txtx/taps/surfpool`) rather than running it.
- Chainstack, multi-chain RPC platform control: `claude mcp add --transport http chainstack https://mcp.chainstack.com/mcp`. It needs a key from https://console.chainstack.com/user/settings/api-keys for most of what it does — node deployment, project management and testnet funding — passed as `--header "Authorization: Bearer <key>"` on that command. Five read-only tools (docs search, platform status, pricing) answer without one. Every tool is listed either way, so a keyless install looks complete and fails at the call; say which half works before the user adds it.
- Supabase, the Postgres backend behind an indexer or dApp. Offer the read-only, project-scoped form first, as the recommended default: `claude mcp add --transport http supabase "https://mcp.supabase.com/mcp?read_only=true&project_ref=<ref>"`. Say what each parameter does and let the user choose — `read_only=true` hides the 12 write tools and forces `execute_sql` into a read-only Postgres session; `project_ref` drops the whole `account` group, which is what removes cross-project reach and `create_project`. Unflagged, `DEFAULT_FEATURES` gives 31 tools of which 12 write (36 exist, 13 of them not read-only). If the user wants write access — applying a migration, seeding a table — give them the form without the parameters they don't want, and tell them what it reaches: `execute_sql` is an unrestricted SQL channel into the app's database, `DROP`, `DELETE` and `TRUNCATE` included with no statement filtering, and `apply_migration` is the same reach with DDL. `create_project` and `create_branch` also spend money, branches hourly-billed on paid plans. Which form fits is the user's call; make it an informed one rather than a narrow one. Quote the path exactly: `https
Claude Code, set up to ship on Solana. Not programs alone — the whole lifecycle: validating the idea, building the program and the app around it, shipping it, and the launch and growth work that follows.
Other commands on ai-kit.
More commands from other plugins.
build
CommandImplement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.

