Skip to main content
Glama

Mnemosyne MCP

by MumuTW
grpc_atlassian_service.md8.38 kB
# Atlassian gRPC 知識提取服務 ## 概述 本文檔描述了 Atlassian 知識提取的 gRPC 服務實現,該服務是 Mnemosyne MCP 系統中用於從 Atlassian 工具(Jira 和 Confluence)提取知識的核心組件。 ## 架構概覽 ### 核心組件 1. **Protocol Buffer 定義** (`proto/atlassian.proto`) - 定義了 gRPC 服務介面和訊息結構 - 包含所有 Atlassian 相關的實體和關係定義 2. **gRPC 服務實現** (`src/mnemosyne/grpc/atlassian_service_simple.py`) - 實現了 AtlassianKnowledgeExtractorService - 整合了 AtlassianClient 和 AtlassianMapper 3. **gRPC 伺服器** (`src/mnemosyne/grpc/server.py`) - 提供伺服器啟動和管理功能 - 支援優雅關閉和信號處理 ## 服務端點 ### 主要服務方法 #### 1. ExtractJiraIssues ```protobuf rpc ExtractJiraIssues(ExtractJiraIssuesRequest) returns (ExtractJiraIssuesResponse); ``` - **功能**: 從 Jira 提取 Issues 數據 - **輸入**: 查詢字符串、專案過濾器、最大結果數 - **輸出**: JiraIssueEntity 列表和相關關係 #### 2. ExtractConfluencePages ```protobuf rpc ExtractConfluencePages(ExtractConfluencePagesRequest) returns (ExtractConfluencePagesResponse); ``` - **功能**: 從 Confluence 提取頁面數據 - **輸入**: 查詢字符串、空間過濾器、最大結果數 - **輸出**: ConfluencePageEntity 列表和相關關係 #### 3. CheckHealth ```protobuf rpc CheckHealth(HealthCheckRequest) returns (HealthCheckResponse); ``` - **功能**: 檢查服務健康狀態 - **輸入**: 是否檢查連通性 - **輸出**: 健康狀態和響應時間 #### 4. GetExtractionStats ```protobuf rpc GetExtractionStats(GetExtractionStatsRequest) returns (ExtractionStatsResponse); ``` - **功能**: 獲取提取統計信息 - **輸出**: 請求計數、成功率、提取的實體數量 ## 數據模型 ### 核心實體 #### JiraIssueEntity ```protobuf message JiraIssueEntity { string id = 1; // 內部唯一 ID string jira_id = 2; // Jira 系統 ID string key = 3; // Issue 鍵值 (如 "DEMO-123") string summary = 4; // Issue 摘要 string description = 5; // Issue 描述 string status = 6; // 狀態 string priority = 7; // 優先級 string issue_type = 8; // Issue 類型 string project_key = 9; // 專案鍵值 string assignee = 10; // 指派者 string reporter = 11; // 報告者 google.protobuf.Timestamp created_at = 12; google.protobuf.Timestamp updated_at = 13; repeated string labels = 14; // 標籤 repeated string components = 15; // 組件 map<string, string> custom_fields = 16; string url = 17; // Issue URL } ``` #### ConfluencePageEntity ```protobuf message ConfluencePageEntity { string id = 1; // 內部唯一 ID string confluence_id = 2; // Confluence 系統 ID string title = 3; // 頁面標題 string content = 4; // 頁面內容 string space_key = 5; // 空間鍵值 string space_name = 6; // 空間名稱 string author = 7; // 作者 google.protobuf.Timestamp created_at = 8; google.protobuf.Timestamp updated_at = 9; int32 version = 10; // 版本號 string status = 11; // 狀態 repeated string labels = 12; // 標籤 repeated string ancestors = 13; // 父頁面 string url = 14; // 頁面 URL } ``` ### 關係模型 #### KnowledgeRelationship ```protobuf message KnowledgeRelationship { string id = 1; // 關係唯一 ID string source_id = 2; // 源實體 ID string target_id = 3; // 目標實體 ID RelationshipType type = 4; // 關係類型 map<string, string> properties = 5; google.protobuf.Timestamp created_at = 6; float strength = 7; // 關係強度 (0.0-1.0) } ``` #### 關係類型 - `BELONGS_TO`: 屬於關係 (Issue → Project, Page → Space) - `ASSIGNED_TO`: 指派關係 (Issue → Person) - `AUTHORED_BY`: 創建者關係 (Page → Person) - `REFERENCES`: 引用關係 (Page → Issue) - `DEPENDS_ON`: 依賴關係 (Issue → Issue) - `BLOCKS`: 阻塞關係 (Issue → Issue) - `LINKED_TO`: 連結關係 (Issue → Page) - `CONTAINS`: 包含關係 (Space → Page) - `CHILD_OF`: 子關係 (Page → Page) ## 使用方式 ### 啟動 gRPC 伺服器 ```python from mnemosyne.core.config import Settings from mnemosyne.grpc.server import serve # 載入配置 settings = Settings() # 啟動伺服器 await serve(settings, port=50051) ``` ### 客戶端使用 ```python import grpc from mnemosyne.grpc import atlassian_pb2, atlassian_pb2_grpc # 創建通道 channel = grpc.insecure_channel('localhost:50051') stub = atlassian_pb2_grpc.AtlassianKnowledgeExtractorStub(channel) # 提取 Jira Issues request = atlassian_pb2.ExtractJiraIssuesRequest( query="project = DEMO AND status = Open", max_results=100, include_relationships=True ) response = stub.ExtractJiraIssues(request) print(f"Found {len(response.issues)} issues") for issue in response.issues: print(f"- {issue.key}: {issue.summary}") ``` ## 配置 ### 必要配置 ```yaml mcp_atlassian: service_url: "http://mcp-atlassian:8001" read_only_mode: true enabled_tools: - "confluence_search" - "jira_search" - "jira_get_issue" jira_url: "https://company.atlassian.net" jira_username: "user@company.com" jira_api_token: "your-api-token" confluence_url: "https://company.atlassian.net/wiki" confluence_username: "user@company.com" confluence_api_token: "your-api-token" ``` ## 測試 ### 單元測試 ```bash uv run python -m pytest tests/unit/test_grpc_atlassian_service.py -v ``` ### 整合測試 ```bash uv run python -m pytest tests/integration/test_grpc_server.py -v ``` ### 測試覆蓋率 - 服務初始化和配置 - 健康檢查 (有/無連通性檢查) - Jira Issues 提取 (成功/失敗) - Confluence 頁面提取 (成功/失敗) - 統計信息獲取 - 關係轉換 - 錯誤處理 ## 監控與統計 ### 內建統計 - `total_requests`: 總請求數 - `successful_requests`: 成功請求數 - `failed_requests`: 失敗請求數 - `success_rate`: 成功率 (%) - `issues_extracted`: 提取的 Issues 數量 - `pages_extracted`: 提取的頁面數量 - `average_response_time_ms`: 平均響應時間 (毫秒) ### 健康檢查端點 提供服務狀態檢查,包括: - 基本服務狀態 - MCP Atlassian 連通性檢查 - 響應時間測量 ## 擴展性 ### 新增服務方法 1. 在 `proto/atlassian.proto` 中定義新的 RPC 方法 2. 重新生成 protobuf 文件 3. 在 `atlassian_service_simple.py` 中實現方法 4. 添加相應的測試 ### 新增實體類型 1. 在 protobuf 中定義新的 message 2. 在 `AtlassianMapper` 中添加映射邏輯 3. 更新服務方法以處理新實體 4. 添加測試覆蓋 ## 效能考量 ### 並發處理 - 使用 ThreadPoolExecutor 處理並發請求 - 預設最大工作線程數:10 - 可根據需要調整 `max_workers` 參數 ### 響應時間優化 - 使用 asyncio 進行異步 I/O - 實現請求統計和監控 - 支援批次處理減少往返次數 ### 記憶體管理 - 對長內容進行適當截斷 - 使用流式處理處理大型結果集 - 定期清理統計數據 ## 故障排除 ### 常見問題 1. **服務無法啟動** - 檢查端口是否被占用 - 驗證 MCP Atlassian 配置 - 查看日誌中的錯誤信息 2. **提取結果為空** - 確認 MCP Atlassian 服務正在運行 - 檢查 API 憑證是否正確 - 驗證查詢語法 3. **性能問題** - 監控請求統計 - 檢查網絡延遲 - 調整並發參數 ### 日誌級別 - `DEBUG`: 詳細的請求/響應信息 - `INFO`: 基本操作信息 - `WARNING`: 非致命問題 - `ERROR`: 錯誤和異常 ## 未來改進 1. **安全性增強** - 添加 TLS 支援 - 實現認證和授權 - 添加速率限制 2. **功能擴展** - 支援更多 Atlassian 產品 - 添加批次處理端點 - 實現增量同步 3. **性能優化** - 添加連接池 - 實現智能快取 - 優化大型結果集處理 4. **監控改進** - 添加指標收集 - 實現分散式追蹤 - 集成健康檢查系統

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