shellmcp: README and ollmcp config

This commit is contained in:
2026-11-05 10:17:21 +01:00
parent e6ec0e6882
commit 42606783a1
2 changed files with 52 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
# shellmcp
An MCP server (stdio, Python stdlib only) with one tool, `run`: a bash command, its exit code
and its output. Gives any MCP client's model a terminal.
python3 shellmcp.py [--mode readonly|all] [--cwd DIR] [--timeout 60] [--max-output 8000] [--hide PATH]...
- `--mode readonly` (default): every command runs in bubblewrap. The filesystem is read-only
except a private /tmp; no network; no other processes visible; ~/.ssh, ~/.gnupg and each
`--hide PATH` look empty. Needs `bwrap`.
- `--mode all`: the user's full permissions (here: wheel and docker, so effectively root).
Use it only with a client that asks before each tool call.
The tool description names the host, user, directory, limits and which modern tools
(rg, fd, jq, ...) are installed, so the model prefers them.
## Where commands run
Wherever this process runs. The client starts it (stdio), so with `"command": "python3"` the
commands run on the client's machine. To act on the GPU host from any machine, start it
over ssh (key login needed):
"command": "ssh", "args": ["fabian@192.168.2.169", "python3", "/home/fabian/coding/misc/shellmcp/shellmcp.py", "--mode", "readonly"]
## Clients
ollmcp with gemma4 on vLLM (`examples/ollmcp.json` registers `shell` and `shell-rw`):
ollmcp -p openai -H http://127.0.0.1:8000/v1 -m gemma4 -j examples/ollmcp.json
Claude Code:
claude mcp add shell -- python3 /home/fabian/coding/misc/shellmcp/shellmcp.py --mode readonly
OpenAI-API apps without MCP (Open WebUI and the like): wrap it as an OpenAPI server with
`uvx mcpo --port 8001 -- python3 shellmcp.py --mode readonly`.
## Test
python3 -m unittest -v test_shellmcp
+12
View File
@@ -0,0 +1,12 @@
{
"mcpServers": {
"shell": {
"command": "python3",
"args": ["/home/fabian/coding/misc/shellmcp/shellmcp.py", "--mode", "readonly", "--cwd", "/home/fabian", "--max-output", "4000"]
},
"shell-rw": {
"command": "python3",
"args": ["/home/fabian/coding/misc/shellmcp/shellmcp.py", "--mode", "all", "--cwd", "/home/fabian", "--max-output", "4000"]
}
}
}