hermes-control-mcp 0.2.0b1__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.
Files changed (29) hide show
  1. hermes_control_mcp-0.2.0b1/LICENSE +21 -0
  2. hermes_control_mcp-0.2.0b1/PKG-INFO +238 -0
  3. hermes_control_mcp-0.2.0b1/README.md +191 -0
  4. hermes_control_mcp-0.2.0b1/pyproject.toml +39 -0
  5. hermes_control_mcp-0.2.0b1/setup.cfg +4 -0
  6. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/__init__.py +3 -0
  7. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/api.py +281 -0
  8. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/config.py +217 -0
  9. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/doctor.py +276 -0
  10. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/live_client.py +1148 -0
  11. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/live_service.py +1119 -0
  12. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/local_attach.py +204 -0
  13. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/mcp_server.py +285 -0
  14. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/profiles.py +57 -0
  15. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/registry.py +516 -0
  16. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/server.py +164 -0
  17. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp/service.py +652 -0
  18. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp.egg-info/PKG-INFO +238 -0
  19. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp.egg-info/SOURCES.txt +27 -0
  20. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp.egg-info/dependency_links.txt +1 -0
  21. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp.egg-info/entry_points.txt +2 -0
  22. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp.egg-info/requires.txt +3 -0
  23. hermes_control_mcp-0.2.0b1/src/hermes_control_mcp.egg-info/top_level.txt +1 -0
  24. hermes_control_mcp-0.2.0b1/tests/test_contract.py +464 -0
  25. hermes_control_mcp-0.2.0b1/tests/test_doctor.py +209 -0
  26. hermes_control_mcp-0.2.0b1/tests/test_live.py +1534 -0
  27. hermes_control_mcp-0.2.0b1/tests/test_local_attach.py +111 -0
  28. hermes_control_mcp-0.2.0b1/tests/test_profiles.py +799 -0
  29. hermes_control_mcp-0.2.0b1/tests/test_stdio_integration.py +158 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 upmeister and contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,238 @@
