Publish content to Mastodon. Use when you need to post a Mastodon status.
Scanned 9/5/2026
Install to Claude Code
npx -y skills add dvcrn/openclaw-skills-marketplace --skill mastodon-publisher --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Mastodon Publisher?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/dvcrn-mastodon-publisher)More formats (shields.io, HTML) on the badges page.
---
name: mastodon-publisher
description: "Publish content to Mastodon. Use when you need to post a Mastodon status."
---
# 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:
```bash
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 `status` can be ommitted when one or `--media-path` parameters are present
- ^2 one or `media` objects must be present if `status` is ommitted
- ^2 `media.description` is 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**
```bash
bun {baseDir}/scripts/tootbot.js '{"status": "Hello, Mastodon"}'
```
Read the output and summarize it for the user.
- **Post a scheduled status**
```bash
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**
```bash
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"
}
]
}
EOF
```
Read the output and summarize it for the user.
- **Post a new status with media multiple attachments**
```bash
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**
```bash
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 `bun` to be installed and available in the PATH.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!