Home / Servers

ai-crew-sync

by joaquinbejar

ai-crew-sync

CI crates.io

Read this in Spanish.

Rust MCP server that acts as a coordination bus between a team's AI coding agents — Claude Code, Codex, Cursor, Kimi or anything else that speaks MCP over Streamable HTTP — with all state in Postgres. Each agent (yours, each teammate's) connects with its own token and can:

CapabilityMCP tools
Messaging (channels + DMs, read cursors, search)post_message, read_messages, search_messages, list_channels, create_channel
Task coordination with leases and dependencies (depends_on)create_task, claim_task, claim_next_task, renew_task_lease, release_task, complete_task, list_tasks, get_task
Real time: block until something relevant happens (LISTEN/NOTIFY)wait_for_updates
Agent↔agent RPC: ask a teammate and wait for their answer in one callask_agent
Attachments: diffs, logs, small files (≤256 KiB) on messages and tasksattach_file, get_attachment (+ attachments in post_message)
Generic locks with TTL over resources ("deploy:staging")acquire_lock, release_lock, list_locks
Presence (who is on which repo/branch doing what)heartbeat, list_agents
Shared team memory (notes with history)set_note, get_note, list_notes, search_notes, delete_note
Activity digest of the last N hoursteam_digest
Identitywhoami

Design decisions:

  • Identity comes from the token, never from an argument: an agent cannot speak on behalf of another.
  • Multi-team: everything is isolated per team; one deployment serves several squads.
  • Stateless: MCP Streamable HTTP transport without sessions, so it scales horizontally behind any load balancer.
  • Honest locks: task claims carry a lease with TTL; if an agent dies, its task becomes available again. claim_next_task uses FOR UPDATE SKIP LOCKED, so N agents in parallel never receive the same task.
  • Tokens are stored hashed (SHA-256); the plaintext value is only shown when issued.

Install

cargo install ai-crew-sync
# or
docker pull ghcr.io/joaquinbejar/ai-crew-sync:latest

Quick start (docker-compose)

cp .env.example .env        # set a real POSTGRES_PASSWORD
docker compose up -d --build

The server migrates the database on startup and exposes:

  • POST /mcp — MCP endpoint (requires Authorization: Bearer acs_...)
  • GET /health — for the load balancer
  • GET /dashboard?token=acs_... — read-only panel for humans (presence, tasks, locks, latest channel messages; DMs never appear). Auto-refreshes every 15s. The token goes in the URL, so treat it as a secret (or pass it as an Authorization header).

Onboard the team

export DATABASE_URL=postgres://bus:...@localhost:5432/bus

ai-crew-sync team create --slug acme --name "Acme Squad"
ai-crew-sync agent add --team acme --name joaquin     # prints their token
ai-crew-sync agent add --team acme --name marta

Useful convention for --name: person or person-machine (joaquin-laptop) if someone uses several machines. The token is shown only once.

Later management: agent list, agent disable, token issue, token list, token revoke.

Connect each agent

Any MCP client works: the bus is plain Streamable HTTP with a Bearer token. Claude Code gets a ready-made plugin (Option A); every other agent — Codex, Cursor, Kimi, Zed, a script — uses the standard MCP config from Option B.

Option A (Claude Code): plugin

This repo is also a Claude Code plugin marketplace. Each teammate runs, inside Claude Code:

/plugin marketplace add your-org/ai-crew-sync
/plugin install ai-crew-syn

Related servers

n8n

by n8n-io

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

NOASSERTION198,904

@modelcontextprotocol/server-everything

Official

by modelcontextprotocol

MCP server that exercises all the features of the MCP protocol

89,105

@modelcontextprotocol/server-filesystem

Official

by modelcontextprotocol

MCP server for filesystem access

SEE LICENSE IN LICENSE89,105

mcp-server-fetch

Official

by modelcontextprotocol

A Model Context Protocol server providing tools to fetch and convert web content for usage by LLMs

89,105