MCP CLI Wrapper
Wraps any CLI tool and exposes its subcommands as MCP tools with typed parameters, supporting both config-driven mode for structured commands and fallback mode for raw CLI execution.
README
MCP CLI Wrapper
A flexible MCP (Model Context Protocol) server that wraps any CLI tool and exposes its subcommands as individual MCP tools with typed parameters.
Features
- Config-driven tools: Define CLI subcommands as MCP tools via JSON configuration
- Fallback mode: Single
run_clitool when no config provided - Type-safe parameters: Zod validation for all inputs before execution
- Flexible parameter types: Supports positional args, flags, and boolean switches
- Preserved parameter order: Flags and positionals stay interleaved as defined
- Nested subcommands: Supports
git remote addstyle commands - Safe execution: Uses
spawnSyncto prevent command injection - Full output capture: Returns stdout, stderr, and exit code
Installation
npm install
npm run build
Usage
Basic (Fallback Mode)
Run without a config file to get a single run_cli tool that accepts raw arguments:
node dist/index.js git
This exposes one tool:
run_cli- Acceptsargs: string[]and executesgit <args...>
With Configuration
Run with a config file to expose multiple typed tools:
node dist/index.js git ./config.example.json
This exposes tools like:
git_status- Show working tree statusgit_commit- Commit with typedmessageand optionalallflaggit_add- Stage files withpathspecparametergit_log- Show logs withonelineandmax_countoptions- And more...
Configuration Format
Create a JSON file with tool definitions:
{
"tools": [
{
"name": "git_commit",
"description": "Record changes to the repository with a commit message.",
"subcommand": "commit",
"parameters": [
{
"name": "message",
"type": "string",
"description": "The commit message.",
"flag": "-m",
"required": true
},
{
"name": "all",
"type": "boolean",
"description": "Automatically stage all modified files.",
"flag": "--all",
"required": false
}
]
}
]
}
Parameter Configuration
Each parameter supports:
| Field | Type | Description |
|---|---|---|
name |
string | Parameter name (used in schema) |
type |
"string" | "number" | "boolean" |
Parameter type |
description |
string | Description shown to AI agents |
flag |
string (optional) | CLI flag (e.g., -m, --force). If omitted, parameter is positional |
required |
boolean | Whether the parameter is required |
Parameter Order
Parameters are processed in declaration order. This allows you to define tools where flags must precede positional arguments:
{
"name": "docker_run",
"subcommand": "run",
"parameters": [
{ "name": "interactive", "flag": "-it", "type": "boolean", "required": false },
{ "name": "image", "type": "string", "required": true },
{ "name": "command", "type": "string", "required": false }
]
}
This produces: docker run -it ubuntu bash (flags before positionals)
Nested Subcommands
Use spaces in subcommand for nested commands:
{
"name": "git_remote_add",
"subcommand": "remote add",
"parameters": [
{ "name": "name", "type": "string", "required": true },
{ "name": "url", "type": "string", "required": true }
]
}
MCP Client Configuration
Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"git": {
"command": "node",
"args": ["/path/to/mcp-cli-wrapper/dist/index.js", "git", "/path/to/config.json"]
}
}
}
Claude Code
Add to your MCP settings:
{
"mcpServers": {
"git": {
"command": "node",
"args": ["./dist/index.js", "git", "./config.example.json"]
}
}
}
Example Configs
Git (included)
See config.example.json for a complete Git configuration with 8 tools.
Docker (example)
{
"tools": [
{
"name": "docker_ps",
"description": "List running containers",
"subcommand": "ps",
"parameters": [
{ "name": "all", "type": "boolean", "flag": "-a", "description": "Show all containers", "required": false }
]
},
{
"name": "docker_run",
"description": "Run a container",
"subcommand": "run",
"parameters": [
{ "name": "detach", "type": "boolean", "flag": "-d", "description": "Run in background", "required": false },
{ "name": "name", "type": "string", "flag": "--name", "description": "Container name", "required": false },
{ "name": "image", "type": "string", "description": "Image to run", "required": true }
]
}
]
}
Security
- No shell interpolation: Arguments are passed directly via
spawnSync, preventing command injection - Input validation: All parameters validated with Zod schemas before execution
- Local execution only: Commands run on the local machine with the user's permissions
Development
# Install dependencies
npm install
# Build
npm run build
# Run in development
npm run dev git ./config.example.json
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.