Matrix Client-Server API Skill
Use this skill to run Matrix Client-Server operations through uxc + OpenAPI.
Reuse the uxc skill for shared execution, auth, and error-handling guidance.
Prerequisites
- -
uxc is installed and available in PATH. - Network access to your Matrix homeserver's client-server base URL, usually
https://<homeserver>/_matrix/client/v3. - Access to the curated OpenAPI schema URL:
-
https://raw.githubusercontent.com/holon-run/uxc/main/skills/matrix-openapi-skill/references/matrix-client-server.openapi.json
- - A Matrix access token for the target homeserver.
Scope
This skill covers a practical request/response Matrix surface:
- - token owner lookup
- joined room discovery
- room state lookup
- INLINECODE6 polling reads, including daemon-backed poll subscribe
- user profile and presence lookup
- room message sends
This skill does not cover:
- - login, SSO, device registration, or generic token acquisition flows
- appservice, federation, or bot framework abstractions
- webhook or long-running event receiver runtime
- full Matrix spec coverage
Homeserver Base URL
Matrix is homeserver-specific. The endpoint you link must include the Matrix client-server base path:
- - typical form: INLINECODE7
- example form: INLINECODE8
Do not link only the homeserver origin without /_matrix/client/v3.
Authentication
Matrix Client-Server API uses Authorization: Bearer <access_token>.
Preferred path for OAuth-aware homeservers:
CODEBLOCK0
Fallback path when you already have an access token:
CODEBLOCK1
If your homeserver is not matrix.org, replace the host while keeping the same path prefix. Validate the active mapping when auth looks wrong:
CODEBLOCK2
Notes:
- -
uxc auth oauth works only for homeservers that expose Matrix OAuth metadata. - Prefer a loopback redirect URI on an uncommon high port, such as
http://127.0.0.1:8788/callback, to avoid conflicts with local services on common ports. - Legacy Matrix login and SSO fallback flows are not covered by this skill yet.
Core Workflow
- 1. Use the fixed link command by default:
-
command -v matrix-openapi-cli
- If missing, create it:
uxc link matrix-openapi-cli https://matrix.org/_matrix/client/v3 --schema-url https://raw.githubusercontent.com/holon-run/uxc/main/skills/matrix-openapi-skill/references/matrix-client-server.openapi.json
- INLINECODE16
- 2. Inspect operation schema first:
-
matrix-openapi-cli get:/account/whoami -h
-
matrix-openapi-cli get:/sync -h
- INLINECODE19
- 3. Prefer read validation before writes:
-
matrix-openapi-cli get:/account/whoami
-
matrix-openapi-cli get:/joined_rooms
- INLINECODE22
- 4. Execute with key/value or positional JSON:
- key/value:
matrix-openapi-cli get:/sync timeout=30000 filter={"room":{"timeline":{"limit":10}}}
- positional JSON:
INLINECODE24
- 5. For background
/sync polling, call uxc subscribe start directly against the homeserver base URL:
- INLINECODE27
Operation Groups
Session / Discovery
- - INLINECODE28
- INLINECODE29
- INLINECODE30
Room Reads
- - INLINECODE31
- INLINECODE32
User Reads
- - INLINECODE33
- INLINECODE34
Messaging
Guardrails
- - Keep automation on the JSON output envelope; do not use
--text. - Parse stable fields first:
ok, kind, protocol, data, error. - INLINECODE42 works both as a normal polling/read call and as a validated daemon-backed poll subscription when invoked through
uxc subscribe start. - For room-scoped
/sync subscriptions, set missing_extract_items_pointer_as_empty=true so sparse responses without new room timeline events are treated as an empty batch instead of a fatal error. - INLINECODE46 is high-risk and should default to
m.room.message text sends unless the user explicitly asks for another event type. - Reuse a unique
txnId per send attempt to avoid accidental duplicates. - Many homeservers restrict presence visibility and room state/event access based on membership and server policy; auth success does not imply every room or profile read will succeed.
- INLINECODE49 is equivalent to
uxc <homeserver_client_base> --schema-url <matrix_openapi_schema> <operation> ....
References
- - Usage patterns: INLINECODE51
- Curated OpenAPI schema: INLINECODE52
- Matrix Client-Server API: https://spec.matrix.org/latest/client-server-api/
- Matrix spec source: https://github.com/matrix-org/matrix-spec/tree/main/data/api/client-server
Matrix 客户端-服务端 API 技能
使用此技能通过 uxc + OpenAPI 执行 Matrix 客户端-服务端操作。
复用 uxc 技能以获取共享执行、认证和错误处理指导。
前置条件
- - uxc 已安装并可在 PATH 中使用。
- 可访问 Matrix 家庭服务器的客户端-服务端基础 URL,通常为 https:///_matrix/client/v3。
- 可访问精选的 OpenAPI 模式 URL:
- https://raw.githubusercontent.com/holon-run/uxc/main/skills/matrix-openapi-skill/references/matrix-client-server.openapi.json
范围
此技能涵盖实用的请求/响应 Matrix 功能:
- - 令牌所有者查询
- 已加入房间发现
- 房间状态查询
- /sync 轮询读取,包括守护进程支持的轮询订阅
- 用户资料和在线状态查询
- 房间消息发送
此技能不涵盖:
- - 登录、SSO、设备注册或通用令牌获取流程
- 应用服务、联邦或机器人框架抽象
- Webhook 或长时间运行的事件接收器运行时
- 完整的 Matrix 规范覆盖
家庭服务器基础 URL
Matrix 是家庭服务器特定的。您链接的端点必须包含 Matrix 客户端-服务端基础路径:
- - 典型形式:https:///matrix/client/v3
- 示例形式:https://matrix.org/matrix/client/v3
不要仅链接家庭服务器源而不包含 /_matrix/client/v3。
认证
Matrix 客户端-服务端 API 使用 Authorization: Bearer 。
支持 OAuth 的家庭服务器的首选路径:
bash
uxc auth oauth start matrix-oauth \
--endpoint https://matrix.org/_matrix/client/v3 \
--redirect-uri http://127.0.0.1:8788/callback \
--client-id
uxc auth oauth complete matrix-oauth \
--session-id \
--authorization-response http://127.0.0.1:8788/callback?code=...
uxc auth binding add \
--id matrix-oauth \
--host matrix.org \
--path-prefix /_matrix/client/v3 \
--scheme https \
--credential matrix-oauth \
--priority 100
当您已有访问令牌时的备用路径:
bash
uxc auth credential set matrix-access \
--auth-type bearer \
--secret-env MATRIXACCESSTOKEN
uxc auth binding add \
--id matrix-access \
--host matrix.org \
--path-prefix /_matrix/client/v3 \
--scheme https \
--credential matrix-access \
--priority 100
如果您的家庭服务器不是 matrix.org,请替换主机同时保持相同的路径前缀。当认证看起来有问题时验证活动映射:
bash
uxc auth binding match https://matrix.org/_matrix/client/v3
注意:
- - uxc auth oauth 仅适用于暴露 Matrix OAuth 元数据的家庭服务器。
- 优先使用不常见高端口上的环回重定向 URI,例如 http://127.0.0.1:8788/callback,以避免与常见端口上的本地服务冲突。
- 此技能尚未涵盖传统的 Matrix 登录和 SSO 回退流程。
核心工作流程
- 1. 默认使用固定链接命令:
- command -v matrix-openapi-cli
- 如果缺失,创建它:
uxc link matrix-openapi-cli https://matrix.org/_matrix/client/v3 --schema-url https://raw.githubusercontent.com/holon-run/uxc/main/skills/matrix-openapi-skill/references/matrix-client-server.openapi.json
- matrix-openapi-cli -h
- 2. 首先检查操作模式:
- matrix-openapi-cli get:/account/whoami -h
- matrix-openapi-cli get:/sync -h
- matrix-openapi-cli put:/rooms/{roomId}/send/{eventType}/{txnId} -h
- 3. 在写入前优先进行读取验证:
- matrix-openapi-cli get:/account/whoami
- matrix-openapi-cli get:/joined_rooms
- matrix-openapi-cli get:/rooms/{roomId}/state roomId=!abc123:example.org
- 4. 使用键/值或位置 JSON 执行:
- 键/值:
matrix-openapi-cli get:/sync timeout=30000 filter={room:{timeline:{limit:10}}}
- 位置 JSON:
matrix-openapi-cli put:/rooms/{roomId}/send/{eventType}/{txnId} {roomId:!abc123:example.org,eventType:m.room.message,txnId:uxc-001,msgtype:m.text,body:Hello from UXC}
- 5. 对于后台 /sync 轮询,直接针对家庭服务器基础 URL 调用 uxc subscribe start:
- uxc subscribe start https://matrix.org/
matrix/client/v3 get:/sync --auth matrix-oauth --mode poll --poll-config {intervalsecs:2,extract
itemspointer:/rooms/join/!abc123:example.org/timeline/events,missing
extractitems
pointeras
empty:true,requestcursor
arg:since,responsecursor
pointer:/nextbatch,checkpoint
strategy:{type:cursoronly}} --sink file:$HOME/.uxc/subscriptions/matrix-sync.ndjson timeout=1000 filter={room:{rooms:[!abc123:example.org],timeline:{limit:5}}}
操作组
会话 / 发现
- - get:/account/whoami
- get:/joined_rooms
- get:/sync
房间读取
- - get:/rooms/{roomId}/state
- get:/rooms/{roomId}/state/{eventType}/{stateKey}
用户读取
- - get:/profile/{userId}
- get:/presence/{userId}/status
消息发送
- - put:/rooms/{roomId}/send/{eventType}/{txnId}
防护措施
- - 保持自动化在 JSON 输出信封上;不要使用 --text。
- 首先解析稳定字段:ok、kind、protocol、data、error。
- get:/sync 既可作为普通轮询/读取调用,也可在通过 uxc subscribe start 调用时作为经过验证的守护进程支持的轮询订阅。
- 对于房间范围的 /sync 订阅,设置 missingextractitemspointerasempty=true,以便没有新房间时间线事件的稀疏响应被视为空批次而不是致命错误。
- put:/rooms/{roomId}/send/{eventType}/{txnId} 是高风险的,应默认发送 m.room.message 文本,除非用户明确要求其他事件类型。
- 每次发送尝试复用唯一的 txnId 以避免意外重复。
- 许多家庭服务器根据成员身份和服务器策略限制在线状态可见性和房间状态/事件访问;认证成功并不意味着每个房间或个人资料读取都会成功。
- matrix-openapi-cli ... 等同于 uxc clientbase> --schema-url openapi_schema> ...。
参考
- - 使用模式:references/usage-patterns.md
- 精选的 OpenAPI 模式:references/matrix-client-server.openapi.json
- Matrix 客户端-服务端 API:https://spec.matrix.org/latest/client-server-api/
- Matrix 规范来源:https://github.com/matrix-org/matrix-spec/tree/main/data/api/client-server