BetterPost is a remote MCP server that gives an AI agent 23 tools, among them betterpost_add_source, betterpost_add_story, betterpost_create_project. It answers at https://betterpost.ai/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 10 of 10 times since 4 September 2026; the last check, on 17 October 2026, succeeded.
Finds timely sources across news, social, and the web and writes posts worth publishing.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
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 imp Inputs: projectId, value, name, 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. Inputs: projectId, url, title, summary |
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 wi Inputs: title, audience, description, tone |
betterpost_delete_content | Delete a piece of content and its hosted images. Inputs: contentId |
betterpost_delete_project | Permanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone. Inputs: projectId |
betterpost_derive_content | Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic. Inputs: fromContentId, type, tieIn |
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-coverag Inputs: projectId, focus, addAsCriteria, confirmedByUser |
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 cha Inputs: projectId, type, topic, reuse, tieIn, wordLimit |
betterpost_get_content | Fetch one piece of content in full. Inputs: contentId |
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). Inputs: projectId |
betterpost_get_settings | Returns a project's per-content-type settings (wordLimit and additionalInstructions for each channel). Inputs: projectId |
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. Inputs: storyId |
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, Inputs: text, projectId, type, tone |
betterpost_list_content | List a project's content (summaries + shareable `publicUrl` links). Inputs: projectId |
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. Inputs: projectId, limit, offset |
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. Inputs: projectId, includeHidden |
betterpost_remove_source | Removes a source from a project. Its already-gathered stories stay; the source is no longer fetched. Inputs: sourceId |
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 Inputs: projectId, type, count |
betterpost_unhide_story | Unhides a previously hidden story so generation can use it again. Inputs: storyId |
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 Inputs: projectId, patch |
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 bet Inputs: projectId, type, wordLimit, additionalInstructions |
Every block below points at https://betterpost.ai/mcp. Pick your client and copy.
claude mcp add --transport http betterpost https://betterpost.ai/mcp
{
"mcpServers": {
"betterpost": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://betterpost.ai/mcp"]
}
}
}{
"mcpServers": {
"betterpost": {
"url": "https://betterpost.ai/mcp"
}
}
}{
"servers": {
"betterpost": {
"type": "http",
"url": "https://betterpost.ai/mcp"
}
}
}{
"context_servers": {
"betterpost": {
"url": "https://betterpost.ai/mcp"
}
}
}{
"mcpServers": {
"betterpost": {
"serverUrl": "https://betterpost.ai/mcp"
}
}
}{
"mcpServers": {
"betterpost": {
"url": "https://betterpost.ai/mcp"
}
}
}name: BetterPost
version: 0.0.1
schema: v1
mcpServers:
- name: BetterPost
type: streamable-http
url: https://betterpost.ai/mcp{
"mcpServers": {
"betterpost": {
"httpUrl": "https://betterpost.ai/mcp"
}
}
}{
"mcpServers": {
"betterpost": {
"type": "http",
"url": "https://betterpost.ai/mcp"
}
}
}{
"mcpServers": {
"betterpost": {
"url": "https://betterpost.ai/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fbetterpost.ai%2Fmcp&type=streamable_http&id=betterpost&name=BetterPost
It answered our last check on 17 October 2026 in 213 ms. Over 10 checks since 4 September 2026 it answered 10. Status here comes from Neuronto's own probes, not from the publisher.
Yes. It is published by betterpost.ai and served from betterpost.ai, the vendor's own domain: https://betterpost.ai/mcp.
23, as returned by the server's own tools/list on 7 September 2026: betterpost_add_source, betterpost_add_story, betterpost_create_project, betterpost_delete_content, betterpost_delete_project, betterpost_derive_content, betterpost_expand_coverage, betterpost_generate_content, and 15 more.
It answered our last check on 17 October 2026 in 213 ms. Over 10 checks since 4 September 2026 it answered 10.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://betterpost.ai/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: ai.betterpost. Endpoint host: betterpost.ai. ARD identifier: urn:air:ai.betterpost:mcp:server.
First indexed 31 August 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.