comms-mcp
llms.txt1 starsChanged 12 days agoMITView on GitHub
Unified fleet comms gateway. One portmanteau tool comms_ops with operations send / read_recent / list_threads / status / auth / help / history / search / react / edit / delete, plus comms_shutdown, resource comms://status, prompt comms_send_briefing, skill skill://comms. Web console has one page per service (/telegram, /whatsapp, /slack, /teams, /signal) backed by GET|POST /api/v1/channel/{channel}/{threads,history,send}. git clone https://github.com/sandraschi/comms-mcp; cd comms-mcp; copy .env.example .env Per-channel setup (2-5 min each): docs/ONBOARDING.md just serve (or uv run python -m comms_mcp; MCP_PORT=11205 -> HTTP…
- Reads credentials
The file
Files
# comms-mcp — full LLM reference (v0.9.1)
Unified fleet comms gateway. One portmanteau tool `comms_ops` with operations
send / read_recent / list_threads / status / auth / help / history / search /
react / edit / delete, plus `comms_shutdown`,
resource `comms://status`, prompt `comms_send_briefing`, skill `skill://comms`.
Web console has one page per service (/telegram, /whatsapp, /slack, /teams,
/signal) backed by GET|POST /api/v1/channel/{channel}/{threads,history,send}.
## Install
git clone https://github.com/sandraschi/comms-mcp; cd comms-mcp; copy .env.example .env
Per-channel setup (2-5 min each): docs/ONBOARDING.md
just serve (or uv run python -m comms_mcp; MCP_PORT=11205 -> HTTP daemon)
## Tools
comms_ops(operation="send", channel="telegram|whatsapp|slack|teams|signal", chat_id="<id>", text="<body>")
- allowlist-gated per channel; returns {success, message, outbox_id, message_id|ts}
comms_ops(operation="read_recent", channel="telegram")
- polls getUpdates, sanitizes inbound, returns recent messages
comms_ops(operation="list_threads", channel="...") -> allowlist for the channel
comms_ops(operation="status", channel="...") -> identity + configured + allowlist + stats
comms_ops(operation="auth", channel="teams") -> Graph device-code start/poll
comms_ops(operation="help", channel="...") -> per-channel setup steps
comms_shutdown(confirm=True) -> orderly daemon exit (500 ms)
comms_show_status() -> Prefab status card (bot, allowlist, outbox stats)
## Config (env, prefix COMMS_)
TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_IDS, TELEGRAM_API_BASE,
WHATSAPP_SIDECAR_URL, WHATSAPP_ALLOW_NUMBERS,
SLACK_APP_TOKEN, SLACK_BOT_TOKEN, SLACK_CHANNEL_IDS,
GRAPH_CLIENT_ID, TEAMS_RECIPIENTS, TEAMS_TOKEN_FILE, TEAMS_GRAPH_BASE,
DB_PATH, RETENTION_DAYS (7), INBOUND_SECRET, DAEMON_URL,
MCP_PORT / PORT, MCP_HOST
## Architecture
FastMCP server; adapters/<channel>.py (allowlist + send + inbound); outbox/sqlite.py
(outbox pending/sent/failed + inbound with TTL); sanitize.py (inbound
injection neutralization); FastAPI REST + MCP streamable-HTTP at /mcp (daemon
mode). Stdio instances probe the daemon and proxy when reachable.
Dual transport per SOTA_REQUIREMENTS 2.3.
## REST (HTTP daemon mode, MCP_PORT=11205)
- GET /health — status + stats
- GET /api/capabilities — server/channels/tools/endpoints
- GET /api/skills — skill listing (skill-first agents)
- GET /api/v1/outbox?status=&limit= — delivery log
- GET /api/v1/inbound?chat_id=&limit= — recent inbound
- GET /api/v1/status — bot + allowlist + stats
- GET /api/v1/channels — per-channel setup state (no secrets)
- GET /api/v1/allowlists — per-channel send allowlists (no secrets)
- GET /api/v1/channel/{channel}/threads — thread picker (live list or allowlist)
- GET /api/v1/channel/{channel}/history?chat_id=&limit= — live (slack/teams) or local store
- POST /api/v1/channel/{channel}/send — {chat_id, text, thread_ts?, parse_mode?}, allowlist-gated
- POST /api/v1/send — {chat_id, text}, allowlist-gated
- POST /api/v1/inbound/wa — wa-sidecar webhook (X-Comms-Secret when set)
- POST /api/shutdown — orderly exit (NSSM-safe bounce)
- /mcp — MCP streamable HTTP (both /mcp and /mcp/ answer)
## Ports
11205 backend (FastAPI + FastMCP /mcp), 11204 console (Vite dev; served from
backend root via web_sota/dist in daemon mode), 11208 wa-sidecar.
## Troubleshooting
- status shows configured:false -> token missing/empty
- send blocked: chat not in allowlist -> add to the channel allowlist env
- 404 from Telegram -> token wrong or pasted with "bot" prefix
- wa 503: sidecar not connected -> re-scan QR (:11208/qr)
- Full table: docs/TROUBLESHOOTING.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

