LabscoMCP early access ↗
inerciaMCP SERVER · OFFICIAL PROJECT

MCPShell

Turn shell commands into MCP tools by writing YAML — with the guard conditions checked before anything runs.

by inercia ↗Editors, Terminals & Local Dev Environment✓ Official

LABSCO SUMMARY

You decide what the model is allowed to type.

Every tool here is one you wrote, and the constraints are checked before the shell sees anything — which is why the author's own advice is to keep the scope read-only rather than adding a tool that deletes files.

What it is

A Go binary that reads a YAML file of tool definitions and serves them over MCP. Each tool is a command template with typed parameters and a set of CEL expressions that must hold before the command is allowed to execute.

What you get

  • Tools defined in YAML: a name, a description, typed parameters with defaults and required flags, and the command template they expand into
  • CEL constraints evaluated before execution — directory.startsWith('/'), !directory.contains('..'), max_depth >= 1 && max_depth <= 3 — so a call that fails them never reaches the shell
  • Output prefixes, so the model receives framed results instead of bare stdout
  • Sandboxed runners for commands you would rather not run directly on the host
  • Tools resolved by name out of the tools directory, so a config can be referenced as example rather than a full path
  • Worked examples in the repository, including read-only kubectl and AWS CLI configurations

Requirements

The go command available to whatever launches the server — clients run it as go run github.com/inercia/MCPShell@v0.1.8 mcp --tools /my/example.yaml. Point --logfile somewhere writable. Any MCP client works: Cursor, VS Code, Witsy. MIT.

Setup effort

One command — go run github.com/inercia/MCPShell@v0.1.8 mcp --tools /my/example.yaml --logfile /some/path/mcpshell/example.log