mcpops
v0.1.0
Published
Universal MCP operations CLI — manage any MCP gateway from one control plane
Downloads
91
Maintainers
Readme
mcpops
Universal MCP operations CLI — manage any MCP gateway from one control plane.
mcpops is the Terraform of the MCP ecosystem. Instead of building another gateway, it manages them all through a provider-agnostic plugin architecture.
mcpops status # unified status across all backends
mcpops tools list # discover tools across all instances
mcpops connect factory edge --mode bridge # federate between gateways
mcpops discover factory mqtt # discover IoT devicesWhy mcpops
The MCP gateway space is crowded — MetaMCP, Microsoft MCP Gateway, mcp-iot-gateway, and dozens more. Each has its own CLI, API, and management model. mcpops unifies them behind a single control plane.
- Provider-agnostic: One CLI for all your MCP infrastructure
- Config-as-code: YAML config for your entire MCP topology
- Federation: Connect instances across providers (peer or bridge mode)
- Discovery: Find tools and devices across all backends
- Extensible: Add new providers with a simple TypeScript interface
Install
npm install -g mcpopsOr run directly:
npx mcpops --helpQuick Start
1. Add your gateways
# Add an IoT gateway
mcpops provider add iot-gateway factory http://192.168.1.100:45678/mcp \
--auth-type api-key --auth-key igt_xxxx
# Add a MetaMCP instance
mcpops provider add metamcp staging http://localhost:12008 \
--auth-type api-key --auth-key sk_mt_xxxx2. Check status
mcpops statusmcpops status
INSTANCE PROVIDER STATUS TOOLS PEERS
──────────────────────────────────────────────────────
factory iot-gateway ● connected 42 tools 3 peers
staging metamcp ● connected 18 tools 5 peers3. Discover tools
mcpops tools list
mcpops tools list --instance factory
mcpops tools call factory iot_discover '{"connection":"mqtt"}'4. Federate instances
mcpops connect factory staging --mode bridge --live5. Discover devices
mcpops discover factory mqttCommands
| Command | Description |
|---------|-------------|
| mcpops status [instance] | Unified status across all instances |
| mcpops provider list | List providers and configured instances |
| mcpops provider add <provider> <name> <url> | Add a gateway instance |
| mcpops provider remove <name> | Remove an instance |
| mcpops tools list [-i instance] | List tools across instances |
| mcpops tools call <instance> <tool> [args] | Call a tool |
| mcpops connect <from> <to> [--mode] | Federate two instances |
| mcpops disconnect <from> <to> | Remove federation |
| mcpops discover <instance> [scope] | Discover devices/services |
| mcpops config show | Display configuration |
| mcpops config export | Export config as YAML |
| mcpops config validate | Validate config file |
Configuration
Config lives at ~/.config/mcpops/config.yaml:
version: 1
instances:
factory:
provider: iot-gateway
url: http://192.168.1.100:45678/mcp
auth:
type: api-key
key: igt_xxxx
staging:
provider: metamcp
url: http://localhost:12008
auth:
type: api-key
key: sk_mt_xxxx
federations:
- from: factory
to: staging
mode: bridgeOverride the config path:
MCPOPS_CONFIG=./my-config.yaml mcpops statusProviders
Built-in
| Provider | Description | Federation | Discovery |
|----------|-------------|------------|-----------|
| iot-gateway | mcp-iot-gateway | ✅ peer + bridge | ✅ IoT devices |
| metamcp | MetaMCP aggregator | — | — |
Writing a Provider
Implement the Provider abstract class:
import { Provider } from "mcpops";
export class MyGatewayProvider extends Provider {
readonly name = "my-gateway";
readonly version = "1.0.0";
readonly capabilities = {
canFederate: false,
canBridge: false,
canDiscover: false,
supportsAuth: true,
supportsNamespaces: false,
};
async connect(config) { /* ... */ }
async disconnect(instanceId) { /* ... */ }
async healthCheck(instanceId) { /* ... */ }
async status(instanceId) { /* ... */ }
listInstances() { /* ... */ }
async listTools(instanceId) { /* ... */ }
async callTool(instanceId, tool, args) { /* ... */ }
async shutdown() { /* ... */ }
}License
MIT — Symbia Labs
