diff --git a/jarvis_mcp/client.py b/jarvis_mcp/client.py index 7020980..c6dcfd7 100644 --- a/jarvis_mcp/client.py +++ b/jarvis_mcp/client.py @@ -9,7 +9,13 @@ logger = get_logger("MCP") class MCPClient: def __init__(self, url: str): - self.url = url.rstrip('/') + "/mcp/" # WICHTIG: /mcp Endpunkt + # Entferne eventuelle doppelte /mcp und füge korrekt hinzu + base = url.rstrip('/') + if base.endswith('/mcp'): + self.url = base + else: + self.url = base + "/mcp" + self.session = None self._client_context = None @@ -27,24 +33,19 @@ class MCPClient: streams = await self._client_context.__aenter__() - # Manche Versionen geben 2, manche 3 Werte zurück - if isinstance(streams, tuple): - if len(streams) == 3: - read, write, _ = streams - else: - read, write = streams + if isinstance(streams, tuple) and len(streams) == 3: + read, write, _ = streams else: - raise ValueError("Unerwartetes Format von streamablehttp_client") + read, write = streams self.session = ClientSession(read, write) - # Mit Timeout - await asyncio.wait_for(self.session.initialize(), timeout=8.0) + await asyncio.wait_for(self.session.initialize(), timeout=10.0) - logger.info("✅ OpenHAB MCP Verbindung erfolgreich") + logger.info("✅ OpenHAB MCP Verbindung erfolgreich hergestellt") except asyncio.TimeoutError: - logger.error("❌ Timeout beim MCP Connect") + logger.error("❌ Timeout beim Verbinden mit MCP-Server") raise except Exception as e: logger.error(f"❌ MCP Connect Fehler: {e}") @@ -59,23 +60,18 @@ class MCPClient: return await self.session.call_tool(name, arguments) async def close(self): - """Sauberes Aufräumen""" - closed = False if self.session: try: if hasattr(self.session, "close"): await self.session.close() - closed = True - except Exception as e: - logger.warning(f"Session close Warning: {e}") + except Exception: + pass if self._client_context: try: await self._client_context.__aexit__(None, None, None) - except Exception as e: - logger.warning(f"Context close Warning: {e}") + except Exception: + pass self.session = None - self._client_context = None - if closed: - logger.info("MCP Verbindung geschlossen") \ No newline at end of file + self._client_context = None \ No newline at end of file