bearier-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bearier-mcpAssign a task to write a summary of the latest meeting."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ป Bearier MCP
Multi-Agent Desktop Toolkit for Everyone
Bearier MCP lets two desktop AI agents collaborate asynchronously through a shared local task queue โ no API keys, no IDE, no cloud. Just one SQLite file bridging agents that otherwise can't talk to each other.
Pair a brain agent (plans, dispatches, reviews) with a hands agent (executes, reports). They coordinate through Bearier without either one needing an open API, an SDK, or a single line of glue code.
Brain agent Hands agent
(plans, dispatches, (claims, executes,
reviews results) reports back)
โ โ
โ MCP stdio โ MCP stdio
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Bearier MCP server (stdio) โ
โ โ
โ shared SQLite (local) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโWhy
Most multi-agent tooling assumes you're a developer who lives in an IDE, configures API keys, and wires up coding agents inside VS Code. Bearier is built for everyone else โ people who use desktop AI apps that have no open API, no SDK, and no extension surface beyond an MCP config file and natural-language conversation.
If your agent can load an MCP server over stdio, it can join Bearier. That's the only requirement.
Bearier itself is just a task post office: it reliably relays tasks, persists state and result pointers, and gets out of the way. It never reasons, never executes commands, and never bypasses either agent's own permissions.
Related MCP server: agent-bus-mcp
Features
6-state machine with terminal-state protection โ a finished task can never be re-claimed by another worker
Atomic task claiming โ
UPDATE ... WHERE status='pending'inside a transaction; the database guarantees a single winner even under concurrentfetch_pending_tasksHeartbeat lease renewal + dual-layer timeout โ pending tasks that nobody claims expire to
failed; running tasks whose lease lapses are reaped tofailed/TIMEOUTApproval gating โ tasks flagged
approval_requiredordestructiveare reported asneeds_approvaland never auto-executedPath safety โ
working_directory,context_path,result_pathare validated by realpath against an allowlist; symlink traversal is rejectedZero heavy dependencies โ Python stdlib
sqlite3+mcp; no Node, no Rust, no DockerCross-platform โ runs on macOS, Windows, and Linux; paths adapt via
os.pathsep
Quick start
1. Install Python dependencies
Bearier needs Python 3.13+. Create a venv and install:
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtmacOS note (no Rust):
mcp==1.28.1pullspyjwt[crypto]โcryptography, which needs Rust to build. Since stdio never uses RS256 JWT, install in two steps to skip it:pip install --no-deps mcp==1.28.1 pip install --only-binary :all httpx-sse==0.4.3 jsonschema==4.26.0 \ python-multipart==0.0.32 sse-starlette==3.4.6 starlette \ typing-inspection uvicorn pyjwt==2.13.0
Verify: python -c "from mcp.server.fastmcp import FastMCP; print('ok')"
2. Configure both agents
Both agents must point at the same BRIDGE_DB_PATH โ that's how they see each other's writes.
WorkBuddy โ ~/.workbuddy/mcp.json:
{
"mcpServers": {
"bearier": {
"command": "/path/to/python",
"args": ["/path/to/bearier-mcp/src/server.py"],
"env": {
"PYTHONPATH": "/path/to/bearier-mcp/src",
"BRIDGE_DB_PATH": "/path/to/bridge.db",
"ALLOWED_WORKSPACES": "/path/to/your/workspace",
"SHARED_DIR": "/path/to/your/shared"
}
}
}
}Codex desktop โ ~/.codex/config.toml (TOML, not JSON):
[mcp_servers.bearier]
type = "stdio"
command = "/path/to/python"
args = ["/path/to/bearier-mcp/src/server.py"]
startup_timeout_sec = 30
[mcp_servers.bearier.env]
PYTHONPATH = "/path/to/bearier-mcp/src"
BRIDGE_DB_PATH = "/path/to/bridge.db"
ALLOWED_WORKSPACES = "/path/to/your/workspace"
SHARED_DIR = "/path/to/your/shared"Restart both apps after writing. In WorkBuddy, also click Trust on the connector management page.
3. Verify connectivity
Ask each agent to call ping(caller="codex" / "workbuddy"), then list_ping_log(limit=5). If you see both pings, the bridge is live.
Tools (7)
Tool | Called by | Purpose |
| both | connectivity check, writes |
| both | view ping history |
| both | database path + stats (debugging) |
| brain | dispatch a self-contained task |
| hands | pull work; |
| hands | report |
| brain | fetch result + full event timeline |
State machine
pending โ running claim
pending โ failed claim timeout (no worker)
running โ running heartbeat / lease renewal
running โ done success
running โ failed failure / lease timeout (TIMEOUT)
running โ needs_approval requests human approval
running โ cancelled cancelleddone / failed / needs_approval / cancelled are terminal โ re-submitting the same terminal state is idempotent and returns the stored result. Only pendingโrunning and runningโrunning change task ownership; all other transitions are reported by the holding worker.
Automation (hands agent auto-pull)
Schedule the hands agent to periodically call fetch_pending_tasks so dispatched work gets picked up without human prompting. Suggested automation prompt:
Call
fetch_pending_tasks(worker_id="workbuddy-default", limit=1, claim=true). Ifcount=0, return silently. If a task is claimed: execute perinstructioninsideworking_directory. On success callreport_result(status="done", task_id=..., worker_id="workbuddy-default", summary="..."). On failure callreport_result(status="failed", task_id=..., worker_id="workbuddy-default", error_code="EXEC_ERROR", error_message="..."). Tasks markeddestructiveorapproval_required=trueare reported asneeds_approvaland not executed.
For real-time collaboration, just tell the hands agent "pull pending tasks" โ it responds in seconds. Automation is the offline backstop.
Dashboard
Visualize the full collaboration timeline in a browser:
PYTHONPATH=src python src/dashboard.pyOpen http://127.0.0.1:8765. Bound to loopback only โ never exposed publicly. Each task card shows title, status badge, worker, timestamps, error (if any), and the event timeline (created โ claimed โ completed).
Security
stdio only โ no network ports (dashboard binds
127.0.0.1exclusively)Never expose the database or dashboard to the public internet
Database lives on the local system disk โ not on ExFAT/removable drives (multi-process SQLite locking is unreliable there)
working_directorymust fall insideALLOWED_WORKSPACEScontext_path/result_pathmust fall insideworking_directoryorSHARED_DIR(realpath-validated, anti-traversal)summaryโค 4 KB,metadataโค 16 KB โ larger payloads are forced to disk viaresult_pathdestructive/approval_requiredtasks are never auto-executed by automation
Error codes
VALIDATION_ERROR / TASK_NOT_FOUND / INVALID_STATE / TASK_ALREADY_CLAIMED / WORKER_MISMATCH / TIMEOUT / PERMISSION_DENIED / PATH_VIOLATION / RESULT_TOO_LARGE / EXEC_ERROR / DATABASE_BUSY / UNKNOWN
Uniform response shape: {ok: bool, data: dict|null, error: {code, message, retryable}|null}
How it compares
Bearier occupies a lane most multi-agent tools don't:
Bearier MCP | agent-orchestration | beads-village | |
Target user | everyone (non-coders) | developers in IDEs | developers in IDEs |
Target agent | desktop apps, no API needed | IDE coding agents (Cursor, Copilot) | IDE coding agents |
Agent discovery | by | requires same | team-based, same project |
Transport | stdio | stdio | stdio |
Task timeout | dual-layer (pending + lease) | agent-level only | none |
Approval gating | yes | research gate | no |
Dependencies | Python stdlib only | Node 18+ | Node + Python + optional Go |
If you live in an IDE and want rich in-editor coordination, those projects fit better. If you have two desktop AI apps that only speak MCP and want them to hand off tasks โ Bearier is the bridge.
Project structure
bearier-mcp/
โโโ README.md this file (English)
โโโ README.zh-CN.md ไธญๆ็
โโโ requirements.txt pinned dependencies
โโโ src/
โ โโโ server.py MCP server (7 tools)
โ โโโ config.py config loading + path boundary checks
โ โโโ errors.py 12 error codes + uniform response
โ โโโ models.py 6-state machine + Task data structure
โ โโโ db.py SQLite connection + schema init
โ โโโ repository.py task repo (CRUD + atomic claim + timeout sweep + path validation)
โ โโโ dashboard.py collaboration timeline HTTP server (127.0.0.1:8765)
โโโ tests/
โ โโโ test_ping_client.py connectivity test
โ โโโ test_repository.py data layer (29 cases)
โ โโโ test_mcp_tools.py MCP tool end-to-end (22 cases)
โโโ config-examples/
โโโ workbuddy.mcp.json WorkBuddy config example
โโโ codex-desktop.config.toml Codex desktop config exampleTesting
PYTHONPATH=src python tests/test_repository.py # 29 cases
PYTHONPATH=src python tests/test_mcp_tools.py # 22 cases
PYTHONPATH=src python tests/test_ping_client.py # connectivityLicense
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
An agent-first office suite Claude & ChatGPT read and write over one MCP URL.
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
MCP-first toolbox for agents: KV storage, auth, queue, and utility tools. Free in early access.
- DazbenchOAuthapp.dazbench
Task management your AI agents can actually run. One line becomes a context-ready task over MCP.
Related MCP Servers
- AlicenseBqualityDmaintenanceagent-mq is a message queue that enables AI coding agents to communicate with each other across sessions and machines. Agents can send messages, delegate tasks, and coordinate work โ all through MCP tools. Supports Claude Code, Cursor, Codex, OpenClaw, and any MCP-compatible tool. UUID-based authentication with per-user data isolation. Self-hostable with Docker.72MIT
- AlicenseNot gradedqualityDmaintenanceA local MCP server that connects AI coding agents (Claude Code, Codex, Cursor, etc.) on the same machine via a shared message bus, enabling them to chat, delegate tasks, and collaborate privately without cloud or internet.54 npm18MIT
- FlicenseNot gradedqualityCmaintenanceLocal-first cross-agent memory for AI coding agents. Persistent, shared memory over MCP โ what you tell one agent can be recalled by another โ with all data stored in a single local SQLite file, no cloud and no API keys.-
- AlicenseAqualityAmaintenanceLocal-first shared memory and task coordination for AI coding agents. One Go binary, MCP server, markdown files you own. Hooks for Claude Code and Codex CLI (and their desktop apps).305MIT