shellmcp: README and ollmcp config
This commit is contained in:
@@ -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
|
||||||
@@ -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"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user