一个全面的模型上下文协议(MCP)服务器,提供对Matrix家服务器功能的安全访问。该服务器使用TypeScript构建,使MCP客户端能够通过标准化接口与Matrix房间、消息、用户等进行交互。
# 克隆仓库
git clone <repository-url>
cd matrix-mcp-server
# 安装依赖
npm install
# 构建项目
npm run build
# 配置环境
cp .env.example .env
# 编辑.env文件以设置您的配置
# 启动服务器
npm start
# 启动热重载(OAuth禁用以便于测试)
npm run dev
# 或启用OAuth启动
ENABLE_OAUTH=true npm run dev
list-joined-rooms - 获取用户加入的所有房间
get-room-info - 获取详细的房间信息
roomId (字符串):Matrix房间ID(例如,!roomid:domain.com)get-room-members - 列出房间中的所有成员
roomId (字符串):Matrix房间IDget-room-messages - 从房间中检索最近的消息
roomId (字符串):Matrix房间IDlimit (数字,默认值:20):要检索的最大消息数get-messages-by-date - 按日期范围过滤消息
roomId (字符串):Matrix房间IDstartDate (字符串):ISO 8601格式(例如,2_2024-01-01T00:00:00Z)endDate (字符串):ISO 8601格式identify-active-users - 根据消息数量找到最活跃的用户
roomId (字符串):Matrix房间IDlimit (数字,默认值:10):返回的最大用户数get-user-profile - 获取任何用户的个人资料信息
targetUserId (字符串):目标用户的Matrix ID(例如,@user:domain.com)get-my-profile - 获取您自己的个人资料信息
get-all-users - 列出客户端所知的所有用户
search-public-rooms - 发现可以加入的公共房间
searchTerm (字符串,可选):按名称或主题筛选server (字符串,可选):特定服务器进行搜索limit (数字,默认值:20):返回的最大房间数get-notification-counts - 检查未读消息和提及
roomFilter (字符串,可选):要检查的具体房间IDget-direct-messages - 列出所有DM对话
includeEmpty (布尔,默认值:false):是否包含没有最近消息的DMsend-message - 向房间发送消息
roomId (字符串):Matrix房间IDmessage (字符串):消息内容messageType (枚举:"text" | "html" | "emote",默认值:"text"):消息格式replyToEventId (字符串,可选):回复事件IDsend-direct-message - 向用户发送私信
targetUserId (字符串):目标用户的Matrix IDmessage (字符串):消息内容create-room - 创建新的Matrix房间
roomName (字符串):新房间的名称isPrivate (布尔,默认值:false):房间隐私设置topic (字符串,可选):房间主题/描述inviteUsers (数组,可选):初始邀请的用户IDroomAlias (字符串,可选):人类可读的房间别名join-room - 通过ID或别名加入房间
roomIdOrAlias (字符串):要加入的房间ID或别名leave-room - 离开Matrix房间
roomId (字符串):要离开的房间IDreason (字符串,可选):离开的原因invite-user - 邀请用户加入房间
roomId (字符串):要邀请用户的房间targetUserId (字符串):要邀请的用户IDset-room-name - 更新房间显示名称
roomId (字符串):要修改的房间roomName (字符串):新的房间名称set-room-topic - 更新房间主题/描述
roomId (字符串):要修改的房间topic (字符串):新的房间主题服务器支持两种身份验证模式:
ENABLE_OAUTH=true)ENABLE_OAUTH=false)创建一个.env文件并填写您的配置:
# 核心配置
PORT=3000
ENABLE_OAUTH=true # 启用OAuth身份验证
ENABLE_TOKEN_EXCHANGE=true # 交换OAuth令牌以获取Matrix令牌
CORS_ALLOWED_ORIGINS="" # 允许的来源(逗号分隔,空表示允许所有)
# HTTPS配置(可选)
ENABLE_HTTPS=false
SSL_KEY_PATH="/path/to/private.key"
SSL_CERT_PATH="/path/to/certificate.crt"
# 身份提供商(OAuth模式)
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配置
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"
请注意,MATRIX_ACCESS_TOKEN头部是一个可选头部。如果您有令牌交换工作,请删除它。从MCP Inspector获取MATRIX_MCP_TOKEN。
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}"
请注意,matrix_access_token头部是一个可选头部。如果您有令牌交换工作,请删除它。
在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": "您的OAuth访问令牌"
}
]
}
# 启动服务器
npm run dev
# 在另一个终端运行检查器
npx @modelcontextprotocol/inspector
连接到http://localhost:3000/mcp进行身份验证并测试所有可用工具。
npm run build # 将TypeScript编译到dist/
npm run dev # 带热重载的开发服务器
npm run start # 生产服务器
npm run lint # 运行ESLint
npm run test # 运行测试
src/
├── http-server.ts # 主HTTP服务器入口点
├── server.ts # MCP服务器配置
├── tools/ # 工具实现
│ ├── tier0/ # 只读工具
│ │ ├── rooms.ts # 房间信息工具
│ │ ├── messages.ts # 消息检索工具
│ │ ├── users.ts # 用户个人资料工具
│ │ ├── search.ts # 房间搜索工具
│ │ └── notifications.ts # 通知工具
│ └── tier1/ # 操作工具
│ ├── messaging.ts # 消息发送工具
│ ├── room-management.ts # 房间生命周期工具
│ └── room-admin.ts # 房间管理工具
├── matrix/ # Matrix客户端管理
├── utils/ # 辅助工具
└── types/ # TypeScript类型定义
服务器实现了三层架构:
http-server.ts):带有OAuth集成的Express服务器server.ts):工具注册和请求路由tools/):与Matrix家服务器通信每个工具都会创建临时的Matrix客户端,这些客户端会根据您的配置方法进行身份验证,执行请求的操作,并自动清理。
本项目采用MIT许可证 - 查看LICENSE文件了解详情。