Add an MCP server configuration to pi-mcp-adapter. Determine scope and server type, write the config, and verify the connection.
Step 1: Determine Scope
Ask the user if not obvious from context:
| Scope | Config File | When to Use |
|---|---|---|
| Global | ~/.pi/agent/mcp.json |
Server used across all projects |
| Project | .pi/mcp.json (project root) |
Server specific to one project |
Project-local configs override global ones. Both files use the same format.
Step 2: Determine Server Type
MCP servers connect via stdio (local process) or HTTP (remote URL).
Stdio server — runs a local command:
{
"mcpServers": {
"server-name": {
"command": "npx",
"args": ["-y", "package-name@latest"],
"env": { "KEY": "value" }
}
}
}
HTTP server — connects to a URL:
{
"mcpServers": {
"server-name": {
"url": "http://localhost:8080/mcp",
"headers": { "Authorization": "Bearer token" }
}
}
}
Step 3: Gather Configuration
Collect only what's needed. All fields except command/url are optional.
| Field | Type | Description |
|---|---|---|
command |
string | Executable to run (stdio) |
args |
string[] | Command arguments (stdio) |
env |
object | Environment variables (stdio) |
cwd |
string | Working directory (stdio) |
url |
string | Server URL (HTTP) |
headers |
object | HTTP headers (HTTP) |
auth |
"oauth" or "bearer" |
Auth method (HTTP) |
bearerToken |
string | Static bearer token |
bearerTokenEnv |
string | Env var name for bearer token |
lifecycle |
"lazy" / "eager" / "keep-alive" |
Connection strategy (default: lazy) |
idleTimeout |
number | Minutes before idle disconnect |
debug |
boolean | Show server stderr |
Lifecycle modes:
- lazy (default) — connects on first tool call, disconnects after idle timeout
- eager — connects at session start, no auto-disconnect
- keep-alive — connects at start, auto-reconnects if dropped
Step 4: Write the Config
- Read the target config file if it exists
- Merge the new server into the existing
mcpServersobject - Write the updated JSON
If the file doesn't exist, create it with the full structure:
{
"mcpServers": {
"server-name": { ... }
}
}
Warn if a server with the same name already exists and confirm before overwriting.
Step 5: Verify
- Run
/reloadto pick up the new config - Use
mcp({ connect: "server-name" })to test the connection - Use
mcp({ server: "server-name" })to list available tools - Report success or troubleshoot connection errors