BetterPost

BetterPost is a writing tool your agent can call.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeCan modify data

What it can do

  • 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
  • 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 h
  • Betterpost Derive Content: Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic.

What data it sees

Do you need an account

No: the server works without sign-in

BetterPost is a writing tool your agent can call. Give it a topic or a project, and it finds timely sources across news, social, and the open web, keeps only what's recent and relevant, ranks it, and writes the post — a newsletter, a blog post, a LinkedIn update, an X or Bluesky thread. The writing sounds like a person wrote it, and every draft is grounded in real, dated sources you can check, each with a link. You direct it from the chatbot or coding agent you already use; BetterPost does the research and the draft, and you read something worth publishing. Works as a remote MCP server in Claude, ChatGPT, Gemini, Cursor, VS Code, and more. The first call needs no signup and no key — your agent gets ten free generations, then you sign in and buy credits to keep going. Pay only for what you write: a failed generation isn't charged, and reading your own work is always free.

How to connect

How to connect BetterPost to Claude

The server address to paste into Claude settings:

https://betterpost--betterpost.run.tools

  1. Open Claude (claude.ai or the desktop app).
  2. Go to Settings → Connectors.
  3. Click Add custom connector.
  4. Paste the server address copied below into Remote MCP server URL and click Add.
  5. In a chat, click + → Connectors and switch the new connector on.

Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.

Authorization

After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.

How to connect BetterPost to ChatGPT

The server address to paste into ChatGPT settings:

https://betterpost--betterpost.run.tools

  1. Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
  2. Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
  3. Open Settings → Connectors and click Create.
  4. Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
  5. Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
  6. In a new chat open + → Apps/Connectors and enable the connector.

OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.

Authorization

On first use ChatGPT opens the service's sign-in window. Sign in and approve access.

How to connect BetterPost to Cursor

The server address to paste into Cursor settings:

https://betterpost--betterpost.run.tools

Fastest: click Open in Cursor below and confirm the prompt.

Manually:

  1. In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
  2. Paste the JSON copied below into ~/.cursor/mcp.json (per project: .cursor/mcp.json in the repo root).
  3. Save the file. The server appears in the MCP list; authorize it there if asked.

Authorization

If the service needs sign-in, an authorize button appears next to the server in the MCP list.

Server tool list (22)

Raw names from tools/list. Only developers need these.

betterpost_create_projectCreate 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_generate_contentGenerate 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_derive_contentTransform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic.
betterpost_list_contentList a project's content (summaries + shareable `publicUrl` links).
betterpost_get_contentFetch one piece of content in full.
betterpost_delete_contentDelete a piece of content and its hosted images.
betterpost_list_projectsReturns your projects, each with its relevance `criteria` (with ids) that define what counts as on-topic.
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).
betterpost_update_projectUpdates 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_delete_projectPermanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone.
betterpost_list_sourcesReturns 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_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 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_remove_sourceRemoves a source from a project. Its already-gathered stories stay; the source is no longer fetched.
betterpost_list_storiesReturns a project's gathered stories, each with `title`, `url`, `summary`, `relevancy`, `publicationDate`, and `isManual`/`isHidden` flags. Pass includeHidden to include hidden ones.
betterpost_add_storyManually imports a story you read about from its URL (pinned relevance, flagged is_manual) so generation can draw on it.
betterpost_hide_storyHides a story so generation ignores it. Reversible with unhide_story.
betterpost_unhide_storyUnhides a previously hidden story so generation can use it again.
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 fresh stories) in the process. Returns topics you can offer the user before generate_content.
betterpost_get_usageDemo generations remaining, or paid credit balance + recent spend.
betterpost_get_settingsReturns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).
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). Project-wide preferences (title/audience/tone, project-wide additionalInstructions) live on betterpost_update_project.
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. 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.