From note-com-publisher
Publish markdown articles to note.com as drafts via their undocumented API. Handles email/password authentication, markdown-to-HTML conversion, eyecatch (header) image upload, and draft creation/update.
How this skill is triggered — by the user, by Claude, or both
Slash command
/note-com-publisher:publish-to-noteThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Publish markdown articles to note.com as drafts via their undocumented API. Handles email/password authentication, markdown-to-HTML conversion, eyecatch (header) image upload, and draft creation/update.
Publish markdown articles to note.com as drafts via their undocumented API. Handles email/password authentication, markdown-to-HTML conversion, eyecatch (header) image upload, and draft creation/update.
NOTE_EMAIL and NOTE_PASSWORD must be set (in .env or environment)requests (and optionally python-dotenv for .env loading)python publish_to_note.py --title "Article Title" --body-file ./article.txt
python publish_to_note.py --title "Article Title" --body-file ./article.txt --eyecatch ./header.jpg
cat article.txt | python publish_to_note.py --title "Article Title" --stdin
python publish_to_note.py --title "Updated Title" --body-file ./article.txt --update 149960187
python publish_to_note.py --title "Article Title" --body-file ./article.txt --output ./result.json
| Flag | Required | Description |
|---|---|---|
--title | Yes | Article title |
--body-file | One of body-file/stdin | Path to markdown/text body file |
--stdin | One of body-file/stdin | Read body from stdin instead of file |
--eyecatch | No | Path to header image (jpg, png, gif, webp) |
--update | No | Existing note_id to update instead of creating new |
--output | No | Path to save result JSON (note_id, note_key, edit_url) |
Email/password login via POST /api/v1/sessions/sign_in. Returns session cookies used for all subsequent requests. No manual JWT refresh needed.
POST /api/v1/text_notes with empty JSON body. Returns note_id and note_key.POST /api/v1/text_notes/draft_save?id={note_id} with name (title) and body (HTML).Eyecatch upload requires note_id, so it always happens after note creation (or with --update):
POST /api/v1/image_upload/note_eyecatch with multipart form data containing file and note_id.
draft_save overwrites all fields that are sent. If you call it with only an eyecatch_key, the body gets cleared. Always include the body when updating a draft.
The script converts a simple markdown-like format to note.com HTML:
| Markdown | HTML |
|---|---|
Lines starting with ■ | <h2> |
Lines starting with ▼ | <h3> |
Lines starting with > | <blockquote> |
--- | <hr> |
| Fenced code blocks | <p> with <br> joins |
**bold** | <b> |
`code` | <code> |
| Regular paragraphs | <p> (one per line) |
The script searches for .env files in this order:
python-dotenv (if installed) loads from current directoryOn success, prints the draft edit URL and returns a JSON object:
{
"note_id": 149960187,
"note_key": "n1a2b3c4d5e6",
"edit_url": "https://note.com/notes/n1a2b3c4d5e6/edit"
}
When using --update, returns:
{
"note_id": 149960187
}
npx claudepluginhub mtkana/claude-code-plugins --plugin note-com-publisherPublishes Markdown or HTML articles to WeChat Official Account drafts via Python API scripts, with account listing and format conversion.
Publishes Markdown files/URLs to X (Twitter) Articles editor via browser automation, converting to rich text, uploading cover images, converting tables/diagrams to PNGs, and inserting dividers.
Takes unstructured input (links, ideas, raw text), writes a markdown article, and publishes it to an Astro site via the Content Factory Router API.