mcp-switchboard-server-harness 0.3.0.dev3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mcp_switchboard_server_harness-0.3.0.dev3/.gitignore +18 -0
- mcp_switchboard_server_harness-0.3.0.dev3/PKG-INFO +60 -0
- mcp_switchboard_server_harness-0.3.0.dev3/README.md +44 -0
- mcp_switchboard_server_harness-0.3.0.dev3/pyproject.toml +32 -0
- mcp_switchboard_server_harness-0.3.0.dev3/src/mcp_switchboard_server_harness/__init__.py +3 -0
- mcp_switchboard_server_harness-0.3.0.dev3/src/mcp_switchboard_server_harness/__main__.py +3 -0
- mcp_switchboard_server_harness-0.3.0.dev3/src/mcp_switchboard_server_harness/server.py +828 -0
- mcp_switchboard_server_harness-0.3.0.dev3/tests/conftest.py +11 -0
- mcp_switchboard_server_harness-0.3.0.dev3/tests/test_mcp_protocol.py +82 -0
- mcp_switchboard_server_harness-0.3.0.dev3/tests/test_tools.py +336 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.pyc
|
|
3
|
+
*.egg-info/
|
|
4
|
+
.venv/
|
|
5
|
+
venv/
|
|
6
|
+
build/
|
|
7
|
+
dist/
|
|
8
|
+
# ...except the console's, which is committed on purpose: the hub embeds it, so
|
|
9
|
+
# `go build` has to work without npm (spec.md U1). CI rebuilds it and fails if
|
|
10
|
+
# this copy is stale.
|
|
11
|
+
!hub/web/dist/
|
|
12
|
+
.pytest_cache/
|
|
13
|
+
.mypy_cache/
|
|
14
|
+
.ruff_cache/
|
|
15
|
+
.env
|
|
16
|
+
result
|
|
17
|
+
result-*
|
|
18
|
+
.direnv/
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: mcp-switchboard-server-harness
|
|
3
|
+
Version: 0.3.0.dev3
|
|
4
|
+
Summary: A stdio MCP server exposing filesystem, git and shell tools for coding agents
|
|
5
|
+
Author: Akos Papp
|
|
6
|
+
License: MIT
|
|
7
|
+
Keywords: coding-agent,mcp,model-context-protocol,switchboard
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Requires-Python: >=3.10
|
|
12
|
+
Requires-Dist: mcp<3,>=2.2
|
|
13
|
+
Provides-Extra: test
|
|
14
|
+
Requires-Dist: pytest>=8; extra == 'test'
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
|
|
17
|
+
# mcp-switchboard-server-harness
|
|
18
|
+
|
|
19
|
+
A first-party stdio MCP server that gives a coding agent the basics on a
|
|
20
|
+
remote machine: filesystem, search, git and shell tools. It is a normal MCP
|
|
21
|
+
server, so [mcp-switchboard-client](../../client) tunnels it like any other.
|
|
22
|
+
|
|
23
|
+
Tools (24; full schemas and behaviour in [spec.md](../../spec.md#4-harness-server)):
|
|
24
|
+
|
|
25
|
+
- **Files:** `file_read` (paged), `file_write`, `file_delete`, `file_move`, `dir_list`, `tree_of_files`,
|
|
26
|
+
`find_files` (honours `.gitignore`), `ripgrep`, `read_lines`, `edit_file`
|
|
27
|
+
- **Run:** `run_command`, `run_python`, and `process_start` / `process_read` / `process_kill` for
|
|
28
|
+
long-running work
|
|
29
|
+
- **Git:** `git_status`, `git_diff`, `git_show`, `git_log`, `git_branch`, `git_add`, `git_checkout`,
|
|
30
|
+
`git_commit`, `git_push`
|
|
31
|
+
|
|
32
|
+
Every tool carries read-only / destructive annotations, output is capped and always flagged when
|
|
33
|
+
truncated, and commands run under a timeout that kills their whole process group.
|
|
34
|
+
|
|
35
|
+
File tools are confined to a **root** (default: the directory the client started in). Change it with
|
|
36
|
+
`--root DIR` or `MCP_SWITCHBOARD_HARNESS_ROOT`; `--root /` lifts it. Cap output with `--max-output N`
|
|
37
|
+
or `MCP_SWITCHBOARD_HARNESS_MAX_OUTPUT`.
|
|
38
|
+
|
|
39
|
+
## Use
|
|
40
|
+
|
|
41
|
+
`mcp-switchboard-client` runs it by default as a server named `harness`; nothing to
|
|
42
|
+
configure (`--no-harness` turns it off). To run it standalone or pin your own
|
|
43
|
+
entry, add it to the `mcp.json` next to the client:
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"mcpServers": {
|
|
48
|
+
"harness": { "command": "uvx", "args": ["mcp-switchboard-server-harness"] }
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
or run it directly: `mcp-switchboard-server-harness --name harness`.
|
|
54
|
+
|
|
55
|
+
## Security
|
|
56
|
+
|
|
57
|
+
The root only confines the *file* tools; `run_command`, `run_python` and `process_start`
|
|
58
|
+
still run arbitrary commands as the user that started the client. It is a guard against mistakes
|
|
59
|
+
and path tricks, not a sandbox. Keep the hub's private listener unexposed, or
|
|
60
|
+
set `MCP_SWITCHBOARD_PRIVATE_TOKEN`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# mcp-switchboard-server-harness
|
|
2
|
+
|
|
3
|
+
A first-party stdio MCP server that gives a coding agent the basics on a
|
|
4
|
+
remote machine: filesystem, search, git and shell tools. It is a normal MCP
|
|
5
|
+
server, so [mcp-switchboard-client](../../client) tunnels it like any other.
|
|
6
|
+
|
|
7
|
+
Tools (24; full schemas and behaviour in [spec.md](../../spec.md#4-harness-server)):
|
|
8
|
+
|
|
9
|
+
- **Files:** `file_read` (paged), `file_write`, `file_delete`, `file_move`, `dir_list`, `tree_of_files`,
|
|
10
|
+
`find_files` (honours `.gitignore`), `ripgrep`, `read_lines`, `edit_file`
|
|
11
|
+
- **Run:** `run_command`, `run_python`, and `process_start` / `process_read` / `process_kill` for
|
|
12
|
+
long-running work
|
|
13
|
+
- **Git:** `git_status`, `git_diff`, `git_show`, `git_log`, `git_branch`, `git_add`, `git_checkout`,
|
|
14
|
+
`git_commit`, `git_push`
|
|
15
|
+
|
|
16
|
+
Every tool carries read-only / destructive annotations, output is capped and always flagged when
|
|
17
|
+
truncated, and commands run under a timeout that kills their whole process group.
|
|
18
|
+
|
|
19
|
+
File tools are confined to a **root** (default: the directory the client started in). Change it with
|
|
20
|
+
`--root DIR` or `MCP_SWITCHBOARD_HARNESS_ROOT`; `--root /` lifts it. Cap output with `--max-output N`
|
|
21
|
+
or `MCP_SWITCHBOARD_HARNESS_MAX_OUTPUT`.
|
|
22
|
+
|
|
23
|
+
## Use
|
|
24
|
+
|
|
25
|
+
`mcp-switchboard-client` runs it by default as a server named `harness`; nothing to
|
|
26
|
+
configure (`--no-harness` turns it off). To run it standalone or pin your own
|
|
27
|
+
entry, add it to the `mcp.json` next to the client:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"mcpServers": {
|
|
32
|
+
"harness": { "command": "uvx", "args": ["mcp-switchboard-server-harness"] }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
or run it directly: `mcp-switchboard-server-harness --name harness`.
|
|
38
|
+
|
|
39
|
+
## Security
|
|
40
|
+
|
|
41
|
+
The root only confines the *file* tools; `run_command`, `run_python` and `process_start`
|
|
42
|
+
still run arbitrary commands as the user that started the client. It is a guard against mistakes
|
|
43
|
+
and path tricks, not a sandbox. Keep the hub's private listener unexposed, or
|
|
44
|
+
set `MCP_SWITCHBOARD_PRIVATE_TOKEN`.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "mcp-switchboard-server-harness"
|
|
7
|
+
version = "0.3.0.dev3"
|
|
8
|
+
description = "A stdio MCP server exposing filesystem, git and shell tools for coding agents"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [{ name = "Akos Papp" }]
|
|
13
|
+
keywords = ["mcp", "model-context-protocol", "coding-agent", "switchboard"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
]
|
|
19
|
+
dependencies = ["mcp>=2.2,<3"]
|
|
20
|
+
|
|
21
|
+
[project.optional-dependencies]
|
|
22
|
+
test = ["pytest>=8"]
|
|
23
|
+
|
|
24
|
+
[project.scripts]
|
|
25
|
+
mcp-switchboard-server-harness = "mcp_switchboard_server_harness.server:main"
|
|
26
|
+
|
|
27
|
+
[tool.hatch.build.targets.wheel]
|
|
28
|
+
packages = ["src/mcp_switchboard_server_harness"]
|
|
29
|
+
|
|
30
|
+
[tool.pytest.ini_options]
|
|
31
|
+
testpaths = ["tests"]
|
|
32
|
+
pythonpath = ["src"]
|