内容
# 工作空间中心 MCP
一个本地的 MCP 服务器,允许多个 IDE 工作空间之间共享上下文。
> **注意:** 此 MCP 服务器依赖于 [MCP 采样](https://modelcontextprotocol.io/specification/draft/client/sampling),这是一个实验性功能,客户端支持有限。虽然自动轮询是可用的,但大多数 MCP 客户端(包括 Windsurf)目前还不支持采样。在采用率增加之前,用户将需要依靠手动轮询任务响应。
## 工作原理
```
┌─────────────────┐ ┌─────────────────────────┐ ┌──────────────────────┐
│ 后端/ │ │ │ │ 前端/ │
│ IDE │────▶│ 工作空间中心 MCP │◀────│ IDE │
│ │ │ (本地单个 HTTP 服务器)│ │ │
│ llm-orchestra/ │────▶│ 在 localhost:4440 │ │ │
│ IDE │ │ │ │ │
└─────────────────┘ └─────────────────────────┘ └──────────────────────┘
内存状态,自动持久化到 data/store.json
```
一个单独的 HTTP 服务器在本地运行。所有 IDE 工作空间都通过 MCP 流式 HTTP 传输与其连接。状态存储在内存中,以便快速访问,并在每次更改后自动持久化到磁盘。
## 设置
### 1. 安装
```bash
git clone <此仓库> ~/workspace-hub
cd ~/workspace-hub
yarn install
```
### 2. 启动服务器
直接运行:
```bash
node server.js
```
或使用 Docker:
```bash
docker build -t mcp/workspace-hub .
docker run -p 4440:4440 mcp/workspace-hub
```
服务器默认监听 `http://localhost:4440/mcp`。可以通过设置 `PORT` 环境变量来更改。
### 3. 配置每个工作空间
在每个 IDE 中,打开 **设置 → MCP 服务器** 并添加:
```json
{
"mcpServers": {
"workspace-hub": {
"serverUrl": "http://localhost:4440/mcp"
}
}
}
```
所有工作空间都连接到同一个服务器。不需要挂载卷或为每个工作空间创建单独的容器。
## 开始使用
在每个工作空间中,告诉你的编码代理注册一次:
> "用工作空间中心 MCP 注册此工作空间。"
注册后,可以使用自然语言提示开始共享上下文,例如:
- "前端正在做什么?"
- "告诉后端团队我们的身份验证端点已更改"
- "我应该了解哪些 API 更改?"
---
## 可用工具
| 工具 | 用途 |
|------|---------|
| `register_workspace` | 注册一个工作空间 |
| `list_workspaces` | 发现所有工作空间 |
| `get_workspace` | 获取工作空间详细信息 + 笔记 |
| `post_note` | 向工作空间发布笔记 |
| `get_notes` | 检索笔记(带过滤) |
| `broadcast_note` | 发布到所有工作空间 |
| `clear_notes` | 清除工作空间笔记 |
| `post_task` | 向另一个工作空间的代理提问 |
| `get_pending_tasks` | 检查分配给你的工作空间的任务(如果支持,自动通过采样回答) |
| `respond_to_task` | 手动响应待处理的任务 |
| `get_task_responses` | 检索你发布的任务的响应 |
**→ 查看 [`docs/tools.md`](docs/tools.md) 以获取详细的文档、参数和示例。**
---
## 跨工作空间查找
任务系统允许一个工作空间的代理向另一个工作空间的代理提问并获得答案。
### 工作原理
```
工作空间 A 工作空间 B
───────────── ─────────────
1. post_task("后端",
"使用什么身份验证中间件?")
│
▼
内存:任务
{ 状态: "待处理" }
2. get_pending_tasks("后端")
│
▼
服务器尝试创建消息
(MCP 采样)自动回答
│
如果采样有效 → 自动完成
如果不 → 代理通过 respond_to_task()
手动响应
3. get_task_responses("前端")
→ "我们使用 Passport.js ..."
```
### 示例提示
- "询问后端他们使用什么数据库" → `post_task`
- "检查是否有任何工作空间需要我提供帮助" → `get_pending_tasks`
- "后端是否已经回答了我的问题?" → `get_task_responses`