open-edison 0.1.15__py3-none-any.whl → 0.1.17__py3-none-any.whl

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.
src/single_user_mcp.py CHANGED
@@ -11,7 +11,6 @@ from fastmcp import FastMCP
11
11
  from loguru import logger as log
12
12
 
13
13
  from src.config import MCPServerConfig, config
14
- from src.mcp_manager import MCPManager
15
14
  from src.middleware.session_tracking import (
16
15
  SessionTrackingMiddleware,
17
16
  get_current_session_data_tracker,
@@ -42,9 +41,8 @@ class SingleUserMCP(FastMCP[Any]):
42
41
  All enabled MCP servers are mounted through a single FastMCP composite proxy.
43
42
  """
44
43
 
45
- def __init__(self, mcp_manager: MCPManager):
44
+ def __init__(self):
46
45
  super().__init__(name="open-edison-single-user")
47
- self.mcp_manager: MCPManager = mcp_manager
48
46
  self.mounted_servers: dict[str, MountedServerInfo] = {}
49
47
  self.composite_proxy: FastMCP[Any] | None = None
50
48
 
@@ -110,21 +108,12 @@ class SingleUserMCP(FastMCP[Any]):
110
108
  True if composite proxy was created successfully, False otherwise
111
109
  """
112
110
  try:
113
- # Filter out test servers for composite proxy
114
- real_servers = [s for s in enabled_servers if s.command != "echo"]
115
-
116
- if not real_servers:
111
+ if not enabled_servers:
117
112
  log.info("No real servers to mount in composite proxy")
118
113
  return True
119
114
 
120
- # Start all required server processes
121
- for server_config in real_servers:
122
- if not await self.mcp_manager.is_server_running(server_config.name):
123
- log.info(f"Starting server process: {server_config.name}")
124
- _ = await self.mcp_manager.start_server(server_config.name)
125
-
126
115
  # Convert to FastMCP config format
127
- fastmcp_config = self._convert_to_fastmcp_config(real_servers)
116
+ fastmcp_config = self._convert_to_fastmcp_config(enabled_servers)
128
117
 
129
118
  log.info(
130
119
  f"Creating composite proxy for servers: {list(fastmcp_config['mcpServers'].keys())}"
@@ -140,12 +129,12 @@ class SingleUserMCP(FastMCP[Any]):
140
129
  await self.import_server(self.composite_proxy)
141
130
 
142
131
  # Track mounted servers for status reporting
143
- for server_config in real_servers:
132
+ for server_config in enabled_servers:
144
133
  self.mounted_servers[server_config.name] = MountedServerInfo(
145
134
  config=server_config, proxy=self.composite_proxy
146
135
  )
147
136
 
148
- log.info(f"✅ Created composite proxy with {len(real_servers)} servers")
137
+ log.info(f"✅ Created composite proxy with {len(enabled_servers)} servers")
149
138
  return True
150
139
 
151
140
  except Exception as e:
@@ -221,7 +210,6 @@ class SingleUserMCP(FastMCP[Any]):
221
210
  try:
222
211
  # Remove from mounted servers
223
212
  await self._cleanup_mounted_server(excluded_server)
224
- await self._stop_server_process(excluded_server)
225
213
 
226
214
  # Get remaining servers that should be in composite proxy
227
215
  remaining_configs = [
@@ -249,11 +237,6 @@ class SingleUserMCP(FastMCP[Any]):
249
237
  del self.mounted_servers[server_name]
250
238
  log.info(f"✅ Unmounted MCP server: {server_name}")
251
239
 
252
- async def _stop_server_process(self, server_name: str) -> None:
253
- """Stop the server subprocess if it's not a test server."""
254
- if server_name != "test-echo":
255
- await self.mcp_manager.stop_server(server_name)
256
-
257
240
  async def get_mounted_servers(self) -> list[ServerStatusInfo]:
258
241
  """Get list of currently mounted servers."""
259
242
  return [
src/telemetry.py CHANGED
@@ -22,6 +22,7 @@ from __future__ import annotations
22
22
 
23
23
  import json
24
24
  import os
25
+ import platform
25
26
  import traceback
26
27
  import uuid
27
28
  from collections.abc import Callable
@@ -175,12 +176,27 @@ def initialize_telemetry(override: TelemetryConfig | None = None) -> None: # no
175
176
 
176
177
  # Provider/meter
177
178
  try:
179
+ # Capture platform/runtime details
180
+ install_id = _ensure_install_id()
181
+ os_type = platform.system().lower() or "unknown"
182
+ os_description = platform.platform()
183
+ host_arch = platform.machine()
184
+ runtime_version = platform.python_version()
185
+ service_version = getattr(config, "version", "unknown")
186
+
178
187
  # Attach a resource so metrics include service identifiers
179
188
  resource = Resource.create(
180
189
  {
181
190
  "service.name": "open-edison",
182
191
  "service.namespace": "open-edison",
192
+ "service.version": service_version,
193
+ "service.instance.id": install_id,
183
194
  "telemetry.sdk.language": "python",
195
+ "os.type": os_type,
196
+ "os.description": os_description,
197
+ "host.arch": host_arch,
198
+ "process.runtime.name": "python",
199
+ "process.runtime.version": runtime_version,
184
200
  }
185
201
  )
186
202
  provider: Any = ot_sdk_metrics.MeterProvider(metric_readers=[reader], resource=resource)
@@ -209,7 +225,7 @@ def initialize_telemetry(override: TelemetryConfig | None = None) -> None: # no
209
225
  log.error("Metrics instrument creation failed\n{}", traceback.format_exc())
210
226
  return
211
227
 
212
- _ = _ensure_install_id()
228
+ _ = install_id
213
229
  _initialized = True
214
230
  log.info("📈 Telemetry initialized")
215
231
 
@@ -1,18 +0,0 @@
1
- src/__init__.py,sha256=QWeZdjAm2D2B0eWhd8m2-DPpWvIP26KcNJxwEoU1oEQ,254
2
- src/__main__.py,sha256=kQsaVyzRa_ESC57JpKDSQJAHExuXme0rM5beJsYxFeA,161
3
- src/cli.py,sha256=9cJN6mRvjbCcpTyTdUVl47J7OB7bxzSy0h8tfVbHuQU,9982
4
- src/config.py,sha256=2a5rdImQmNGggL690PQprqZVsRUAJcdo8KS2Foj9N-U,9345
5
- src/mcp_manager.py,sha256=VpRdVMy1WLegC-gBnyTcBMcKzQsdIn4JIWuHf7Q40hg,4442
6
- src/server.py,sha256=fVJatqKZFBacEd-fm3UROevG6U_JLIQUxt_-UdZEQFM,30727
7
- src/single_user_mcp.py,sha256=ue5UnC0nfmuLR4z87904WqH7B-0FaACFDWaBNNL7hXE,15259
8
- src/telemetry.py,sha256=PDS3YrwDHOKNyQwr_CclqOfPzeMnjj_x4rfN5OBmFvo,11931
9
- src/frontend_dist/index.html,sha256=Y4ZfK2hzHsfCiqh7Z7dzajTdojVjKCC5YL4JxdXeig4,673
10
- src/frontend_dist/assets/index-_NTxjOfh.js,sha256=KetbIa26YNfMP_SwWa04fCr9jGNnoPeZsA41-Oxgx6w,236658
11
- src/frontend_dist/assets/index-h6k8aL6h.css,sha256=Lq5FK1bsPMR67cAwD_-fMvWqKbo_IyraMSKndoQf8i8,13875
12
- src/middleware/data_access_tracker.py,sha256=RZh1RCBYDEbvVIJPkDUz0bfLmK-xYIdV0lGbIxbJYc0,25966
13
- src/middleware/session_tracking.py,sha256=mApPfJLjHfiSf5CjMeq-IWqjKFsjvWgBgGrgy5GJWa0,20043
14
- open_edison-0.1.15.dist-info/METADATA,sha256=hiQZYgHCzeahyIB26lrwRaQI_QbjCUJ7MxaG90aX62U,8967
15
- open_edison-0.1.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- open_edison-0.1.15.dist-info/entry_points.txt,sha256=qNAkJcnoTXRhj8J--3PDmXz_TQKdB8H_0C9wiCtDIyA,72
17
- open_edison-0.1.15.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
18
- open_edison-0.1.15.dist-info/RECORD,,