Open Finance API 规范服务

为VS Code和IntelliJ IDEA提供柏林集团Open Finance API规范的上下文信息,支持语义搜索和图数据库查询。

  • by Borelli-7
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Borelli-7/bg-mcp-server

使用说明

柏林集团MCP服务器

模型上下文协议(MCP)服务器,在VS Code和IntelliJ IDEA中向人工智能助手提供Berlin Group Open Finance API规范作为上下文信息。

概述

此MCP服务器从OpenAPI YAML文件和PDF文档中加载并索引柏林集团开放金融规范,使LLM能够在开放金融框架实施过程中提供准确、符合规范的指导。

服务器功能 先进的人工智能能力 包括:

  • 语义搜索 通过ChromaDB进行智能、上下文感知的文档检索
  • 图数据库 通过Neo4j探索API端点、模式和数据模型之间的复杂关系
  • 矢量嵌入 用于跨PDF文档的自然语言查询
  • 关系遍历 用于理解依赖关系和模式继承

特性

  • 📚 完整的规范访问:加载所有柏林集团OpenAPI规范(AIS、PIS、PIIS、BASK、同意书等)
  • 🔍 强大的搜索功能:跨端点、模式和PDF文档搜索
  • 🎯 智能过滤:按方法、标记或规范筛选端点
  • 📖 PDF支持:从实施指南中提取和搜索内容
  • 🧠 语义搜索:使用ChromaDB向量嵌入进行自然语言查询的人工智能语义搜索
  • 🕸️ 图数据库:Neo4j集成,用于探索复杂的关系和依赖关系
  • 📊 关系遍历:在架构引用、端点依赖项和API互连之间导航
  • ✂️ 智能文本分块:将PDF文档拆分为语义上有意义的块,以便更好地检索
  • 🔄 自动回退:当ChromaDB或Neo4j不可用时,优雅地回退到内存存储
  • 🛠️ 24个MCP工具:全面的工具集,包括12个核心工具+6个语义搜索工具+6个图形数据库工具
  • 🔌 多IDE支持:适用于VS Code和IntelliJ IDEA

可用规格

服务器对以下柏林集团规范进行索引:

  • 账户信息服务(AIS) v2.3
  • 支付发起服务(PIS) v2.3
  • 资金确认(PIIS) v2.3
  • 银行账户状态服务(BASK) v2.2
  • 同意管理 v2.1
  • 数据字典 v2.3.1
  • 支付更新状态中心(PUSH) v2.2

安装

先决条件

  • Node.js v18或更高版本
  • npm或纱线
  • 支持MCP的VS Code或IntelliJ IDEA
  • 可选的:用于语义搜索的ChromaDB服务器(默认在localhost:8000上运行)
  • 可选的:用于图形查询的Neo4j数据库(默认在localhost:7687上运行)

设置

  1. 克隆或导航到项目目录:

    cd path-of-the-repo/Berlin-group-mcp
    
  2. 安装依赖项:

    npm install
    
  3. 构建项目:

    npm run build
    

配置

VS Code

  1. 配置文件已在以下位置创建 .vscode/mcp-settings.json

  2. 如果需要,请更新路径以匹配您的项目位置:

    {
      "mcpServers": {
        "berlin-group": {
          "command": "node",
          "args": [
            "absolute-path-of-the-repo/Berlin-group-mcp/build/index.js"
          ]
        }
      }
    }
    
  3. 重新启动VS Code或重新加载窗口

  4. Berlin Group工具现在应该可以在GitHub Copilot Chat上使用

智能J IDEA

看 INTELLIJ_SETUP.md 了解详细的配置说明。

依赖项

该项目使用以下关键依赖关系:

核心依赖关系

  • @模型上下文协议/sdk (^1.0.4):MCP协议实现
  • js yaml (^4.1.0):OpenAPI规范的YAML解析
  • pdf解析 (^1.1.1):PDF文档文本提取

高级功能

  • 向量数据库 (^1.8.1):用于语义搜索的矢量数据库客户端

    • 启用基于AI的文档检索
    • 可选:如果不可用,则回退到内存存储
  • neo4j驱动程序 (^5.27.0):Neo4j图形数据库驱动程序

    • 启用复杂的关系查询
    • 可选:如果不可用,则回退到内存图

开发依赖

  • TypeScript (^5.7.3):TypeScript编译器
  • 玩笑 (^29.7.0):测试框架
  • 开玩笑的 (^29.1.2):对Jest的TypeScript支持
  • 所有主要依赖项的类型定义

所有依赖项都会自动安装 npm install.

可选:外部数据库配置

柏林集团MCP服务器可以选择使用外部数据库来增强功能。两者都是 完全可选 –服务器在不使用内存存储的情况下可以完美工作。

配置方法

服务器支持两种配置方法:

  1. 环境变量 (推荐):创建一个 .env 项目根目录中的文件
  2. 直接配置:修改中的配置 src/index.ts

