Matrix
HTTP-SSEMatrix MCP服务器提供安全Matrix访问
Matrix MCP服务器提供安全Matrix访问
A comprehensive Model Context Protocol (MCP) server that provides secure access to Matrix homeserver functionality. Built with TypeScript, this server enables MCP clients to interact with Matrix rooms, messages, users, and more through a standardized interface.
# Clone the repository git clone <repository-url> cd matrix-mcp-server # Install dependencies npm install # Build the project npm run build # Configure environment cp .env.example .env # Edit .env with your settings # Start the server npm start
# Start with hot reload (OAuth disabled for easier testing) npm run dev # Or start with OAuth enabled ENABLE_OAUTH=true npm run dev
list-joined-rooms - Get all rooms the user has joined
get-room-info - Get detailed room information
roomId (string): Matrix room ID (e.g., !roomid:domain.com)get-room-members - List all members in a room
roomId (string): Matrix room IDget-room-messages - Retrieve recent messages from a room
roomId (string): Matrix room IDlimit (number, default: 20): Maximum messages to retrieveget-messages-by-date - Filter messages by date range
roomId (string): Matrix room IDstartDate (string): ISO 8601 format (e.g., 2024-01-01T00:00:00Z)endDate (string): ISO 8601 formatidentify-active-users - Find most active users by message count
roomId (string): Matrix room IDlimit (number, default: 10): Maximum users to returnget-user-profile - Get profile information for any user
targetUserId (string): Target user's Matrix ID (e.g., @user:domain.com)get-my-profile - Get your own profile information
get-all-users - List all users known to your client
search-public-rooms - Discover public rooms to join
searchTerm (string, optional): Filter by name or topicserver (string, optional): Specific server to searchlimit (number, default: 20): Maximum rooms to returnget-notification-counts - Check unread messages and mentions
roomFilter (string, optional): Specific room ID to checkget-direct-messages - List all DM conversations
includeEmpty (boolean, default: false): Include DMs with no recent messagessend-message - Send messages to rooms
roomId (string): Matrix room IDmessage (string): Message contentmessageType (enum: "text" | "html" | "emote", default: "text"): Message formattingreplyToEventId (string, optional): Event ID to reply tosend-direct-message - Send private messages to users
targetUserId (string): Target user's Matrix IDmessage (string): Message contentcreate-room - Create new Matrix rooms
roomName (string): Name for the new roomisPrivate (boolean, default: false): Room privacy settingtopic (string, optional): Room topic/descriptioninviteUsers (array, optional): User IDs to invite initiallyroomAlias (string, optional): Human-readable room aliasjoin-room - Join rooms by ID or alias
roomIdOrAlias (string): Room ID or alias to joinleave-room - Leave Matrix rooms
roomId (string): Room ID to leavereason (string, optional): Reason for leavinginvite-user - Invite users to rooms
roomId (string): Room to invite user totargetUserId (string): User ID to inviteset-room-name - Update room display names
roomId (string): Room to modifyroomName (string): New room nameset-room-topic - Update room topics/descriptions
roomId (string): Room to modifytopic (string): New room topicThe server supports two authentication modes:
ENABLE_OAUTH=true)ENABLE_OAUTH=false)Create a .env file with your configuration:
# Core Configuration PORT=3000 ENABLE_OAUTH=true # Enable OAuth authentication ENABLE_TOKEN_EXCHANGE=true # Exchange OAuth tokens for Matrix tokens CORS_ALLOWED_ORIGINS="" # Comma-separated allowed origins (empty = allow all) # HTTPS Configuration (optional) ENABLE_HTTPS=false SSL_KEY_PATH="/path/to/private.key" SSL_CERT_PATH="/path/to/certificate.crt" # Identity Provider (OAuth mode) IDP_ISSUER_URL="https://keycloak.example.com/realms/matrix" IDP_AUTHORIZATION_URL="https://keycloak.example.com/realms/matrix/protocol/openid-connect/auth" IDP_TOKEN_URL="https://keycloak.example.com/realms/matrix/protocol/openid-connect/token" OAUTH_CALLBACK_URL="http://localhost:3000/callback" # Matrix Configuration MATRIX_HOMESERVER_URL="https://matrix.example.com" MATRIX_DOMAIN="matrix.example.com" MATRIX_CLIENT_ID="your-matrix-client-id" MATRIX_CLIENT_SECRET="your-matrix-client-secret"
Remember, the MATRIX_ACCESS_TOKEN header is an optional header. You should delete it if you have token exchange working. Obtain MATRIX_MCP_TOKEN from MCP Inspector.
claude mcp add --transport http matrix-server http://localhost:3000/mcp -H "matrix_user_id: @user1:matrix.example.com" -H "matrix_homeserver_url: https://localhost:8008" -H "matrix_access_token: ${MATRIX_ACCESS_TOKEN}" -H "Authorization: Bearer ${MATRIX_MCP_TOKEN}"
Remember, the matrix_access_token header is an optional header. You should delete it if you have token exchange working.
In mcp.json:
{ "servers": { "matrix-mcp": { "url": "http://localhost:3000/mcp", "type": "http", "headers": { "matrix_access_token": "${input:matrix-access-token}", "matrix_user_id": "@<your-matrix-username>:<your-homeserver-domain>", "matrix_homeserver_url": "<your-homeserver-url>" } } }, "inputs": [ { "id": "matrix-access-token", "type": "promptString", "description": "Your OAuth access token" } ] }
# Start the server npm run dev # In another terminal, run the inspector npx @modelcontextprotocol/inspector
Connect to http://localhost:3000/mcp to authenticate and test all available tools.
npm run build # Build TypeScript to dist/ npm run dev # Development server with hot reload npm run start # Production server npm run lint # Run ESLint npm run test # Run tests
src/
├── http-server.ts # Main HTTP server entry point
├── server.ts # MCP server configuration
├── tools/ # Tool implementations
│ ├── tier0/ # Read-only tools
│ │ ├── rooms.ts # Room information tools
│ │ ├── messages.ts # Message retrieval tools
│ │ ├── users.ts # User profile tools
│ │ ├── search.ts # Room search tools
│ │ └── notifications.ts # Notification tools
│ └── tier1/ # Action tools
│ ├── messaging.ts # Message sending tools
│ ├── room-management.ts # Room lifecycle tools
│ └── room-admin.ts # Room administration tools
├── matrix/ # Matrix client management
├── utils/ # Helper utilities
└── types/ # TypeScript type definitions
The server implements a three-layer architecture:
http-server.ts): Express server with OAuth integrationserver.ts): Tool registration and request routingtools/): Matrix homeserver communicationEach tool creates ephemeral Matrix clients that authenticate via your configured method, perform the requested operation, and clean up automatically.
This project is licensed under the MIT License - see the LICENSE file for details.