多回购上下文MCP服务器
提供跨存储库上下文和工具的分层MCP(模型上下文协议)服务器的可重用模板。服务器按存储库命名空间组织工具,支持动态发现,并允许通过类似插件的架构轻松扩展。
特性
- 分层工具组织:用于跨回购操作的根工具和特定于回购的命名空间工具
- 动态存储库发现:自动从配置、环境或父目录中查找存储库
- 插件架构:易于使用新的存储库和工具进行扩展
- 类型安全:具有适当接口的完全TypeScript支持
- 灵活配置:具有优先级排序的多个配置源
- 延迟加载:按需加载回购工具以减少启动时间
建筑
服务器提供:
- 根工具 用于跨存储库操作(列出存储库、跨存储库搜索)
- 回购专用工具 按存储库命名空间(例如。,
repo-name:tool-name) - 动态发现 自动或通过配置查找存储库
- 插件架构 便于添加新的存储库和工具
安装
npm install
# or
bun install配置
在以下位置之一创建配置文件(按优先级顺序选中):
.multi-repo-mcp/repos.json(项目本地)~/.multi-repo-mcp/repos.json(用户配置)- 环境变量
MULTI_REPO_MCP_CONFIG指向配置文件 - 默认配置(启用自动发现)
配置格式
{
"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(必填)-存储库名称
输出: 回购元数据、可用工具、文件结构摘要
添加存储库工具
内置模块
- 创建目录:
src/tools/examples/{repo-type}/ - 创建
index.ts出口aloadTools功能:
import { ToolDefinition } from '../../registry/types.js';
export async function loadTools(repoPath: string): Promise {
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)
}]
};
}
}
];
}- 这些工具将自动加载到该类型的存储库中
自定义回购工具
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-获取特定合同的ABIget_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;
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;
isError?: boolean;
}环境变量
MULTI_REPO_MCP_CONFIG-配置文件的路径MULTI_REPO_MCP_REPOS_PATH-扫描存储库的路径DEBUG-启用调试日志记录
许可证
麻省理工学院
