⚠️ 开发初期 / 实验性 - 此包正在积极开发中(v0.1.0)。API可能会发生变化。
一个强大的项目感知型MCP服务器,支持跨项目文件访问和git历史记录探索。每个项目通过简单的配置文件定义需要访问的其他项目!
通过npm全局安装:
npm install -g workspace-bridge-mcp
或者使用npx(无需安装):
npx workspace-bridge-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": ["/绝对路径到/workspace-bridge-mcp/index.js"]
}
}
}
在主项目中创建一个.workspace-bridge.json文件:
{
"projects": [
{
"name": "project_b",
"path": "/绝对路径到/project_b"
},
{
"name": "shared_lib",
"path": "../shared_lib"
}
]
}
注意:路径可以是绝对路径或相对于当前项目目录的相对路径。
当您在MCP客户端中打开一个项目时,服务器会自动:
.workspace-bridge.json的所有项目现在您可以访问所有链接项目的文件和git历史:
MCP服务器提供两类工具:
listProjects列出所有注册的项目(当前项目+链接项目)。
listFiles列出项目目录中的文件和文件夹。
参数:
project(字符串):项目名称dir(字符串,可选):项目内的子目录路径示例用法:
readFile从项目中读取文件内容。
参数:
project(字符串):项目名称file(字符串):从项目根目录开始的相对文件路径示例用法:
如果您需要在会话期间添加/删除项目而不编辑配置文件:
addProject动态地在运行时添加项目。
参数:
name(字符串):项目的友好名称path(字符串):项目的绝对路径removeProject从当前会话中移除项目。
参数:
name(字符串):要移除的项目名称所有git工具都可以在任何注册项目(当前项目或链接项目)上工作。项目必须是git仓库。
getCommitHistory获取git提交历史,带有强大的过滤选项。
参数:
project(字符串):项目名称branch(字符串,可选):分支名称(默认为当前分支)maxCount(数字,可选):返回的最大提交数(默认:50)skip(数字,可选):跳过提交以进行分页author(字符串,可选):按作者名或邮箱过滤since(字符串,可选):自某日期以来的提交(例如:"2_024-01-01","1周前")until(字符串,可选):直到某日期的提交示例用法:
searchCommits搜索提交消息,可选地搜索代码更改。
参数:
project(字符串):项目名称query(字符串):要在提交消息中查找的搜索词searchInDiff(布尔值,可选):也搜索代码更改(默认:false)maxCount(数字,可选):最大结果数(默认:50)author(字符串,可选):按作者过滤示例用法:
getCommitDetails获取特定提交的详细信息,包括完整的差异。
参数:
project(字符串):项目名称commitHash(字符串):提交哈希(完整或短)示例用法:
getFileHistory获取特定文件的提交历史。
参数:
project(字符串):项目名称file(字符串):相对于项目根目录的文件路径maxCount(数字,可选):最大提交数(默认:50)示例用法:
gitBlame显示文件中每一行的最后修改者。
参数:
project(字符串):项目名称file(字符串):相对于项目根目录的文件路径startLine(数字,可选):起始行号endLine(数字,可选):结束行号示例用法:
getRepositoryInfo获取仓库信息,包括分支、远程、标签和状态。
参数:
project(字符串):项目名称示例用法:
compareBranches比较两个分支之间的提交。
参数:
project(字符串):项目名称baseBranch(字符串):基础分支名称compareBranch(字符串):要比较的分支示例用法:
在升级主要依赖项或框架版本时,先在一个项目中完成迁移,然后使用此MCP服务器帮助将相同更改应用于其他项目。
工作流程:
project_a中完成迁移project_b使用MCP服务器:
project_b中应用类似的更改优点:避免重复研究,捕捉已经解决的边缘情况,保持项目间的一致性。
当多个项目共享相似业务逻辑时,可以在一个项目中实施变更,然后审查并复制到其他项目。
工作流程:
project_a中实现一个特性或修复project_b:
project_b优点:跨团队分享改进,保持功能一致性,减少重复工作。
加入团队或探索不熟悉的代码时,可以查看相关项目中类似问题是如何解决的。
工作流程:
优点:更快地融入团队,理解架构模式,从现有解决方案中学习。
像在单体仓库中一样处理多个独立仓库,跨项目访问文件和历史记录,无需重构仓库架构。
工作流程:
优点:保持仓库独立性的同时获得类似单体仓库的可见性和协调性。
当一个bug可能源自依赖项目或共享库的更改时,可以跨项目边界进行调查。
工作流程:
优点:快速找到根本原因,理解跨项目依赖关系,追踪破坏性更改。
项目结构:
/workspace/project_a/ ← 您在这里(当前项目)
/workspace/project_b/ ← 需要访问
/workspace/shared_lib/ ← 共享工具
在project_a/.workspace-bridge.json中:
{
"projects": [
{
"name": "project_b",
"path": "../project_b"
},
{
"name": "shared_lib",
"path": "../shared_lib"
}
]
}
使用:
场景:在project_a中调试问题
命令:
场景:比较项目间的实现及其演变
命令:
.workspace-bridge.json{
"projects": [
{
"name": "友好名称", // 必需:工具中使用的名称
"path": "/绝对或相对路径" // 必需:项目路径
}
]
}
路径解析:
为了使git历史工具正常工作:
.git文件夹)如果项目不是git仓库,文件访问工具将继续正常工作,但git工具将返回明确的错误消息。
更新MCP服务器代码后,重启您的MCP客户端以加载更改。
注意:更改.workspace-bridge.json时不需要重启MCP客户端——只需重新加载窗口或重启MCP连接。
本项目根据MIT许可证发布——详情见LICENSE文件。
欢迎贡献!请随时提交Pull Request。