bearier-mcp
Click on "Install 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: task-orchestrator
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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kumabear917/bearier-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server