关于 mastodon
这是一项通过 curl 和 jq 调用 Mastodon REST API 的技能,涵盖账户验证、发帖、查看互动、删除内容和附加媒体,并强调发布确认与可见性设置。
主要功能
- 01验证已连接的账户和令牌
- 02按可见性选项发布帖子
- 03查看近期帖子及互动数据
- 04删除帖子并附加媒体
- 05处理权限范围、错误和限流
适用场景
- 01确认当前连接的 Mastodon 账户
- 02经用户确认后发布帖子
- 03查看近期帖子的互动情况
- 04删除帖子或发布图片
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ acedatacloud/ skills --skill mastodon安装后在 Claude Code 中输入/mastodon确认已加载。
详细介绍
使用 curl + jq 调用 Mastodon REST API。系统会注入两个连接器凭据:$MASTODON_BASE_URL(实例,例如 https://mastodon.social)
和 $MASTODON_ACCESS_TOKEN。每个请求都会发送标头
Authorization: Bearer $MASTODON_ACCESS_TOKEN。
错误会以 JSON {"error":"<message>"} 返回——请原样显示。401
("The access token is invalid")表示令牌错误或已撤销 → 用户
必须重新连接 Mastodon 连接器。发布需要令牌具有
write(或 write:statuses)范围。
务必先确认令牌和账号(还会返回列出你自己的嘟文所需的账号 id):
curl -sS "$MASTODON_BASE_URL/api/v1/accounts/verify_credentials" \
-H "Authorization: Bearer $MASTODON_ACCESS_TOKEN" \
| jq '{id, username, acct, display_name, followers: .followers_count, statuses: .statuses_count}'
发布嘟文
公开发布前,请先征得用户确认。 默认将 visibility 设为 unlisted,除非用户要求公开发布;只有用户提出要求时才使用 public。
STATUS_TEXT="Hello fediverse 👋 #introductions"
curl -sS -X POST "$MASTODON_BASE_URL/api/v1/statuses" \
-H "Authorization: Bearer $MASTODON_ACCESS_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
--data-urlencode "status=$STATUS_TEXT" \
--data-urlencode "visibility=unlisted" \
--data-urlencode "language=en" \
| jq '{id, url, visibility, created_at}'
visibility可以是public、unlisted、private或direct。- 可选参数:
spoiler_text(内容警告)、in_reply_to_id(回复)、sensitive=true、language(ISO 639-1)。 Idempotency-Key(任意唯一字符串;此处使用uuidgen)可在请求重试后的约 1 小时内防止重复发布。使用--data-urlencode,以确保 正确编码文本中的话题标签、表情符号和换行符。- 默认嘟文长度上限为 500 个字符(可由实例配置);文本更长时 →
422 {"error":"Validation failed: Text ..."}。
列出我最近的嘟文和互动数据
使用 verify_credentials 返回的 id:
ACCT_ID="ACCOUNT_ID" # from verify_credentials
curl -sS "$MASTODON_BASE_URL/api/v1/accounts/$ACCT_ID/statuses?limit=20&exclude_replies=true&exclude_reblogs=true" \
-H "Authorization: Bearer $MASTODON_ACCESS_TOKEN" \
| jq '.[] | {id, url, boosts: .reblogs_count, favs: .favourites_count, replies: .replies_count, created_at}'
limit 最大为 40。其他筛选条件:only_media、pinned、tagged=<hashtag>。
删除嘟文
curl -sS -X DELETE "$MASTODON_BASE_URL/api/v1/statuses/STATUS_ID" \
-H "Authorization: Bearer $MASTODON_ACCESS_TOKEN" | jq '{id, deleted: true}'
删除操作会返回包含原始 text 的状态,因此你可以删除后重新起草。
404 {"error":"Record not found"} = 不是你发布的,或已不存在。
附加媒体(可选)
通过 POST $MASTODON_BASE_URL/api/v2/media
(multipart/form-data,字段为 file)上传每张图片或视频以获取媒体 id,然后在发布状态时传入这些 id 作为
media_ids[]。完整媒体规范请参阅文档:
https://docs.joinmastodon.org/methods/media/
注意事项
- 联邦网络: API 只会访问
$MASTODON_BASE_URL(用户自己的 实例)。不存在全局端点——来自实例 A 的令牌无法用于实例 B。 - **范围:**读取需要
read(或read:accounts/read:statuses); 发布或删除需要write(或write:statuses)。403("This action is outside the authorized scopes")表示令牌缺少所需范围。 - **速率限制:**Mastodon 按令牌实施速率限制;批量发布时请拉开间隔,否则会收到
429。 verify_credentials返回的note等字段包含 HTML;纯文本原文位于source对象中。
记录输出
成功发布并获取实际结果 URL 后,请调用内置的
publish_artifact 工具一次,让用户可以在 My Outputs 中追踪此交付内容:
publish_artifact(kind="message", channel="mastodon", title="<title>", url="<the REAL returned URL>", status="delivered")
请使用实际返回的 URL,切勿伪造。每个已发布项目只调用一次,
且仅在确认交付后调用;如果发布失败,则跳过调用(或使用 status="failed")。
请参阅 _shared/artifacts.md。