Expose Cognee MCP tools to ADK agent

This commit is contained in:
Songbird
2025-10-03 22:17:44 +02:00
parent 468d484054
commit 9649e5e87f
+50 -3
View File
@@ -16,7 +16,7 @@ import base64
import time import time
import uuid import uuid
import json import json
from typing import Dict, Any, List, Union from typing import Dict, Any, List, Union, Optional
from datetime import datetime from datetime import datetime
import os import os
import warnings import warnings
@@ -52,7 +52,12 @@ try:
except ImportError: except ImportError:
AGENTOPS_AVAILABLE = False AGENTOPS_AVAILABLE = False
# MCP functionality removed - keeping direct Cognee integration only try:
from google.adk.tools.mcp_tool.mcp_toolset import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
MCP_TOOLSET_AVAILABLE = True
except ImportError: # pragma: no cover - MCP integration optional
MCP_TOOLSET_AVAILABLE = False
from google.genai.types import Part from google.genai.types import Part
from a2a.types import ( from a2a.types import (
@@ -97,6 +102,7 @@ class FuzzForgeExecutor:
self.session_metadata: Dict[str, Dict[str, Any]] = {} self.session_metadata: Dict[str, Dict[str, Any]] = {}
self._artifact_cache_dir = Path(os.getenv('FUZZFORGE_ARTIFACT_DIR', Path.cwd() / '.fuzzforge' / 'artifacts')) self._artifact_cache_dir = Path(os.getenv('FUZZFORGE_ARTIFACT_DIR', Path.cwd() / '.fuzzforge' / 'artifacts'))
self._knowledge_integration = None self._knowledge_integration = None
self._mcp_toolset: Optional[McpToolset] = None
# Initialize Cognee service if available # Initialize Cognee service if available
self.cognee_service = None self.cognee_service = None
@@ -563,7 +569,7 @@ class FuzzForgeExecutor:
try: try:
from .cognee_integration import create_cognee_integration from .cognee_integration import create_cognee_integration
integration = create_cognee_integration() integration = create_cognee_integration()
result = await integration.cognify_text(text) result = await integration.ingest_text_to_dataset(text)
if "error" in result: if "error" in result:
return f"Error cognifying information: {result['error']}" return f"Error cognifying information: {result['error']}"
@@ -581,6 +587,38 @@ class FuzzForgeExecutor:
FunctionTool(self.query_project_knowledge_api) FunctionTool(self.query_project_knowledge_api)
]) ])
if MCP_TOOLSET_AVAILABLE and self.cognee_url:
try:
params = StreamableHTTPConnectionParams(
url=self.cognee_url,
timeout=float(os.getenv("COGNEE_MCP_TIMEOUT", "5")),
sse_read_timeout=float(os.getenv("COGNEE_MCP_SSE_TIMEOUT", str(60 * 5))),
terminate_on_close=False,
)
tool_filter = [
"list_datasets",
"search",
"search_chunks",
"search_insights",
"cognify",
"cognify_status",
"ingest_file",
"memify",
]
self._mcp_toolset = McpToolset(
connection_params=params,
tool_filter=tool_filter,
)
tools.append(self._mcp_toolset)
if self.debug:
print(f"[DEBUG] Connected MCP toolset to {self.cognee_url}")
except Exception as exc:
self._mcp_toolset = None
if self.debug:
print(f"[DEBUG] Failed to initialise Cognee MCP toolset: {exc}")
else:
self._mcp_toolset = None
# Add project-local filesystem tools # Add project-local filesystem tools
async def list_project_files(path: str, pattern: str) -> str: async def list_project_files(path: str, pattern: str) -> str:
"""List files in the current project directory with optional pattern """List files in the current project directory with optional pattern
@@ -1718,6 +1756,15 @@ Be concise and intelligent in your responses."""
except: except:
pass pass
if self._mcp_toolset:
try:
await self._mcp_toolset.close()
except Exception as exc:
if self.debug:
print(f"[DEBUG] MCP toolset cleanup failed: {exc}")
finally:
self._mcp_toolset = None
# Cancel background monitors # Cancel background monitors
for task in list(self._background_tasks): for task in list(self._background_tasks):
task.cancel() task.cancel()