Skip to main content
Glama

Mnemosyne MCP

by MumuTW
tools.py8.85 kB
""" FastMCP 工具定義 定義 Mnemosyne MCP 提供的所有工具,使用 FastMCP 框架註冊到 MCP 伺服器。 每個工具都包含詳細的文檔和參數驗證。 """ import structlog from fastmcp import FastMCP from .grpc_bridge import GrpcBridge from .utils import ( format_impact_analysis, format_search_results, mcp_tool_wrapper, validate_non_empty_string, validate_positive_integer, validate_query_length, validate_tool_params, ) logger = structlog.get_logger(__name__) def register_tools(mcp: FastMCP, bridge: GrpcBridge) -> None: """ 註冊所有 MCP 工具到 FastMCP 伺服器 Args: mcp: FastMCP 伺服器實例 bridge: gRPC 橋接器實例 """ @mcp.tool() @mcp_tool_wrapper @validate_tool_params( query=lambda x: (validate_non_empty_string(x), validate_query_length(x)), limit=validate_positive_integer, ) async def search_code(query: str, limit: int = 10) -> str: """ 在 Mnemosyne 知識圖譜中搜尋程式碼 這個工具可以幫助您找到與特定查詢相關的程式碼片段、函數、類別或檔案。 它使用語義搜尋技術,能理解自然語言查詢並返回最相關的結果。 Args: query: 搜尋查詢 (自然語言或關鍵字) 例如:「處理用戶登入的函數」、「database connection」、「error handling」 limit: 返回結果的最大數量 (1-50,預設 10) Returns: 格式化的搜尋結果,包含相關程式碼片段、檔案位置和相似度分數 Examples: - search_code("user authentication functions", 5) - search_code("SQL query builders", 15) - search_code("錯誤處理機制") """ try: # 參數範圍驗證 limit = max(1, min(limit, 50)) # 限制在合理範圍內 logger.info("執行程式碼搜尋", query=query, limit=limit) # 呼叫 gRPC 服務 result = await bridge.search_code(query, limit) # 格式化回應 return format_search_results( results=result["results"], total=result["total"], summary=result["summary"], ) except Exception as e: logger.error("程式碼搜尋失敗", query=query, error=str(e)) return f"⚠️ 搜尋失敗: {str(e)}" @mcp.tool() @mcp_tool_wrapper @validate_tool_params(project_id=validate_non_empty_string) async def analyze_impact(project_id: str, pr_number: str = "") -> str: """ 分析程式碼變更的影響範圍和風險等級 這個工具分析特定 Pull Request 或程式碼變更對整個專案的潛在影響, 幫助開發者和審核者了解變更的風險和範圍。 Args: project_id: 專案識別符 例如:「my-web-app」、「backend-api」、「mobile-client」 pr_number: Pull Request 編號 (選填) 例如:「123」、「pr-456」 如果不提供,將分析最新的變更 Returns: 詳細的影響分析報告,包含風險等級、影響的元件數量和建議 Examples: - analyze_impact("backend-api", "123") - analyze_impact("web-frontend") # 分析最新變更 - analyze_impact("mobile-app", "pr-456") """ try: logger.info( "執行影響分析", project_id=project_id, pr_number=pr_number or "latest" ) # 呼叫 gRPC 服務 result = await bridge.analyze_impact(project_id, pr_number) # 格式化回應 return format_impact_analysis(result) except Exception as e: logger.error( "影響分析失敗", project_id=project_id, pr_number=pr_number, error=str(e) ) return f"⚠️ 影響分析失敗: {str(e)}" @mcp.tool() @mcp_tool_wrapper async def health_status() -> str: """ 檢查 Mnemosyne 系統的健康狀態 這個工具檢查系統各個組件的運行狀態,包括: - gRPC 服務連線狀態 - 資料庫連線狀態 - 系統效能指標 - 最近的錯誤統計 Returns: 系統健康狀態報告 Examples: - health_status() # 簡單的健康檢查 """ try: logger.info("執行系統健康檢查") # 執行健康檢查 is_healthy = await bridge.health_check() # 獲取統計資訊 stats = bridge.get_stats() if is_healthy: status_text = "✅ **Mnemosyne 系統運行正常**\n\n" status_text += "🔗 **連線狀態:**\n" status_text += f" • gRPC 服務: {stats['connection_status']}\n" status_text += f" • 總請求數: {stats['total_requests']}\n" status_text += f" • 成功率: {stats['success_rate']}%\n" status_text += f" • 健康檢查次數: {stats['health_checks']}\n\n" if stats["failed_requests"] > 0: status_text += f"⚠️ **注意**: 有 {stats['failed_requests']} 個失敗的請求\n" status_text += "💡 **系統就緒,可以處理查詢和分析請求**" else: status_text = "❌ **Mnemosyne 系統異常**\n\n" status_text += "🔗 **連線狀態:**\n" status_text += f" • gRPC 服務: {stats['connection_status']}\n" status_text += f" • 連線錯誤數: {stats['connection_errors']}\n" status_text += f" • 失敗請求數: {stats['failed_requests']}\n\n" status_text += "🔧 **建議動作:**\n" status_text += " 1. 檢查 gRPC 服務是否運行\n" status_text += " 2. 驗證網路連線\n" status_text += " 3. 查看系統日誌獲取詳細錯誤資訊" return status_text except Exception as e: logger.error("健康檢查失敗", error=str(e)) return f"⚠️ 健康檢查失敗: {str(e)}" @mcp.tool() @mcp_tool_wrapper async def get_system_info() -> str: """ 獲取 Mnemosyne 系統資訊和使用說明 這個工具提供系統的基本資訊、功能概覽和使用指南。 Returns: 系統資訊和使用說明 """ try: info_text = """🚀 **Mnemosyne MCP - 智能程式碼知識圖譜** 📋 **系統概覽:** Mnemosyne 是一個主動的、有狀態的軟體知識圖譜引擎,專為 AI 代理和開發者協作而設計。 它使用圖資料庫技術和語義搜尋,幫助您快速理解和導航大型程式碼庫。 🛠️ **可用工具:** 1. **search_code** - 程式碼搜尋 • 使用自然語言或關鍵字搜尋相關程式碼 • 支援語義理解,能找到概念相關的程式碼 • 範例: `search_code("user authentication", 10)` 2. **analyze_impact** - 影響分析 • 分析程式碼變更對專案的影響範圍 • 評估變更風險等級 (LOW/MEDIUM/HIGH) • 範例: `analyze_impact("my-project", "PR-123")` 3. **health_status** - 系統健康檢查 • 檢查所有系統組件的運行狀態 • 提供效能統計和錯誤資訊 • 範例: `health_status()` 4. **get_system_info** - 系統資訊 (當前工具) • 顯示系統概覽和使用說明 💡 **使用建議:** - 搜尋時使用描述性的查詢,例如「處理付款的函數」而不只是「payment」 - 影響分析適合在程式碼審核時使用,幫助評估變更風險 - 定期使用健康檢查確保系統運行正常 🔗 **技術架構:** - gRPC-First 設計,確保高效能和可靠性 - FastMCP 協議適配,與 Claude Desktop 等客戶端無縫整合 - FalkorDB 圖資料庫,提供強大的圖查詢能力 📞 **需要幫助?** 使用任何工具時,您都會收到詳細的回饋和建議。如果遇到問題,請先執行 `health_status()` 檢查系統狀態。 """ logger.info("提供系統資訊") return info_text except Exception as e: logger.error("獲取系統資訊失敗", error=str(e)) return f"⚠️ 無法獲取系統資訊: {str(e)}" # 記錄工具註冊完成 tools_registered = [ "search_code", "analyze_impact", "health_status", "get_system_info", ] logger.info("MCP 工具註冊完成", tools_count=len(tools_registered), tools=tools_registered)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MumuTW/Mnemosyne-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server