Server definition
- Hash
- sha256:384b614f58fa4e59a5e82c36eac2237823fd9dd4e5b48783a9995d2f406e8348
- What it is
- What a remote MCP server returned when asked what it offers: 23 tools
The blob, as servednamed by its sha256
{
"instructions": "BetterPost: generate timely, well-sourced content. Create a project, then generate content for it. Sign in with your BetterPost account when prompted — new accounts start with 100 free credits, and your projects and content stay linked to your account automatically. Before generating, you can call betterpost_suggest_topics {projectId, type} to get a few candidate angles, then ask the user whether they want a specific one (like those) or just the latest news — pass their choice as generate_content's `topic`, or omit `topic` for the latest news.",
"tools": [
{
"description": "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`).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"type": "string"
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"type": {
"default": "autodetect",
"description": "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).",
"enum": [
"autodetect",
"web-search",
"reddit-search",
"youtube-search",
"x",
"bluesky"
],
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"projectId",
"value"
],
"type": "object"
},
"name": "betterpost_add_source",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"fetched": {
"type": "boolean"
},
"note": {
"type": "string"
},
"source": {
"additionalProperties": false,
"properties": {
"createdAt": {
"description": "ISO 8601 datetime string"
},
"disabled": {
"type": "boolean"
},
"failStreak": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"lastFetchError": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"lastFetchSuccess": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"lastFetchedAt": {
"description": "ISO 8601 datetime string"
},
"name": {
"type": "string"
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"type": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"id",
"projectId",
"name",
"type",
"value",
"lastFetchedAt",
"lastFetchSuccess",
"lastFetchError",
"failStreak",
"disabled",
"createdAt"
],
"type": "object"
},
"storiesAdded": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"source",
"fetched",
"storiesAdded"
],
"type": "object"
}
},
{
"description": "Manually imports a story you read about from its URL (pinned relevance, flagged is_manual) so generation can draw on it.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"summary": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"format": "uri",
"type": "string"
}
},
"required": [
"projectId",
"url"
],
"type": "object"
},
"name": "betterpost_add_story",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"storyId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"storyId"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"audience": {
"minLength": 1,
"type": "string"
},
"description": {
"type": "string"
},
"title": {
"minLength": 1,
"type": "string"
},
"tone": {
"type": "string"
}
},
"required": [
"title",
"audience"
],
"type": "object"
},
"name": "betterpost_create_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"criteria": {
"items": {
"type": "string"
},
"type": "array"
},
"hasXSource": {
"type": "boolean"
},
"industry": {
"type": "string"
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"reason": {
"type": "string"
},
"storiesGoal": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"storiesGot": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"tone": {
"type": "string"
},
"warming": {
"type": "boolean"
}
},
"required": [
"projectId",
"industry",
"tone",
"criteria",
"storiesGot",
"storiesGoal",
"hasXSource",
"warming"
],
"type": "object"
}
},
{
"description": "Delete a piece of content and its hosted images.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contentId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"contentId"
],
"type": "object"
},
"name": "betterpost_delete_content",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"deleted": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"deleted"
],
"type": "object"
}
},
{
"description": "Permanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "betterpost_delete_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"deleted": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"deleted"
],
"type": "object"
}
},
{
"description": "Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fromContentId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"tieIn": {
"type": "string"
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
}
},
"required": [
"fromContentId",
"type"
],
"type": "object"
},
"name": "betterpost_derive_content",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"content": {
"additionalProperties": false,
"description": "The generated content. Fields present depend on `type`.",
"properties": {
"body": {
"type": "string"
},
"content": {
"type": "string"
},
"metaDescription": {
"type": "string"
},
"previewText": {
"type": "string"
},
"subjectLine": {
"type": "string"
},
"title": {
"type": "string"
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
"contentId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"creditsCharged": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"imagesHosted": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"publicUrl": {
"type": "string"
},
"storyCount": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"summary": {
"type": "string"
},
"topic": {
"type": "string"
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
}
},
"required": [
"contentId",
"type",
"content",
"summary",
"publicUrl",
"storyCount",
"topic",
"imagesHosted",
"creditsCharged"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"addAsCriteria": {
"description": "Also append an in-scope `focus` as a standing relevance criterion (out-of-scope, confirmed foci are added automatically).",
"type": "boolean"
},
"confirmedByUser": {
"description": "Set true once the user has agreed to widen the project to an out-of-scope `focus`.",
"type": "boolean"
},
"focus": {
"description": "The topic to get more on (e.g. \"League of Legends\"). Omit to broaden the whole project.",
"type": "string"
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "betterpost_expand_coverage",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"criteriaAdded": {
"items": {
"type": "string"
},
"type": "array"
},
"retryAfterMs": {
"type": "number"
},
"sourcesAdded": {
"items": {
"additionalProperties": false,
"properties": {
"type": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"type",
"value"
],
"type": "object"
},
"type": "array"
},
"storiesAdded": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"warming": {
"type": "boolean"
}
},
"required": [
"criteriaAdded",
"sourcesAdded",
"storiesAdded",
"warming",
"retryAfterMs"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"reuse": {
"description": "Reuse the most recent topic.",
"type": "boolean"
},
"tieIn": {
"description": "A product/service to weave in.",
"type": "string"
},
"topic": {
"description": "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.",
"type": "string"
},
"type": {
"description": "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.",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
},
"wordLimit": {
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"projectId",
"type"
],
"type": "object"
},
"name": "betterpost_generate_content",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"content": {
"additionalProperties": false,
"description": "The generated content. Fields present depend on `type`.",
"properties": {
"body": {
"type": "string"
},
"content": {
"type": "string"
},
"metaDescription": {
"type": "string"
},
"previewText": {
"type": "string"
},
"subjectLine": {
"type": "string"
},
"title": {
"type": "string"
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
"contentId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"creditsCharged": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"imagesHosted": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"publicUrl": {
"type": "string"
},
"storyCount": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"summary": {
"type": "string"
},
"topic": {
"type": "string"
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
}
},
"required": [
"contentId",
"type",
"content",
"summary",
"publicUrl",
"storyCount",
"topic",
"imagesHosted",
"creditsCharged"
],
"type": "object"
}
},
{
"description": "Fetch one piece of content in full.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contentId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"contentId"
],
"type": "object"
},
"name": "betterpost_get_content",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"content": {
"additionalProperties": false,
"description": "The generated content. Fields present depend on `type`.",
"properties": {
"body": {
"type": "string"
},
"content": {
"type": "string"
},
"metaDescription": {
"type": "string"
},
"previewText": {
"type": "string"
},
"subjectLine": {
"type": "string"
},
"title": {
"type": "string"
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
"createdAt": {
"description": "ISO 8601 datetime string"
},
"derivedFromContentId": {
"anyOf": [
{
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"publicUrl": {
"type": "string"
},
"storyCount": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"topicId": {
"anyOf": [
{
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
{
"type": "null"
}
]
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
},
"wordLimit": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"projectId",
"type",
"content",
"summary",
"wordLimit",
"storyCount",
"topicId",
"derivedFromContentId",
"publicUrl",
"createdAt"
],
"type": "object"
}
},
{
"description": "Returns one project with its relevance `criteria` (each with an id, so a criterion can be targeted for removal via betterpost_update_project).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "betterpost_get_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"audience": {
"type": "string"
},
"createdAt": {
"description": "ISO 8601 datetime string"
},
"criteria": {
"items": {
"additionalProperties": false,
"properties": {
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"id",
"text"
],
"type": "object"
},
"type": "array"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"hasXSource": {
"type": "boolean"
},
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"maxStoryAgeDays": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"status": {
"enum": [
"initializing",
"ready"
],
"type": "string"
},
"timezone": {
"type": "string"
},
"title": {
"type": "string"
},
"tone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"updatedAt": {
"description": "ISO 8601 datetime string"
}
},
"required": [
"id",
"title",
"audience",
"description",
"tone",
"industry",
"additionalInstructions",
"maxStoryAgeDays",
"timezone",
"status",
"hasXSource",
"createdAt",
"updatedAt",
"criteria"
],
"type": "object"
}
},
{
"description": "Returns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "betterpost_get_settings",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"contentTypeSettings": {
"items": {
"additionalProperties": false,
"properties": {
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
},
"wordLimit": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
]
}
},
"required": [
"projectId",
"type",
"wordLimit",
"additionalInstructions"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"contentTypeSettings"
],
"type": "object"
}
},
{
"description": "Your credit balance, freeze state, and recent spend.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "betterpost_get_usage",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"creditBalance": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"frozen": {
"type": "boolean"
},
"kind": {
"const": "paid",
"type": "string"
},
"recentSpendUsd": {
"type": "number"
}
},
"required": [
"kind",
"creditBalance",
"frozen",
"recentSpendUsd"
],
"type": "object"
}
},
{
"description": "Hides a story so generation ignores it. Reversible with unhide_story.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"storyId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"storyId"
],
"type": "object"
},
"name": "betterpost_hide_story",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"hidden": {
"type": "boolean"
},
"storyId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"storyId",
"hidden"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"projectId": {
"description": "Use this project's tone and writing instructions.",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"text": {
"description": "The text to humanize (max 30,000 characters).",
"maxLength": 30000,
"minLength": 1,
"type": "string"
},
"tone": {
"description": "Tone override; wins over the project tone.",
"type": "string"
},
"type": {
"description": "Apply this channel's style rules to the rewrite.",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
},
"name": "betterpost_humanize",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"changes": {
"description": "Short notes on the main edits made",
"items": {
"type": "string"
},
"type": "array"
},
"creditsCharged": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"inputWords": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"text": {
"description": "The rewritten text, a drop-in replacement for the input",
"type": "string"
}
},
"required": [
"text",
"changes",
"inputWords",
"creditsCharged"
],
"type": "object"
}
},
{
"description": "List a project's content (summaries + shareable `publicUrl` links).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "betterpost_list_content",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"content": {
"items": {
"additionalProperties": false,
"properties": {
"createdAt": {
"description": "ISO 8601 datetime string"
},
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"publicUrl": {
"type": "string"
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
}
},
"required": [
"id",
"type",
"summary",
"createdAt",
"publicUrl"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"content"
],
"type": "object"
}
},
{
"description": "Returns your projects, each with its relevance `criteria` (with ids) that define what counts as on-topic.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "betterpost_list_projects",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"projects": {
"items": {
"additionalProperties": false,
"properties": {
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"audience": {
"type": "string"
},
"createdAt": {
"description": "ISO 8601 datetime string"
},
"criteria": {
"items": {
"additionalProperties": false,
"properties": {
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"id",
"text"
],
"type": "object"
},
"type": "array"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"hasXSource": {
"type": "boolean"
},
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"maxStoryAgeDays": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"status": {
"enum": [
"initializing",
"ready"
],
"type": "string"
},
"timezone": {
"type": "string"
},
"title": {
"type": "string"
},
"tone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"updatedAt": {
"description": "ISO 8601 datetime string"
}
},
"required": [
"id",
"title",
"audience",
"description",
"tone",
"industry",
"additionalInstructions",
"maxStoryAgeDays",
"timezone",
"status",
"hasXSource",
"createdAt",
"updatedAt",
"criteria"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"projects"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"description": "Max sources to return (default 50).",
"exclusiveMinimum": 0,
"maximum": 200,
"type": "integer"
},
"offset": {
"description": "Number of sources to skip; use the returned nextOffset to page.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "betterpost_list_sources",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"counts": {
"additionalProperties": false,
"properties": {
"byType": {
"additionalProperties": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"disabled": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"failing": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"ok": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"pending": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"ok",
"failing",
"disabled",
"pending",
"byType"
],
"type": "object"
},
"limit": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"nextOffset": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
]
},
"offset": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"returned": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"sources": {
"items": {
"additionalProperties": false,
"properties": {
"disabled": {
"const": true,
"type": "boolean"
},
"failStreak": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"lastFetchError": {
"type": "string"
},
"lastFetchedAt": {
"description": "ISO 8601 datetime string"
},
"name": {
"type": "string"
},
"ok": {
"type": "boolean"
},
"pending": {
"const": true,
"type": "boolean"
},
"type": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"id",
"type",
"value"
],
"type": "object"
},
"type": "array"
},
"total": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"total",
"offset",
"limit",
"returned",
"nextOffset",
"counts",
"sources"
],
"type": "object"
}
},
{
"description": "Returns a project's gathered stories, each with `title`, `url`, `summary`, `relevancy`, `publicationDate`, and `isManual`/`isHidden` flags. Pass includeHidden to include hidden ones.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"includeHidden": {
"type": "boolean"
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "betterpost_list_stories",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"stories": {
"items": {
"additionalProperties": false,
"properties": {
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"contentType": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"createdAt": {
"description": "ISO 8601 datetime string"
},
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"images": {
"items": {
"additionalProperties": false,
"properties": {
"description": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"url",
"description"
],
"type": "object"
},
"type": "array"
},
"isHidden": {
"type": "boolean"
},
"isManual": {
"type": "boolean"
},
"isTimely": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"keyPoints": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
]
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"publicationDate": {
"description": "ISO 8601 datetime string"
},
"quotes": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
]
},
"relevancy": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"sourceId": {
"anyOf": [
{
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"pending",
"ready",
"hidden"
],
"type": "string"
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timelinessReason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"projectId",
"sourceId",
"url",
"title",
"summary",
"keyPoints",
"quotes",
"images",
"relevancy",
"isTimely",
"timelinessReason",
"contentType",
"author",
"publicationDate",
"status",
"isManual",
"isHidden",
"createdAt"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"stories"
],
"type": "object"
}
},
{
"description": "Removes a source from a project. Its already-gathered stories stay; the source is no longer fetched.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"sourceId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"sourceId"
],
"type": "object"
},
"name": "betterpost_remove_source",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"removed": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"removed"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"count": {
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "betterpost_suggest_topics",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"topics": {
"items": {
"additionalProperties": false,
"properties": {
"examples": {
"items": {
"type": "string"
},
"type": "array"
},
"label": {
"type": "string"
},
"storyCount": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"label",
"storyCount",
"examples"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"projectId",
"topics"
],
"type": "object"
}
},
{
"description": "Unhides a previously hidden story so generation can use it again.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"storyId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"storyId"
],
"type": "object"
},
"name": "betterpost_unhide_story",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"hidden": {
"type": "boolean"
},
"storyId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"storyId",
"hidden"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"patch": {
"description": "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.",
"properties": {
"addCriteria": {
"description": "Relevance-criterion texts to APPEND (incremental, never replace-all).",
"items": {
"type": "string"
},
"type": "array"
},
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"audience": {
"type": "string"
},
"description": {
"type": "string"
},
"maxStoryAgeDays": {
"description": "Freshness window in days (default 14, allowed 1–30; 7–14 is optimal). Generation only uses stories newer than this. Widen it toward 30 for slow or evergreen niches where timely stories are sparse and generate_content returns no_stories; narrow it for fast-moving topics.",
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"removeCriteria": {
"description": "Criterion ids (from get_project/list_projects) to remove.",
"items": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"type": "array"
},
"timezone": {
"type": "string"
},
"title": {
"type": "string"
},
"tone": {
"type": "string"
}
},
"type": "object"
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "betterpost_update_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"audience": {
"type": "string"
},
"createdAt": {
"description": "ISO 8601 datetime string"
},
"criteria": {
"items": {
"additionalProperties": false,
"properties": {
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"id",
"text"
],
"type": "object"
},
"type": "array"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"hasXSource": {
"type": "boolean"
},
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"maxStoryAgeDays": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"status": {
"enum": [
"initializing",
"ready"
],
"type": "string"
},
"timezone": {
"type": "string"
},
"title": {
"type": "string"
},
"tone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"updatedAt": {
"description": "ISO 8601 datetime string"
}
},
"required": [
"id",
"title",
"audience",
"description",
"tone",
"industry",
"additionalInstructions",
"maxStoryAgeDays",
"timezone",
"status",
"hasXSource",
"createdAt",
"updatedAt",
"criteria"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
},
"wordLimit": {
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"projectId",
"type"
],
"type": "object"
},
"name": "betterpost_update_settings",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"updated": {
"additionalProperties": false,
"properties": {
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"type": {
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"type": "string"
},
"wordLimit": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"updated"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:384b614f58fa4e59a5e82c36eac2237823fd9dd4e5b48783a9995d2f406e8348 | sha256sum