Buttondown MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.3.3 · published by io.usefulapi
Read Buttondown subscribers, emails, analytics and automations; add subscribers; write email drafts.
25 tools: 2 can delete or cancel things, 3 change things and 20 only read.
Scanned Oct 21, 2026
- Deletes or cancels2Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things3Claude Code: ask: see these tools
- Only reads20Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http buttondown https://buttondown.usefulapi.io/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
25 tools
Deletes or cancels 2Claude Code: deny
buttondown_update_email_draftWRITE: edit the subject, body, description, slug or preview image of an email that is still a DRAFT (replaces those fields; the previous text is lost unless Buttondown's email hist…No findings
Why it is in this group
- The name "buttondown_update_email_draft" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: edit the subject, body, description, slug or preview image of an email that is still a DRAFT (replaces those fields; the previous text is lost unless Buttondown's email history is used). Refuses any email that is not a draft, and never changes status or publish date, so nothing is sent or scheduled. PATCH /emails/{id}.
Annotations the server declares
- title: Edit an email draft
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
buttondown_update_subscriberWRITE: change ONE subscriber's tags, private note or metadata.No findings
Why it is in this group
- The name "buttondown_update_subscriber" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: change ONE subscriber's tags, private note or metadata. Tags are merged (add_tags / remove_tags change only those names; the others stay). A given note or metadata replaces the existing value (destructive for that field). The subscriber's type (unsubscribe, block, ...) and e-mail address cannot be changed here, and this tool sends nothing itself; but a tag, note or metadata change can start the newsletter's own automations (for example a tag-triggered welcome sequence), which may e-mail that one subscriber. PATCH /subscribers/{id_or_email}.
Annotations the server declares
- title: Update a subscriber
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
Changes things 3Claude Code: ask
buttondown_add_subscriberWRITE: add ONE subscriber by e-mail address.No findings
Why it is in this group
- The name "buttondown_add_subscriber" says "add": a word for a change.
Description, as the server wrote it WRITE: add ONE subscriber by e-mail address. No subscriber type is set, so Buttondown applies the newsletter's normal sign-up rules (double opt-in: the subscriber is typically created as unactivated and Buttondown e-mails THAT ONE address a confirmation message; opt-in is never bypassed, nor is the firewall). Only add people who asked to subscribe. Creating a subscriber (and its tags) can also start the newsletter's own automations, which may e-mail that one subscriber. An existing e-mail is left untouched (error, no overwrite). Optional tags (a tag that does not exist is created, which needs a plan with tags), a private note and metadata. Buttondown limits creation to 100 subscribers per day. POST /subscribers.
Annotations the server declares
- title: Add a subscriber
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
buttondown_create_email_draftWRITE: create a DRAFT email (status always "draft").No findings
Why it is in this group
- The name "buttondown_create_email_draft" says "create": a word for a change.
Description, as the server wrote it WRITE: create a DRAFT email (status always "draft"). Nothing is sent or scheduled and no subscriber is e-mailed; to send it, the user must open the draft in Buttondown and send it there. This server has no tool that sends or schedules email. Body is Markdown or HTML. POST /emails.
Annotations the server declares
- title: Create an email draft
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
buttondown_create_tagWRITE: create a subscriber tag (needs a Buttondown plan with tags).No findings
Why it is in this group
- The name "buttondown_create_tag" says "create": a word for a change.
Description, as the server wrote it WRITE: create a subscriber tag (needs a Buttondown plan with tags). An existing tag with the same name is returned as an error and not changed. POST /tags.
Annotations the server declares
- title: Create a tag
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Only reads 20Claude Code: allow
buttondown_get_accountThe Buttondown account this API key belongs to: username and e-mail address.No findings
Why it is in this group
- The name "buttondown_get_account" says "get": a word for reading.
Description, as the server wrote it The Buttondown account this API key belongs to: username and e-mail address. GET /accounts/me.
Annotations the server declares
- title: Get account
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_get_automationOne automation by id with its trigger, actions and filters.No findings
Why it is in this group
- The name "buttondown_get_automation" says "get": a word for reading.
Description, as the server wrote it One automation by id with its trigger, actions and filters. GET /automations/{id}.
Annotations the server declares
- title: Get automation
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_get_automation_analyticsPerformance numbers for one automation.No findings
Why it is in this group
- The name "buttondown_get_automation_analytics" says "get": a word for reading.
Description, as the server wrote it Performance numbers for one automation. GET /automations/{id}/analytics.
Annotations the server declares
- title: Get automation analytics
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_get_emailOne email by id with its full body, subject, status, publish date, slug, archive settings and analytics summary.No findings
Why it is in this group
- The name "buttondown_get_email" says "get": a word for reading.
Description, as the server wrote it One email by id with its full body, subject, status, publish date, slug, archive settings and analytics summary. GET /emails/{id}.
Annotations the server declares
- title: Get email
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_get_email_analyticsDelivery and engagement numbers for one sent email: recipients, deliveries, opens, clicks, failures, unsubscriptions, complaints, replies, page views.No findings
Why it is in this group
- The name "buttondown_get_email_analytics" says "get": a word for reading.
Description, as the server wrote it Delivery and engagement numbers for one sent email: recipients, deliveries, opens, clicks, failures, unsubscriptions, complaints, replies, page views. GET /emails/{id}/analytics.
Annotations the server declares
- title: Get email analytics
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_get_newsletterOne newsletter by id (settings and identity only; no API key, CSS or templates).No findings
Why it is in this group
- The name "buttondown_get_newsletter" says "get": a word for reading.
Description, as the server wrote it One newsletter by id (settings and identity only; no API key, CSS or templates). GET /newsletters/{id}.
Annotations the server declares
- title: Get newsletter
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_get_subscriberOne subscriber by id or by e-mail address: type, tags, notes, metadata, source, engagement and lifecycle dates.No findings
Why it is in this group
- The name "buttondown_get_subscriber" says "get": a word for reading.
Description, as the server wrote it One subscriber by id or by e-mail address: type, tags, notes, metadata, source, engagement and lifecycle dates. GET /subscribers/{id_or_email}.
Annotations the server declares
- title: Get subscriber
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_get_tag_analyticsSubscribers created, open rate and click rate for one tag.No findings
Why it is in this group
- The name "buttondown_get_tag_analytics" says "get": a word for reading.
Description, as the server wrote it Subscribers created, open rate and click rate for one tag. GET /tags/{id}/analytics.
Annotations the server declares
- title: Get tag analytics
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_automationsList automations (welcome sequences and other triggered e-mails) with name, status, trigger, actions and filters (webhook URLs in actions are shown by host only).No findings
Why it is in this group
- The name "buttondown_list_automations" says "list": a word for reading.
Description, as the server wrote it List automations (welcome sequences and other triggered e-mails) with name, status, trigger, actions and filters (webhook URLs in actions are shown by host only). Read-only: automations are not started or changed. GET /automations.
Annotations the server declares
- title: List automations
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_emailsList emails (drafts, scheduled and sent), newest first by default, with subject, status, publish date, slug, archive URL and analytics summary.No findings
Why it is in this group
- The name "buttondown_list_emails" says "list": a word for reading.
Description, as the server wrote it List emails (drafts, scheduled and sent), newest first by default, with subject, status, publish date, slug, archive URL and analytics summary. The body is left out unless include_body is set. Filter by status, subject text or date. GET /emails.
Annotations the server declares
- title: List emails
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_eventsList delivery events (delivered, opened, clicked, bounced, unsubscribed, ...), newest first, optionally for one email or subscriber.No findings
Why it is in this group
- The name "buttondown_list_events" says "list": a word for reading.
Description, as the server wrote it List delivery events (delivered, opened, clicked, bounced, unsubscribed, ...), newest first, optionally for one email or subscriber. GET /events.
Annotations the server declares
- title: List email events
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_formsList sign-up forms with title, slug, status, tags and subscriber counts.No findings
Why it is in this group
- The name "buttondown_list_forms" says "list": a word for reading.
Description, as the server wrote it List sign-up forms with title, slug, status, tags and subscriber counts. GET /forms.
Annotations the server declares
- title: List forms
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_newslettersList the newsletters on the account with name, username, domains, sender, locale and timezone.No findings
Why it is in this group
- The name "buttondown_list_newsletters" says "list": a word for reading.
Description, as the server wrote it List the newsletters on the account with name, username, domains, sender, locale and timezone. The newsletter's API key, custom CSS and e-mail templates are never returned. GET /newsletters.
Annotations the server declares
- title: List newsletters
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_segmentsList saved subscriber segments with name, description and filters.No findings
Why it is in this group
- The name "buttondown_list_segments" says "list": a word for reading.
Description, as the server wrote it List saved subscriber segments with name, description and filters. GET /segments.
Annotations the server declares
- title: List segments
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_snippetsList reusable content snippets with identifier, name, mode and how often each is referenced.No findings
Why it is in this group
- The name "buttondown_list_snippets" says "list": a word for reading.
Description, as the server wrote it List reusable content snippets with identifier, name, mode and how often each is referenced. GET /snippets.
Annotations the server declares
- title: List snippets
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_subscribersList or search subscribers (newest first by default) with e-mail, type (regular, unactivated, unsubscribed, premium, ...), tags, notes, metadata, source, open/click rates and dates…No findings
Why it is in this group
- The name "buttondown_list_subscribers" says "list": a word for reading.
Description, as the server wrote it List or search subscribers (newest first by default) with e-mail, type (regular, unactivated, unsubscribed, premium, ...), tags, notes, metadata, source, open/click rates and dates. Filter by e-mail text, type, tag, signup date or domain. GET /subscribers.
Annotations the server declares
- title: List subscribers
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_survey_responsesList survey responses (who answered what), optionally for one survey, email or subscriber.No findings
Why it is in this group
- The name "buttondown_list_survey_responses" says "list": a word for reading.
Description, as the server wrote it List survey responses (who answered what), optionally for one survey, email or subscriber. GET /survey_responses.
Annotations the server declares
- title: List survey responses
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_surveysList surveys with question, answers, status and response count.No findings
Why it is in this group
- The name "buttondown_list_surveys" says "list": a word for reading.
Description, as the server wrote it List surveys with question, answers, status and response count. GET /surveys.
Annotations the server declares
- title: List surveys
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_tagsList subscriber tags with name, color, descriptions and whether subscribers can edit them.No findings
Why it is in this group
- The name "buttondown_list_tags" says "list": a word for reading.
Description, as the server wrote it List subscriber tags with name, color, descriptions and whether subscribers can edit them. GET /tags.
Annotations the server declares
- title: List tags
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
buttondown_list_webhooksList configured webhooks with status and subscribed event types.No findings
Why it is in this group
- The name "buttondown_list_webhooks" says "list": a word for reading.
Description, as the server wrote it List configured webhooks with status and subscribed event types. The signing key is never returned and the URL is shown by host only. GET /webhooks.
Annotations the server declares
- title: List webhooks
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.3.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http buttondown https://buttondown.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__buttondown__buttondown_get_account",
"mcp__buttondown__buttondown_list_newsletters",
"mcp__buttondown__buttondown_get_newsletter",
"mcp__buttondown__buttondown_list_subscribers",
"mcp__buttondown__buttondown_get_subscriber",
"mcp__buttondown__buttondown_list_emails",
"mcp__buttondown__buttondown_get_email",
"mcp__buttondown__buttondown_get_email_analytics",
"mcp__buttondown__buttondown_list_tags",
"mcp__buttondown__buttondown_get_tag_analytics",
"mcp__buttondown__buttondown_list_automations",
"mcp__buttondown__buttondown_get_automation",
"mcp__buttondown__buttondown_get_automation_analytics",
"mcp__buttondown__buttondown_list_surveys",
"mcp__buttondown__buttondown_list_survey_responses",
"mcp__buttondown__buttondown_list_segments",
"mcp__buttondown__buttondown_list_forms",
"mcp__buttondown__buttondown_list_snippets",
"mcp__buttondown__buttondown_list_webhooks",
"mcp__buttondown__buttondown_list_events"
],
"ask": [
"mcp__buttondown__buttondown_add_subscriber",
"mcp__buttondown__buttondown_create_email_draft",
"mcp__buttondown__buttondown_create_tag"
],
"deny": [
"mcp__buttondown__buttondown_update_subscriber",
"mcp__buttondown__buttondown_update_email_draft"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as buttondown. Review it before you use it.