From 751941bb603b0ab29afaafcf2b6e93bc55bdaa17 Mon Sep 17 00:00:00 2001 From: Till Immer Date: Sun, 5 Jul 2026 09:57:42 +0000 Subject: [PATCH] jarvis_mcp/client.py aktualisiert --- jarvis_mcp/client.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/jarvis_mcp/client.py b/jarvis_mcp/client.py index 11ce23a..26668dd 100644 --- a/jarvis_mcp/client.py +++ b/jarvis_mcp/client.py @@ -1,30 +1,45 @@ +# jarvis_mcp/client.py (oder wo du sie hast) + from mcp import ClientSession -from mcp.client.streamable_http import streamable_http_client +from mcp.client.streamable_http import streamablehttp_client # wichtig: streamablehttp_client (ohne _) class MCPClient: def __init__(self, url: str): self.url = url self.session = None - self._client = None + self._client_context = None # Context Manager async def connect(self): - self._client = streamable_http_client(self.url) - read, write = await self._client.__aenter__() + if self.session: + return + + # Neuer Streamable HTTP Client (gibt 3 Werte zurück) + self._client_context = streamablehttp_client( + self.url, + terminate_on_close=False # wichtig für langlebige Verbindungen + ) + + read, write, _ = await self._client_context.__aenter__() self.session = ClientSession(read, write) await self.session.initialize() + print("✅ MCP Verbindung hergestellt") + async def list_tools(self): - if not self.session: - await self.connect() + await self.connect() return await self.session.list_tools() async def call_tool(self, name: str, arguments: dict): - if not self.session: - await self.connect() + await self.connect() return await self.session.call_tool(name, arguments) async def close(self): - if self._client: - await self._client.__aexit__(None, None, None) \ No newline at end of file + if self._client_context: + await self._client_context.__aexit__(None, None, None) + self._client_context = None + if self.session: + # Session schließen falls nötig + await self.session.close() + self.session = None \ No newline at end of file