Skip to main content
Glama

Mnemosyne MCP

by MumuTW
API.md7.49 kB
Mnemosyne MCP - API & 查詢契約規格 (v1.0) 文件版本 1.0 狀態 草案 (Draft) 核心協議 gRPC (Protocol Buffers v3) 兼容協議 RESTful JSON (via gRPC Gateway) 1. 核心設計原則 gRPC-First: 所有功能首先被定義為 gRPC 服務。RESTful API 是 gRPC 服務的 HTTP/JSON 封裝,以提供兼容性。 Schema-Driven: 所有請求和響應的數據結構,都在 .proto 文件中以 Protocol Buffers 消息 (Message) 嚴格定義。 能力導向 (Capability-Oriented): API 的設計旨在暴露「能力」,而非底層的資料庫操作。 異步優先: 對於所有可能耗時的操作(如 Ingest),API 都將採用異步模式,立即返回任務 ID,並提供查詢任務狀態的機制。 富錯誤信息: 錯誤響應不僅包含錯誤碼,還應包含人類可讀的錯誤信息和機器可解析的上下文(如衝突詳情)。 2. Protocol Buffers 定義 (mcp.proto) 這是我們系統 API 的唯一事實來源 (Single Source of Truth)。 Generated protobuf syntax = "proto3"; package mnemosyne.mcp.v1; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; // =================================================================== // 核心服務定義 (Core Service Definition) // =================================================================== service MnemosyneMCP { // --- 數據導入與管理 (Ingestion & Management) --- rpc IngestProject(IngestProjectRequest) returns (IngestProjectResponse); rpc GetIngestStatus(GetIngestStatusRequest) returns (IngestStatus); // --- 查詢與分析 (Query & Analysis) --- rpc Search(SearchRequest) returns (SearchResponse); rpc RunImpactAnalysis(ImpactAnalysisRequest) returns (ImpactAnalysisResponse); // --- 約束與鎖定 (Constraints & Locking) --- rpc ApplyConstraint(ApplyConstraintRequest) returns (ApplyConstraintResponse); rpc AcquireLock(AcquireLockRequest) returns (AcquireLockResponse); rpc ReleaseLock(ReleaseLockRequest) returns (ReleaseLockResponse); // --- 可視化 (Visualization) --- rpc GetGraphVisualization(GetGraphVisualizationRequest) returns (GraphVisualization); } // =================================================================== // 數據結構定義 (Message Definitions) // =================================================================== // --- 數據導入 --- message IngestProjectRequest { string project_id = 1; // 專案的唯一標識符 string git_url = 2; // 要導入的 Git 倉儲 URL // 可選:指定要分析的分支 optional string branch = 3; } message IngestProjectResponse { string task_id = 1; // 用於查詢狀態的異步任務 ID } message IngestStatus { string task_id = 1; enum Status { PENDING = 0; RUNNING = 1; COMPLETED = 2; FAILED = 3; } Status status = 2; string message = 3; // 例如 "Parsing file 50/100..." google.protobuf.Timestamp completion_time = 4; } message GetIngestStatusRequest { string task_id = 1; } // --- 查詢與分析 --- message SearchRequest { string query_text = 1; // 自然語言查詢 int32 top_k = 2; // 返回最相關的結果數量 // 可選:指定時間點進行歷史查詢 optional google.protobuf.Timestamp as_of_time = 3; } message SearchResponse { string summary = 1; // MCP 生成的情報摘要 repeated Node relevant_nodes = 2; // 檢索到的相關節點 Graph subgraph = 3; // 圍繞相關節點擴展的子圖 string suggested_next_step = 4; } message ImpactAnalysisRequest { string project_id = 1; string pr_number = 2; // 或 commit_hash } message ImpactAnalysisResponse { string summary = 1; enum RiskLevel { LOW = 0; MEDIUM = 1; HIGH = 2; } RiskLevel risk_level = 2; Graph impact_subgraph = 3; } // --- 約束與鎖定 --- message AcquireLockRequest { string target_node_query = 1; // 例如 "File{path:'/app/main.py'}" string agent_id = 2; string task_id = 3; } message AcquireLockResponse { bool locked = 1; optional LockConflict conflict_details = 2; } // ... 其他請求和響應消息 ... // --- 通用數據結構 --- message Node { string id = 1; // 內部唯一 UUID string type = 2; // 如 'Function', 'File' google.protobuf.Struct properties = 3; // 存儲所有屬性 (如 name, path, hash) } message Edge { string id = 1; string type = 2; // 如 'CALLS', 'DEPENDS_ON' string from_node_id = 3; string to_node_id = 4; google.protobuf.Struct properties = 5; } message Graph { repeated Node nodes = 1; repeated Edge edges = 2; } // ... 其他通用消息 ... Use code with caution. Protobuf 3. 核心 API 端點詳解 3.1 IngestProject (異步) gRPC 方法: rpc IngestProject(IngestProjectRequest) returns (IngestProjectResponse) REST Gateway: POST /v1/projects/{project_id}/ingest 描述: 觸發對一個 Git 倉儲的完整 ECL 導入管線。這是一個耗時操作,會立即返回一個 task_id。 用途: CI/CD 在專案初始化時呼叫,建立基線知識圖譜。 開發者手動觸發,對專案進行全量更新。 3.2 Search (同步) gRPC 方法: rpc Search(SearchRequest) returns (SearchResponse) REST Gateway: POST /v1/search 描述: 執行核心的混合檢索。接收自然語言查詢,返回一個包含摘要、相關實體和上下文子圖的結構化響應。 用途: AI 代理的核心入口。在執行任何任務前,先呼叫此 API 來獲取全局上下文和初步情報。 IDE 插件的智能搜索功能。 3.3 RunImpactAnalysis (同步) gRPC 方法: rpc RunImpactAnalysis(ImpactAnalysisRequest) returns (ImpactAnalysisResponse) REST Gateway: GET /v1/projects/{project_id}/prs/{pr_number}/impact 描述: 對一個 Pull Request 或 Commit 進行全域影響力分析,返回風險評級和受影響的子圖。 用途: CI/CD 的強制性檢查門,在合併前自動評估變更風險。 人類開發者在進行程式碼審查時的核心輔助工具。 3.4 AcquireLock (同步, 事務性) gRPC 方法: rpc AcquireLock(AcquireLockRequest) returns (AcquireLockResponse) REST Gateway: POST /v1/locks/acquire 描述: 為一個圖譜中的資源(節點)申請鎖定。此操作必須是原子性的。如果資源已被鎖定,會返回衝突信息。 用途: 多代理協作的基礎。任何 AI 代理在執行有潛在衝突的寫入操作前,必須先呼叫此 API。 4. API 使用範例 (AI Agent 視角) 場景: AI 代理接到任務「為 Events collection 新增 organizer 欄位」。 第一步:獲取上下文 Generated python # 偽代碼 request = mcp_pb2.SearchRequest(query_text="Events data model organizer field") response = mcp_stub.Search(request) # AI 代理分析 response.summary 和 response.relevant_nodes # 發現 'Events' model 已存在於 'packages/cms/src/collections/Events.ts' Use code with caution. Python 第二步:申請鎖定 Generated python request = mcp_pb2.AcquireLockRequest( target_node_query="File{path:'packages/cms/src/collections/Events.ts'}", agent_id="agent-007", task_id="TASK-ADD-ORGANIZER" ) response = mcp_stub.AcquireLock(request) if not response.locked: # 處理鎖定失敗的邏輯,例如等待或上報 handle_lock_conflict(response.conflict_details) Use code with caution. Python 第三步:執行修改... (省略) 第四步:提交 PR 並等待影響力分析... (CI/CD 觸發) 第五步:釋放鎖 Generated python # 在 PR 合併後,由 CI/CD 觸發 request = mcp_pb2.ReleaseLockRequest(task_id="TASK-ADD-ORGANIZER") mcp_stub.ReleaseLock(request)

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