Back to skills
SKILL.md
Supercli Mcp Dev
ASecurityUse 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.
- 54 stars
- 0 votes
- 0 copies
- 3 views
- Added September 6, 2026
Works with
Security analysis
96/100- Uses curl or wget to download content
npx -y skills add javimosch/supercli --skill supercli_mcp_dev --agent claude-codeAre you the author of Supercli Mcp Dev?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/javimosch-supercli-mcp-dev)---
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
Attribution
Comments
Loading comments…