Skip to main content

Matrix MCP

License CI PyPI Python Versions Docs MCP

MindRoom Logo

Local-first Matrix access for MCP clients.

Matrix MCP lets Claude Code and other MCP clients read and write Matrix rooms. It is intended to make MindRoom conversations available to local coding agents without giving hosted agents access to the local filesystem.

For remote clients, opt into authenticated HTTP. Each caller connects its own Matrix account through browser SSO. Hosted tools use raw Matrix IDs and support conversations, room membership, and room/profile updates, with no local-file access.

Install

uv tool install matrix-mcp

For local development:

uv sync --extra dev

Login

Matrix SSO:

matrix-mcp auth sso https://mindroom.chat

If the homeserver advertises multiple SSO providers, list their provider IDs:

matrix-mcp auth providers https://mindroom.chat

Then pass the provider ID explicitly:

matrix-mcp auth sso https://mindroom.chat --idp-id github

The SSO flow starts a temporary callback server on the machine running matrix-mcp and waits for the browser to be redirected to it. If that machine is remote (for example over SSH), a browser on your local machine cannot reach the callback. Pin the callback port and forward it from the machine with your browser:

# on the remote machine
matrix-mcp auth sso https://mindroom.chat --callback-port 8765
# on your local machine, in a second terminal
ssh -N -L 8765:127.0.0.1:8765 remote-host

Then open the printed SSO URL in your local browser. After login, the homeserver redirects to http://127.0.0.1:8765/callback, which SSH forwards to the waiting command on the remote machine. If port forwarding is not an option, use the manual flow described in the getting started guide with matrix-mcp auth sso-url and matrix-mcp auth login-token.

If your homeserver is behind an access gateway that requires extra request headers, pass them during login. They are stored with the Matrix credentials and reused by MCP tools:

matrix-mcp auth sso https://mindroom.chat \
  --header "X-Access-Client-Id: ..." \
  --header "X-Access-Client-Secret: ..."

If the gateway header is short-lived, store a command that prints the current header value instead. The command is re-run when Matrix MCP creates a client for tool calls:

matrix-mcp auth sso https://mindroom.chat \
  --header-command "X-Access-Token: access-gateway-cli token --app https://mindroom.chat"

For homeservers behind Cloudflare Access, matrix-mcp can configure the dynamic cf-access-token header for you. This uses the local cloudflared CLI to log in when needed during setup, then stores a command that reads the current token:

brew install cloudflared
matrix-mcp auth sso https://mindroom.chat --cloudflare-access

For other platforms, install cloudflared from Cloudflare's downloads page.

Existing Matrix access token:

matrix-mcp auth token https://mindroom.chat @alice:mindroom.chat "$MATRIX_ACCESS_TOKEN" --device-id DEVICEID

Password auth, when enabled by the homeserver:

matrix-mcp auth password https://mindroom.chat @alice:mindroom.chat

Credentials are stored in the user config directory reported by:

matrix-mcp config-path

Remove stored credentials:

matrix-mcp auth logout

Claude Code

Add the local MCP server:

claude mcp add matrix -- matrix-mcp serve

Codex

Add the local MCP server:

codex mcp add matrix -- matrix-mcp serve

The server runs over stdio. It does not expose a local HTTP port during normal MCP operation.

Tools

  • matrix_whoami: show the configured Matrix user/device.
  • matrix_list_rooms: list rooms joined by the authenticated user.
  • matrix_read_room_recent: read recent messages and attachments from a room.
  • matrix_read_thread: read a Matrix thread root and its recent message replies.
  • matrix_send_message: send a text message or local file, optionally as a Matrix thread reply.
  • matrix_list_room_members: page through joined members and their profiles.
  • matrix_search_users: find user IDs in the homeserver's visible user directory.
  • matrix_invite_user: invite a user to a room.
  • matrix_get_room_info: read a room's name, topic, and avatar.
  • matrix_set_room_name, matrix_set_room_topic, matrix_set_room_avatar: update room details.
  • matrix_get_profile: look up your own or another user's profile.
  • matrix_set_display_name, matrix_set_avatar: update your own global profile.
  • matrix_read_history, matrix_get_event_context: page through history and inspect a message's context.
  • matrix_reply, matrix_react: reply to a specific event or add a reaction.
  • matrix_edit_message, matrix_redact_event: correct your messages or remove your event content, including reactions.
  • matrix_list_invitations, matrix_join_room, matrix_leave_room, matrix_create_room: manage your room membership and create private rooms.
  • matrix_upload_media, matrix_download_media, matrix_send_media: transfer bounded files and images using Matrix media URIs.
  • matrix_get_unread, matrix_mark_read: inspect unread activity and explicitly update read markers.

All actions use the connected account's Matrix permissions. See room and profile examples for arguments, pagination, and avatar media URIs.

The original stdio read/list tools include stable numeric id fields. The new history, message-action, membership, media, and catch-up tools use raw Matrix IDs on both transports. Thread replies also include thread_ref, which is the numeric event ref of the thread root. Use these integers in later tool calls instead of copying raw Matrix IDs:

matrix_read_room_recent(room_id=1)
matrix_read_thread(room_id=1, thread_id=42)
matrix_send_message(room_id=1, body="reply", thread_id=42)

To address a specific agent or user, send their full Matrix user ID in mentions, then read replies from the same thread:

matrix_send_message(
    room_id=1,
    body="Could you check this?",
    thread_id=42,
    mentions=["@helper:example.com"],
)
matrix_read_thread(room_id=1, thread_id=42)

Mentions apply to text messages. File sends do not accept mentions.

The tool instructions tell clients to prefer read tools first and only send messages when the user explicitly asks.

Development

uv run --extra dev pytest
uv run --extra dev ruff check .
uv run --extra dev ruff format --check .
uv run --extra dev mypy src tests
uv run --extra dev ty check
uv build

Metadata

Release files for matrix-mcp 0.8.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for matrix-mcp 0.8.1
File Size Uploaded
matrix_mcp-0.8.1.tar.gz 225.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for matrix-mcp 0.8.1
File Interpreter ABI Platform
matrix_mcp-0.8.1-py3-none-any.whl Python 3 none any Details

Total release size: 277.6 kB

Release files / matrix_mcp-0.8.1.tar.gz

Download URL matrix_mcp-0.8.1.tar.gz
Size 225.9 kB
Tags Source
SHA-256 checksum
How to use checksums
68fa39f438acf5c96a48685faed803b0d245fbe7a2649c979198b707509042da
BLAKE2b-256 checksum
How to use checksums
95b5007a06c98963e1376e3e22d12079d78f3c73c4041ddf9e98e03aed94ea88
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / matrix_mcp-0.8.1-py3-none-any.whl

Download URL matrix_mcp-0.8.1-py3-none-any.whl
Size 51.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1e23a42d881908368bb41c3ebfc10d50b165f69de2b7f53b2bc769feb57ab640
BLAKE2b-256 checksum
How to use checksums
990da4ca4508ee0373992e1b8172c1716cbdb2c197b5a8ae7a5dd6cbe0fc5484
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.8.1 This release

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page