BetterPost
Server Details
Finds timely sources across news, social, and the web and writes posts worth publishing.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- betterpost/betterpost-plugin
- GitHub Stars
- 0
- Server Listing
- BetterPost
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4/5 across 22 of 22 tools scored. Lowest: 2.9/5.
Each tool serves a clearly distinct function: source management, story import, project lifecycle, content generation/derivation, settings, and status checks. No two tools have ambiguous overlap, as even similar operations like add_source vs add_story are differentiated by source type.
All tools follow the consistent pattern `betterpost_<verb>_<noun>` in snake_case, making the set predictable and easy to navigate. The verbs are descriptive (add, create, delete, list, get, generate, etc.) and adhere to a uniform style.
With 22 tools, the surface is comprehensive for a content generation platform, covering all major operations without being overwhelming. The count is slightly above the typical 3–15 range but well-justified by the domain's complexity.
The tool surface covers the full lifecycle: project CRUD, source and story management, content generation and transformation, settings, usage tracking, and advanced operations like topic suggestion and coverage expansion. No obvious gaps exist for the intended use case.
Available Tools
23 toolsbetterpost_add_sourceAdd sourceInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | No | Source kind (one of the enum values; defaults to 'autodetect'). 'autodetect' infers the kind from `value` (a URL): RSS/Atom feeds, web pages, news, Reddit subreddits, X and Bluesky posts/users, LinkedIn company pages, Instagram profiles, YouTube videos, and Hacker News items — leave it as 'autodetect' for any URL. For a recurring keyword search that re-runs over time, set `value` to the search terms and pick a search kind: 'web-search', 'reddit-search', 'youtube-search', 'x' (X/Twitter search), or 'bluesky' (Bluesky search). | autodetect |
| value | Yes | ||
| projectId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| source | Yes | |
| fetched | Yes | |
| storiesAdded | Yes |
betterpost_add_storyAdd storyInspect
Manually imports a story you read about from its URL (pinned relevance, flagged is_manual) so generation can draw on it.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| title | No | ||
| summary | No | ||
| projectId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| storyId | Yes |
betterpost_create_projectCreate projectInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | ||
| title | Yes | ||
| audience | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tone | Yes | |
| reason | No | |
| warming | Yes | |
| criteria | Yes | |
| industry | Yes | |
| projectId | Yes | |
| hasXSource | Yes | |
| storiesGot | Yes | |
| storiesGoal | Yes |
betterpost_delete_contentDelete contentDestructiveIdempotentInspect
Delete a piece of content and its hosted images.
| Name | Required | Description | Default |
|---|---|---|---|
| contentId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes |
betterpost_delete_projectDelete projectDestructiveIdempotentInspect
Permanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes |
betterpost_derive_contentDerive contentInspect
Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| tieIn | No | ||
| fromContentId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | |
| topic | Yes | |
| content | Yes | The generated content. Fields present depend on `type`. |
| summary | Yes | |
| contentId | Yes | |
| publicUrl | Yes | |
| storyCount | Yes | |
| imagesHosted | Yes | |
| creditsCharged | Yes |
betterpost_expand_coverageExpand coverageInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | The topic to get more on (e.g. "League of Legends"). Omit to broaden the whole project. | |
| projectId | Yes | ||
| addAsCriteria | No | Also append an in-scope `focus` as a standing relevance criterion (out-of-scope, confirmed foci are added automatically). | |
| confirmedByUser | No | Set true once the user has agreed to widen the project to an out-of-scope `focus`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| warming | Yes | |
| retryAfterMs | Yes | |
| sourcesAdded | Yes | |
| storiesAdded | Yes | |
| criteriaAdded | Yes |
betterpost_generate_contentGenerate contentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Output format. 'x' and 'bluesky' are generated as a single post or, more often, a short numbered thread of connected posts (multiple tweets) when there is enough to say — this is the default for those channels. 'blog', 'newsletter', and 'linkedin' are one piece. | |
| reuse | No | Reuse the most recent topic. | |
| tieIn | No | A product/service to weave in. | |
| topic | No | Steer the piece to a specific topic. Generation only writes from stories actually about it. If none exist yet, it returns topic_unavailable (no charge) with an inScope flag: inScope:true means the topic fits the project and betterpost_expand_coverage can gather it, while inScope:false means it is outside the project scope so expanding to it requires the user's confirmation. | |
| projectId | Yes | ||
| wordLimit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | |
| topic | Yes | |
| content | Yes | The generated content. Fields present depend on `type`. |
| summary | Yes | |
| contentId | Yes | |
| publicUrl | Yes | |
| storyCount | Yes | |
| imagesHosted | Yes | |
| creditsCharged | Yes |
betterpost_get_contentGet contentRead-onlyInspect
Fetch one piece of content in full.
| Name | Required | Description | Default |
|---|---|---|---|
| contentId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| type | Yes | |
| content | Yes | The generated content. Fields present depend on `type`. |
| summary | Yes | |
| topicId | Yes | |
| createdAt | Yes | ISO 8601 datetime string |
| projectId | Yes | |
| publicUrl | Yes | |
| wordLimit | Yes | |
| storyCount | Yes | |
| derivedFromContentId | Yes |
betterpost_get_projectGet projectRead-onlyInspect
Returns one project with its relevance criteria (each with an id, so a criterion can be targeted for removal via betterpost_update_project).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| tone | Yes | |
| title | Yes | |
| status | Yes | |
| audience | Yes | |
| criteria | Yes | |
| industry | Yes | |
| timezone | Yes | |
| createdAt | Yes | ISO 8601 datetime string |
| updatedAt | Yes | ISO 8601 datetime string |
| hasXSource | Yes | |
| description | Yes | |
| maxStoryAgeDays | Yes | |
| additionalInstructions | Yes |
betterpost_get_settingsGet settingsRead-onlyInspect
Returns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| contentTypeSettings | Yes |
betterpost_get_usageGet usageRead-onlyInspect
Your credit balance, freeze state, and recent spend.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| frozen | Yes | |
| creditBalance | Yes | |
| recentSpendUsd | Yes |
betterpost_hide_storyHide storyIdempotentInspect
Hides a story so generation ignores it. Reversible with unhide_story.
| Name | Required | Description | Default |
|---|---|---|---|
| storyId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| hidden | Yes | |
| storyId | Yes |
betterpost_humanizeHumanize textInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to humanize (max 30,000 characters). | |
| tone | No | Tone override; wins over the project tone. | |
| type | No | Apply this channel's style rules to the rewrite. | |
| projectId | No | Use this project's tone and writing instructions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | The rewritten text, a drop-in replacement for the input |
| changes | Yes | Short notes on the main edits made |
| inputWords | Yes | |
| creditsCharged | Yes |
betterpost_list_contentList contentRead-onlyInspect
List a project's content (summaries + shareable publicUrl links).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
betterpost_list_projectsList projectsRead-onlyInspect
Returns your projects, each with its relevance criteria (with ids) that define what counts as on-topic.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| projects | Yes |
betterpost_list_sourcesList sourcesRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max sources to return (default 50). | |
| offset | No | Number of sources to skip; use the returned nextOffset to page. | |
| projectId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | |
| total | Yes | |
| counts | Yes | |
| offset | Yes | |
| sources | Yes | |
| returned | Yes | |
| nextOffset | Yes |
betterpost_list_storiesList storiesRead-onlyInspect
Returns a project's gathered stories, each with title, url, summary, relevancy, publicationDate, and isManual/isHidden flags. Pass includeHidden to include hidden ones.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| includeHidden | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| stories | Yes |
betterpost_remove_sourceRemove sourceDestructiveIdempotentInspect
Removes a source from a project. Its already-gathered stories stay; the source is no longer fetched.
| Name | Required | Description | Default |
|---|---|---|---|
| sourceId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| removed | Yes |
betterpost_suggest_topicsSuggest topicsInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| count | No | ||
| projectId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| topics | Yes | |
| projectId | Yes |
betterpost_unhide_storyUnhide storyIdempotentInspect
Unhides a previously hidden story so generation can use it again.
| Name | Required | Description | Default |
|---|---|---|---|
| storyId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| hidden | Yes | |
| storyId | Yes |
betterpost_update_projectUpdate projectInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | No | Partial update: EVERY field is optional — include only the fields you want to change and omit the rest (an omitted field is left untouched; there are no required patch fields). Passing an empty object or omitting `patch` entirely is a no-op. Fields: title, audience, description, tone, maxStoryAgeDays, additionalInstructions, timezone, addCriteria, removeCriteria. | |
| projectId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| tone | Yes | |
| title | Yes | |
| status | Yes | |
| audience | Yes | |
| criteria | Yes | |
| industry | Yes | |
| timezone | Yes | |
| createdAt | Yes | ISO 8601 datetime string |
| updatedAt | Yes | ISO 8601 datetime string |
| hasXSource | Yes | |
| description | Yes | |
| maxStoryAgeDays | Yes | |
| additionalInstructions | Yes |
betterpost_update_settingsUpdate settingsIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| projectId | Yes | ||
| wordLimit | No | ||
| additionalInstructions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| updated | Yes |
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Your Connectors
Sign in to create a connector for this server.