mcpField
M
mastodon

mastodon

github.com/acedatacloud营销与增长1769 次安装今天更新
代码仓库

关于 mastodon

这是一项通过 curl 和 jq 调用 Mastodon REST API 的技能,涵盖账户验证、发帖、查看互动、删除内容和附加媒体,并强调发布确认与可见性设置。

主要功能

  1. 01验证已连接的账户和令牌
  2. 02按可见性选项发布帖子
  3. 03查看近期帖子及互动数据
  4. 04删除帖子并附加媒体
  5. 05处理权限范围、错误和限流

适用场景

  1. 01确认当前连接的 Mastodon 账户
  2. 02经用户确认后发布帖子
  3. 03查看近期帖子的互动情况
  4. 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。

评论

支持 Markdown