工作区网桥MCP服务器
⚠️ 早期/实验 -此软件包正在积极开发中(v0.1.0)。API可能会发生变化。
一个功能强大的项目感知MCP服务器,支持跨项目文件访问和git历史探索。每个项目都定义了它需要通过一个简单的配置文件访问哪些其他项目!
特性
文件访问
- 📂 项目特定配置:每个项目都定义了自己的链接项目
- 🔗 自动加载:当您的MCP客户端打开项目时,自动加载链接的项目
- 📁 跨项目文件访问:从任何链接的项目中读取文件
- 🚀 无全球硬编码:配置与每个项目一起存在
- 🔍 浏览项目文件:列出所有链接项目中的目录和文件
Git 历史
- 🕰️ 提交历史记录:使用强大的过滤器(作者、日期、分支)查看提交历史记录
- 🔎 搜索提交:搜索提交消息和代码更改
- 📝 提交详细信息:获取任何提交的完整差异和统计数据
- 📄 文件历史:跟踪特定文件随时间的变化
- 👥 Git的责任:查看谁最后修改了文件中的每一行
- 🌿 分支比较:比较分支之间的提交
- ℹ️ 存储库信息:获取分支、遥控器、标签和状态
安装
先决条件
- Node.js(v18或更高版本)
- Git(用于Git历史功能)
快速开始
通过npm全局安装:
npm install -g workspace-bridge-mcp或与npx一起使用(无需安装):
npx workspace-bridge-mcp配置您的MCP客户端
将此服务器添加到MCP客户端配置文件中:
选项1(无需安装):
{
"mcpServers": {
"workspace-bridge": {
"command": "npx",
"args": ["-y", "workspace-bridge-mcp"]
}
}
}替代方案(如果全局安装):
{
"mcpServers": {
"workspace-bridge": {
"command": "workspace-bridge-mcp"
}
}
}重新启动MCP客户端 加载服务器。
开发设置
如果你想贡献或从源代码运行:
- 克隆此存储库:
git clone https://github.com/AmrAbdelmagid/workspace-bridge-mcp.git
cd workspace-bridge-mcp- 安装依赖项:
npm install- 配置您的MCP客户端以使用本地版本:
{
"mcpServers": {
"workspace-bridge": {
"command": "node",
"args": ["/absolute/path/to/workspace-bridge-mcp/index.js"]
}
}
}用法
步骤1:创建配置文件
在您的主项目中,创建一个 .workspace-bridge.json 文件:
{
"projects": [
{
"name": "project_b",
"path": "/absolute/path/to/project_b"
},
{
"name": "shared_lib",
"path": "../shared_lib"
}
]
}注: 路径可以是相对于当前项目目录的绝对路径或相对路径。
第二步:打开你的项目
当您在MCP客户端中打开项目时,服务器会自动:
- 注册当前项目
- 从加载并注册所有项目
.workspace-bridge.json - 使所有项目可供跨项目访问
步骤3:使用跨项目功能
现在,您可以访问所有链接项目中的文件和git历史记录:
- “显示project_b/src文件夹中的文件”
- “从shared_lib读取配置文件”
- “比较project_a和project_b之间的实现”
可用工具
MCP服务器提供两类工具:
文件访问工具
listProjects
列出所有已注册项目(当前+链接项目)。
listFiles
列出项目目录中的文件和文件夹。
参数:
project(string):项目名称dir(字符串,可选):项目内部的子目录路径
示例用法:
- “列出project_b/src文件夹中的文件”
- “显示shared_lib/lib/utils中的内容”
readFile
从项目中读取文件内容。
参数:
project(string):项目名称file(string):从项目根目录开始的相对文件路径
示例用法:
- “从project_b读取主文件”
- “显示shared_lib/lib/config.js”
高级工具(运行时管理)
如果您需要在会话期间添加/删除项目而不编辑配置文件:
addProject
在运行时动态添加项目。
参数:
name(string):项目的友好名称path(string):项目目录的绝对路径
removeProject
从当前会话中删除项目。
参数:
name(string):要删除的项目的名称
Git历史记录工具
所有git工具都适用于任何已注册的项目(当前或链接的)。项目必须是git存储库。
getCommitHistory
使用强大的过滤选项获取git提交历史记录。
参数:
project(string):项目名称branch(字符串,可选):分支名称(默认为当前)maxCount(number,可选):返回的最大提交数(默认值:50)skip(number,可选):跳过分页提交author(字符串,可选):按作者姓名或电子邮件筛选since(字符串,可选):显示自日期以来的提交(例如,“2024-01-01”,“1周前”)until(string,可选):显示截止日期前的提交
示例用法:
- “显示project_a中的最后20个提交”
- “从以下位置获取提交john@example.com在项目b的最后一个月“
- “显示shared_lib中功能分支上的提交”
searchCommits
搜索提交消息和可选的代码更改。
参数:
project(string):项目名称query(string):在提交消息中查找的搜索词searchInDiff(布尔值,可选):也在代码更改中搜索(默认值:false)maxCount(数字,可选):最大结果(默认值:50)author(字符串,可选):按作者筛选
示例用法:
- “在project_a中搜索关于‘特性X’的提交”
- “查找提到‘重构’的提交,并搜索project_b中的代码更改”
- “通过以下方式搜索错误修复developer@example.com在shared_lib中”
getCommitDetails
获取特定提交的详细信息,包括完整的差异。
参数:
project(string):项目名称commitHash(string):提交哈希值(完整或短)
示例用法:
- “显示project_a中提交abc123的详细信息”
- “获取project_b中提交7f3e9a2的差异”
getFileHistory
获取特定文件的提交历史记录。
参数:
project(string):项目名称file(string):相对于项目根目录的文件路径maxCount(数字,可选):最大提交次数(默认值:50)
示例用法:
- “显示project_a中src/main.js的历史记录”
- “上次在project_b中修改lib/config.js是什么时候?”
- “获取shared_lib中更改此文件的所有提交”
gitBlame
显示谁最后修改了文件中的每一行。
参数:
project(string):项目名称file(string):相对于项目根目录的文件路径startLine(数字,可选):起始行号endLine(数字,可选):结束行号
示例用法:
- “谁在project_a/src/module.js中编写了这个函数?”
- “告诉我project_b/src/main.js中第10-50行的责任”
getRepositoryInfo
获取存储库信息,包括分支、远程、标签和状态。
参数:
project(string):项目名称
示例用法:
- “project_a中存在哪些分支?”
- “显示project_b的git状态”
- “shared_lib中的当前分支是什么?”
compareBranches
比较两个分支之间的提交。
参数:
project(string):项目名称baseBranch(string):基础分支名称compareBranch(string):要比较的分支
示例用法:
- “在project_a中将特征分支与主分支进行比较”
- “在project_b中,哪些承诺处于开发阶段,但不是主要阶段?”
用例
1.跨项目的框架/依赖迁移
升级主要依赖项或框架版本时,请先在一个项目中实现迁移,然后使用此MCP服务器帮助将相同的更改应用于其他项目。
工作流程:
- 在中完成迁移
project_a - 自
project_b,使用MCP服务器:
- “在project_a中搜索关于‘框架升级’的提交” - “显示project_a中提交abc123的完整差异提交详细信息” - “获取project_a/package.json的文件历史记录,以查看所有依赖关系更改” - “从project_a读取迁移说明或更新的配置文件”
- 将类似的更改应用于
project_b基于检查的图案
优点: 避免重复研究,抓住已经解决的边缘案例,保持项目之间的一致性。
2.在类似项目中复制逻辑更改
当多个项目共享相似的业务逻辑时,可以审查一个项目中所做的更改并将其复制到其他项目中。
工作流程:
- 在中实现功能或修复
project_a - 自
project_b:
- “从project_a/src/utils/handler.js读取更新的模块” - “显示project_a/src/utils/handler.js的git责备,以查看最近的更改” - “获取此文件的提交历史记录以了解演变情况” - “将我当前的实现与project_a的版本进行比较”
- 调整并应用改进
project_b
优点: 跨团队共享改进,保持功能对等,减少重复工作。
3.从其他项目中学习
在加入团队或探索不熟悉的代码时,检查相关项目中类似问题是如何解决的。
工作流程:
- “演示project_a如何实现特性X”
- “从shared_lib读取实现”
- “获取project_b模块的提交历史记录,以了解设计决策”
- “谁在project_c中实现了这个组件?告诉我git责备”
优点: 更快的入职培训,了解架构模式,从现有解决方案中学习。
4.没有Monrepo的Monrepo风格开发
使用多个独立的存储库,就像它们在一个单一的存储库中一样,在不重构存储库架构的情况下跨项目访问文件和历史记录。
工作流程:
- 列出project_a、project_b和shared_lib中的所有配置文件
- “比较项目之间的生成配置”
- “在所有链接的项目中搜索TODO注释”
- “跟踪每个项目上次更新其CI/CD管道的时间”
优点: 保持存储库的独立性,同时获得类似于monorepo的可见性和协调性。
5.跨项目边界的调试问题
当bug可能源于依赖项目或共享库中的更改时,请跨项目边界进行调查。
工作流程:
- “shared_lib上次更新是什么时候?显示最近的提交”
- “project_a最近更改了界面吗?检查git历史记录”
- “比较project_a和project_b之间的数据结构,找出差异”
- “显示上一次在两个项目中修改此集成点的开发人员是谁”
优点: 更快的根本原因分析,了解跨项目的依赖关系,跟踪突破性的变化。
示例工作流
工作流程1:多个相关项目
项目结构:
/workspace/project_a/ ← You're here (current project)
/workspace/project_b/ ← Need to access
/workspace/shared_lib/ ← Shared utilities在project_a/.workspace-bridge.json中:
{
"projects": [
{
"name": "project_b",
"path": "../project_b"
},
{
"name": "shared_lib",
"path": "../shared_lib"
}
]
}用途:
- “比较project_a和project_b之间的实施流程”
- “检查两个项目是否使用相同的模式”
- “从shared_lib读取实用程序”
工作流程2:Git历史分析
脚本: 调试project_a中的问题
命令:
- “在project_a中搜索关于‘特性X’的提交”
- “显示带有完整差异的提交abc123的详细信息”
- “谁最后修改了这个文件?让我看看project_a/src/module.js的git错误”
- “获取过去2个月对此文件的更改历史记录”
工作流程3:带历史记录的跨项目代码审查
脚本: 比较不同项目的实现及其演变
命令:
- “从project_a和project_b中读取服务模块”
- “在两个项目中搜索关于‘重构’的提交”
- “显示每个项目上次更新其集成的时间”
- “在project_a中将功能分支与main进行比较,以查看添加了什么”
运作原理
- 启动时:MCP服务器读取
.workspace-bridge.json从当前项目目录 - 自动注册:当前项目+所有链接项目均已注册
- 按项目配置:每个项目都有自己的独立配置
- 无全局状态:全局配置文件中没有硬编码路径
配置文件格式
{
"projects": [
{
"name": "friendly_name", // Required: Name to use in tools
"path": "/absolute/or/relative/path" // Required: Path to project
}
]
}路径分辨率:
- 绝对路径:按原样使用
- 相对路径:相对于当前项目目录解析
Git要求
为了使git历史工具正常工作:
- ✅ 项目必须是git存储库(具有
.git文件夹) - ✅ Git必须安装在您的系统上
- ✅ 非git项目仍然可以使用所有文件访问工具
如果项目不是git存储库,文件访问工具将继续正常工作,但git工具将返回一条明确的错误消息。
重新加载更改
在更新MCP服务器代码之后, 重新启动MCP客户端 加载更改。
注: 更改时不需要重新启动MCP客户端 .workspace-bridge.json -只需重新加载窗口或重新启动MCP连接。
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
贡献
欢迎投稿!请随时提交拉取请求。