环境变量

复制 .env.example 文件到 .env 并自定义:

cp .env.example .env

然后编辑 .env 使用您的设置:

# ChromaDB Configuration (for Semantic Search)
CHROMA_HOST=localhost
CHROMA_PORT=8000
CHROMA_COLLECTION=berlin_group_pdfs

# OpenAI Configuration (for embeddings)
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_EMBEDDING_MODEL=text-embedding-3-small

# Neo4j Configuration (for Graph Database)
NEO4J_URI=bolt://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password
NEO4J_DATABASE=neo4j
NEO4J_MAX_POOL_SIZE=50
NEO4J_CONNECTION_TIMEOUT=60000

直接配置

或者,您可以直接在中修改配置 src/index.ts:

const indexer = new SpecificationIndexer({
  vectorStore: {
    chromaHost: 'localhost',
    chromaPort: 8000,
    collectionName: 'my_collection',
    embeddingModel: 'text-embedding-3-small'
  },
  graphStore: {
    uri: 'bolt://localhost:7687',
    username: 'neo4j',
    password: 'password',
    database: 'neo4j',
    maxConnectionPoolSize: 50,
    connectionAcquisitionTimeout: 60000
  }
});

ChromaDB(用于语义搜索)

ChromaDB使用向量嵌入在PDF文档中实现基于AI的语义搜索。

安装:

# Using pip
pip install chromadb

# Or using Docker
docker run -d -p 8000:8000 chromadb/chroma

默认配置:

  • 主持人: localhost
  • 端口: 8000
  • 收藏: berlin_group_pdfs

服务器在初始化过程中会自动连接。如果ChromaDB不可用,语义搜索将退回到关键字匹配。

Neo4j(用于图形数据库)

Neo4j支持跨规范、端点和模式的复杂关系查询和图遍历。

安装:

# Using Docker (recommended)
docker run -d \
  -p 7475:7474 -p 7688:7687 \
  -e NEO4J_AUTH=neo4j/password \
  --name neo4j_berling_group_mcp \
  neo4j:latest

# Or download from https://neo4j.com/download/

默认配置:

  • URI: bolt://localhost:7687
  • 用户名: neo4j
  • 密码: password
  • 数据库: neo4j

服务器在初始化过程中会自动连接。如果Neo4j不可用,则使用内存中的图查询实现。

Neo4j浏览器访问: Neo4j运行后,访问浏览器界面 http://localhost:7474 要使图形可视化:

// Example queries in Neo4j Browser
MATCH (s:Specification)-[:DEFINES_ENDPOINT]->(e:Endpoint)
RETURN s, e LIMIT 25

MATCH(e:端点)-[:USES_SCHEMA]->(s:架构) 其中e.path包含“付款” 返回e,s

MATCH路径=(s1:架构)-[:参考文献*1..3]->(s2:架构) 其中s1.name=“付款发起” 返回路径


### Embedding Providers

For production deployments with ChromaDB, consider using advanced embedding providers:

