MCP 服务器

BetterPost

ai.betterpost/server

此 MCP 可以做什么

Gathers timely stories from news, web, and social sources and generates, transforms, and manages publishable content.

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`).
可访问外部资源
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'value'], 'properties': {'name': {'type': 'string'}, 'type': {'enum': ['autodetect', 'web-search', 'reddit-search', 'youtube-search', 'x', 'bluesky'], 'type': 'string', '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 â\x80\x94 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)."}, 'value': {'type': 'string'}, 'projectId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['source', 'fetched', 'storiesAdded'], 'properties': {'note': {'type': 'string'}, 'source': {'type': 'object', 'required': ['id', 'projectId', 'name', 'type', 'value', 'lastFetchedAt', 'lastFetchSuccess', 'lastFetchError', 'failStreak', 'disabled', 'createdAt'], 'properties': {'id': {'type': 'string', '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)$'}, 'name': {'type': 'string'}, 'type': {'type': 'string'}, 'value': {'type': 'string'}, 'disabled': {'type': 'boolean'}, 'createdAt': {'description': 'ISO 8601 datetime string'}, 'projectId': {'type': 'string', '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)$'}, 'failStreak': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'lastFetchedAt': {'description': 'ISO 8601 datetime string'}, 'lastFetchError': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'lastFetchSuccess': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'fetched': {'type': 'boolean'}, 'storiesAdded': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
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.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'url'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'title': {'type': 'string'}, 'summary': {'type': 'string'}, 'projectId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['storyId'], 'properties': {'storyId': {'type': 'string', '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)$'}}, 'additionalProperties': False}
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.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['title', 'audience'], 'properties': {'tone': {'type': 'string'}, 'title': {'type': 'string', 'minLength': 1}, 'audience': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'industry', 'tone', 'criteria', 'storiesGot', 'storiesGoal', 'hasXSource', 'warming'], 'properties': {'tone': {'type': 'string'}, 'reason': {'type': 'string'}, 'warming': {'type': 'boolean'}, 'criteria': {'type': 'array', 'items': {'type': 'string'}}, 'industry': {'type': 'string'}, 'projectId': {'type': 'string', '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)$'}, 'hasXSource': {'type': 'boolean'}, 'storiesGot': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'storiesGoal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
betterpost_delete_content
Delete content
Delete a piece of content and its hosted images.
可能执行破坏性操作 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contentId'], 'properties': {'contentId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['deleted'], 'properties': {'deleted': {'type': 'string', '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)$'}}, 'additionalProperties': False}
betterpost_delete_project
Delete project
Permanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone.
可能执行破坏性操作 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['deleted'], 'properties': {'deleted': {'type': 'string', '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)$'}}, 'additionalProperties': False}
betterpost_derive_content
Derive content
Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic.
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['fromContentId', 'type'], 'properties': {'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'tieIn': {'type': 'string'}, 'fromContentId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contentId', 'type', 'content', 'summary', 'publicUrl', 'storyCount', 'topic', 'imagesHosted', 'creditsCharged'], 'properties': {'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'topic': {'type': 'string'}, 'content': {'type': 'object', 'required': ['type'], 'properties': {'body': {'type': 'string'}, 'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'title': {'type': 'string'}, 'content': {'type': 'string'}, 'previewText': {'type': 'string'}, 'subjectLine': {'type': 'string'}, 'metaDescription': {'type': 'string'}}, 'description': 'The generated content. Fields present depend on `type`.', 'additionalProperties': False}, 'summary': {'type': 'string'}, 'contentId': {'type': 'string', '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)$'}, 'publicUrl': {'type': 'string'}, 'storyCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'imagesHosted': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'creditsCharged': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
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.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'focus': {'type': 'string', 'description': 'The topic to get more on (e.g. "League of Legends"). Omit to broaden the whole project.'}, 'projectId': {'type': 'string', '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)$'}, 'addAsCriteria': {'type': 'boolean', 'description': 'Also append an in-scope `focus` as a standing relevance criterion (out-of-scope, confirmed foci are added automatically).'}, 'confirmedByUser': {'type': 'boolean', 'description': 'Set true once the user has agreed to widen the project to an out-of-scope `focus`.'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['criteriaAdded', 'sourcesAdded', 'storiesAdded', 'warming', 'retryAfterMs'], 'properties': {'warming': {'type': 'boolean'}, 'retryAfterMs': {'type': 'number'}, 'sourcesAdded': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'value'], 'properties': {'type': {'type': 'string'}, 'value': {'type': 'string'}}, 'additionalProperties': False}}, 'storiesAdded': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'criteriaAdded': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
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.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'type'], 'properties': {'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string', '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 â\x80\x94 this is the default for those channels. 'blog', 'newsletter', and 'linkedin' are one piece."}, 'reuse': {'type': 'boolean', 'description': 'Reuse the most recent topic.'}, 'tieIn': {'type': 'string', 'description': 'A product/service to weave in.'}, 'topic': {'type': 'string', '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."}, 'projectId': {'type': 'string', '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)$'}, 'wordLimit': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contentId', 'type', 'content', 'summary', 'publicUrl', 'storyCount', 'topic', 'imagesHosted', 'creditsCharged'], 'properties': {'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'topic': {'type': 'string'}, 'content': {'type': 'object', 'required': ['type'], 'properties': {'body': {'type': 'string'}, 'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'title': {'type': 'string'}, 'content': {'type': 'string'}, 'previewText': {'type': 'string'}, 'subjectLine': {'type': 'string'}, 'metaDescription': {'type': 'string'}}, 'description': 'The generated content. Fields present depend on `type`.', 'additionalProperties': False}, 'summary': {'type': 'string'}, 'contentId': {'type': 'string', '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)$'}, 'publicUrl': {'type': 'string'}, 'storyCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'imagesHosted': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'creditsCharged': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
betterpost_get_content
Get content
Fetch one piece of content in full.
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contentId'], 'properties': {'contentId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'projectId', 'type', 'content', 'summary', 'wordLimit', 'storyCount', 'topicId', 'derivedFromContentId', 'publicUrl', 'createdAt'], 'properties': {'id': {'type': 'string', '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': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'content': {'type': 'object', 'required': ['type'], 'properties': {'body': {'type': 'string'}, 'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'title': {'type': 'string'}, 'content': {'type': 'string'}, 'previewText': {'type': 'string'}, 'subjectLine': {'type': 'string'}, 'metaDescription': {'type': 'string'}}, 'description': 'The generated content. Fields present depend on `type`.', 'additionalProperties': False}, 'summary': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'topicId': {'anyOf': [{'type': 'string', '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': 'null'}]}, 'createdAt': {'description': 'ISO 8601 datetime string'}, 'projectId': {'type': 'string', '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)$'}, 'publicUrl': {'type': 'string'}, 'wordLimit': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'storyCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'derivedFromContentId': {'anyOf': [{'type': 'string', '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': 'null'}]}}, 'additionalProperties': False}
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).
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'title', 'audience', 'description', 'tone', 'industry', 'additionalInstructions', 'maxStoryAgeDays', 'timezone', 'status', 'hasXSource', 'createdAt', 'updatedAt', 'criteria'], 'properties': {'id': {'type': 'string', '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)$'}, 'tone': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'title': {'type': 'string'}, 'status': {'enum': ['initializing', 'ready'], 'type': 'string'}, 'audience': {'type': 'string'}, 'criteria': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'text'], 'properties': {'id': {'type': 'string', '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)$'}, 'text': {'type': 'string'}}, 'additionalProperties': False}}, 'industry': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'timezone': {'type': 'string'}, 'createdAt': {'description': 'ISO 8601 datetime string'}, 'updatedAt': {'description': 'ISO 8601 datetime string'}, 'hasXSource': {'type': 'boolean'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'maxStoryAgeDays': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'additionalInstructions': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}
betterpost_get_settings
Get settings
Returns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contentTypeSettings'], 'properties': {'contentTypeSettings': {'type': 'array', 'items': {'type': 'object', 'required': ['projectId', 'type', 'wordLimit', 'additionalInstructions'], 'properties': {'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'projectId': {'type': 'string', '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)$'}, 'wordLimit': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'additionalInstructions': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}}, 'additionalProperties': False}
betterpost_get_usage
Get usage
Your credit balance, freeze state, and recent spend.
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['kind', 'creditBalance', 'frozen', 'recentSpendUsd'], 'properties': {'kind': {'type': 'string', 'const': 'paid'}, 'frozen': {'type': 'boolean'}, 'creditBalance': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'recentSpendUsd': {'type': 'number'}}, 'additionalProperties': False}
betterpost_hide_story
Hide story
Hides a story so generation ignores it. Reversible with unhide_story.
幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['storyId'], 'properties': {'storyId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['storyId', 'hidden'], 'properties': {'hidden': {'type': 'boolean'}, 'storyId': {'type': 'string', '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)$'}}, 'additionalProperties': False}
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.
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 30000, 'minLength': 1, 'description': 'The text to humanize (max 30,000 characters).'}, 'tone': {'type': 'string', 'description': 'Tone override; wins over the project tone.'}, 'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string', 'description': "Apply this channel's style rules to the rewrite."}, 'projectId': {'type': 'string', '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)$', 'description': "Use this project's tone and writing instructions."}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['text', 'changes', 'inputWords', 'creditsCharged'], 'properties': {'text': {'type': 'string', 'description': 'The rewritten text, a drop-in replacement for the input'}, 'changes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Short notes on the main edits made'}, 'inputWords': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'creditsCharged': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
betterpost_list_content
List content
List a project's content (summaries + shareable `publicUrl` links).
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['content'], 'properties': {'content': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'summary', 'createdAt', 'publicUrl'], 'properties': {'id': {'type': 'string', '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': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'summary': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'createdAt': {'description': 'ISO 8601 datetime string'}, 'publicUrl': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
betterpost_list_projects
List projects
Returns your projects, each with its relevance `criteria` (with ids) that define what counts as on-topic.
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projects'], 'properties': {'projects': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'audience', 'description', 'tone', 'industry', 'additionalInstructions', 'maxStoryAgeDays', 'timezone', 'status', 'hasXSource', 'createdAt', 'updatedAt', 'criteria'], 'properties': {'id': {'type': 'string', '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)$'}, 'tone': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'title': {'type': 'string'}, 'status': {'enum': ['initializing', 'ready'], 'type': 'string'}, 'audience': {'type': 'string'}, 'criteria': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'text'], 'properties': {'id': {'type': 'string', '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)$'}, 'text': {'type': 'string'}}, 'additionalProperties': False}}, 'industry': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'timezone': {'type': 'string'}, 'createdAt': {'description': 'ISO 8601 datetime string'}, 'updatedAt': {'description': 'ISO 8601 datetime string'}, 'hasXSource': {'type': 'boolean'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'maxStoryAgeDays': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'additionalInstructions': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}}, 'additionalProperties': False}
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.
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'limit': {'type': 'integer', 'maximum': 200, 'description': 'Max sources to return (default 50).', 'exclusiveMinimum': 0}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of sources to skip; use the returned nextOffset to page.'}, 'projectId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['total', 'offset', 'limit', 'returned', 'nextOffset', 'counts', 'sources'], 'properties': {'limit': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'counts': {'type': 'object', 'required': ['ok', 'failing', 'disabled', 'pending', 'byType'], 'properties': {'ok': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'byType': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'failing': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'pending': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'disabled': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'value'], 'properties': {'id': {'type': 'string', '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)$'}, 'ok': {'type': 'boolean'}, 'name': {'type': 'string'}, 'type': {'type': 'string'}, 'value': {'type': 'string'}, 'pending': {'type': 'boolean', 'const': True}, 'disabled': {'type': 'boolean', 'const': True}, 'failStreak': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'lastFetchedAt': {'description': 'ISO 8601 datetime string'}, 'lastFetchError': {'type': 'string'}}, 'additionalProperties': False}}, 'returned': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'nextOffset': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}
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.
只读
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', '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)$'}, 'includeHidden': {'type': 'boolean'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['stories'], 'properties': {'stories': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'projectId', 'sourceId', 'url', 'title', 'summary', 'keyPoints', 'quotes', 'images', 'relevancy', 'isTimely', 'timelinessReason', 'contentType', 'author', 'publicationDate', 'status', 'isManual', 'isHidden', 'createdAt'], 'properties': {'id': {'type': 'string', '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)$'}, 'url': {'type': 'string'}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'author': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'description'], 'properties': {'url': {'type': 'string'}, 'description': {'type': 'string'}}, 'additionalProperties': False}}, 'quotes': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}]}, 'status': {'enum': ['pending', 'ready', 'hidden'], 'type': 'string'}, 'summary': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'isHidden': {'type': 'boolean'}, 'isManual': {'type': 'boolean'}, 'isTimely': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}]}, 'sourceId': {'anyOf': [{'type': 'string', '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': 'null'}]}, 'createdAt': {'description': 'ISO 8601 datetime string'}, 'keyPoints': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}]}, 'projectId': {'type': 'string', '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)$'}, 'relevancy': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'contentType': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'publicationDate': {'description': 'ISO 8601 datetime string'}, 'timelinessReason': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}}, 'additionalProperties': False}
betterpost_remove_source
Remove source
Removes a source from a project. Its already-gathered stories stay; the source is no longer fetched.
可能执行破坏性操作 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['sourceId'], 'properties': {'sourceId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['removed'], 'properties': {'removed': {'type': 'string', '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)$'}}, 'additionalProperties': False}
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.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'count': {'type': 'integer', 'maximum': 5, 'minimum': 1}, 'projectId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'topics'], 'properties': {'topics': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'storyCount', 'examples'], 'properties': {'label': {'type': 'string'}, 'examples': {'type': 'array', 'items': {'type': 'string'}}, 'storyCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}, 'projectId': {'type': 'string', '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)$'}}, 'additionalProperties': False}
betterpost_unhide_story
Unhide story
Unhides a previously hidden story so generation can use it again.
幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['storyId'], 'properties': {'storyId': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['storyId', 'hidden'], 'properties': {'hidden': {'type': 'boolean'}, 'storyId': {'type': 'string', '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)$'}}, 'additionalProperties': False}
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.
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'patch': {'type': 'object', 'properties': {'tone': {'type': 'string'}, 'title': {'type': 'string'}, 'audience': {'type': 'string'}, 'timezone': {'type': 'string'}, 'addCriteria': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Relevance-criterion texts to APPEND (incremental, never replace-all).'}, 'description': {'type': 'string'}, 'removeCriteria': {'type': 'array', 'items': {'type': 'string', '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)$'}, 'description': 'Criterion ids (from get_project/list_projects) to remove.'}, 'maxStoryAgeDays': {'type': 'integer', 'maximum': 30, 'minimum': 1, 'description': 'Freshness window in days (default 14, allowed 1â\x80\x9330; 7â\x80\x9314 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.'}, 'additionalInstructions': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'description': 'Partial update: EVERY field is optional â\x80\x94 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': {'type': 'string', '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': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'title', 'audience', 'description', 'tone', 'industry', 'additionalInstructions', 'maxStoryAgeDays', 'timezone', 'status', 'hasXSource', 'createdAt', 'updatedAt', 'criteria'], 'properties': {'id': {'type': 'string', '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)$'}, 'tone': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'title': {'type': 'string'}, 'status': {'enum': ['initializing', 'ready'], 'type': 'string'}, 'audience': {'type': 'string'}, 'criteria': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'text'], 'properties': {'id': {'type': 'string', '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)$'}, 'text': {'type': 'string'}}, 'additionalProperties': False}}, 'industry': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'timezone': {'type': 'string'}, 'createdAt': {'description': 'ISO 8601 datetime string'}, 'updatedAt': {'description': 'ISO 8601 datetime string'}, 'hasXSource': {'type': 'boolean'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'maxStoryAgeDays': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'additionalInstructions': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}
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.
幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'type'], 'properties': {'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'projectId': {'type': 'string', '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)$'}, 'wordLimit': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'additionalInstructions': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['updated'], 'properties': {'updated': {'type': 'object', 'required': ['type'], 'properties': {'type': {'enum': ['blog', 'newsletter', 'linkedin', 'x', 'bluesky'], 'type': 'string'}, 'wordLimit': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'additionalInstructions': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'additionalProperties': False}
已添加
betterpost_humanize
2026年9月11日 15:31
已添加
betterpost_expand_coverage
2026年9月11日 15:31
已添加
betterpost_update_settings
2026年9月11日 15:31
已添加
betterpost_get_settings
2026年9月11日 15:31
已添加
betterpost_get_usage
2026年9月11日 15:31
已添加
betterpost_suggest_topics
2026年9月11日 15:31
已添加
betterpost_unhide_story
2026年9月11日 15:31
已添加
betterpost_hide_story
2026年9月11日 15:31
已添加
betterpost_add_story
2026年9月11日 15:31
已添加
betterpost_list_stories
2026年9月11日 15:31
已添加
betterpost_remove_source
2026年9月11日 15:31
已添加
betterpost_add_source
2026年9月11日 15:31
已添加
betterpost_list_sources
2026年9月11日 15:31
已添加
betterpost_delete_project
2026年9月11日 15:31
已添加
betterpost_update_project
2026年9月11日 15:31
已添加
betterpost_get_project
2026年9月11日 15:31
已添加
betterpost_list_projects
2026年9月11日 15:31
已添加
betterpost_delete_content
2026年9月11日 15:31
已添加
betterpost_get_content
2026年9月11日 15:31
已添加
betterpost_list_content
2026年9月11日 15:31
已添加
betterpost_derive_content
2026年9月11日 15:31
已添加
betterpost_generate_content
2026年9月11日 15:31
已添加
betterpost_create_project
2026年9月11日 15:31