pi-mcp-sidecar
Fully block and restore pi-mcp-adapter servers from an independent Pi sidecar extension.
Package details
Install pi-mcp-sidecar from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-mcp-sidecar- Package
pi-mcp-sidecar- Version
0.1.0- Published
- Jul 28, 2026
- Downloads
- 142/mo · 142/wk
- Author
- clinemoretti
- License
- MIT
- Types
- extension
- Size
- 66.1 KB
- Dependencies
- 2 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./pi-mcp-sidecar/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-mcp-sidecar
pi-mcp-sidecar is a companion Pi extension for pi-mcp-adapter. It adds the /mcpc command without replacing /mcp, importing adapter internals, or modifying the adapter package.
It can fully block an MCP server so the adapter cannot connect to it or expose any of its tools, prompts, descriptions, panel entries, or status information. The original configuration can be restored later.
Why
Setting disabled: true in pi-mcp-adapter prevents a connection, but the server can still appear in adapter descriptions, /mcp, and status output. MCPC instead archives every active configuration fragment for the selected server and removes those fragments from the adapter's configuration sources. After Pi reloads, the adapter no longer sees that server at all.
MCPC does not depend on private adapter APIs. It independently follows the adapter's public configuration layout so it can remain installed alongside adapter updates.
Features
- Fully block an MCP server across all active configuration layers.
- Restore every archived fragment to its original location and value.
- Refuse to overwrite a same-name definition created after the server was blocked.
- Clean up stale archives after
/mcp setupor a manual replacement. - Stage multiple changes in an interactive TUI and apply them with one Pi reload.
- Preserve unrelated JSON/JSONC content, including comments and trailing commas.
- Use atomic writes, multi-file rollback, persistent recovery state, and a process lock.
- Register only
/mcpc;/mcpremains owned bypi-mcp-adapter.
Installation
Install both the adapter and this sidecar from npm:
pi install npm:pi-mcp-adapter
pi install npm:pi-mcp-sidecar
Run /reload once if Pi was already open. Later successful block and enable operations reload Pi automatically.
A Git checkout can also be installed directly:
pi install git:github.com/ClineMoretti/pi-mcp-sidecar
For local development:
pi install /absolute/path/to/pi-mcp-sidecar
Do not install the npm, Git, and local-path variants at the same time; they would register the same /mcpc command more than once.
Commands
/mcpc Open the interactive server list
/mcpc list Open the list, or print status outside TUI mode
/mcpc block <server> Block a server and reload Pi
/mcpc enable <server> Restore a blocked server and reload Pi
/mcpc cleanup <server> Remove one stale archive with a same-name conflict
/mcpc cleanup --all Remove all stale archives with conflicts
Interactive controls
Up/Down: Move the cursor. Pi'stui.select.up/downkeybindings are respected.Space: Stage the selected server as enabled (●) or blocked (○) without leaving the panel.Ctrl+S,Esc, orq: Save all pending changes, close the panel, and reload Pi once.Ctrl+C: Discard pending changes and close the panel.
The panel marks pending rows with *. It reloads only when at least one saved change succeeds.
Same-name conflicts
Suppose demo is blocked and /mcp setup later creates a new definition named demo:
- MCPC reports a conflict on session reload and marks the item as
conflict. /mcpc enable demorefuses to restore the archive and does not overwrite the new definition.- After confirming that the new definition should be kept, run
/mcpc cleanup demoto discard the stale archive.
Cleanup is allowed only for genuine conflicts. An authoritative archive cannot be deleted accidentally through the cleanup command.
Configuration sources
MCPC follows the adapter's layered configuration and discovery behavior for:
~/.config/mcp/mcp.json~/.agents/mcp.json~/.agents/mcp/mcp.json~/.pi/agent/mcp.json, includingPI_CODING_AGENT_DIR<project>/.mcp.json<project>/.pi/mcp.json--mcp-config <path>- Cursor, Claude Code, Claude Desktop, Codex, OpenCode, Windsurf, and VS Code imports
settings.hostConfigDiscovery: "on"
For OpenCode, MCPC handles every global and project fragment that contributes to one merged server.
State and file safety
Blocked definitions are archived in ~/.pi/agent/mcpc-state.json, or the equivalent directory selected by PI_CODING_AGENT_DIR. The file is written with restrictive permissions where the platform supports them.
MCP definitions can contain headers, tokens, environment variables, and other secrets. Never publish, share, or commit mcpc-state.json.
Configuration updates use temporary files and atomic rename. A failed multi-file commit rolls back files already written. Block persists its archive before deleting source definitions; enable restores definitions before removing the archive. A short-lived exclusive lock prevents concurrent MCPC operations from corrupting state.
JSON and JSONC use targeted edits, preserving unrelated comments and trailing commas. TOML is parsed and serialized structurally, so its meaning is preserved but formatting and comments may change.
Shared import warning
To make an imported server completely invisible to the adapter, MCPC must temporarily remove it from the active shared source. While blocked, other applications using the same Cursor, Codex, OpenCode, or similar configuration will also stop seeing that server. Enabling it restores the archived definition. Other server entries are not changed.
Compatibility
The current release is integration-tested with:
- Pi
0.82.1 pi-mcp-adapter2.15.0- Node.js
22.19.0or newer
The extension is an independent package, so adapter updates do not overwrite its code or state.
Development
npm install --legacy-peer-deps
npm run check
npm pack --dry-run
The test suite covers layered JSON/JSONC configuration, Codex TOML imports, merged OpenCode sources, same-name conflicts, staged TUI changes, cancellation, and single-reload batch application.
License
MIT