**OpenAI Embeddings** (highest quality):
```typescript
// Set environment variable
export OPENAI_API_KEY="your-api-key"

// Modify vectorStore.ts to use OpenAIEmbeddingProvider
const embeddingProvider = new OpenAIEmbeddingProvider(
  process.env.OPENAI_API_KEY,
  'text-embedding-3-small'  // or 'text-embedding-3-large'
);

本地嵌入 (默认情况下,不需要API): 该服务器包含一个内置的基于TF-IDF的嵌入提供程序,无需外部API即可工作。当没有配置其他提供程序时,它会自动使用。

部署场景

场景 ChromaDB Neo4j 可用工具 最适合
全栈 ✅ 正在运行 ✅ 运行 24个工具 生产、研究、复杂分析
语义焦点 ✅ 正在运行 ❌ 不可用 18个工具 文档搜索,问答
图形焦点 ❌ 不可用 ✅ 运行 18个工具 API体系结构分析
最小/发展 ❌ 不可用 ❌ 不可用 12个工具 开发,基本查询

建筑

核心组件

柏林集团MCP服务器采用模块化架构构建,由几个专用组件组成:

1. YAML解析器 (yamlParser.ts)

从YAML文件中解析Berlin Group OpenAPI规范,提取:

  • API端点(路径、方法、参数)
  • 模式定义和数据模型
  • 标签、描述和元数据
  • 请求/响应规范

2. PDF解析器 (pdfParser.ts)

使用处理PDF文档文件 pdf-parse 图书馆:

  • 从PDF文档中提取全文内容
  • 执行基于关键字的文本搜索
  • 提供文档摘要和元数据

3. 文本块 (textChunker.ts)

实现矢量嵌入的智能文档分割:

  • 递归字符分割:在自然边界处打断文本(段落、句子、子句)
  • 可配置块大小:默认1000个字符,重叠200个字符,以保持上下文连续性
  • 元数据保存:跟踪源文件、块索引、节标题和页面估计值
  • 语义连贯性:尽可能避免在句中拆分以保持意思

4. 向量存储 (vectorStore.ts)

使用ChromaDB管理语义搜索功能:

  • ChromaDB集成:与ChromaDB服务器的可选连接,用于持久矢量存储
  • 本地嵌入提供程序:当外部API不可用时,内置TF-IDF式嵌入生成
  • OpenAI嵌入支持:与OpenAI的嵌入模型(text-embedding-3-small、text-embeading-3-large)可配置集成
  • 自动回退:在ChromaDB服务器不可用时使用内存中的矢量存储
  • 语义搜索:具有相关性评分和距离度量的自然语言查询
  • 元数据筛选:在特定文件或文档部分中搜索

矢量存储如何工作:

  1. PDF文档由文本块分割器分割成块
  2. 每个块都转换为向量嵌入(384-3072维,具体取决于提供者)
  3. 嵌入内容存储在ChromaDB集合或内存回退中
  4. 用户查询使用相同的模型嵌入
  5. 余弦相似度找到最相关的块
  6. 结果按相关性得分(0.0到1.0)进行排名

5. 图形存储 (graphStore.ts)

使用Neo4j管理图形数据库操作:

  • Neo4j集成:可选连接到Neo4j数据库,用于复杂的关系查询
  • 内存回退:Neo4j不可用时完成图实现
  • 连接管理:处理驱动程序生命周期、会话和事务
  • CRUD操作:使用类型化接口创建/读取节点和关系
  • Cypher查询执行:直接访问Neo4j强大的查询语言
  • 统计:提供节点计数、关系和图形密度的度量

图形节点类型:

  • 规格:OpenAPI规范元数据(标题、版本、描述)
  • 端点:具有HTTP方法的API路径
  • 模式:数据模型和类型定义
  • 财产:具有类型和约束的架构字段
  • 参数:请求参数(查询、标头、路径、cookie)
  • 响应:带有状态代码的HTTP响应定义
  • 标签:端点分类

图形关系类型:

  • DEFINES_ENDPOINT:规格→ 端点
  • DEFINES_SCHEMA:规格→ 模式
  • HAS_PARAMETER:端点→ 参数
  • HAS_RESPONSE:端点→ 响应
  • USES_SCHEMA:端点/参数/响应→ 模式
  • REFERENCES:架构→ 模式(用于$ref关系)
  • HAS_PROPERTY:架构→ 财产
  • TAGGED_WITH:端点→ Tag

6. 图形索引器 (graphIndexer.ts)

将OpenAPI规范转换为图结构:

  • 规范索引:为每个加载的规范文件创建节点
  • 端点提取:使用完整详细信息分析所有API终结点
  • 模式映射:提取所有数据模型及其属性
  • 建立关系:将端点连接到架构、参数和响应
  • 指代消解:如下 $ref 构建模式依赖关系图的指针
  • 进度跟踪:在索引操作期间提供实时反馈
  • 错误处理:优雅地处理格式错误的规范

索引过程:

  1. 从以下位置加载YAML文件 yml_files/ 目录
  2. 为每个文件创建规范节点
  3. 提取并创建端点节点
  4. 提取并创建具有属性的架构节点
  5. 在所有实体之间建立关系
  6. 索引到Neo4j或内存存储中

7. 图模型 (graphModels.ts)

定义用于类型安全图操作的TypeScript接口:

  • 节点接口(SpecificationNode、EndpointNode、SchemaNode等)
  • 关系类型枚举
  • 查询结果类型(GraphTraversalResult、PatternSearchResult等)
  • 用于创建节点的DTO类型
  • ID生成和引用提取的实用功能

8. 规范索引器 (indexer.ts)

编排所有组件并提供统一的API:

  • 协调YAML解析器、PDF解析器、向量存储和图索引器
  • 管理初始化顺序和错误处理
  • 提供高级搜索和查询方法
  • 处理可选服务不可用时的回退情况
  • 汇总所有子系统的统计数据

数据流

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│   YAML Files    │────>│  YAML Parser     │────>│  Graph Indexer  │
│  (OpenAPI)      │     │                  │     │                 │
└─────────────────┘     └──────────────────┘     └────────┬────────┘
                                                            │
                                                            v
┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│   PDF Files     │────>│  PDF Parser +    │────>│  Vector Store   │
│ (Documentation) │     │  Text Chunker    │     │   (ChromaDB)    │
└─────────────────┘     └──────────────────┘     └─────────────────┘
                                                            │
                                                            v
                                             ┌──────────────────────────┐
                                             │   Specification Indexer  │
                                             │   (Unified Interface)    │
                                             └────────────┬─────────────┘
                                                          │
                                                          v
                                             ┌──────────────────────────┐
                                             │     MCP Server Tools     │
                                             │  (24 Tools Available)    │
                                             └──────────────────────────┘

回退机制

该服务器设计用于各种部署场景:

  1. 全栈 (ChromaDB+Neo4j):

    • 所有24种可用工具
    • 最佳性能和能力
    • 基于持久向量的语义搜索
    • 使用Cypher进行复杂的图形查询
  2. 仅矢量 (ChromaDB,无Neo4j):

    • 18个可用工具(核心+语义搜索)
    • 图查询在内存中的实现
    • 适用于以语义搜索为中心的用例
  3. 仅图形 (Neo4j,无ChromaDB):

    • 18个可用工具(核心+图形数据库)
    • 语义搜索退回到关键字匹配
    • 有利于关系探索用例
  4. 最小化 (无外部数据库):

    • 12个核心工具可用
    • 所有操作都使用内存存储
    • 仅基于关键字的搜索
    • 适用于基本查询和开发

服务器在初始化期间自动检测可用服务,并相应地调整其功能。通过统计数据和状态端点通知用户哪些功能可用。

可用工具

服务器提供 24个MCP工具 分为三类:

核心工具(12个工具)

搜索和发现

  • search_endpoints -搜索所有规范中的API端点

    Example: "Find all payment endpoints"
    
  • search_schemas -搜索数据模式和模型

    Example: "Find schemas related to transaction"
    
  • search_pdf_documentation -使用关键字匹配搜索PDF文档

    Example: "Search for SCA requirements"
    
  • search_all -跨所有来源(端点、模式、PDF)的全面关键字搜索

    Example: "Find everything about consent"
    

端点信息

  • get_endpoint_details -获取特定端点的详细信息

    Parameters: path, method
    Example: path="/v1/accounts", method="GET"
    
  • filter_endpoints_by_tag -按标签筛选端点

    Example: tag="accounts"
    
  • filter_endpoints_by_method -按HTTP方法筛选端点

    Example: method="POST"
    

模式信息

  • get_schema -获取特定的架构定义
    Parameters: schemaName, specFile (optional)
    Example: schemaName="AccountDetails"
    

规格管理

  • list_specifications -列出所有可用的OpenAPI规范

  • get_specification_details -获取特定规格的全面详细信息

    Parameters: fileName
    
  • list_pdf_documents -列出所有可用的PDF文档

  • get_statistics -获取已加载规格的基本统计信息

语义搜索工具(6个工具)

这些工具使用ChromaDB和向量嵌入进行智能、上下文感知的文档检索。当ChromaDB不可用时,它们会自动回退到基于关键字的搜索。

  • search_pdf_semantic -在PDF文档中执行语义搜索

    Parameters: query (string), topK (number, default: 10)
    Example: "What are the authentication requirements for payment initiation?"
    
    How it works:
    - Converts your natural language query into a vector embedding
    - Finds the most semantically similar document chunks
    - Returns results ranked by relevance score (0.0-1.0)
    - Understands synonyms and related concepts (e.g., "authenticate" matches "authorization")
    
  • search_pdf_semantic_filtered -使用元数据过滤器的语义搜索

    Parameters: query (string), fileName (optional), section (optional), topK (optional)
    Example: query="SCA exemptions", fileName="Implementation_Guide.pdf"
    
    Use cases:
    - Search within a specific document
    - Filter by document section
    - Narrow results to relevant portions
    
  • search_all_semantic -跨所有来源的全面语义搜索

    Parameters: query (string), topK (number, default: 10)
    Example: "How do I handle declined payments?"
    
    Returns:
    - Matching endpoints (keyword search)
    - Matching schemas (keyword search)
    - Semantically similar PDF content (vector search)
    
  • get_vector_store_stats -获取矢量存储统计信息

    Returns:
    - enabled: Whether vector store is operational
    - totalChunks: Number of indexed document chunks
    - collectionName: ChromaDB collection name
    - isInMemory: Whether using in-memory fallback
    

图形数据库工具(6个工具)

这些工具使用Neo4j来探索规范、端点、模式和数据模型之间的复杂关系。当Neo4j不可用时,他们使用内存图实现。

  • graph_find_related_schemas -通过$ref引用查找相关模式

    Parameters: schemaName (string), specFile (optional), maxDepth (number, default: 3)
    Example: schemaName="AccountReference"
    
    Use cases:
    - Understand schema inheritance hierarchies
    - Find all schemas that reference a particular type
    - Discover composed data models
    - Map schema dependencies
    
  • graph_get_endpoint_dependencies -获取API终结点的所有依赖项

    Parameters: path (string), method (string), specFile (optional)
    Example: path="/v1/payments/sepa-credit-transfers", method="POST"
    
    Returns:
    - All request parameters (query, header, path, body)
    - Request body schema and nested schemas
    - All possible response codes and their schemas
    - Complete dependency tree
    
  • graph_traverse_relationships -使用过滤器执行自定义图遍历

    Parameters: 
      - startNodeType: Type of starting node (Specification, Endpoint, Schema, etc.)
      - startNodeFilter: Property filters (e.g., {name: "AccountReference"})
      - relationshipTypes: Optional list of relationship types to follow
      - maxDepth: Maximum traversal depth (default: 3)
    
    Example: 
      startNodeType="Schema", 
      startNodeFilter={name: "PaymentInitiation*"},
      relationshipTypes=["REFERENCES", "USES_SCHEMA"]
    
    Use cases:
    - Custom relationship exploration
    - Multi-hop dependency analysis
    - Pattern-based graph queries
    
  • graph_get_specification_graph -获取规格的完整图表

    Parameters: fileName (string)
    Example: fileName="BG_oFA_PIS_Version_2.3_20251128.openapi.yaml"
    
    Returns:
    - All endpoints in the specification
    - All schemas and their properties
    - All relationships between entities
    - Complete specification structure as a graph
    
  • graph_search_by_pattern -按属性模式搜索图节点

    Parameters: 
      - nodeType: Type of node to search
      - pattern: Property pattern with wildcards (e.g., {path: "/v1/accounts*"})
      - limit: Maximum results (default: 50)
    
    Example: 
      nodeType="Endpoint", 
      pattern={path: "/v1/payments/*", method: "POST"}
    
    Supports wildcards:
    - {name: "*Account*"} - Contains "Account"
    - {path: "/v1/accounts*"} - Starts with "/v1/accounts"
    - {method: "POST"} - Exact match
    
  • get_graph_store_stats -获取图形数据库统计信息

    Returns:
    - enabled: Whether graph store is operational
    - usingNeo4j: Whether connected to Neo4j (true) or using in-memory (false)
    - Node counts by type (Specification, Endpoint, Schema, etc.)
    - Relationship counts by type
    - Indexing metrics (duration, errors)
    - Graph density metrics
    

工具选择指南

在以下情况下使用核心工具:

  • 您需要精确的端点路径或模式名称
  • 您想按标签或HTTP方法进行筛选
  • 您正在寻找具体的规格细节

在以下情况下使用语义搜索工具:

  • 你有自然语言问题
  • 您正在跨文档探索概念
  • 你不知道确切的术语
  • 你想要AI驱动的相关性排名

在以下情况下使用图形数据库工具:

  • 你需要了解关系和依赖关系
  • 您正在探索模式继承
  • 您想分析端点复杂性
  • 您需要遍历多级引用

使用示例

使用GitHub Copilot编写VS代码

基本查询

You: "What endpoints are available for account information?"
Copilot: [Uses search_endpoints tool to find AIS endpoints]

You: "Show me the schema for payment initiation request"
Copilot: [Uses search_schemas tool to find payment schemas]

语义搜索查询

You: "How do I implement Strong Customer Authentication?"
Copilot: [Uses search_pdf_semantic to find relevant SCA documentation with AI ranking]

You: "What are the requirements for payment authorization?"
Copilot: [Uses search_all_semantic to find endpoints, schemas, and semantically related PDF content]

You: "Find information about transaction status in the PIS specification"
Copilot: [Uses search_pdf_semantic_filtered with fileName filter]

图形数据库查询

You: "What schemas does AccountReference depend on?"
Copilot: [Uses graph_find_related_schemas to traverse schema relationships]

You: "Show me all dependencies for the payment initiation endpoint"
Copilot: [Uses graph_get_endpoint_dependencies to get parameters, request/response schemas]

You: "Find all endpoints that use the Amount schema"
Copilot: [Uses graph_traverse_relationships starting from Amount schema]

You: "Get the complete API structure for the AIS specification"
Copilot: [Uses graph_get_specification_graph to return full specification graph]

高级分析

You: "Compare the complexity of payment endpoints vs account endpoints"
Copilot: [Uses graph_get_endpoint_dependencies for multiple endpoints and compares]

You: "What are all the possible error responses for account endpoints?"
Copilot: [Uses graph_traverse_relationships to find all response schemas]

You: "Show me all schemas that contain PII (personally identifiable information)"
Copilot: [Uses search_pdf_semantic to find PII references, then graph_search_by_pattern to find related schemas]

程序化使用

服务器也可以通过MCP协议以编程方式使用:

// Example tool call
{
  "method": "tools/call",
  "params": {
    "name": "search_endpoints",
    "arguments": {
      "query": "payment"
    }
  }
}

项目结构

Berlin-group-mcp/
├── src/
│   ├── index.ts              # Main MCP server with 24 tool definitions
│   ├── indexer.ts            # Specification indexer orchestrating all components
│   ├── yamlParser.ts         # OpenAPI YAML parser
│   ├── pdfParser.ts          # PDF document parser
│   ├── textChunker.ts        # Intelligent text chunking for vector embeddings
│   ├── vectorStore.ts        # ChromaDB integration for semantic search
│   ├── graphStore.ts         # Neo4j integration and in-memory graph store
│   ├── graphIndexer.ts       # Graph database indexer
│   └── graphModels.ts        # TypeScript interfaces for graph entities
├── yml_files/                # Berlin Group OpenAPI specs (7 specifications)
│   ├── BG_oFA_AIS_Version_2.3_20250818.openapi.yaml
│   ├── BG_oFA_PIS_Version_2.3_20251128.openapi.yaml
│   ├── BG_oFA_PIIS_Version_2.3_20250818.openapi.yaml
│   ├── BG_oFA_BASK_Version_2.2_20251128.openapi.yaml
│   ├── BG_oFA_Consent_Version_2.1_20251128.openapi.yaml
│   ├── BG_oFA_dataDictionary_Version_2.2.6_20250818.openapi.yaml
│   └── BG_oFA_PUSH_Version_2.2_20250818.openapi.yaml
├── pdf_files/                # PDF documentation (implementation guides, frameworks)
├── tests/
│   ├── unit/                 # Unit tests for individual components
│   │   ├── vectorStore.test.ts
│   │   ├── graphStore.test.ts
│   │   ├── graphIndexer.test.ts
│   │   ├── graphModels.test.ts
│   │   └── textChunker.test.ts
│   └── integration/          # Integration tests
│       ├── semanticSearch.test.ts
│       └── graphSearch.test.ts
├── build/                    # Compiled JavaScript (generated)
├── docs/                     # Architecture documentation and diagrams
│   └── architecture/
│       └── diagrams/         # PlantUML diagrams for system architecture
├── postman/                  # Postman collection for testing MCP tools
├── package.json              # Dependencies: chromadb, neo4j-driver, pdf-parse, etc.
├── tsconfig.json
├── jest.config.js            # Test configuration
├── .vscode/
│   └── mcp-settings.json     # VS Code MCP configuration
├── INTELLIJ_SETUP.md         # IntelliJ configuration guide
└── README.md

发展

运行测试

该项目包括综合单元和集成测试:

# Run all tests
npm test

# Run tests in watch mode
npm run test:watch

# Run with coverage report
npm run test:coverage

测试覆盖范围:

  • 单元测试: vectorStore.test.ts, graphStore.test.ts, graphIndexer.test.ts, graphModels.test.ts, textChunker.test.ts
  • 集成测试: semanticSearch.test.ts, graphSearch.test.ts

观看模式

要根据文件更改自动重建,请执行以下操作:

npm run watch

调试

使用Node.js检查器调试服务器:

npm run inspector

添加新规格

  1. 将YAML文件添加到 yml_files/ 目录
  2. 将PDF文件添加到 pdf_files/ 目录
  3. 重建项目: npm run build
  4. 重新启动MCP服务器(重新加载VS代码或重新启动IDE)
  5. 新规格将在下次启动时自动索引

扩展服务器

添加新工具:

  1. 在中定义工具架构 src/index.ts 工具阵列
  2. 在中添加处理程序 CallToolRequestSchema 处理器
  3. 在中实现业务逻辑 src/indexer.ts
  4. 更新README文档

添加新的嵌入提供程序:

  1. 实施 EmbeddingProvider 接口在 src/vectorStore.ts
  2. 添加 embed() 和 embedQuery() 方法
  3. 在中配置 src/indexer.ts 或通过环境变量

自定义图形架构:

  1. 在中添加新节点类型 src/graphModels.ts
  2. 在中添加关系 RelationshipType 枚举
  3. 更新中的索引逻辑 src/graphIndexer.ts
  4. 在中添加查询方法 src/graphStore.ts

故障排除

服务器未启动

  1. 检查Node.js版本: node --version (应该是v18+)
  2. 验证构建已完成: ls -la build/ (应该看到.js文件)
  3. 检查错误:查看VS代码开发人员工具控制台(帮助→ 切换开发人员工具)
  4. 重建: npm run build

工具未出现

  1. 确保MCP设置文件存在:检查 .vscode/mcp-settings.json
  2. 验证路径是否正确:确保路径 build/index.js 绝对正确
  3. 完全重新启动VS代码:关闭所有窗口并重新打开
  4. 查看GitHub副本:确保Copilot已启用并正常工作
  5. 检查控制台日志:打开开发人员工具,查找MCP连接错误

搜索无结果

  1. 验证YAML和PDF文件是否存在:
    ls -la yml_files/ pdf_files/
    
  2. 检查服务器日志:在控制台中查找初始化错误
  3. 确保文件可读:检查文件权限
  4. 尝试重新索引:删除并重新生成: rm -rf build && npm run build

语义搜索不起作用

  1. 检查ChromaDB是否正在运行 (可选):
    curl http://localhost:8000/api/v1/heartbeat
    
  2. 查看初始化日志:应看到“矢量存储中的索引X PDF块”
  3. 检查回退模式:如果ChromaDB不可用,服务器将回退到关键字搜索
  4. 验证矢量存储统计数据:使用 get_vector_store_stats 工具
  5. 检查ChromaDB日志 (如果通过Docker运行):
    docker logs <chromadb-container-id>
    

图形数据库不工作

  1. 检查Neo4j是否正在运行 (可选):
    curl http://localhost:7474
    # Or check Docker: docker ps | grep neo4j
    
  2. 验证凭据:默认值为 neo4j/neo4j (首次登录时更改)
  3. 查看初始化日志:应看到“图形索引完成:X规格,Y端点,Z模式”
  4. 检查回退模式:如果Neo4j不可用,服务器将使用内存图
  5. 验证图形存储统计数据:使用 get_graph_store_stats 工具
  6. 测试Neo4j连接:
    # Using cypher-shell
    cypher-shell -u neo4j -p your-password
    

性能问题

  1. 大型PDF文件:考虑拆分成更小的文档
  2. ChromaDB速度慢:
    • 使用本地部署而不是远程部署
    • 减少 topK 语义搜索中的参数
    • 考虑更快的嵌入提供商
  3. Neo4j速度慢:
    • 检查是否创建了索引
    • 减少 maxDepth 图内遍历
    • 优化Cypher查询
  4. 内存使用率高:
    • 使用外部数据库(ChromaDB+Neo4j)而不是内存中的数据库
    • 减少加载的规格数量

连接错误

ChromaDB连接被拒绝:

Error: connect ECONNREFUSED 127.0.0.1:8000

解决方案:ChromaDB未运行或在其他端口上运行。服务器将自动回退到内存模式。

Neo4j连接失败:

Neo4jError: Could not connect to bolt://localhost:7687

解决方案:Neo4j未运行或凭据错误。服务器将自动回退到内存模式。

权限问题

# If index.js is not executable
chmod +x build/index.js

# If YAML/PDF files are not readable
chmod -R 644 yml_files/*.yaml pdf_files/*.pdf

调试提示

  1. 启用详细日志记录:设置 NODE_ENV=development 启动服务器之前
  2. 检查初始化顺序:服务器日志显示每个阶段
  3. 测试单个组件:
    npm test -- vectorStore.test.ts
    npm test -- graphStore.test.ts
    
  4. 验证工具可用性:使用 get_statistics, get_vector_store_stats, get_graph_store_stats 工具
  5. 检查MCP通信:在开发人员控制台中查找JSON-RPC消息

常见错误消息

错误 原因 解决方案
“规格尚未加载” 服务器仍在初始化 等待5-10秒,然后重试
“语义搜索不可用” ChromaDB未连接 正常,退回关键字搜索
“图形存储不可用” Neo4j未连接 正常,回退到内存中
“找不到集合” ChromaDB集合丢失 服务器在启动时自动创建它
“身份验证失败” Neo4j凭据错误 在代码中更新凭据或使用默认凭据

技术细节

MCP协议

该服务器实现了模型上下文协议规范(2025-11-25):

  • 工具:24个工具分为核心、语义搜索和图形数据库类别
  • 资源:通过以下方式直接访问规范文件 berlin-group:// URI方案
  • 运输:用于IDE集成的基于stdio的通信

组件架构

解析器功能

  • YAML解析器:

    • 从OpenAPI 3.0+规范中提取路径、操作、模式和组件
    • 手柄 $ref 指针分辨率
    • 验证规范结构
    • 索引标签、参数和响应
  • PDF解析器:

    • 用途 pdf-parse 文本提取库
    • 保留文档结构和元数据
    • 启用全文关键字搜索
    • 提供页码估计
  • 文本块:

    • 递归字符分割算法
    • 可配置的块大小(默认:1000个字符)和重叠(默认:200个字符)
    • 保持跨块的语义连贯性
    • 保留元数据(文件名、节、页码)

矢量存储实现

  • ChromaDB集成:

    • 与ChromaDB服务器的HTTP客户端连接
    • 基于收藏的文档组织
    • 元数据过滤支持
    • 余弦相似度用于相关性评分
  • 嵌入提供者:

    • 本地嵌入提供者:基于TF IDF,384个维度,无外部依赖
    • OpenGL硬件提供商:基于GPT的1536或3072维度,需要API密钥
    • 自定义提供商的可插拔架构
  • 搜索算法:

    • 查询嵌入生成
    • K-最近邻(KNN)搜索
    • 距离度量(余弦相似度,L2距离)
    • 相关性得分归一化(0.0至1.0)

图形存储实现

  • Neo4j集成:

    • Bolt协议驱动程序(neo4j驱动程序v5.27.0)
    • 连接池提高性能
    • 交易管理
    • Cypher查询执行
  • 图形架构:

    Nodes: Specification, Endpoint, Schema, Property, Parameter, Response, Tag
    Relationships: DEFINES_ENDPOINT, DEFINES_SCHEMA, HAS_PARAMETER, 
                   HAS_RESPONSE, USES_SCHEMA, REFERENCES, HAS_PROPERTY, TAGGED_WITH
    
  • 内存回退:

    • 使用地图完成图形实现
    • 与Neo4j实现相同的API
    • 支持所有查询模式
    • 适用于开发和测试

索引过程

  1. 初始化 (平行):

    • 加载YAML文件→ 解析规范→ 提取端点/模式
    • 加载PDF文件→ 解析文档→ 块状文本→ 生成嵌入
  2. 矢量存储索引:

    • 将所有PDF文档分块(典型值:每份文档200-500块)
    • 为每个块生成嵌入
    • 使用元数据存储在ChromaDB中
    • 生成搜索索引
  3. 图形存储索引:

    • 创建规范节点
    • 创建具有关系的端点节点
    • 创建具有属性的架构节点
    • 创建参数和响应节点
    • 为$ref指针建立引用关系
    • 创建标记节点和关系
  4. 错误处理:

    • 如果数据库不可用,则性能会下降
    • 索引进度的详细记录
    • 不停止进程的错误收集
    • 回退到内存存储

演出

  • 初始加载时间:

    • YAML解析:~500ms(7种规范)
    • PDF解析:~1-2s(取决于文件数量/大小)
    • 向量索引:~2-5s(取决于块计数和嵌入提供者)
    • 图索引:~1-3s(取决于数据库连接)
    • 总计:约5-10秒用于完全初始化
  • 查询性能:

    • 关键字搜索:<10ms(内存搜索)
    • 语义搜索:50-200ms(取决于ChromaDB响应时间和top-k)
    • 图形查询:10-100ms(简单查询),100-500ms(复杂遍历)
    • 内存回退:大多数操作<50ms
  • 内存使用:

    • 基本(规格):~20-30MB
    • 矢量存储(内存中):+30-50MB
    • 图形存储(内存中):+20-40MB
    • 总计:~70-120MB(不含外部数据库)
    • 使用外部数据库:~30-50MB(外部存储数据)
  • 可扩展性:

    • 可处理100多种规格
    • 支持1000+个PDF页面
    • 使用Neo4j扩展图形查询(数百万节点)
    • ChromaDB的矢量搜索规模(数百万个块)

快速参考

工具类别摘要

类别 计数 目的 需要
核心工具 12 基本搜索、过滤、规范访问 无(内置)
语义搜索 6 AI支持的文档检索、自然语言查询 ChromaDB(可选)
图数据库 6 关系探索、依赖分析 Neo4j(可选)
总计 24 完整的规范分析工具包 仅限Node.js

主要特征比较

功能 无数据库 带ChromaDB 带Neo4j 两者都有
端点搜索 ✅ 关键字 ✅ 关键字 ✅ 关键字 ✅ 关键字
架构搜索 ✅ 关键字 ✅ 关键字 ✅ 关键字 ✅ 关键字
PDF搜索 ✅ 关键字 ✅ 语义+关键字 ✅ 关键字 ✅ 语义+关键字
架构关系 ✅ 在记忆中 ✅ 在记忆中 ✅ Neo4j图形 ✅ Neo4j图形
端点依赖关系 ✅ 在记忆中 ✅ 在记忆中 ✅ Neo4j图形 ✅ Neo4j图形
图形遍历 ✅ 有限 ✅ 有限 ✅ 完整密码 ✅ 完整密码
性能 良好 优秀(PDF) 优秀(图表) 优秀
内存使用量 ~120MB ~70MB ~80MB ~50MB

常见查询备忘单

// Find endpoints
"search for payment endpoints"
→ Uses: search_endpoints

// Find schemas
"show me the AccountDetails schema"
→ Uses: get_schema or search_schemas

// Natural language search (semantic)
"how to handle authentication errors?"
→ Uses: search_pdf_semantic

// Find related schemas
"what schemas does PaymentInitiation reference?"
→ Uses: graph_find_related_schemas

// Analyze endpoint
"what are all the parameters and responses for POST /v1/payments?"
→ Uses: graph_get_endpoint_dependencies

// Explore relationships
"show me all schemas that use Address type"
→ Uses: graph_traverse_relationships

// Get overview
"show me statistics about the loaded specifications"
→ Uses: get_statistics, get_vector_store_stats, get_graph_store_stats

许可证

麻省理工学院

参考文献

贡献

欢迎投稿!请确保:

  • TypeScript代码遵循项目约定
  • 所有工具都有适当的错误处理
  • 文档已针对新功能进行了更新
  • 为新组件添加了测试(中的单元测试 tests/unit/,集成测试 tests/integration/)
  • 新的嵌入提供商实现了 EmbeddingProvider 接口
  • 新的图形节点类型已添加到 graphModels.ts
  • README更新了示例和使用说明

贡献领域

  • 其他嵌入提供商(Cohere、HuggingFace等)
  • 增强的图形查询功能
  • 柏林集团的其他规格
  • 性能优化
  • 其他MCP工具
  • 文档改进

支持

对于问题或疑问:

  1. 检查故障排除部分
  2. 审查MCP文件
  3. 查看柏林集团规范文件