Skip to main content
Glama

MCP Advisor

MIT License
88
64
  • Apple
  • Linux
ARCHITECTURE.md9.49 kB
# 系统架构 本文档详细介绍了 MCP Advisor 的系统架构、核心组件和数据流。 ## 目录 - [架构概述](#架构概述) - [核心组件](#核心组件) - [数据流](#数据流) - [搜索策略](#搜索策略) - [技术实现](#技术实现) ## 架构概述 MCP Advisor 采用模块化架构,遵循函数式编程原则和关注点分离。系统由以下主要部分组成: ### 系统架构图 ```mermaid graph TD Client["客户端应用"] --> |"MCP 协议"| Transport["传输层"] subgraph "MCP Advisor 服务器" Transport --> |"请求"| SearchService["搜索服务"] SearchService --> |"查询"| Providers["搜索提供者"] subgraph "搜索提供者" Providers --> MeilisearchProvider["Meilisearch 提供者"] Providers --> GetMcpProvider["GetMCP 提供者"] Providers --> CompassProvider["Compass 提供者"] Providers --> NacosProvider["Nacos 服务发现"] Providers --> OfflineProvider["离线提供者"] end OfflineProvider --> |"混合搜索"| HybridSearch["混合搜索引擎"] HybridSearch --> TextMatching["文本匹配"] HybridSearch --> VectorSearch["向量搜索"] MeilisearchProvider --> |"API 调用"| MeilisearchAPI["Meilisearch API"] GetMcpProvider --> |"API 调用"| GetMcpAPI["GetMCP API"] CompassProvider --> |"API 调用"| CompassAPI["Compass API"] NacosProvider --> |"服务发现"| NacosServer["Nacos 注册中心"] SearchService --> |"合并和过滤"| ResultProcessor["结果处理器"] ResultProcessor --> |"优先级"| PriorityEngine["提供者优先级引擎"] ResultProcessor --> |"去重"| Deduplicator["结果去重器"] ResultProcessor --> |"过滤"| SimilarityFilter["相似度过滤器"] SearchService --> Logger["日志系统"] end GetMcpAPI --> |"数据"| ExternalMCPRegistry[("外部 MCP 注册表")] CompassAPI --> |"数据"| ExternalMCPRegistry MeilisearchAPI --> |"数据"| MeilisearchDB[("Meilisearch 数据库")] ``` ## 核心组件 ### 1. 搜索服务层 搜索服务是系统的核心,负责协调不同的搜索提供者并处理结果: - **统一搜索接口**:提供简单的 API 用于查询 MCP 服务器 - **提供者聚合**:从多个搜索提供者收集结果 - **并行执行**:同时查询多个提供者以提高性能 - **可配置选项**:支持自定义限制、相似度阈值等 - **智能结果合并**:基于相似度和提供者优先级合并结果 - **去重机制**:基于 GitHub URL 或标题删除重复结果 ```typescript class SearchService { constructor(options?: SearchOptions); search(query: string): Promise<SearchResult[]>; } ``` ### 2. 搜索提供者 系统支持多个搜索提供者,每个提供者实现相同的接口但使用不同的数据源或搜索策略: #### Meilisearch 提供者 使用 Meilisearch 进行向量搜索: - 高性能向量数据库集成 - 支持语义相似度搜索 - 使用 HNSW 索引进行快速检索 #### GetMCP 提供者 从 GetMCP 注册表获取数据: - 直接与官方 MCP 注册表集成 - 实时数据更新 - 支持元数据过滤 #### Compass 提供者 使用 Compass API 检索 MCP 服务器信息: - 与 Compass 注册表集成 - 支持高级过滤和排序 - 提供额外的元数据 #### 离线提供者 结合文本和向量的混合搜索: - 在本地执行搜索,无需外部 API - 结合关键词匹配和向量相似度 - 可配置的权重平衡 - 作为其他提供者的备用机制 ### 3. 混合搜索引擎 混合搜索引擎结合了文本匹配和向量搜索的优点: - **文本匹配**:基于关键词的精确和模糊匹配 - **向量搜索**:使用嵌入向量的语义相似度 - **可配置权重**:文本和向量搜索之间的可调平衡 - **智能回退**:即使在高相似度阈值下也能确保最小结果数 ### 4. 结果处理管道 结果处理管道负责优化和过滤搜索结果: - **合并**:组合来自多个提供者的结果 - **去重**:基于 GitHub URL 或标题删除重复结果 - **提供者优先级**:基于提供者可靠性对结果进行排名 - **相似度过滤**:基于可配置阈值过滤结果 - **自适应回退**:确保最小结果数以获得更好的用户体验 ### 5. 传输层 传输层处理与客户端的通信: - **Stdio**:默认用于命令行工具 - **SSE**:用于 Web 集成的服务器发送事件 - **REST API**:提供 RESTful 端点 ## 数据流 以下序列图展示了 MCP Advisor 中的数据流: ```mermaid sequenceDiagram participant User participant Agent as AI 代理 participant MCP as MCP Advisor participant QP as 查询处理器 participant Search as 搜索提供者 participant Results as 结果处理器 User->>Agent: 自然语言查询 Agent->>MCP: 搜索请求 MCP->>QP: 处理查询 par 并行处理 QP->>QP: 提取关键词 QP->>QP: 生成嵌入向量 end par 并行搜索执行 QP->>Search: 基于文本的搜索(关键词) Note over Search: Compass 提供者 Note over Search: GetMCP 提供者 Note over Search: 离线提供者 QP->>QP: 归一化向量 QP->>Search: 向量相似度搜索 Note over Search: Meilisearch 提供者 Note over Search: 离线向量搜索 end Search->>Results: 所有搜索结果 Results->>Results: 智能结果合并 Results->>Results: 基于 URL 的去重 Results->>Results: 提供者优先级排名 Results->>Results: 自适应相似度过滤 Results->>Results: 结果数量限制 Results->>MCP: 处理后的结果 MCP->>Agent: MCP 服务器推荐 Agent->>User: 带上下文的推荐 ``` ## 搜索策略 MCP Advisor 使用复杂的搜索策略来提供最相关的结果: ```mermaid graph TD Query["用户查询"] --> Analysis["查询分析"] Analysis --> |"包含关键词"| TextBias["文本偏向搜索"] Analysis --> |"语义查询"| VectorBias["向量偏向搜索"] TextBias --> |"textMatchWeight: 0.7"| HybridSearch1["混合搜索引擎"] VectorBias --> |"textMatchWeight: 0.3"| HybridSearch2["混合搜索引擎"] subgraph "向量处理" RawVector["原始嵌入向量"] --> Normalization["向量归一化"] Normalization --> |"单位向量"| IndexedSearch["HNSW 索引搜索"] IndexedSearch --> |"余弦相似度"| VectorResults["向量结果"] end subgraph "文本处理" Keywords["提取的关键词"] --> ExactMatch["精确匹配"] Keywords --> FuzzyMatch["模糊匹配"] ExactMatch & FuzzyMatch --> |"匹配分数"| TextResults["文本结果"] end subgraph "混合搜索过程" HybridSearch1 & HybridSearch2 --> |"并行执行"| Providers["多个提供者"] VectorResults & TextResults --> WeightedMerge["加权结果合并"] Providers --> |"原始结果"| Merging["智能合并"] WeightedMerge --> Merging Merging --> |"提供者优先级"| Prioritization["基于优先级的选择"] Prioritization --> |"唯一结果"| Filtering["自适应过滤"] end Filtering --> |"minSimilarity: 0.5"| FinalResults["最终结果"] Filtering --> |"回退"| TopResults["前 5 个结果"] ``` ## 技术实现 ### 向量归一化 所有向量在存储和搜索前都经过归一化处理: ```typescript function normalizeVector(vector: number[]): number[] { const magnitude = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0)); if (magnitude === 0) return vector; return vector.map(val => val / magnitude); } ``` ### 混合搜索实现 混合搜索结合了文本和向量搜索的结果: ```typescript async function hybridSearch(query: string, options: SearchOptions): Promise<SearchResult[]> { const [textResults, vectorResults] = await Promise.all([ textSearch(query, options), vectorSearch(query, options) ]); return mergeSearchResults(textResults, vectorResults, { textMatchWeight: 0.3, vectorMatchWeight: 0.7 }); } ``` ### 提供者优先级系统 提供者优先级系统确保最可靠的结果排在前面: ```typescript const PROVIDER_PRIORITIES = { 'compass': 3, 'getmcp': 2, 'meilisearch': 2, 'offline': 1 }; function prioritizeResults(results: SearchResult[]): SearchResult[] { return results.sort((a, b) => { // 首先按提供者优先级排序 const priorityDiff = (PROVIDER_PRIORITIES[b.provider] || 0) - (PROVIDER_PRIORITIES[a.provider] || 0); if (priorityDiff !== 0) return priorityDiff; // 然后按相似度排序 return b.similarity - a.similarity; }); } ``` ## 总结 MCP Advisor 的架构设计注重模块化、可扩展性和性能。通过结合多种搜索策略和智能结果处理,系统能够提供高质量的 MCP 服务器推荐,同时保持良好的响应时间和用户体验。 --- 有关更多技术实现细节和搜索提供者配置,请参阅: - [技术参考手册](./TECHNICAL_REFERENCE.md) - 详细的技术实现和搜索提供者 - [快速开始指南](./GETTING_STARTED.md) - 安装配置和基本使用 - [贡献指南](../CONTRIBUTING.md) - 开发环境设置和代码贡献

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/istarwyh/mcpadvisor'

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