1
+ Metadata-Version: 2.4
2
+ Name: hermes-control-mcp
3
+ Version: 0.2.0b1
4
+ Summary: MCP control plane for Hermes Agent durable runs and optional shared live sessions
5
+ License: MIT License
6
+
7
+ Copyright (c) 2026 upmeister and contributors
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+
27
+ Project-URL: Repository, https://github.com/upmeister/hermes-control-mcp
28
+ Project-URL: Issues, https://github.com/upmeister/hermes-control-mcp/issues
29
+ Project-URL: Documentation, https://github.com/upmeister/hermes-control-mcp#readme
30
+ Keywords: hermes-agent,mcp,model-context-protocol,agents,automation
31
+ Classifier: Development Status :: 4 - Beta
32
+ Classifier: Environment :: Console
33
+ Classifier: Intended Audience :: Developers
34
+ Classifier: License :: OSI Approved :: MIT License
35
+ Classifier: Programming Language :: Python :: 3
36
+ Classifier: Programming Language :: Python :: 3.11
37
+ Classifier: Programming Language :: Python :: 3.12
38
+ Classifier: Programming Language :: Python :: 3.13
39
+ Classifier: Topic :: Software Development
40
+ Requires-Python: <3.14,>=3.11
41
+ Description-Content-Type: text/markdown
42
+ License-File: LICENSE
43
+ Requires-Dist: mcp<3,>=2.0
44
+ Requires-Dist: httpx<1,>=0.28.1
45
+ Requires-Dist: websockets<16,>=15
46
+ Dynamic: license-file
47
+
48
+ # Hermes MCP Control Plane
49
+
50
+ **Hermes MCP Control Plane** exposes [Hermes Agent](https://github.com/NousResearch/hermes-agent) as a controllable MCP agent: durable runs, profile-aware routing, and optional shared live sessions with an existing Hermes Desktop/TUI runtime.
51
+
52
+ ~~~text
53
+ MCP host
54
+ |
55
+ v
56
+ hermes-control-mcp
57
+ |-- durable --> Hermes API Server
58
+ |
59
+ '-- live ----> existing Hermes TUI gateway runtime
60
+ (optional / experimental)
61
+ ~~~
62
+
63
+ The bridge is deliberately a control plane, not a second Hermes runtime. Hermes remains the authority for sessions, models, tools, approvals, profiles, and execution.
64
+
65
+ ## Status
66
+
67
+ | Capability | Public beta |
68
+ |---|---|
69
+ | Durable run submit/status/wait/events | **Stable** |
70
+ | Durable stop/steer/history | **Stable** |
71
+ | Multi-profile routing | **Stable** |
72
+ | Shared Desktop/TUI live attach | **Experimental / optional** |
73
+ | Interactive approval/clarify requests | Not implemented |
74
+ | Remote Streamable HTTP MCP | Not implemented |
75
+
76
+ The durable tier works against supported stock Hermes API Server deployments. Shared live attach currently requires a compatible owner/native attach seam and is intentionally not required for the public beta.
77
+
78
+ See [Compatibility](docs/COMPATIBILITY.md) for the exact boundary.
79
+
80
+ ## Install
81
+
82
+ Python 3.11–3.13 is supported.
83
+
84
+ ~~~bash
85
+ pip install hermes-control-mcp
86
+ ~~~
87
+
88
+ Or from source:
89
+
90
+ ~~~bash
91
+ git clone https://github.com/upmeister/hermes-control-mcp.git
92
+ cd hermes-control-mcp
93
+ python -m venv .venv
94
+ . .venv/bin/activate
95
+ pip install -e .
96
+ ~~~
97
+
98
+ ## Quick start
99
+
100
+ Hermes API Server must already be running. The default target is `http://127.0.0.1:8642`.
101
+
102
+ Keep API keys in environment/server-side configuration, not MCP arguments.
103
+
104
+ ~~~bash
105
+ export API_SERVER_KEY='...'
106
+ hermes-control-mcp doctor
107
+ ~~~
108
+
109
+ A healthy durable-only deployment may report the live tier as unavailable and still return `READY`.
110
+
111
+ To make live attach mandatory:
112
+
113
+ ~~~bash
114
+ hermes-control-mcp doctor --require-live
115
+ ~~~
116
+
117
+ ### MCP host configuration
118
+
119
+ ~~~json
120
+ {
121
+ "mcpServers": {
122
+ "hermes": {
123
+ "command": "hermes-control-mcp"
124
+ }
125
+ }
126
+ }
127
+ ~~~
128
+
129
+ A generic example is available at [`examples/mcp-stdio.json`](examples/mcp-stdio.json).
130
+
131
+ ## MCP surface
132
+
133
+ Durable tools:
134
+
135
+ - `run_start`, `run_status`, `run_wait`, `run_events`
136
+ - `run_stop`, `run_steer`
137
+ - `session_history`
138
+ - `bridge_health`
139
+
140
+ Optional live tools:
141
+
142
+ - `live_session_open`
143
+ - `live_prompt`, `live_wait`, `live_events`
144
+ - `live_status`, `live_history`
145
+ - `live_steer`, `live_interrupt`
146
+ - `live_reconcile`, `live_reconnect`, `live_health`
147
+
148
+ The bridge does **not** expose arbitrary shell execution, raw gateway RPC, slash commands, Hermes config mutation, or credential mutation.
149
+
150
+ ## Multi-profile Hermes
151
+
152
+ Profiles are first-class routing boundaries:
153
+
154
+ ~~~text
155
+ (profile, lane) -> stored_session_id
156
+ ~~~
157
+
158
+ For a named profile such as `coder`:
159
+
160
+ - durable API calls use Hermes `/p/coder/...` routes;
161
+ - the profile uses its own `API_SERVER_KEY`;
162
+ - live create/resume/control preserves the same profile;
163
+ - the default profile key is never borrowed for a named profile.
164
+
165
+ Probe profiles before connecting an MCP host:
166
+
167
+ ~~~bash
168
+ hermes-control-mcp doctor --profile coder
169
+ hermes-control-mcp doctor --profile coder --profile research
170
+ hermes-control-mcp doctor --all-profiles
171
+ ~~~
172
+
173
+ If an omitted profile can be inferred from exactly one existing local identity, the bridge reuses it. Ambiguous cross-profile routing fails closed instead of guessing.
174
+
175
+ ## Recovery and safety
176
+
177
+ - one logical durable request keeps one idempotency identity;
178
+ - uncertain mutations are reconciled rather than blindly resubmitted;
179
+ - stored session IDs and runtime session IDs remain distinct;
180
+ - reconnect/replay never proves ownership of a foreign completion by itself;
181
+ - failed/interrupted live turns return no answer payload;
182
+ - credentials and raw prompts are not persisted in the bridge registry;
183
+ - named-profile credentials never fall back to the default profile.
184
+
185
+ The public registry schema starts at version 1. Public-beta process ownership is **one bridge process per state DB**.
186
+
187
+ ## Live attach caveat
188
+
189
+ Shared live attach is currently **experimental**.
190
+
191
+ The deployed implementation joins the existing Hermes TUI gateway through a private local owner boundary. Stock Hermes v0.21.3 does not ship that project-specific owner seam.
192
+
193
+ Installing this package is therefore sufficient for the durable tier, but not by itself a promise that shared Desktop/TUI attach is available.
194
+
195
+ The project is tracking Hermes upstream native/session-authority work and intends to adapt the live transport when a supported upstream seam lands rather than maintain a permanent competing runtime.
196
+
197
+ See [upstream research](docs/UPSTREAM-HERMES.md).
198
+
199
+ ## Hermes multiplexing note
200
+
201
+ Explicit Hermes multiplexing can activate configured platform adapters across multiple live profiles. Older installations with copied Telegram/Discord/etc. credentials may surface duplicate-credential conflicts during gateway startup.
202
+
203
+ The bridge detects profile/API readiness but deliberately does not rewrite Hermes profile topology or adapter configuration.
204
+
205
+ See [Compatibility](docs/COMPATIBILITY.md#hermes-multiplexing-caveat).
206
+
207
+ ## Development
208
+
209
+ ~~~bash
210
+ pip install -e .
211
+ ./scripts/test.sh
212
+ python -m unittest discover -s tests -v
213
+ python -m compileall -q src
214
+ python -m py_compile src/hermes_control_mcp/*.py
215
+ git diff --check
216
+ ~~~
217
+
218
+ CI tests Python 3.11, 3.12, and 3.13, then builds wheel + sdist, installs the wheel into a clean virtual environment, and performs an MCP stdio smoke from the installed console entrypoint.
219
+
220
+ ## Documentation
221
+
222
+ - [Compatibility and support tiers](docs/COMPATIBILITY.md)
223
+ - [Roadmap](docs/ROADMAP.md)
224
+ - [Hermes upstream research](docs/UPSTREAM-HERMES.md)
225
+ - [API Server / Agent Sessions research plan](docs/API-SERVER-PARITY-SPIKE.md)
226
+ - [Distribution and upstreaming strategy](docs/DISTRIBUTION-AND-UPSTREAMING.md)
227
+ - [Release process](docs/RELEASING.md)
228
+ - [Security policy](SECURITY.md)
229
+
230
+ ## Security
231
+
232
+ Please do not report credential leaks, auth-boundary bypasses, or cross-profile isolation bugs in a public issue. Use GitHub's **Private vulnerability reporting** for this repository.
233
+
234
+ See [SECURITY.md](SECURITY.md).
235
+
236
+ ## License
237
+
238
+ [MIT](LICENSE)
@@ -0,0 +1,191 @@
1
+ # Hermes MCP Control Plane
2
+
3
+ **Hermes MCP Control Plane** exposes [Hermes Agent](https://github.com/NousResearch/hermes-agent) as a controllable MCP agent: durable runs, profile-aware routing, and optional shared live sessions with an existing Hermes Desktop/TUI runtime.
4
+
5
+ ~~~text
6
+ MCP host
7
+ |
8
+ v
9
+ hermes-control-mcp
10
+ |-- durable --> Hermes API Server
11
+ |
12
+ '-- live ----> existing Hermes TUI gateway runtime
13
+ (optional / experimental)
14
+ ~~~
15
+
16
+ The bridge is deliberately a control plane, not a second Hermes runtime. Hermes remains the authority for sessions, models, tools, approvals, profiles, and execution.
17
+
18
+ ## Status
19
+
20
+ | Capability | Public beta |
21
+ |---|---|
22
+ | Durable run submit/status/wait/events | **Stable** |
23
+ | Durable stop/steer/history | **Stable** |
24
+ | Multi-profile routing | **Stable** |
25
+ | Shared Desktop/TUI live attach | **Experimental / optional** |
26
+ | Interactive approval/clarify requests | Not implemented |
27
+ | Remote Streamable HTTP MCP | Not implemented |
28
+
29
+ The durable tier works against supported stock Hermes API Server deployments. Shared live attach currently requires a compatible owner/native attach seam and is intentionally not required for the public beta.
30
+
31
+ See [Compatibility](docs/COMPATIBILITY.md) for the exact boundary.
32
+
33
+ ## Install
34
+
35
+ Python 3.11–3.13 is supported.
36
+
37
+ ~~~bash
38
+ pip install hermes-control-mcp
39
+ ~~~
40
+
41
+ Or from source:
42
+
43
+ ~~~bash
44
+ git clone https://github.com/upmeister/hermes-control-mcp.git
45
+ cd hermes-control-mcp
46
+ python -m venv .venv
47
+ . .venv/bin/activate
48
+ pip install -e .
49
+ ~~~
50
+
51
+ ## Quick start
52
+
53
+ Hermes API Server must already be running. The default target is `http://127.0.0.1:8642`.
54
+
55
+ Keep API keys in environment/server-side configuration, not MCP arguments.
56
+
57
+ ~~~bash
58
+ export API_SERVER_KEY='...'
59
+ hermes-control-mcp doctor
60
+ ~~~
61
+
62
+ A healthy durable-only deployment may report the live tier as unavailable and still return `READY`.
63
+
64
+ To make live attach mandatory:
65
+
66
+ ~~~bash
67
+ hermes-control-mcp doctor --require-live
68
+ ~~~
69
+
70
+ ### MCP host configuration
71
+
72
+ ~~~json
73
+ {
74
+ "mcpServers": {
75
+ "hermes": {
76
+ "command": "hermes-control-mcp"
77
+ }
78
+ }
79
+ }
80
+ ~~~
81
+
82
+ A generic example is available at [`examples/mcp-stdio.json`](examples/mcp-stdio.json).
83
+
84
+ ## MCP surface
85
+
86
+ Durable tools:
87
+
88
+ - `run_start`, `run_status`, `run_wait`, `run_events`
89
+ - `run_stop`, `run_steer`
90
+ - `session_history`
91
+ - `bridge_health`
92
+
93
+ Optional live tools:
94
+
95
+ - `live_session_open`
96
+ - `live_prompt`, `live_wait`, `live_events`
97
+ - `live_status`, `live_history`
98
+ - `live_steer`, `live_interrupt`
99
+ - `live_reconcile`, `live_reconnect`, `live_health`
100
+
101
+ The bridge does **not** expose arbitrary shell execution, raw gateway RPC, slash commands, Hermes config mutation, or credential mutation.
102
+
103
+ ## Multi-profile Hermes
104
+
105
+ Profiles are first-class routing boundaries:
106
+
107
+ ~~~text
108
+ (profile, lane) -> stored_session_id
109
+ ~~~
110
+
111
+ For a named profile such as `coder`:
112
+
113
+ - durable API calls use Hermes `/p/coder/...` routes;
114
+ - the profile uses its own `API_SERVER_KEY`;
115
+ - live create/resume/control preserves the same profile;
116
+ - the default profile key is never borrowed for a named profile.
117
+
118
+ Probe profiles before connecting an MCP host:
119
+
120
+ ~~~bash
121
+ hermes-control-mcp doctor --profile coder
122
+ hermes-control-mcp doctor --profile coder --profile research
123
+ hermes-control-mcp doctor --all-profiles
124
+ ~~~
125
+
126
+ If an omitted profile can be inferred from exactly one existing local identity, the bridge reuses it. Ambiguous cross-profile routing fails closed instead of guessing.
127
+
128
+ ## Recovery and safety
129
+
130
+ - one logical durable request keeps one idempotency identity;
131
+ - uncertain mutations are reconciled rather than blindly resubmitted;
132
+ - stored session IDs and runtime session IDs remain distinct;
133
+ - reconnect/replay never proves ownership of a foreign completion by itself;
134
+ - failed/interrupted live turns return no answer payload;
135
+ - credentials and raw prompts are not persisted in the bridge registry;
136
+ - named-profile credentials never fall back to the default profile.
137
+
138
+ The public registry schema starts at version 1. Public-beta process ownership is **one bridge process per state DB**.
139
+
140
+ ## Live attach caveat
141
+
142
+ Shared live attach is currently **experimental**.
143
+
144
+ The deployed implementation joins the existing Hermes TUI gateway through a private local owner boundary. Stock Hermes v0.21.3 does not ship that project-specific owner seam.
145
+
146
+ Installing this package is therefore sufficient for the durable tier, but not by itself a promise that shared Desktop/TUI attach is available.
147
+
148
+ The project is tracking Hermes upstream native/session-authority work and intends to adapt the live transport when a supported upstream seam lands rather than maintain a permanent competing runtime.
149
+
150
+ See [upstream research](docs/UPSTREAM-HERMES.md).
151
+
152
+ ## Hermes multiplexing note
153
+
154
+ Explicit Hermes multiplexing can activate configured platform adapters across multiple live profiles. Older installations with copied Telegram/Discord/etc. credentials may surface duplicate-credential conflicts during gateway startup.
155
+
156
+ The bridge detects profile/API readiness but deliberately does not rewrite Hermes profile topology or adapter configuration.
157
+
158
+ See [Compatibility](docs/COMPATIBILITY.md#hermes-multiplexing-caveat).
159
+
160
+ ## Development
161
+
162
+ ~~~bash
163
+ pip install -e .
164
+ ./scripts/test.sh
165
+ python -m unittest discover -s tests -v
166
+ python -m compileall -q src
167
+ python -m py_compile src/hermes_control_mcp/*.py
168
+ git diff --check
169
+ ~~~
170
+
171
+ CI tests Python 3.11, 3.12, and 3.13, then builds wheel + sdist, installs the wheel into a clean virtual environment, and performs an MCP stdio smoke from the installed console entrypoint.
172
+
173
+ ## Documentation
174
+
175
+ - [Compatibility and support tiers](docs/COMPATIBILITY.md)
176
+ - [Roadmap](docs/ROADMAP.md)
177
+ - [Hermes upstream research](docs/UPSTREAM-HERMES.md)
178
+ - [API Server / Agent Sessions research plan](docs/API-SERVER-PARITY-SPIKE.md)
179
+ - [Distribution and upstreaming strategy](docs/DISTRIBUTION-AND-UPSTREAMING.md)
180
+ - [Release process](docs/RELEASING.md)
181
+ - [Security policy](SECURITY.md)
182
+
183
+ ## Security
184
+
185
+ Please do not report credential leaks, auth-boundary bypasses, or cross-profile isolation bugs in a public issue. Use GitHub's **Private vulnerability reporting** for this repository.
186
+
187
+ See [SECURITY.md](SECURITY.md).
188
+
189
+ ## License
190
+
191
+ [MIT](LICENSE)
@@ -0,0 +1,39 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68,<81"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "hermes-control-mcp"
7
+ version = "0.2.0b1"
8
+ description = "MCP control plane for Hermes Agent durable runs and optional shared live sessions"
9
+ readme = "README.md"
10
+ requires-python = ">=3.11,<3.14"
11
+ license = {file = "LICENSE"}
12
+ keywords = ["hermes-agent", "mcp", "model-context-protocol", "agents", "automation"]
13
+ classifiers = [
14
+ "Development Status :: 4 - Beta",
15
+ "Environment :: Console",
16
+ "Intended Audience :: Developers",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
21
+ "Programming Language :: Python :: 3.13",
22
+ "Topic :: Software Development",
23
+ ]
24
+ dependencies = [
25
+ "mcp>=2.0,<3",
26
+ "httpx>=0.28.1,<1",
27
+ "websockets>=15,<16",
28
+ ]
29
+
30
+ [project.urls]
31
+ Repository = "https://github.com/upmeister/hermes-control-mcp"
32
+ Issues = "https://github.com/upmeister/hermes-control-mcp/issues"
33
+ Documentation = "https://github.com/upmeister/hermes-control-mcp#readme"
34
+
35
+ [project.scripts]
36
+ hermes-control-mcp = "hermes_control_mcp.server:main"
37
+
38
+ [tool.setuptools.packages.find]
39
+ where = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """Hermes MCP Control Plane package."""
2
+
3
+ __version__ = "0.2.0b1"