使用说明
多工作区MCP服务器
使编码代理能够从单个会话访问配置的存储库工作区,特别是当前项目工作区之外的伴随存储库。
问题解决了
AI编码代理通常仅限于一个工作空间。在开发跨平台功能时(例如,Android/Kotlin和iOS/Swift上的FlowCoordinator),代理在切换平台时会丢失所有上下文。此MCP服务器允许代理同时访问两个存储库,从而实现:
- 将Kotlin功能移植到Swift(反之亦然),而不会丢失上下文
- 在Android Studio中工作时阅读iOS代码以学习惯例
- 直接在iOS仓库中生成Swift文件
- 在不离开当前代理会话的情况下搜索和检查另一个仓库
提供的工具
read_crossproject
从以下位置读取文件 已配置的工作区根目录 --通常是当前项目工作区之外的配套仓库。对于当前工作区中的文件,更喜欢IDE内置的读取/导航工具。默认情况下,最多返回500行,其中包含行号和元数据(totalLines, startLine, endLine, truncated).使用 offset/limit 分页。
read_crossproject(workspace: "ios", path: "Modules/Messaging/Sources/MessagingCoordinator/StreamState.swift")
read_crossproject(workspace: "ios", path: "Modules/.../LargeFile.swift", offset: 100, limit: 50)
write_crossproject
在中创建或覆盖文件 已配置的工作区根目录 --通常是通过此MCP公开的另一个回购,而不是当前的项目。对于当前工作区文件,更喜欢IDE内置的编辑/重构工具。如果 writeAllowlist 已配置,只有匹配的路径是可写的。
write_crossproject(
workspace: "ios",
path: "Modules/Messaging/Sources/MessagingCoordinator/v2/KeyReducer.swift",
content: "// Swift code here"
)
list_crossproject
列出文件和目录 已配置的工作区根目录,通常是外部或配套的仓库,而不是当前的项目工作区。返回元数据(类型、大小、修改日期),并支持递归树列表。
list_crossproject(workspace: "ios", path: "Modules/Messaging/Sources")
list_crossproject(workspace: "ios", path: "Modules", recursive: true, maxDepth: 2)
search_crossproject
在文件中搜索文本/正则表达式 已配置的工作区根目录,通常是当前项目工作区之外的配套仓库。在当前工作区中应用IDE的内置代码导航/LSP工具时,更喜欢它们。支持输出模式(content, files, count)、上下文行、路径范围(目录或文件)和分页。
search_crossproject(workspace: "ios", pattern: "FlowCoordinator", glob: "**/*.swift")
search_crossproject(workspace: "ios", pattern: "class.*Coordinator", path: "Modules/Messaging", outputMode: "files")
edit_crossproject
对中的一个或多个文件应用搜索和替换编辑 已配置的工作区根目录,通常用于当前项目工作区之外的配套存储库。对于当前工作区中的键入更改,更喜欢IDE的内置重构/编辑工具。支持带有反向引用的正则表达式。
// Single file
edit_crossproject(
workspace: "ios",
paths: "Modules/.../MyFile.swift",
oldString: "func oldName()",
newString: "func newName()",
)
// Multiple files (same replacement applied to all)
edit_crossproject(
workspace: "ios",
paths: ["FileA.swift", "FileB.swift", "FileC.swift"],
oldString: "oldValue",
newString: "newValue",
replaceAll: true,
)
// Regex with backreferences
edit_crossproject(
workspace: "ios",
paths: "Modules/.../MyFile.swift",
oldString: "func (\\w+)\\(param: String\\)",
newString: "func $1(param: Int)",
useRegex: true,
)
run_crossproject
在中运行shell命令 已配置的工作区根目录。支持管道、重定向和链式命令。返回stdout、stderr和退出代码。用于构建工具、代码生成器、git操作或需要在工作区目录中运行的任何命令。
run_crossproject(workspace: "ios", command: "git status")
run_crossproject(workspace: "ios", command: "fastlane ios codegen_messaging")
run_crossproject(workspace: "android", command: "./gradlew :messaging:impl:test")
run_crossproject(workspace: "ios", command: "git log --oneline | head -5", timeout: 10000)
配置
创建一个 workspace-config.json 在repo根目录中(请参见 workspace-config.example.json):
{
"workspaces": {
"ios": {
"root": "$HOME/git/zillow/ZillowMap",
"name": "iOS (ZillowMap)"
}
}
}
默认情况下,代理可以在工作区根目录下写入任何文件并运行任何命令。要限制其中之一,请添加可选的allowlists:
{
"workspaces": {
"ios": {
"root": "$HOME/git/zillow/ZillowMap",
"name": "iOS (ZillowMap)",
"writeAllowlist": ["Modules/**/*.swift", "Tests/**/*.swift"],
"runAllowlist": ["git", "fastlane", "xcodebuild", "swift"]
}
}
}
writeAllowlist(可选):球状图案。如果省略,则允许所有写入。控制write_crossproject和edit_crossproject.runAllowlist(可选):命令前缀。如果省略,则允许所有命令。控制run_crossproject当配置时,命令的第一个单词必须与前缀之一匹配(例如。,"git status"火柴"git").
支持 $HOME 和 ~ 扩展在 root 路径。没有硬编码的默认值——所有工作区都必须在此文件中定义。如果缺少,服务器将从零工作区开始并记录指令。
安装
npm install -g @exaudeus/workspace-mcp
Firebender注册
添加 ~/.firebender/firebender.json:
{
"mcpServers": {
"workspace": {
"command": "npx",
"args": ["-y", "@exaudeus/workspace-mcp"]
}
}
}
或者,如果全局安装:
{
"mcpServers": {
"workspace": {
"command": "workspace-mcp"
}
}
}
使用模式
- 代理读取Android Kotlin文件:
read_file("libraries/illuminate/flow-coordinator/v2/KeyReducer.kt") - 代理读取iOS惯例:
read_crossproject("ios", "Modules/Messaging/Sources/MessagingCoordinator/SubjectCoordinator.swift") - 代理引用Rosetta映射:(阅读
.firebender/rosetta-kotlin-swift.md在Android工作区中) - Agent生成Swift等效项
- 代理人写道:
write_crossproject("ios", "Modules/.../KeyReducer.swift", content)
所有这些都在一个会话中,没有上下文丢失。
配套项目
- 存储器MCP:
memory-mcp--AI代理的持久代码库知识(独立仓库) - 罗塞塔规则:
.firebender/rosetta-kotlin-swift.md在Android工作区中--习语映射参考
发展
# Install dependencies
npm install
# Build
npm run build
# Run in dev mode
npm run dev
# Run tests
npm test
安全特性
无状态安全模型
MCP使用 无状态验证 代替会话跟踪-无需管理脆弱状态:
编辑安全:
- 在编辑之前验证旧字符串是否存在(每次读取新文件)
- 强制唯一性(除非replaceAll=true)
- 如果找不到字符串或字符串不唯一,则会快速失败并出现明显错误
- 无需“先阅读”-验证是安全检查
写安全:
- 覆盖现有文件(记录到stderr)时发出警告
- 如果有意(未被阻止),代理仍然可以覆盖
- 可选的
writeAllowlist限制对匹配路径的写入(省略以允许全部)
为什么是无国籍?
- 无会话状态=重启/重新连接时没有脆弱性
- 始终从磁盘读取新数据(捕获外部更改)
- 跨多个代理/会话工作
- 自我记录(失败说明问题所在)
其他安全功能
- 写满列表(可选):配置后,只允许写入与满列表模式匹配的路径
- 路径验证:验证解析的路径是否位于工作区根目录内(防止目录遍历)
- 壳体防喷:所有外部命令都使用
execFile带参数数组(无shell插值) - 审计日志:记录到stderr的所有写入/编辑操作
未来的增强功能
- Git操作(
git_crossproject) - 附加工作区(后端仓库等)
- 自动上下文加载(注入
.firebender/platform-context.md首次访问时)