mcp-agent-bridge
by xfajarr
README.md
# mcp-agent-bridge
A local MCP server that gives any number of AI agents — Claude Code, OpenCode, Codex, Hermes, OpenClaw, or any MCP-compatible client — a **shared, real-time context** across windows and sessions.
Every write (memory, message, task, artifact) is instantly pushed to all other connected agents via **WebSocket** and **MCP resource notifications**. No polling required.
---
## Features
- **Named contexts** — create isolated workspaces (`hackathon`, `my-project`, `review`) and choose which one each agent joins
- **Real-time push** — WebSocket + MCP `notifications/resources/updated` on every state change
- **Any agent type** — works with Claude Code, OpenCode, Codex, Hermes, OpenClaw, or anything that speaks MCP
- **Shared memory** — key/value store scoped per context
- **Tasks** — create, assign, and track tasks across agents
- **Messaging** — direct messages and broadcast within a context
- **Artifacts** — share code, plans, JSON, markdown between agents
- **Discussions** — threaded brainstorm threads per topic
- **Sessions** — orchestrated multi-agent collaboration sessions
- **Persistent** — all state is written to JSON files and survives restarts
---
## Quick Start
```bash
git clone https://github.com/YOUR_USERNAME/mcp-agent-bridge
cd mcp-agent-bridge
npm install
npm start
```
Server runs on `http://localhost:3721`.
---
## Client Configuration
### Claude Code
Add to `~/.claude.json`:
```json
{
"mcpServers": {
"agent-bridge": {
"type": "http",
"url": "http://localhost:3721/mcp"
}
}
}
```
### OpenCode
Add to `~/.config/opencode/opencode.json`:
```json
{
"mcp": {
"agent-bridge": {
"type": "remote",
"url": "http://localhost:3721/mcp",
"enabled": true
}
}
}
```
### Any MCP client (Streamable HTTP)
Endpoint: `http://localhost:3721/mcp`
### Legacy SSE clients
Endpoint: `http://localhost:3721/sse`
### WebSocket (real-time events, no MCP required)
```js
const ws = new WebSocket("ws://localhost:3721/ws");
ws.on("message", (data) => console.log(JSON.parse(data)));
```
---
## Auto-start (macOS launchd)
Create `~/Library/LaunchAgents/com.mcp-agent-bridge.plist`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.mcp-agent-bridge</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>/path/to/mcp-agent-bridge/server.js</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/mcp-agent-bridge.log</string>
<key>StandardErrorPath</key>
<string>/tmp/mcp-agent-bridge.log</string>
</dict>
</plist>
```
```bash
launchctl load ~/Library/LaunchAgents/com.mcp-agent-bridge.plist
```
---
## Usage
### 1. Register your agent
Always call `identify` first. Optionally join a context immediately.
```
identify("claude", session_label="window-2", context="my-project")
```
### 2. Create and join contexts
```
create_context("hackathon", description="Weekend project")
join_context("hackathon")
```
All subsequent operations (memory, tasks, messages, etc.) are scoped to `hackathon`.
### 3. Share memory in real-time
```
set_memory("stack", "Next.js + Postgres")
get_memory()
```
Any other agent in the same context receives a `notifications/resources/updated` push and a WebSocket event instantly.
### 4. Send messages
```
send_message("opencode", "DB schema is ready, check artifacts")
read_messages()
broadcast("Starting code review now")
```
### 5. Coordinate with tasks
```
create_task("Write API routes", "Implement /api/notes CRUD", assigned_to="codex")
list_tasks(filter="mine")
update_task("<id>", status="done", notes="All routes covered with tests")
```
### 6. Share code and plans
```
save_artifact("db-schema", "<SQL>", type="code", language="sql")
get_artifact("db-schema")
```
### 7. Check context status
```
list_contexts() # all workspaces + who's in them
context_status() # your current context summary
agent_status() # all agents grouped by context
```
---
## MCP Tools Reference
### Context Management
| Tool | Description |
|---|---|
| `create_context(name, description?)` | Create a named workspace |
| `list_contexts()` | List all contexts with active agents and stats |
| `join_context(name)` | Switch to a context — all ops become scoped to it |
| `leave_context()` | Return to `default` context |
| `delete_context(name, confirm: true)` | Delete context and all its data |
| `context_status()` | Show current context, peers, memory/task counts |
### Identity
| Tool | Description |
|---|---|
| `identify(agent_name, session_label?, context?)` | Register this session; optionally join a context |
### Memory
| Tool | Description |
|---|---|
| `set_memory(key, value, tags?)` | Write to shared memory — peers notified instantly |
| `get_memory(key?, tag?)` | Read one key or list all (optionally filter by tag) |
| `delete_memory(key)` | Remove a key |
### Messaging
| Tool | Description |
|---|---|
| `send_message(to, content, metadata?)` | Direct message to an agent in context |
| `read_messages(mark_read?, include_read?)` | Read your inbox |
| `broadcast(content)` | Send to all agents in context |
### Tasks
| Tool | Description |
|---|---|
| `create_task(title, description, assigned_to, priority?)` | Create and assign a task |
| `list_tasks(filter?)` | List tasks (`all`, `mine`, `pending`, `in_progress`, `done`, `blocked`) |
| `update_task(id, status?, notes?)` | Update status or add progress notes |
### Artifacts
| Tool | Description |
|---|---|
| `save_artifact(name, content, type, language?, description?)` | Save code/text for sharing |
| `get_artifact(name)` | Retrieve an artifact |
| `list_artifacts(type?)` | List all artifacts |
### Discussion
| Tool | Description |
|---|---|
| `add_to_discussion(topic, content)` | Add to a named thread |
| `get_discussion(topic?)` | Read a thread or all threads |
### Session / Orchestration
| Tool | Description |
|---|---|
| `start_session(goal, context?)` | Start a collaborative session; peers notified |
| `get_session()` | Get active session details |
| `end_session(summary?)` | End the session |
### Status & Events
| Tool | Description |
|---|---|
| `agent_status()` | All connected agents grouped by context |
| `get_events(since?, type?, limit?)` | Poll event log since a timestamp |
---
## MCP Resources
All resources are live — reading them always returns current state. Agents receive `notifications/resources/updated` when the underlying data changes.
| URI | Content |
|---|---|
| `agent-bridge://contexts/{context}/memory` | Shared memory for a context |
| `agent-bridge://contexts/{context}/tasks` | Tasks for a context |
| `agent-bridge://contexts/{context}/session` | Active session |
| `agent-bridge://contexts/{context}/discussion` | Discussion threads |
| `agent-bridge://contexts/{context}/artifacts` | Shared artifacts |
| `agent-bridge://contexts/{context}/messages/{agent}` | Agent inbox |
---
## WebSocket Protocol
Connect to `ws://localhost:3721/ws`.
**On connect** — receive a full state snapshot:
```json
{
"type": "snapshot",
"data": {
"contexts": [{ "name": "default", "active_agents": [], "memory": {}, "tasks": [] }]
},
"timestamp": "2026-03-26T..."
}
```
**Events pushed on every mutation:**
```json
{ "type": "memory_updated", "context": "hackathon", "data": { "key": "stack", "updated_by": "claude" }, "timestamp": "..." }
{ "type": "message_sent", "context": "hackathon", "data": { "from": "claude", "to": "opencode" }, "timestamp": "..." }
{ "type": "task_created", "context": "hackathon", "data": { "title": "...", "assigned_to": "codex" }, "timestamp": "..." }
{ "type": "agent_connected","context": "hackathon", "data": { "agent": "hermes" }, "timestamp": "..." }
```
**Commands you can send:**
```json
{ "type": "ping" }
{ "type": "subscribe_events_since", "since": "2026-03-26T10:00:00Z", "context": "hackathon" }
```
---
## REST API
| Endpoint | Description |
|---|---|
| `GET /health` | Server status, all contexts, connected agents |
| `GET /contexts` | List all contexts with active agents and stats |
| `GET /contexts/:name` | Context details including memory and tasks |
---
## Data Storage
All state is persisted to `./data/`:
```
data/
contexts_meta.json — registry of all context names + metadata
ctx_default.json — state for the "default" context
ctx_hackathon.json — state for the "hackathon" context
ctx_my-project.json — ...
```
Each context file contains `memory`, `tasks`, `messages`, `artifacts`, `session`, `discussion`, and `events`.
---
## Supported Agent Types
Any MCP client works. Tested with:
- **Claude Code** (Anthropic)
- **OpenCode** (open source)
- **Codex CLI** (OpenAI)
And any client you register via `identify("your-agent-name")`.
---
## License
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues