communications-access-broker
Provides brokered access to Matrix chat rooms, allowing agents to read room history and state, list members and spaces, and send messages, replies, reactions, and edits — all governed by scoped, expiring, human-approved grants.
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., "@communications-access-brokercheck my Matrix DMs for urgent messages from Alice and summarize them"
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.
communications-access-broker
Communications MCP access broker: tiered, human-gated chat access to Matrix and Microsoft Teams, built on access-broker-core. Fourth broker in the suite.
Why access brokers
The Model Context Protocol connects AI agents to real infrastructure: file stores, chat platforms, mail servers, a home. Its permission model is static. An MCP server declares a list of tools; the client shows the list to the user once, at install time; the user approves; from then on, every tool call runs with the server's full credential.
The model cannot express what matters once the infrastructure is real.
A grant is all-or-nothing at install time. There is no scoped, expiring grant for one folder, one room, or one lock. Approving the server approves everything it can reach.
There is no per-operation review. After install, a destructive write runs as freely as a harmless read.
There is no audit of agent decisions. What the agent requested, what was refused, and who approved what is recorded nowhere the owner controls.
There is no human gate for sensitive actions. The only approval happened between the agent and the client, before any concrete operation existed.
The credential at the server carries everything the server can do. Tool descriptions that promise restraint are advisory; the token is not.
An access broker is an MCP server that closes these gaps for one domain. It holds the real credential, exposes a deliberately small tool surface, and turns access into an explicit object: a scoped, expiring, audited, human-approved grant, evaluated per operation.
Related MCP server: NetGram
The access broker model
The suite implements one model with seven properties. Every broker carries all of them; the mechanics live in access-broker-core.
A tier model per domain. Every operation is classified before it can be requested. T0/T1 are free-lane reads and reversible actions that run without a grant. T2 operations are sensitive and require per-operation human approval through an approval gateway on a chat platform; the agent cannot self-approve, and batches do not exist. T3 operations are always gated and, where the action is irreversible, are never offered as tools at all.
Declared operations. Each tool names the operation it performs. The wall, the broker's scope checker, validates the resource and the operation against active grants before anything executes. The free lane is defined by the domain tier table, not by what happens to be exposed.
Write-before-operate, hash-chained audit. Every request, execution, refusal, and human decision is an audit-class event written to a hash-chained log before the operation runs.
verify_chaindetects tampering, including truncation. The chain, not memory, is the record of what the agent did and why.Fail-closed everywhere. Any configuration or validation failure refuses the boot. Unknown or malformed input denies. A restart never widens capability and never promotes pending or suspended state.
Approval separation. The approval gateway account is never a brokered account. A broker that could approve its own requests is a design failure, and the configuration is refused at boot.
Custody declarations. The broker declares, machine-readably, what its backend credentials can reach. An undeclared trust boundary refuses to start, and the custody class rides every audit record.
The D5 two-surface model in the data domain. The agent surface handles metadata and reasoning; bulk bytes move through a separate transfer surface addressed only by a CLI holding its own token, with SHA-256 verify-then-write. File content never enters LLM context.
The suite
access-broker-core carries the mechanics: the grant store (conditional-SQL CAS state machine), policy wall evaluation, the hash-chained audit log, the approval-gateway substrate, the custody registry, the baseline engine, and transport authentication. Each broker is a thin domain layer: a scope-checker wall, backend adapters, a tier table, and tool surfaces. One repo per broker; no monorepo.
Broker | Domain | Repository |
data-access-broker | WebDAV and OneDrive file stores | |
communications-access-broker | Matrix and Microsoft Teams chat | to be published |
groupware-access-broker | Mail, calendar, contacts, tasks over IMAP/SMTP, CalDAV/CardDAV, MS Graph | to be published |
automation-access-broker | Physical automation: Home Assistant entities and services, extendable to any actuated device | to be published |
What it is
One MCP server brokering an AI agent's access to chat platforms. The
broker holds a dedicated Matrix account's token and a Teams delegated
Graph token; the agent never sees either. It contributes the
communications wall (room scoping), the Matrix (matrix-nio) and Teams
(Graph delta-polling) backends, and the enforcement that gives
approval separation teeth for the first time in the suite: the
brokered Matrix account must never be its own approval gateway, and a
configuration where the two coincide refuses the boot
(check_approval_separation).
The tier model for conversation
No free reads. Conversation content is surveillance-grade; reads are grant-scoped per room, full stop. A read without an active grant naming the room is refused. This is the one broker in the suite with no T0/T1 lane at all: the seventh suite property is data-domain, and this domain's analogue goes the other way, everything is grant-scoped because everything a room contains is private by default.
T2 gated, per operation (no batches): send, reply, react, edit-own. Messages have no version history and no trash; per- operation approval is the compensating-control argument.
T3 gated, never offered: redaction, deletion, bulk operations, membership changes, moderation. No v1 tool form reaches them; a moderation function that cannot be revoked after the fact does not become a tool.
No wildcards. Grants name rooms exactly; room aliases resolve at the backend boundary, never in the wall.
E2EE fails closed. Encrypted rooms are detected and refused at the backend boundary; key custody is a fast-follow with its own review.
One discovery exception:
list_spaces. The account-scoped@spacesread (room ids, names, joined/invited state) is the surface's single free read — audited like every executed op, never content. Registered only when the deployment enables discovery (discovery: true, the default;falseremoves the tool at registration time). Everything else in the tier table is unchanged: a grant-less content read is refused, never approvable by call.
Tool surface: get_history, get_room_state, get_members (reads,
grant-scoped per room; each preflighted — an invisible room refuses
with the real reason, never a silent empty payload), send_message,
reply, react, edit_own (each individually human-approved), plus
request_access, check_access, revoke_access, list_accounts,
and list_spaces (discovery; see the exception above).
Production-alpha notes
Live-verified 2026-09-21/22 through the owner's native MCP client (discovery → request → approval → grant → read/send → read-back).
Approval-plane shield.
execute()andrequest_accessrefuse ANY operation on the gateway's own approval room, before the wall: the brokered identity cannot request access to the room that approves it. The shield beats active grants and ridesprotected_surfacesfrom the gateway config.Membership preflight. Every content read (
get_history,get_room_state,get_members) verifies the caller's own membership first: homeservers answer reads on invisible rooms with an HTTP-200 empty payload, and the preflight turns that into a refusal with the real reason.T2 grant semantics (open, owner decision pending). An approved T2 grant currently carries a time window, while the historical wording promises per-operation approval every time. No consume-on-use path exists in v1. Resolution options on record: execute-time self-revocation after a gated op fires (true one-shot) or a docstring correction to match the window semantics. Until the owner decides, treat an approved T2 grant as a time window and audit it accordingly (grant-level revocation is available agent- and owner-side).
Known cosmetic gaps (queued). Pending-request dedupe (repeated requests stack new numbers), the
opscomma-string parameter shape, and pre-approval validation of gated-op targets.
What is NOT here (v1)
Email (never here; drafts and store-and-forward are the groupware broker's domain), Telegram and Signal (v2), encrypted rooms, voice (deferred hard: no draft artifact, no revision point), raw user-API Telegram reads (ToS-sensitive). File storage is the data broker's domain; PIM is groupware's; entities are the automation broker's.
Status
Production alpha (owner-verified live 2026-09-22 through the native MCP client; see the notes above). 327 tests across nine files, 100% statement and branch on every module; the real-protocol battery runs against a scratch Dendrite. See CHANGELOG.md and DEPLOYMENT.md (including the user-space systemd supervision section). Repository publication: Sourcehut canonical, owner-gated.
Security
SECURITY.md carries the domain threat model: the primary adversary is the conversation content itself (a planted prompt injection in any granted room is inside the agent's trust boundary), the secondary is the irreversibility of sent messages, the tertiary is the approval plane. Custody classes are declared per backend (matrix: account-wide; teams: scoped under the employer app registration). The suite invariants are stated once in the core README and inherited here.
Provenance
Author and maintainer: Nasser Mohieddin Abukhdeir. The primary implementation model was GLM (glm-5.3), with glm-5.3-flash as the delegated sub-agent model. See AUTHORS.md for the full provenance record.
License
GPL-3.0-or-later.
This server cannot be deployed
Maintenance
Related MCP Connectors
- UproarOAuthchat.uproar
Chat where AI agents are first-class members, with their own identity and permissions.
OAuth 2.1 short-link tools for AI agents with scoped tokens, approvals, audit logs, and revocation.
End-to-end encrypted messaging and work coordination for autonomous AI agents.
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to interact with Microsoft Teams through Microsoft Graph API, using delegated device-code authentication to act on behalf of the user.1615 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to scoped, permissioned access to Telegram chats with per-chat read/write levels and human approval for sending messages.1MIT
- AlicenseNot gradedqualityCmaintenanceCapability-token gate for AI agents. Mint time-boxed, scope-limited grants that authorize specific tool calls.3,793 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables controlled AI-agent access to enterprise-shaped tools with a deny-by-default gated write path, human approval, dry-run execution, and append-only audit logging.1-