BetterPost

ai.betterpostPublished by betterpost.aiOfficial publisherv2.0.0Updated Oct 25, 2026

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

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingMedia & Design

Overview

AI-generated overview

BetterPost is a hosted MCP server that finds timely news, social and web sources and writes sourced newsletters, blog posts and social posts for a project.

What you can do
Create and manage content projects, including audience, tone, freshness window and relevance criteria, and broaden their source coverage when stories are thin or off-topic. Add, list and remove sources, and list, add, hide or unhide the stories gathered from them. Suggest topic angles from current stories and generate new content grounded in them. Derive other formats from an existing piece, such as a newsletter into a tweet. List, read and delete generated content, and adjust per-channel word limits and writing instructions. Check credit balance, freeze state and recent spend, and rewrite existing text in a more human voice.
When to use it
Use it when you want an assistant to draft publishable, citation-backed content about current developments in a product's space, or to keep a recurring newsletter or social posting workflow fed with fresh, ranked sources.
Requirements
A remote Streamable HTTP endpoint; no local package or runtime. A BetterPost account, signed in through OAuth 2.1 on first use, with no token to copy. Network access to the hosted service.
Before you install
Generation charges credits on success, and new accounts start with free credits, so usage can cost money; check the balance with the usage tool. Deleting a project permanently removes its sources, stories and content, and deleting content also removes its hosted images. Content is published to shareable public links. The service fetches and ranks sources from news, social and the open web on your behalf.

Installation

In SourceWeft

  1. Open BetterPost in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/ai.betterpost%2Fserver/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "betterpost": {
      "type": "http",
      "url": "https://betterpost.ai/mcp"
    }
  }
}

README

BetterPost — agent plugin and skill

Write timely, well-sourced content — newsletters, blog posts, LinkedIn posts, tweets, and Bluesky posts — grounded in current sources across news, social, and the open web. BetterPost finds recent sources relevant to your product and audience, ranks them by relevance, and writes human-sounding content with real citations and publication dates.

Works in the agents you already use, through a single MCP server. Free to start — sign in with your BetterPost account to get free credits.

Install

Any agent

npx skills add betterpost/betterpost-plugin

This installs the betterpost skill into whichever agent you use. It does not configure the MCP server — the skill walks your agent through registering https://betterpost.ai/mcp the first time you ask for content.

Claude Code

/plugin marketplace add betterpost/betterpost-plugin/plugin install betterpost@betterpost

This installs the skill and registers the MCP server for you.

Either way, ask your agent to write a newsletter or post about what's happening in your space. It sets up a project and generates content grounded in current sources.

What's in here

  • skills/betterpost/SKILL.md — the skill your agent invokes.
  • .mcp.json — registers the hosted BetterPost MCP server.
  • .claude-plugin/ — the plugin manifest and self-listed marketplace.
  • .codex-plugin/, .cursor-plugin/, .kimi-plugin/, .agents/, .opencode/, .pi/, gemini-extension.json — manifests for the other agents.

Using the server directly

Any MCP client can connect to https://betterpost.ai (Streamable HTTP). On first use, the client prompts you to sign in with your BetterPost account (OAuth 2.1) and handles the session for you — there's no token to copy or persist. New accounts get free credits on sign-up.

Links

License

MIT

Source: README.md at commit 071e14f

Tools

23

betterpost_create_project

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.

Parameterstonetitlerequiredaudiencerequireddescription

betterpost_generate_content

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.

ParameterstyperequiredreusetieIntopicprojectIdrequiredwordLimit

betterpost_derive_content

Derive content

Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic.

ParameterstyperequiredtieInfromContentIdrequired

betterpost_list_content

List content

List a project's content (summaries + shareable `publicUrl` links).

ParametersprojectIdrequired

betterpost_get_content

Get content

Fetch one piece of content in full.

ParameterscontentIdrequired

betterpost_delete_content

Delete content

Delete a piece of content and its hosted images.

ParameterscontentIdrequired

betterpost_list_projects

List projects

Returns your projects, each with its relevance `criteria` (with ids) that define what counts as on-topic.

Takes no parameters.

betterpost_get_project

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).

ParametersprojectIdrequired

betterpost_update_project

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.

ParameterspatchprojectIdrequired

betterpost_delete_project

Delete project

Permanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone.

ParametersprojectIdrequired

betterpost_list_sources

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.

ParameterslimitoffsetprojectIdrequired

betterpost_add_source

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`).

ParametersnametypevaluerequiredprojectIdrequired

betterpost_remove_source

Remove source

Removes a source from a project. Its already-gathered stories stay; the source is no longer fetched.

ParameterssourceIdrequired

betterpost_list_stories

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.

ParametersprojectIdrequiredincludeHidden

betterpost_add_story

Add story

Manually imports a story you read about from its URL (pinned relevance, flagged is_manual) so generation can draw on it.

ParametersurlrequiredtitlesummaryprojectIdrequired

betterpost_hide_story

Hide story

Hides a story so generation ignores it. Reversible with unhide_story.

ParametersstoryIdrequired

betterpost_unhide_story

Unhide story

Unhides a previously hidden story so generation can use it again.

ParametersstoryIdrequired

betterpost_suggest_topics

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.

ParameterstypecountprojectIdrequired

betterpost_get_usage

Get usage

Your credit balance, freeze state, and recent spend.

Takes no parameters.

betterpost_get_settings

Get settings

Returns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).

ParametersprojectIdrequired

betterpost_update_settings

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.

ParameterstyperequiredprojectIdrequiredwordLimitadditionalInstructions

betterpost_expand_coverage

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.

ParametersfocusprojectIdrequiredaddAsCriteriaconfirmedByUser

betterpost_humanize

Humanize text

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.

ParameterstextrequiredtonetypeprojectId

Version history

1
  1. v2.0.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts