多仓库模型上下文协议服务器

一个提供跨仓库上下文和工具的层次化MCP服务器模板,支持动态发现和插件式架构扩展。

  • by alessandropac96
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 alessandropac96/multi-repo-context-MCP-server

使用说明

多回购上下文MCP服务器

提供跨存储库上下文和工具的分层MCP(模型上下文协议)服务器的可重用模板。服务器按存储库命名空间组织工具,支持动态发现,并允许通过类似插件的架构轻松扩展。

特性

  • 分层工具组织:用于跨回购操作的根工具和特定于回购的命名空间工具
  • 动态存储库发现:自动从配置、环境或父目录中查找存储库
  • 插件架构:易于使用新的存储库和工具进行扩展
  • 类型安全:具有适当接口的完全TypeScript支持
  • 灵活配置:具有优先级排序的多个配置源
  • 延迟加载:按需加载回购工具以减少启动时间

建筑

服务器提供:

  • 根工具 用于跨存储库操作(列出存储库、跨存储库搜索)
  • 回购专用工具 按存储库命名空间(例如。, repo-name:tool-name)
  • 动态发现 自动或通过配置查找存储库
  • 插件架构 便于添加新的存储库和工具

安装

npm install
# or
bun install

配置

在以下位置之一创建配置文件(按优先级顺序选中):

  1. .multi-repo-mcp/repos.json (项目本地)
  2. ~/.multi-repo-mcp/repos.json (用户配置)
  3. 环境变量 MULTI_REPO_MCP_CONFIG 指向配置文件
  4. 默认配置(启用自动发现)

配置格式

{
  "repos": [
    {
      "name": "my-contracts",
      "path": "/path/to/contracts",
      "type": "contracts",
      "tools": "builtin"
    },
    {
      "name": "my-backend",
      "path": "/path/to/backend",
      "type": "backend",
      "tools": "builtin"
    },
    {
      "name": "my-custom-repo",
      "path": "/path/to/custom",
      "type": "unknown",
      "tools": "custom"
    }
  ],
  "discovery": {
    "enabled": true,
    "parentPath": "/path/to/parent",
    "autoDetectType": true
  },
  "tools": {
    "lazyLoad": true,
    "cacheResults": true
  }
}

配置选项

  • 回购协议:存储库配置数组

    • 名字:存储库的唯一标识符
    • 路径:存储库的绝对或相对路径
    • 类型:存储库类型(合同、后端、前端、基础设施、未知)
    • 工具:工具来源- "builtin", "custom",或指向工具模块的路径
  • 发现:自动发现设置

    • 启用:启用自动存储库发现
    • 父路径:扫描存储库的路径
    • 自动检测类型:自动检测存储库类型
  • 工具:工具加载设置

    • 懒加载:首次使用时加载仓库工具(默认值:true)
    • cacheResults:缓存工具结果(默认值:true)

用法

发展

npm run dev
# or
bun run dev

构建

npm run build

跑

npm start

根工具

服务器提供了三个内置的根工具:

list_repos

列出所有已发现的包含元数据的存储库。

输入: 无

输出: 仓库信息数组(名称、路径、类型)

search_across_repos

使用文件系统搜索在所有存储库中搜索。

输入:

  • query: string (必填)-搜索查询
  • repoFilter?: string[] (可选)-将搜索限制在特定存储库
  • fileTypes?: string[] (可选)-按文件扩展名筛选

输出: 按存储库分组的搜索结果

get_repo_info

获取特定存储库的详细信息。

输入:

  • repo: string (必填)-存储库名称

输出: 回购元数据、可用工具、文件结构摘要

添加存储库工具

内置模块

  1. 创建目录: src/tools/examples/{repo-type}/
  2. 创建 index.ts 出口a loadTools 功能:
import { ToolDefinition } from '../../registry/types.js';

export async function loadTools(repoPath: string): Promise<ToolDefinition[]> {
  return [
    {
      name: 'my_tool',
      description: 'Does something useful',
      inputSchema: {
        type: 'object',
        properties: {
          param: { type: 'string' }
        },
        required: ['param']
      },
      handler: async (args, context) => {
        // Tool implementation
        return {
          content: [{
            type: 'text',
            text: JSON.stringify({ result: 'success' }, null, 2)
          }]
        };
      }
    }
  ];
}
  1. 这些工具将自动加载到该类型的存储库中

自定义回购工具

Repos可以在中定义自己的工具 .mcp-tools/index.ts:

import { ToolDefinition } from 'path/to/types';

export const tools: ToolDefinition[] = [
  {
    name: 'custom_tool',
    description: 'Repo-specific tool',
    handler: async (args, context) => {
      // Tool implementation
      return {
        content: [{
          type: 'text',
          text: JSON.stringify({ result: 'success' }, null, 2)
        }]
      };
    }
  }
];

集 "tools": "custom" 在存储库配置中使用自定义工具。

存储库类型检测

服务器根据文件结构自动检测存储库类型:

  • 合同: foundry.toml, hardhat.config.*, truffle-config.*
  • 后端: package.json 具有服务器框架依赖关系
  • 前端: package.json 具有前端框架依赖关系
  • 基础设施: terraform/, cdk.json, serverless.yml

示例存储库工具

合同存储库

  • get_contract_abi -获取特定合同的ABI
  • get_contract_address -获取合约的部署地址

后端存储库

  • get_api_endpoint -获取API端点配置

项目结构

multi-repo-mcp/
├── src/
│   ├── index.ts                    # Entry point
│   ├── server.ts                   # MCP server setup & initialization
│   ├── registry/                   # Tool and repo registries
│   │   ├── ToolRegistry.ts
│   │   ├── RepoRegistry.ts
│   │   └── types.ts
│   ├── tools/                      # Tool definitions
│   │   ├── root/                   # Root-level tools
│   │   └── examples/               # Example repo tool modules
│   ├── discovery/                  # Repository discovery
│   │   ├── RepoDiscoverer.ts
│   │   ├── RepoTypeDetector.ts
│   │   └── RepoValidator.ts
│   ├── loader/                     # Dynamic tool loading
│   │   ├── ToolLoader.ts
│   │   └── RepoToolLoader.ts
│   └── config/                     # Configuration management
│       ├── ConfigLoader.ts
│       └── defaults.ts
├── templates/                      # Templates for new modules
│   └── repo-tool-module/
├── config/                         # Configuration files
│   └── repos.example.json
└── README.md

工具定义模式

所有工具都遵循此界面:

interface ToolDefinition {
  name: string;                    // Tool name (without namespace)
  description: string;             // Human-readable description
  inputSchema?: JSONSchema;         // JSON Schema for input validation
  handler: (args: any, context: ToolContext) => Promise<ToolResult>;
  repo?: string;                   // Optional repo namespace
}

interface ToolContext {
  repoPath: string;                // Absolute path to repo
  repoInfo: RepoInfo;              // Repo metadata
  logger: Logger;                  // Logger instance
}

interface ToolResult {
  content: Array<{
    type: 'text' | 'image' | 'resource';
    text?: string;
    data?: string;
    mimeType?: string;
  }>;
  isError?: boolean;
}

环境变量

  • MULTI_REPO_MCP_CONFIG -配置文件的路径
  • MULTI_REPO_MCP_REPOS_PATH -扫描存储库的路径
  • DEBUG -启用调试日志记录

许可证

麻省理工学院