supercli-mcp-dev
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.
- License 许可
- MIT
- 最近更新
- 2026-11-02
- Stars
- ★ 57
- Forks
- 5
01 前言 Front Matter
- 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.
03 SKILL.md 正文
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
- HTTP/SSE MCP: HTTP-based MCP servers with SSE streaming
- Stdio MCP with Daemon: Local stdio MCP servers routed through daemon
- Stdio MCP Direct: Direct stdio calls (may have compatibility issues)
Key Components
execute(): Main entry point, routes to appropriate transportcallHttpMcpTool(): HTTP/SSE MCP handler with JSON-RPC supportparseSseResponse(): SSE event parsercallStdioTool(): Direct stdio executionstdioCallToolJsonRpc(): Stdio JSON-RPC protocol handlercallDaemonTool(): Daemon-routed stdio calls
HTTP/SSE Implementation
Request Format
Uses JSON-RPC 2.0 format for HTTP MCP calls:
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": toolName,
"arguments": input
},
"id": 1
}
Headers
Must include both content types for SSE negotiation:
{
"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
{
"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: trueis 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
# 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 serverGET /api/mcp: List MCP serversDELETE /api/mcp/:name: Remove MCP server
MCP Server Entry Format
{
"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
{
"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
# 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
# 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
- Implement MCP adapter changes
- Test with local stdio MCP or mcp-proxy
- Update docs/server.md with new features
- Update supercli-cli-admin-cheatsheet skill
- Test via CLI commands
- Verify server UI integration
Future Enhancements
- Streaming output: Implement
--streamflag 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
04 同仓库更多 Skills
sc-machin-mcp
暂无简介
supercli.quickstart
SuperCLI capability router — discover and execute CLI commands through namespace.resource.action interface
zzdoc
Use this skill to compile scdoc manpages with a fast Zig-based compiler.
zx
Use this skill when the user wants to a tool for writing better scripts using node.js.
zvm
Use this skill when the user wants to manage multiple Zig compiler versions.
quickstart
暂无简介