Skip to content

BetterPost

by betterpost.ai · remote · no sign-in to list tools · v2.0.0 · published by ai.betterpost

Finds timely sources across news, social, and the web and writes posts worth publishing.

Deletes · 3Changes · 12

23 tools: 3 can delete or cancel things, 12 change things and 8 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http betterpost https://betterpost.ai/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

23 tools

Deletes or cancels 3Claude Code: deny
  • betterpost_delete_contentDelete a piece of content and its hosted images.No findings

    Why it is in this group

    • The name "betterpost_delete_content" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Delete a piece of content and its hosted images.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • betterpost_delete_projectPermanently deletes a project and everything in it — its sources, stories, and content.No findings

    Why it is in this group

    • The name "betterpost_delete_project" says "delete": a word for removing or ending something.
    • The description says "Permanently deletes".
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Permanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • betterpost_remove_sourceRemoves a source from a project.No findings

    Why it is in this group

    • The name "betterpost_remove_source" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Removes a source from a project. Its already-gathered stories stay; the source is no longer fetched.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
Changes things 12Claude Code: ask
  • betterpost_add_sourceAdds a source to a project and fetches it immediately (bounded by a few seconds), returning `storiesAdded` so the next generate_content can use it; if it is still fetching it retur…No findings

    Why it is in this group

    • The name "betterpost_add_source" says "add": a word for a change.
    Description, as the server wrote it
    Adds a source to a project and fetches it immediately (bounded by a few seconds), returning `storiesAdded` so the next generate_content can use it; if it is still fetching it returns `fetched:false` with a note. Doubles as manual source import: paste any URL (RSS/Atom feed, article, or a page, profile, or post on a supported platform) and leave `type` as autodetect, or create a recurring keyword search by setting `value` to the search terms and `type` to a search kind (see `type`).

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • betterpost_add_storyManually imports a story you read about from its URL (pinned relevance, flagged is_manual) so generation can draw on it.No findings

    Why it is in this group

    • The name "betterpost_add_story" says "add": a word for a change.
    Description, as the server wrote it
    Manually imports a story you read about from its URL (pinned relevance, flagged is_manual) so generation can draw on it.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • betterpost_create_projectCreate a content project.No findings

    Why it is in this group

    • The name "betterpost_create_project" says "create": a word for a change.
    Description, as the server wrote it
    Create a content project. Slow, one-shot: infers config (criteria, industry, tone), discovers sources, and gathers/ranks an initial set of timely stories. Best called after the inferred audience, description, and tone have been confirmed with the user, since the config shapes everything downstream.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • betterpost_derive_contentTransform an existing piece into another format (e.g.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • betterpost_expand_coverageBroadens a project's coverage: expands the relevance criteria (when needed), finds more sources across news, the web, and the relevant social platforms, and fetches them inline.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Broadens a project's coverage: expands the relevance criteria (when needed), finds more sources across news, the web, and the relevant social platforms, and fetches them inline. Applies on a `topic_unavailable`, `no_stories`, or low-coverage signal. May return `warming: true` with `retryAfterMs` (~60s), meaning the newly gathered stories are still landing. An out-of-scope `focus` requires `confirmedByUser: true`; without it, it returns a `confirmation_required` error. No credits are charged.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • betterpost_generate_contentGenerate a new piece of content for a project from its timely, relevant stories.No findings

    Why it is in this group

    • The name "betterpost_generate_content" says "generate": a word for a change.
    Description, as the server wrote it
    Generate a new piece of content for a project from its timely, relevant stories. Fast in steady state. Charges credits on success only. If you pass a `topic` the project has no stories about, this returns a `topic_unavailable` error (no charge) carrying an `inScope` flag and next steps — it never silently writes an off-topic piece.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • betterpost_hide_storyHides a story so generation ignores it.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Hides a story so generation ignores it. Reversible with unhide_story.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • betterpost_humanizeRewrite existing text into BetterPost's readable, human voice.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Rewrite existing text into BetterPost's readable, human voice. Preserves the meaning, facts, links, and format; returns the rewritten text plus short notes on what changed. Pass `projectId` to write in that project's tone and instructions, `type` to apply a channel's style, or `tone` to set the voice directly.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • betterpost_suggest_topicsClusters a project's current stories into a few candidate angles — each with a label, how many stories back it, and example headlines — and warms the project (gathers and ranks fre…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Clusters a project's current stories into a few candidate angles — each with a label, how many stories back it, and example headlines — and warms the project (gathers and ranks fresh stories) in the process. Returns topics you can offer the user before generate_content.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • betterpost_unhide_storyUnhides a previously hidden story so generation can use it again.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Unhides a previously hidden story so generation can use it again.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • betterpost_update_projectUpdates a project's title, audience, description, tone, freshness window, timezone, or relevance criteria, and returns the updated project with its criteria.No findings

    Why it is in this group

    • The name "betterpost_update_project" says "update": a word for a change.
    Description, as the server wrote it
    Updates a project's title, audience, description, tone, freshness window, timezone, or relevance criteria, and returns the updated project with its criteria. Changing title/audience/description re-derives the relevance criteria (replace-all), which broadens or narrows what counts as on-topic. To edit criteria incrementally instead, pass `patch.addCriteria` (texts to append) and/or `patch.removeCriteria` (criterion ids from get_project/list_projects). Dates default to US Eastern unless a `timezone` (an IANA name like "America/New_York") is set.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • betterpost_update_settingsPatches one content type's wordLimit and/or additionalInstructions (free-form writing guidance for that type; pass an empty string to clear it).No findings

    Why it is in this group

    • The name "betterpost_update_settings" says "update": a word for a change.
    Description, as the server wrote it
    Patches one content type's wordLimit and/or additionalInstructions (free-form writing guidance for that type; pass an empty string to clear it). Project-wide preferences (title/audience/tone, project-wide additionalInstructions) live on betterpost_update_project.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 8Claude Code: allow
  • betterpost_get_contentFetch one piece of content in full.No findings

    Why it is in this group

    • The name "betterpost_get_content" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one piece of content in full.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • betterpost_get_projectReturns one project with its relevance `criteria` (each with an id, so a criterion can be targeted for removal via betterpost_update_project).No findings

    Why it is in this group

    • The name "betterpost_get_project" says "get": a word for reading.
    Description, as the server wrote it
    Returns one project with its relevance `criteria` (each with an id, so a criterion can be targeted for removal via betterpost_update_project).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • betterpost_get_settingsReturns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).No findings

    Why it is in this group

    • The name "betterpost_get_settings" says "get": a word for reading.
    Description, as the server wrote it
    Returns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • betterpost_get_usageYour credit balance, freeze state, and recent spend.No findings

    Why it is in this group

    • The name "betterpost_get_usage" says "get": a word for reading.
    Description, as the server wrote it
    Your credit balance, freeze state, and recent spend.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • betterpost_list_contentList a project's content (summaries + shareable `publicUrl` links).No findings

    Why it is in this group

    • The name "betterpost_list_content" says "list": a word for reading.
    Description, as the server wrote it
    List a project's content (summaries + shareable `publicUrl` links).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • betterpost_list_projectsReturns your projects, each with its relevance `criteria` (with ids) that define what counts as on-topic.No findings

    Why it is in this group

    • The name "betterpost_list_projects" says "list": a word for reading.
    Description, as the server wrote it
    Returns your projects, each with its relevance `criteria` (with ids) that define what counts as on-topic.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • betterpost_list_sourcesReturns one slimmed page of a project's sources plus project-wide `total` and `counts` (ok/failing/disabled/pending, and byType).No findings

    Why it is in this group

    • The name "betterpost_list_sources" says "list": a word for reading.
    Description, as the server wrote it
    Returns one slimmed page of a project's sources plus project-wide `total` and `counts` (ok/failing/disabled/pending, and byType). Page with `limit` (default 50) and `offset`, following the returned `nextOffset` until it is null.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • betterpost_list_storiesReturns a project's gathered stories, each with `title`, `url`, `summary`, `relevancy`, `publicationDate`, and `isManual`/`isHidden` flags.No findings

    Why it is in this group

    • The name "betterpost_list_stories" says "list": a word for reading.
    Description, as the server wrote it
    Returns a project's gathered stories, each with `title`, `url`, `summary`, `relevancy`, `publicationDate`, and `isManual`/`isHidden` flags. Pass includeHidden to include hidden ones.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false

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 2.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http betterpost https://betterpost.ai/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__betterpost__betterpost_list_content",
      "mcp__betterpost__betterpost_get_content",
      "mcp__betterpost__betterpost_list_projects",
      "mcp__betterpost__betterpost_get_project",
      "mcp__betterpost__betterpost_list_sources",
      "mcp__betterpost__betterpost_list_stories",
      "mcp__betterpost__betterpost_get_usage",
      "mcp__betterpost__betterpost_get_settings"
    ],
    "ask": [
      "mcp__betterpost__betterpost_create_project",
      "mcp__betterpost__betterpost_generate_content",
      "mcp__betterpost__betterpost_derive_content",
      "mcp__betterpost__betterpost_update_project",
      "mcp__betterpost__betterpost_add_source",
      "mcp__betterpost__betterpost_add_story",
      "mcp__betterpost__betterpost_hide_story",
      "mcp__betterpost__betterpost_unhide_story",
      "mcp__betterpost__betterpost_suggest_topics",
      "mcp__betterpost__betterpost_update_settings",
      "mcp__betterpost__betterpost_expand_coverage",
      "mcp__betterpost__betterpost_humanize"
    ],
    "deny": [
      "mcp__betterpost__betterpost_delete_content",
      "mcp__betterpost__betterpost_delete_project",
      "mcp__betterpost__betterpost_remove_source"
    ]
  }
}

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 betterpost. Review it before you use it.