jarvis_mcp/client.py aktualisiert

This commit is contained in:
2026-07-05 10:09:03 +00:00
parent aa71c497cf
commit 2627345135
+18 -22
View File
@@ -9,7 +9,13 @@ logger = get_logger("MCP")
class MCPClient: class MCPClient:
def __init__(self, url: str): 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.session = None
self._client_context = None self._client_context = None
@@ -27,24 +33,19 @@ class MCPClient:
streams = await self._client_context.__aenter__() streams = await self._client_context.__aenter__()
# Manche Versionen geben 2, manche 3 Werte zurück if isinstance(streams, tuple) and len(streams) == 3:
if isinstance(streams, tuple): read, write, _ = streams
if len(streams) == 3:
read, write, _ = streams
else:
read, write = streams
else: else:
raise ValueError("Unerwartetes Format von streamablehttp_client") read, write = streams
self.session = ClientSession(read, write) self.session = ClientSession(read, write)
# Mit Timeout await asyncio.wait_for(self.session.initialize(), timeout=10.0)
await asyncio.wait_for(self.session.initialize(), timeout=8.0)
logger.info("✅ OpenHAB MCP Verbindung erfolgreich") logger.info("✅ OpenHAB MCP Verbindung erfolgreich hergestellt")
except asyncio.TimeoutError: except asyncio.TimeoutError:
logger.error("❌ Timeout beim MCP Connect") logger.error("❌ Timeout beim Verbinden mit MCP-Server")
raise raise
except Exception as e: except Exception as e:
logger.error(f"❌ MCP Connect Fehler: {e}") logger.error(f"❌ MCP Connect Fehler: {e}")
@@ -59,23 +60,18 @@ class MCPClient:
return await self.session.call_tool(name, arguments) return await self.session.call_tool(name, arguments)
async def close(self): async def close(self):
"""Sauberes Aufräumen"""
closed = False
if self.session: if self.session:
try: try:
if hasattr(self.session, "close"): if hasattr(self.session, "close"):
await self.session.close() await self.session.close()
closed = True except Exception:
except Exception as e: pass
logger.warning(f"Session close Warning: {e}")
if self._client_context: if self._client_context:
try: try:
await self._client_context.__aexit__(None, None, None) await self._client_context.__aexit__(None, None, None)
except Exception as e: except Exception:
logger.warning(f"Context close Warning: {e}") pass
self.session = None self.session = None
self._client_context = None self._client_context = None
if closed:
logger.info("MCP Verbindung geschlossen")