8.4k★by behrangsa
mastodon-publisher – OpenClaw Skill
mastodon-publisher is an OpenClaw Skills integration for coding workflows. Publish content to Mastodon. Use when you need to post a Mastodon status.
Skill Snapshot
| name | mastodon-publisher |
| description | Publish content to Mastodon. Use when you need to post a Mastodon status. OpenClaw Skills integration. |
| owner | behrangsa |
| repository | behrangsa/tootbot |
| language | Markdown |
| license | MIT |
| topics | |
| security | L1 |
| install | openclaw add @behrangsa/tootbot |
| last updated | Feb 7, 2026 |
Maintainer

name: mastodon-publisher description: Publish content to Mastodon. Use when you need to post a Mastodon status. author: Behrang Saeedzadeh version: 0.5.0 triggers:
- "post to mastodon"
- "publish status to mastodon" metadata: { "clawdbot": { "emoji": "🐘" }, "requires": { "bins": ["bun"] } }
Mastodon Publisher
Publish content to Mastodon. Use when you need to share updates, posts, or media.
Usage
Post one or more statuses to Mastodon
Post a new status to Mastodon with Bun:
bun {baseDir}/scripts/tootbot.js '{"status": "Hello, Mastodon!"}' '{"status": "Goodby, Mastodon!"}'
JSON fields
| Name | Description | Type | Example | Required | Default |
|---|---|---|---|---|---|
status | The text content of the status | string | "Hello, World" | yes^1 | N/A |
visibility | Sets the visibility of the posted status | public or private or unlisted or direct | "private" | no | "public" |
language | ISO 639-1 language code for this status | ISO-639-1 Language Code | "en" | no | |
scheduledAt | Datetime at which to schedule a status | RFC3339 date time | "2029-02-03T15:30:45.000Z" | no | |
quoteApprovalPolicy | Sets who is allowed to quote the status | public or followrs or nobody | "nobody" | no | "public |
media | Media to be attached to the status | array of {file, description} objects | {"file": "/path/to/foo.png", "description" : "Foo"} | no^2 |
- ^1
statuscan be ommitted when one or--media-pathparameters are present - ^2 one or
mediaobjects must be present ifstatusis ommitted - ^2
media.descriptionis optional
Environment Variables
| Name | Description | Example |
|---|---|---|
MASTODON_URL | Your Mastodon instance URL | https://mastodon.social |
MASTODON_ACCESS_TOKEN | Your Mastodon access token | xAyBzC |
Examples
-
Post a new status
bun {baseDir}/scripts/tootbot.js '{"status": "Hello, Mastodon"}'Read the output and summarize it for the user.
-
Post a scheduled status
bun {baseDir}/scripts/tootbot.js '{"status": "Hello, future!", "scheduledAt" : "2030-02-05T13:21:34.000Z"}'Read the output and summarize it for the user.
-
Post a scheduled status with visibility, language, quote approval policy, and a single media attachment
bun {baseDir}/scripts/tootbot.js <<EOF { "status" : "Dorood", "visibility" : "public", "language" : "fa", "scheduledAt" : "2029-02-03T15:30:45.123456789+03:30", "quoteApprovalPolicy" : "followers", "media" : [ { "file" : "/path/to/media.png", "description" : "Nowrooz Pirooz" } ] } EOFRead the output and summarize it for the user.
-
Post a new status with media multiple attachments
bun {baseDir}/scripts/tootbot.js <<EOF { "status" : "Edsger W Dijkstra", "visibility" : "public", "language" : "fa", "scheduledAt" : "2029-02-03T15:30:45.123456789+03:30", "quoteApprovalPolicy" : "followers", "media" : [ { "file" : "/path/to/dijkstra.png", "description" : "Portrait" }, { "file" : "/path/to/signature.png", "description" : "Signature" } ] } EOF -
Post a new status with media attachments and no status text
bun {baseDir}/scripts/tootbot.js <<EOF { "media" : [ { "file" : "/path/to/flower-1.png", "description" : "White Rose" }, { "file" : "/path/to/flower-2.png", "description" : "Red Rose" } ] } EOF
Notes
- Requires
bunto be installed and available in the PATH.
Toobot Skill
Mastodon publisher skill for Clawdbot.
Compatible with Claude Code skills.
Installation
bunx clawdhub@latest install tootbot
Configuration
Set these environment variables:
MASTODON_URL- Your Mastodon instance URL (e.g.,https://mastodon.social)MASTODON_ACCESS_TOKEN- Your Mastodon access token
Usage
Post one or more statuses to Mastodon
Post a new status to Mastodon with Bun:
bunx @nutthead/tootbot '{"status": "Hello, Mastodon!"}' '{"status": "Goodby, Mastodon!"}'
JSON fields
| Name | Description | Type | Example | Required | Default |
|---|---|---|---|---|---|
status | The text content of the status | string | "Hello, World" | yes^1 | N/A |
visibility | Sets the visibility of the posted status | public or private or unlisted or direct | "private" | no | "public" |
language | ISO 639-1 language code for this status | ISO-639-1 Language Code | "en" | no | |
scheduledAt | Datetime at which to schedule a status | RFC3339 date time | "2029-02-03T15:30:45.000Z" | no | |
quoteApprovalPolicy | Sets who is allowed to quote the status | public or followrs or nobody | "nobody" | no | "public |
media | Media to be attached to the status | array of {file, description} objects | {"file": "/path/to/foo.png", "description" : "Foo"} | no^2 |
- ^1
statuscan be ommitted when one or--media-pathparameters are present - ^2 one or
mediaobjects must be present ifstatusis ommitted - ^2
media.descriptionis optional
Environment Variables
| Name | Description | Example |
|---|---|---|
MASTODON_URL | Your Mastodon instance URL | https://mastodon.social |
MASTODON_ACCESS_TOKEN | Your Mastodon access token | xAyBzC |
Examples
-
Post a new status
bunx @nutthead/tootbot '{"status": "Hello, Mastodon"}'Read the output and summarize it for the user.
-
Post a scheduled status
bunx @nutthead/tootbot '{"status": "Hello, future!", "scheduledAt" : "2030-02-05T13:21:34.000Z"}'Read the output and summarize it for the user.
-
Post a scheduled status with visibility, language, quote approval policy, and a single media attachment
bunx @nutthead/tootbot <<EOF { "status" : "Dorood", "visibility" : "public", "language" : "fa", "scheduledAt" : "2029-02-03T15:30:45.123456789+03:30", "quoteApprovalPolicy" : "followers", "media" : [ { "file" : "/path/to/media.png", "description" : "Nowrooz Pirooz" } ] } EOFRead the output and summarize it for the user.
-
Post a new status with media multiple attachments
bunx @nutthead/tootbot <<EOF { "status" : "Edsger W Dijkstra", "visibility" : "public", "language" : "fa", "scheduledAt" : "2029-02-03T15:30:45.123456789+03:30", "quoteApprovalPolicy" : "followers", "media" : [ { "file" : "/path/to/dijkstra.png", "description" : "Portrait" }, { "file" : "/path/to/signature.png", "description" : "Signature" } ] } EOF -
Post a new status with media attachments and no status text
bunx @nutthead/tootbot <<EOF { "media" : [ { "file" : "/path/to/flower-1.png", "description" : "White Rose" }, { "file" : "/path/to/flower-2.png", "description" : "Red Rose" } ] } EOF
Links
Permissions & Security
Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.
Requirements
- OpenClaw CLI installed and configured.
- Language: Markdown
- License: MIT
- Topics:
FAQ
How do I install mastodon-publisher?
Run openclaw add @behrangsa/tootbot in your terminal. This installs mastodon-publisher into your OpenClaw Skills catalog.
Does this skill run locally or in the cloud?
OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.
Where can I verify the source code?
The source repository is available at https://github.com/openclaw/skills/tree/main/skills/behrangsa/tootbot. Review commits and README documentation before installing.
