mcpbeat

BetterPost MCP Server

ai.betterpost/server
answering

BetterPost is answering right now. Last checked 6 min ago. It exposes 23 tools. Last commit 27 Jul 2026.

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

Uptime history 40 hours of history
40 hours agonow
100.0%
Uptime 24h
91 of 91 checks
23
Tools
read from the server
351 ms
Response time
average over 24h
0
Stars
last commit 27 Jul 2026

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 6 min ago.

run in your terminal
claude mcp add server --transport http https://betterpost.ai/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "server": {
      "url": "https://betterpost.ai/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.server]
url = "https://betterpost.ai/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "server": {
      "url": "https://betterpost.ai/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "server": {
      "url": "https://betterpost.ai/mcp"
    }
  }
}

Available tools 23

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

betterpost
betterpost_add_source
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`).
betterpost_add_story
Manually imports a story you read about from its URL (pinned relevance, flagged is_manual) so generation can draw on it.
betterpost_create_project
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.
betterpost_delete_content
Delete a piece of content and its hosted images.
betterpost_delete_project
Permanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone.
betterpost_derive_content
Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic.
betterpost_expand_coverage
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.
betterpost_generate_content
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.
betterpost_get_content
Fetch one piece of content in full.
betterpost_get_project
Returns one project with its relevance `criteria` (each with an id, so a criterion can be targeted for removal via betterpost_update_project).
betterpost_get_settings
Returns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).
betterpost_get_usage
Your credit balance, freeze state, and recent spend.
betterpost_hide_story
Hides a story so generation ignores it. Reversible with unhide_story.
betterpost_humanize
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.
betterpost_list_content
List a project's content (summaries + shareable `publicUrl` links).
betterpost_list_projects
Returns your projects, each with its relevance `criteria` (with ids) that define what counts as on-topic.
betterpost_list_sources
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.
betterpost_list_stories
Returns a project's gathered stories, each with `title`, `url`, `summary`, `relevancy`, `publicationDate`, and `isManual`/`isHidden` flags. Pass includeHidden to include hidden ones.
betterpost_remove_source
Removes a source from a project. Its already-gathered stories stay; the source is no longer fetched.
betterpost_suggest_topics
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.
betterpost_unhide_story
Unhides a previously hidden story so generation can use it again.
betterpost_update_project
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.
betterpost_update_settings
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.

Endpoints

URLTransportStateLatencyChecked
https://betterpost.ai/mcp streamable-http answering 465 ms 6 min ago

BetterPost — questions

Answers built from our own checks of this server.

What can BetterPost do?
It exposes 23 tools, read directly from the server on our last check. Among them: betterpost_add_source, betterpost_add_story, betterpost_create_project, betterpost_delete_content, betterpost_delete_project, betterpost_derive_content and 17 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is BetterPost working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 351 ms. The bar chart above shows every period we have measured.
How do I connect BetterPost?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does BetterPost need an API key?
No. BetterPost completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 23 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is BetterPost?
It answers our handshake in 351 ms on average, which is faster than 40% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is BetterPost open source?
Yes — it is published under the MIT licence, written in JavaScript and 0 stars on GitHub. The source link is on this page, so you can read exactly what it does with your data before you connect it.