Use this skill when working on MCP (Model Context Protocol) features in supercli — implementing adapters, adding SSE support, working with mcp-proxy, or managing MCP server connections. Covers MCP adapter architecture, transport modes, JSON-RPC format, and server/client integration.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add javimosch/supercli --skill supercli_mcp_dev --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Supercli Mcp Dev?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/javimosch-supercli-mcp-dev)More formats (shields.io, HTML) on the badges page.
---
name: supercli-mcp-dev
description: Use this skill when working on MCP (Model Context Protocol) features in supercli — implementing adapters, adding SSE support, working with mcp-proxy, or managing MCP server connections. Covers MCP adapter architecture, transport modes, JSON-RPC format, and server/client integration.
---
# Supercli MCP Development
Work on MCP (Model Context Protocol) features in supercli including adapter implementation, SSE streaming support, and server integration.
## MCP Adapter Architecture
The MCP adapter (`cli/adapters/mcp.js`) supports multiple transport modes:
### Transport Modes
1. **HTTP/SSE MCP**: HTTP-based MCP servers with SSE streaming
2. **Stdio MCP with Daemon**: Local stdio MCP servers routed through daemon
3. **Stdio MCP Direct**: Direct stdio calls (may have compatibility issues)
### Key Components
- **`execute()`**: Main entry point, routes to appropriate transport
- **`callHttpMcpTool()`**: HTTP/SSE MCP handler with JSON-RPC support
- **`parseSseResponse()`**: SSE event parser
- **`callStdioTool()`**: Direct stdio execution
- **`stdioCallToolJsonRpc()`**: Stdio JSON-RPC protocol handler
- **`callDaemonTool()`**: Daemon-routed stdio calls
## HTTP/SSE Implementation
### Request Format
Uses JSON-RPC 2.0 format for HTTP MCP calls:
```javascript
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": toolName,
"arguments": input
},
"id": 1
}
```
### Headers
Must include both content types for SSE negotiation:
```javascript
{
"Content-Type": "application/json",
"Accept": "text/event-stream, application/json"
}
```
### SSE Response Parsing
Parses Server-Sent Events format:
- Lines starting with `event:` define event type
- Lines starting with `data:` contain event data
- Empty lines terminate events
- Accumulates chunks and returns final result
### Auto-detection
Automatically detects SSE responses via `Content-Type` header and falls back to JSON if not SSE.
## Stdio MCP with Daemon
### Configuration
```json
{
"adapterConfig": {
"server": "mcp-server-name",
"tool": "tool-name",
"stateful": true,
"timeout_ms": 60000
}
}
```
### Daemon Client
- File: `cli/mcp-daemon-client.js`
- Functions: `callDaemonTool()`, `listDaemonTools()`
- Maintains persistent sessions for stateful MCP servers
- **Daemon runs on CLI side** (not server) - starts on-demand when first command with `stateful: true` is executed via CLI
- Runs as detached background process with Unix socket at `~/.supercli/mcp-daemon.sock`
- Persists across command executions to maintain MCP server sessions
- Better for long-running stdio MCP servers
**Daemon Lifecycle:**
- Auto-starts on first CLI command execution (checks socket, spawns daemon if not running)
- Server UI only stores configuration; CLI syncs and executes
- Manual control: `supercli mcp daemon start/stop/status`
- Detached process (unref) - doesn't block CLI
- 5-second startup timeout with retry checks
## mcp-proxy Integration
### What is mcp-proxy?
Transforms stdio MCP servers into HTTP/SSE endpoints. Useful for:
- Exposing local stdio MCPs over HTTP
- Testing MCP tools via HTTP clients
- Bridging stdio to SSE transport
### Usage Pattern
```bash
# Start mcp-proxy
npx -y mcp-proxy --port 3002 -- npx -y @andredezzy/deep-directory-tree-mcp
# Add to supercli
supercli server mcp add '{"name":"deep-tree","url":"http://localhost:3002"}'
# Create command
supercli server commands add '{"namespace":"tree","resource":"deep","action":"list","adapter":"mcp","adapterConfig":{"url":"http://localhost:3002","tool":"get_deep_directory_tree"}}'
# Sync and use
supercli sync
supercli tree deep list --path /some/dir --depth 3
```
### mcp-proxy Options
- `--port`: Port to listen on (default: 8080)
- `--streamEndpoint`: HTTP endpoint path (default: /mcp)
- `--stateless`: Disable session management
- `--sseEndpoint`: SSE endpoint path (default: /sse)
## Server-Side MCP Management
### Server Routes
- `POST /api/mcp`: Add MCP server
- `GET /api/mcp`: List MCP servers
- `DELETE /api/mcp/:name`: Remove MCP server
### MCP Server Entry Format
```json
{
"name": "server-name",
"url": "http://localhost:3002",
"command": "npx -y @package",
"args": ["--arg1", "--arg2"],
"stateful": true,
"timeout_ms": 60000,
"headers": {},
"env": {}
}
```
### Server UI
- `/mcp`: MCP server management UI
- Add/remove servers
- View server status
- Test MCP tools
## Client-Side MCP Usage
### Command Configuration
```json
{
"namespace": "mcp",
"resource": "server",
"action": "tool",
"adapter": "mcp",
"adapterConfig": {
"server": "mcp-server-name",
"tool": "tool-name",
"stateful": true
}
}
```
### Argument Passing
Use space syntax for CLI arguments:
- ✅ `supercli tree deep list --path /dir --depth 2`
- ❌ `supercli tree deep list --path=/dir --depth=2`
The supercli argument parser treats `--key=value` as a boolean flag with key=`key=value`, not as a key-value pair.
## Testing MCP Integration
### Test with mcp-proxy
```bash
# Start proxy
npx -y mcp-proxy --port 3002 -- npx -y @andredezzy/deep-directory-tree-mcp
# List tools
curl http://localhost:3002/tool -X POST \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream, application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
# Call tool
curl http://localhost:3002/tool -X POST \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream, application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"tool-name","arguments":{}},"id":1}'
```
### Test with Daemon
```bash
# Test daemon connection
node cli/mcp-daemon-client.js
# List tools via daemon
# (daemon client handles this internally)
```
## Common Issues
### "Not Acceptable: Client must accept both application/json and text/event-stream"
**Cause**: mcp-proxy requires SSE Accept header.
**Fix**: Ensure MCP adapter sends `Accept: text/event-stream, application/json`.
### "Parse error: Invalid JSON-RPC message"
**Cause**: Wrong request format for HTTP MCP.
**Fix**: Use JSON-RPC 2.0 format with `jsonrpc`, `method`, `params`, and `id` fields.
### "Tool not found"
**Cause**: Incorrect tool name or tool not exposed by MCP server.
**Fix**: Use `tools/list` method to discover available tool names.
### "Input validation error"
**Cause**: Arguments not passed correctly or in wrong format.
**Fix**: Use space syntax (`--key value`) and verify argument schema matches tool expectations.
## File Locations
- **MCP Adapter**: `cli/adapters/mcp.js`
- **Daemon Client**: `cli/mcp-daemon-client.js`
- **Stdio JSON-RPC**: `cli/mcp-stdio-jsonrpc.js`
- **Server MCP Routes**: `server/routes/mcp.js`
- **Server MCP Service**: `server/services/mcpService.js`
## Development Workflow
1. Implement MCP adapter changes
2. Test with local stdio MCP or mcp-proxy
3. Update docs/server.md with new features
4. Update supercli-cli-admin-cheatsheet skill
5. Test via CLI commands
6. Verify server UI integration
## Future Enhancements
- **Streaming output**: Implement `--stream` flag for incremental SSE output
- **Session management**: Add automatic session ID handling for stateful HTTP MCP
- **Tool discovery**: Auto-discover tools from MCP servers
- **Schema validation**: Validate arguments against tool input schemas
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!