BetterPost MCP · BetterPost
OperationalAvailability — last 30 days
Last observed 48 min ago by MCP Tools Edge Scanner · scheduled every 120 min
Raw event details
{
"contractHash": "sha256:8ab92538dd02a9c56fb1d43daace9b579aec87b7e432f1b6e5bc772129fbc41c"
}Advertised capabilities
Tools 23
betterpost_create_project
4 params · 2 required
Create a content project. Slow, one-shot: infers config (criteria, industry, tone), discovers sources, and gat…
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.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| title* | string | — minLen: 1 |
| audience* | string | — minLen: 1 |
| description | string | — |
| tone | string | — |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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)$ |
| industry* | string | — |
| tone* | string | — |
| criteria* | array<string> | — |
| storiesGot* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| storiesGoal* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| hasXSource* | boolean | — |
| warming* | boolean | — |
| reason | string | — |
Raw schema JSON
{
"name": "betterpost_create_project",
"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#",
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"audience": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string"
},
"tone": {
"type": "string"
}
},
"required": [
"title",
"audience"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
},
"industry": {
"type": "string"
},
"tone": {
"type": "string"
},
"criteria": {
"type": "array",
"items": {
"type": "string"
}
},
"storiesGot": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"storiesGoal": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"hasXSource": {
"type": "boolean"
},
"warming": {
"type": "boolean"
},
"reason": {
"type": "string"
}
},
"required": [
"projectId",
"industry",
"tone",
"criteria",
"storiesGot",
"storiesGoal",
"hasXSource",
"warming"
],
"additionalProperties": false
}
}betterpost_generate_content
6 params · 2 required
Generate a new piece of content for a project from its timely, relevant stories. Fast in steady state. Charges…
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.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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(5) | 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. one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| topic | string | 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. |
| reuse | boolean | Reuse the most recent topic. |
| tieIn | string | A product/service to weave in. |
| wordLimit | integer | — max: 9007199254740991 |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| contentId* | 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(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| content* | object | The generated content. Fields present depend on `type`. |
| content.type* | enum(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| content.title | string | — |
| content.body | string | — |
| content.metaDescription | string | — |
| content.subjectLine | string | — |
| content.previewText | string | — |
| content.content | string | — |
| summary* | string | — |
| publicUrl* | string | — |
| storyCount* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| topic* | string | — |
| imagesHosted* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| creditsCharged* | integer | — min: -9007199254740991 · max: 9007199254740991 |
Raw schema JSON
{
"name": "betterpost_generate_content",
"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#",
"type": "object",
"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": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
],
"description": "Output format. 39;x39; and 39;bluesky39; 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. 39;blog39;, 39;newsletter39;, and 39;linkedin39; are one piece."
},
"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 user39;s confirmation.",
"type": "string"
},
"reuse": {
"description": "Reuse the most recent topic.",
"type": "boolean"
},
"tieIn": {
"description": "A product/service to weave in.",
"type": "string"
},
"wordLimit": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"projectId",
"type"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"content": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"title": {
"type": "string"
},
"body": {
"type": "string"
},
"metaDescription": {
"type": "string"
},
"subjectLine": {
"type": "string"
},
"previewText": {
"type": "string"
},
"content": {
"type": "string"
}
},
"required": [
"type"
],
"additionalProperties": false,
"description": "The generated content. Fields present depend on `type`."
},
"summary": {
"type": "string"
},
"publicUrl": {
"type": "string"
},
"storyCount": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"topic": {
"type": "string"
},
"imagesHosted": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"creditsCharged": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"contentId",
"type",
"content",
"summary",
"publicUrl",
"storyCount",
"topic",
"imagesHosted",
"creditsCharged"
],
"additionalProperties": false
}
}betterpost_derive_content
3 params · 2 required
Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stor…
Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| fromContentId* | 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(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| tieIn | string | — |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| contentId* | 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(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| content* | object | The generated content. Fields present depend on `type`. |
| content.type* | enum(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| content.title | string | — |
| content.body | string | — |
| content.metaDescription | string | — |
| content.subjectLine | string | — |
| content.previewText | string | — |
| content.content | string | — |
| summary* | string | — |
| publicUrl* | string | — |
| storyCount* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| topic* | string | — |
| imagesHosted* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| creditsCharged* | integer | — min: -9007199254740991 · max: 9007199254740991 |
Raw schema JSON
{
"name": "betterpost_derive_content",
"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#",
"type": "object",
"properties": {
"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": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"tieIn": {
"type": "string"
}
},
"required": [
"fromContentId",
"type"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"content": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"title": {
"type": "string"
},
"body": {
"type": "string"
},
"metaDescription": {
"type": "string"
},
"subjectLine": {
"type": "string"
},
"previewText": {
"type": "string"
},
"content": {
"type": "string"
}
},
"required": [
"type"
],
"additionalProperties": false,
"description": "The generated content. Fields present depend on `type`."
},
"summary": {
"type": "string"
},
"publicUrl": {
"type": "string"
},
"storyCount": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"topic": {
"type": "string"
},
"imagesHosted": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"creditsCharged": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"contentId",
"type",
"content",
"summary",
"publicUrl",
"storyCount",
"topic",
"imagesHosted",
"creditsCharged"
],
"additionalProperties": false
}
}betterpost_list_content
1 param · 1 required
List a project's content (summaries + shareable `publicUrl` links).
List a project's content (summaries + shareable `publicUrl` links).
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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)$ |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| content* | array<object> | — |
| content[].id* | 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)$ |
| content[].type* | enum(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| content[].summary* | string | null | — |
| content[].createdAt* | object | ISO 8601 datetime string |
| content[].publicUrl* | string | — |
Raw schema JSON
{
"name": "betterpost_list_content",
"description": "List a project39;s content (summaries + shareable `publicUrl` links).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
}
},
"required": [
"projectId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"content": {
"type": "array",
"items": {
"type": "object",
"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": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"createdAt": {
"description": "ISO 8601 datetime string"
},
"publicUrl": {
"type": "string"
}
},
"required": [
"id",
"type",
"summary",
"createdAt",
"publicUrl"
],
"additionalProperties": false
}
}
},
"required": [
"content"
],
"additionalProperties": false
}
}betterpost_get_content
1 param · 1 required
Fetch one piece of content in full.
Fetch one piece of content in full.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| contentId* | 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)$ |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| id* | 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)$ |
| projectId* | 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(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| content* | object | The generated content. Fields present depend on `type`. |
| content.type* | enum(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| content.title | string | — |
| content.body | string | — |
| content.metaDescription | string | — |
| content.subjectLine | string | — |
| content.previewText | string | — |
| content.content | string | — |
| summary* | string | null | — |
| wordLimit* | integer | null | — |
| storyCount* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| topicId* | string | null | — |
| derivedFromContentId* | string | null | — |
| publicUrl* | string | — |
| createdAt* | object | ISO 8601 datetime string |
Raw schema JSON
{
"name": "betterpost_get_content",
"description": "Fetch one piece of content in full.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
}
},
"required": [
"contentId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
},
"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": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"content": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"title": {
"type": "string"
},
"body": {
"type": "string"
},
"metaDescription": {
"type": "string"
},
"subjectLine": {
"type": "string"
},
"previewText": {
"type": "string"
},
"content": {
"type": "string"
}
},
"required": [
"type"
],
"additionalProperties": false,
"description": "The generated content. Fields present depend on `type`."
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"wordLimit": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"storyCount": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"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"
}
]
},
"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"
}
]
},
"publicUrl": {
"type": "string"
},
"createdAt": {
"description": "ISO 8601 datetime string"
}
},
"required": [
"id",
"projectId",
"type",
"content",
"summary",
"wordLimit",
"storyCount",
"topicId",
"derivedFromContentId",
"publicUrl",
"createdAt"
],
"additionalProperties": false
}
}betterpost_delete_content
1 param · 1 required
Delete a piece of content and its hosted images.
Delete a piece of content and its hosted images.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| contentId* | 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)$ |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| deleted* | 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)$ |
Raw schema JSON
{
"name": "betterpost_delete_content",
"description": "Delete a piece of content and its hosted images.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
}
},
"required": [
"contentId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
}
},
"required": [
"deleted"
],
"additionalProperties": false
}
}betterpost_list_projects
0 params
Returns your projects, each with its relevance `criteria` (with ids) that define what counts as on-topic.
Returns your projects, each with its relevance `criteria` (with ids) that define what counts as on-topic.
Input schema
No parameters.
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projects* | array<object> | — |
| projects[].id* | 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)$ |
| projects[].title* | string | — |
| projects[].audience* | string | — |
| projects[].description* | string | null | — |
| projects[].tone* | string | null | — |
| projects[].industry* | string | null | — |
| projects[].additionalInstructions* | string | null | — |
| projects[].maxStoryAgeDays* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| projects[].timezone* | string | — |
| projects[].status* | enum(2) | — one of: "initializing", "ready" |
| projects[].hasXSource* | boolean | — |
| projects[].createdAt* | object | ISO 8601 datetime string |
| projects[].updatedAt* | object | ISO 8601 datetime string |
| projects[].criteria* | array<object> | — |
| projects[].criteria[].id* | 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)$ |
| projects[].criteria[].text* | string | — |
Raw schema JSON
{
"name": "betterpost_list_projects",
"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#",
"type": "object",
"properties": {}
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"projects": {
"type": "array",
"items": {
"type": "object",
"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)$"
},
"title": {
"type": "string"
},
"audience": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"maxStoryAgeDays": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"timezone": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"initializing",
"ready"
]
},
"hasXSource": {
"type": "boolean"
},
"createdAt": {
"description": "ISO 8601 datetime string"
},
"updatedAt": {
"description": "ISO 8601 datetime string"
},
"criteria": {
"type": "array",
"items": {
"type": "object",
"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"
}
},
"required": [
"id",
"text"
],
"additionalProperties": false
}
}
},
"required": [
"id",
"title",
"audience",
"description",
"tone",
"industry",
"additionalInstructions",
"maxStoryAgeDays",
"timezone",
"status",
"hasXSource",
"createdAt",
"updatedAt",
"criteria"
],
"additionalProperties": false
}
}
},
"required": [
"projects"
],
"additionalProperties": false
}
}betterpost_get_project
1 param · 1 required
Returns one project with its relevance `criteria` (each with an id, so a criterion can be targeted for removal…
Returns one project with its relevance `criteria` (each with an id, so a criterion can be targeted for removal via betterpost_update_project).
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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)$ |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| id* | 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)$ |
| title* | string | — |
| audience* | string | — |
| description* | string | null | — |
| tone* | string | null | — |
| industry* | string | null | — |
| additionalInstructions* | string | null | — |
| maxStoryAgeDays* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| timezone* | string | — |
| status* | enum(2) | — one of: "initializing", "ready" |
| hasXSource* | boolean | — |
| createdAt* | object | ISO 8601 datetime string |
| updatedAt* | object | ISO 8601 datetime string |
| criteria* | array<object> | — |
| criteria[].id* | 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)$ |
| criteria[].text* | string | — |
Raw schema JSON
{
"name": "betterpost_get_project",
"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#",
"type": "object",
"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)$"
}
},
"required": [
"projectId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
},
"title": {
"type": "string"
},
"audience": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"maxStoryAgeDays": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"timezone": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"initializing",
"ready"
]
},
"hasXSource": {
"type": "boolean"
},
"createdAt": {
"description": "ISO 8601 datetime string"
},
"updatedAt": {
"description": "ISO 8601 datetime string"
},
"criteria": {
"type": "array",
"items": {
"type": "object",
"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"
}
},
"required": [
"id",
"text"
],
"additionalProperties": false
}
}
},
"required": [
"id",
"title",
"audience",
"description",
"tone",
"industry",
"additionalInstructions",
"maxStoryAgeDays",
"timezone",
"status",
"hasXSource",
"createdAt",
"updatedAt",
"criteria"
],
"additionalProperties": false
}
}betterpost_update_project
2 params · 1 required
Updates a project's title, audience, description, tone, freshness window, timezone, or relevance criteria, and…
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.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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)$ |
| patch | object | 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. |
| patch.title | string | — |
| patch.audience | string | — |
| patch.description | string | — |
| patch.tone | string | — |
| patch.maxStoryAgeDays | integer | 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. min: 1 · max: 30 |
| patch.additionalInstructions | string | null | — |
| patch.timezone | string | — |
| patch.addCriteria | array<string> | Relevance-criterion texts to APPEND (incremental, never replace-all). |
| patch.removeCriteria | array<string> | Criterion ids (from get_project/list_projects) to remove. |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| id* | 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)$ |
| title* | string | — |
| audience* | string | — |
| description* | string | null | — |
| tone* | string | null | — |
| industry* | string | null | — |
| additionalInstructions* | string | null | — |
| maxStoryAgeDays* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| timezone* | string | — |
| status* | enum(2) | — one of: "initializing", "ready" |
| hasXSource* | boolean | — |
| createdAt* | object | ISO 8601 datetime string |
| updatedAt* | object | ISO 8601 datetime string |
| criteria* | array<object> | — |
| criteria[].id* | 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)$ |
| criteria[].text* | string | — |
Raw schema JSON
{
"name": "betterpost_update_project",
"description": "Updates a project39;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#",
"type": "object",
"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)$"
},
"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.",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"audience": {
"type": "string"
},
"description": {
"type": "string"
},
"tone": {
"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.",
"type": "integer",
"minimum": 1,
"maximum": 30
},
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timezone": {
"type": "string"
},
"addCriteria": {
"description": "Relevance-criterion texts to APPEND (incremental, never replace-all).",
"type": "array",
"items": {
"type": "string"
}
},
"removeCriteria": {
"description": "Criterion ids (from get_project/list_projects) to remove.",
"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)$"
}
}
}
}
},
"required": [
"projectId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
},
"title": {
"type": "string"
},
"audience": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"maxStoryAgeDays": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"timezone": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"initializing",
"ready"
]
},
"hasXSource": {
"type": "boolean"
},
"createdAt": {
"description": "ISO 8601 datetime string"
},
"updatedAt": {
"description": "ISO 8601 datetime string"
},
"criteria": {
"type": "array",
"items": {
"type": "object",
"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"
}
},
"required": [
"id",
"text"
],
"additionalProperties": false
}
}
},
"required": [
"id",
"title",
"audience",
"description",
"tone",
"industry",
"additionalInstructions",
"maxStoryAgeDays",
"timezone",
"status",
"hasXSource",
"createdAt",
"updatedAt",
"criteria"
],
"additionalProperties": false
}
}betterpost_delete_project
1 param · 1 required
Permanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone.
Permanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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)$ |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| deleted* | 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)$ |
Raw schema JSON
{
"name": "betterpost_delete_project",
"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#",
"type": "object",
"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)$"
}
},
"required": [
"projectId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
}
},
"required": [
"deleted"
],
"additionalProperties": false
}
}betterpost_list_sources
3 params · 1 required
Returns one slimmed page of a project's sources plus project-wide `total` and `counts` (ok/failing/disabled/pe…
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.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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)$ |
| limit | integer | Max sources to return (default 50). max: 200 |
| offset | integer | Number of sources to skip; use the returned nextOffset to page. min: 0 · max: 9007199254740991 |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| total* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| offset* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| limit* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| returned* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| nextOffset* | integer | null | — |
| counts* | object | — |
| counts.ok* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| counts.failing* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| counts.disabled* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| counts.pending* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| counts.byType* | object | — |
| sources* | array<object> | — |
| sources[].id* | 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)$ |
| sources[].type* | string | — |
| sources[].value* | string | — |
| sources[].name | string | — |
| sources[].pending | boolean | — |
| sources[].ok | boolean | — |
| sources[].lastFetchedAt | object | ISO 8601 datetime string |
| sources[].failStreak | integer | — min: -9007199254740991 · max: 9007199254740991 |
| sources[].disabled | boolean | — |
| sources[].lastFetchError | string | — |
Raw schema JSON
{
"name": "betterpost_list_sources",
"description": "Returns one slimmed page of a project39;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#",
"type": "object",
"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)$"
},
"limit": {
"description": "Max sources to return (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Number of sources to skip; use the returned nextOffset to page.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"projectId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"total": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"offset": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"limit": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"returned": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"nextOffset": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"counts": {
"type": "object",
"properties": {
"ok": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"failing": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"disabled": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"pending": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"byType": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
}
},
"required": [
"ok",
"failing",
"disabled",
"pending",
"byType"
],
"additionalProperties": false
},
"sources": {
"type": "array",
"items": {
"type": "object",
"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": {
"type": "string"
},
"value": {
"type": "string"
},
"name": {
"type": "string"
},
"pending": {
"type": "boolean",
"const": true
},
"ok": {
"type": "boolean"
},
"lastFetchedAt": {
"description": "ISO 8601 datetime string"
},
"failStreak": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"disabled": {
"type": "boolean",
"const": true
},
"lastFetchError": {
"type": "string"
}
},
"required": [
"id",
"type",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"total",
"offset",
"limit",
"returned",
"nextOffset",
"counts",
"sources"
],
"additionalProperties": false
}
}betterpost_add_source
4 params · 2 required
Adds a source to a project and fetches it immediately (bounded by a few seconds), returning `storiesAdded` so …
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`).
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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)$ |
| value* | string | — |
| name | string | — |
| type | enum(6) | 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). one of: "autodetect", "web-search", "reddit-search", "youtube-search", "x", "bluesky" · default: "autodetect" |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| source* | object | — |
| source.id* | 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)$ |
| source.projectId* | 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)$ |
| source.name* | string | — |
| source.type* | string | — |
| source.value* | string | — |
| source.lastFetchedAt* | object | ISO 8601 datetime string |
| source.lastFetchSuccess* | boolean | null | — |
| source.lastFetchError* | string | null | — |
| source.failStreak* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| source.disabled* | boolean | — |
| source.createdAt* | object | ISO 8601 datetime string |
| fetched* | boolean | — |
| storiesAdded* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| note | string | — |
Raw schema JSON
{
"name": "betterpost_add_source",
"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#",
"type": "object",
"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)$"
},
"value": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"default": "autodetect",
"description": "Source kind (one of the enum values; defaults to 39;autodetect39;). 39;autodetect39; 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 39;autodetect39; for any URL. For a recurring keyword search that re-runs over time, set `value` to the search terms and pick a search kind: 39;web-search39;, 39;reddit-search39;, 39;youtube-search39;, 39;x39; (X/Twitter search), or 39;bluesky39; (Bluesky search).",
"type": "string",
"enum": [
"autodetect",
"web-search",
"reddit-search",
"youtube-search",
"x",
"bluesky"
]
}
},
"required": [
"projectId",
"value"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"source": {
"type": "object",
"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)$"
},
"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)$"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"value": {
"type": "string"
},
"lastFetchedAt": {
"description": "ISO 8601 datetime string"
},
"lastFetchSuccess": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"lastFetchError": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"failStreak": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"disabled": {
"type": "boolean"
},
"createdAt": {
"description": "ISO 8601 datetime string"
}
},
"required": [
"id",
"projectId",
"name",
"type",
"value",
"lastFetchedAt",
"lastFetchSuccess",
"lastFetchError",
"failStreak",
"disabled",
"createdAt"
],
"additionalProperties": false
},
"fetched": {
"type": "boolean"
},
"storiesAdded": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"note": {
"type": "string"
}
},
"required": [
"source",
"fetched",
"storiesAdded"
],
"additionalProperties": false
}
}betterpost_remove_source
1 param · 1 required
Removes a source from a project. Its already-gathered stories stay; the source is no longer fetched.
Removes a source from a project. Its already-gathered stories stay; the source is no longer fetched.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| sourceId* | 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)$ |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| removed* | 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)$ |
Raw schema JSON
{
"name": "betterpost_remove_source",
"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#",
"type": "object",
"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)$"
}
},
"required": [
"sourceId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
}
},
"required": [
"removed"
],
"additionalProperties": false
}
}betterpost_list_stories
2 params · 1 required
Returns a project's gathered stories, each with `title`, `url`, `summary`, `relevancy`, `publicationDate`, and…
Returns a project's gathered stories, each with `title`, `url`, `summary`, `relevancy`, `publicationDate`, and `isManual`/`isHidden` flags. Pass includeHidden to include hidden ones.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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 | boolean | — |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| stories* | array<object> | — |
| stories[].id* | 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)$ |
| stories[].projectId* | 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)$ |
| stories[].sourceId* | string | null | — |
| stories[].url* | string | — |
| stories[].title* | string | null | — |
| stories[].summary* | string | null | — |
| stories[].keyPoints* | array<string> | null | — |
| stories[].quotes* | array<string> | null | — |
| stories[].images* | array<object> | — |
| stories[].images[].url* | string | — |
| stories[].images[].description* | string | — |
| stories[].relevancy* | number | null | — |
| stories[].isTimely* | boolean | null | — |
| stories[].timelinessReason* | string | null | — |
| stories[].contentType* | string | null | — |
| stories[].author* | string | null | — |
| stories[].publicationDate* | object | ISO 8601 datetime string |
| stories[].status* | enum(3) | — one of: "pending", "ready", "hidden" |
| stories[].isManual* | boolean | — |
| stories[].isHidden* | boolean | — |
| stories[].createdAt* | object | ISO 8601 datetime string |
Raw schema JSON
{
"name": "betterpost_list_stories",
"description": "Returns a project39;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#",
"type": "object",
"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"
}
},
"required": [
"projectId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"stories": {
"type": "array",
"items": {
"type": "object",
"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)$"
},
"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)$"
},
"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"
}
]
},
"url": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"keyPoints": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"quotes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": [
"url",
"description"
],
"additionalProperties": false
}
},
"relevancy": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"isTimely": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"timelinessReason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"contentType": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"publicationDate": {
"description": "ISO 8601 datetime string"
},
"status": {
"type": "string",
"enum": [
"pending",
"ready",
"hidden"
]
},
"isManual": {
"type": "boolean"
},
"isHidden": {
"type": "boolean"
},
"createdAt": {
"description": "ISO 8601 datetime string"
}
},
"required": [
"id",
"projectId",
"sourceId",
"url",
"title",
"summary",
"keyPoints",
"quotes",
"images",
"relevancy",
"isTimely",
"timelinessReason",
"contentType",
"author",
"publicationDate",
"status",
"isManual",
"isHidden",
"createdAt"
],
"additionalProperties": false
}
}
},
"required": [
"stories"
],
"additionalProperties": false
}
}betterpost_add_story
4 params · 2 required
Manually imports a story you read about from its URL (pinned relevance, flagged is_manual) so generation can d…
Manually imports a story you read about from its URL (pinned relevance, flagged is_manual) so generation can draw on it.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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* | string | — format: uri |
| title | string | — |
| summary | string | — |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| storyId* | 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)$ |
Raw schema JSON
{
"name": "betterpost_add_story",
"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#",
"type": "object",
"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)$"
},
"url": {
"type": "string",
"format": "uri"
},
"title": {
"type": "string"
},
"summary": {
"type": "string"
}
},
"required": [
"projectId",
"url"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
}
},
"required": [
"storyId"
],
"additionalProperties": false
}
}betterpost_hide_story
1 param · 1 required
Hides a story so generation ignores it. Reversible with unhide_story.
Hides a story so generation ignores it. Reversible with unhide_story.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| storyId* | 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)$ |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| storyId* | 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)$ |
| hidden* | boolean | — |
Raw schema JSON
{
"name": "betterpost_hide_story",
"description": "Hides a story so generation ignores it. Reversible with unhide_story.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
}
},
"required": [
"storyId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
},
"hidden": {
"type": "boolean"
}
},
"required": [
"storyId",
"hidden"
],
"additionalProperties": false
}
}betterpost_unhide_story
1 param · 1 required
Unhides a previously hidden story so generation can use it again.
Unhides a previously hidden story so generation can use it again.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| storyId* | 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)$ |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| storyId* | 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)$ |
| hidden* | boolean | — |
Raw schema JSON
{
"name": "betterpost_unhide_story",
"description": "Unhides a previously hidden story so generation can use it again.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
}
},
"required": [
"storyId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
},
"hidden": {
"type": "boolean"
}
},
"required": [
"storyId",
"hidden"
],
"additionalProperties": false
}
}betterpost_suggest_topics
3 params · 1 required
Clusters a project's current stories into a few candidate angles — each with a label, how many stories back it…
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.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| count | integer | — min: 1 · max: 5 |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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)$ |
| topics* | array<object> | — |
| topics[].label* | string | — |
| topics[].storyCount* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| topics[].examples* | array<string> | — |
Raw schema JSON
{
"name": "betterpost_suggest_topics",
"description": "Clusters a project39;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#",
"type": "object",
"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": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"count": {
"type": "integer",
"minimum": 1,
"maximum": 5
}
},
"required": [
"projectId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
},
"topics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"storyCount": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"examples": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"label",
"storyCount",
"examples"
],
"additionalProperties": false
}
}
},
"required": [
"projectId",
"topics"
],
"additionalProperties": false
}
}betterpost_get_usage
0 params
Your credit balance, freeze state, and recent spend.
Your credit balance, freeze state, and recent spend.
Input schema
No parameters.
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| kind* | string | — |
| creditBalance* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| frozen* | boolean | — |
| recentSpendUsd* | number | — |
Raw schema JSON
{
"name": "betterpost_get_usage",
"description": "Your credit balance, freeze state, and recent spend.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {}
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "paid"
},
"creditBalance": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"frozen": {
"type": "boolean"
},
"recentSpendUsd": {
"type": "number"
}
},
"required": [
"kind",
"creditBalance",
"frozen",
"recentSpendUsd"
],
"additionalProperties": false
}
}betterpost_get_settings
1 param · 1 required
Returns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).
Returns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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)$ |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| contentTypeSettings* | array<object> | — |
| contentTypeSettings[].projectId* | 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)$ |
| contentTypeSettings[].type* | enum(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| contentTypeSettings[].wordLimit* | integer | null | — |
| contentTypeSettings[].additionalInstructions* | string | null | — |
Raw schema JSON
{
"name": "betterpost_get_settings",
"description": "Returns a project39;s per-content-type settings (wordLimit and additionalInstructions for each channel).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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)$"
}
},
"required": [
"projectId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"contentTypeSettings": {
"type": "array",
"items": {
"type": "object",
"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": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"wordLimit": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"projectId",
"type",
"wordLimit",
"additionalInstructions"
],
"additionalProperties": false
}
}
},
"required": [
"contentTypeSettings"
],
"additionalProperties": false
}
}betterpost_update_settings
4 params · 2 required
Patches one content type's wordLimit and/or additionalInstructions (free-form writing guidance for that type; …
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.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| wordLimit | integer | — max: 9007199254740991 |
| additionalInstructions | string | null | — |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| updated* | object | — |
| updated.type* | enum(5) | — one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| updated.wordLimit | integer | — min: -9007199254740991 · max: 9007199254740991 |
| updated.additionalInstructions | string | null | — |
Raw schema JSON
{
"name": "betterpost_update_settings",
"description": "Patches one content type39;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#",
"type": "object",
"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": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"wordLimit": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"projectId",
"type"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"updated": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"wordLimit": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"additionalInstructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"type"
],
"additionalProperties": false
}
},
"required": [
"updated"
],
"additionalProperties": false
}
}betterpost_expand_coverage
4 params · 1 required
Broadens a project's coverage: expands the relevance criteria (when needed), finds more sources across news, t…
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.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| projectId* | 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)$ |
| focus | string | The topic to get more on (e.g. "League of Legends"). Omit to broaden the whole project. |
| addAsCriteria | boolean | Also append an in-scope `focus` as a standing relevance criterion (out-of-scope, confirmed foci are added automatically). |
| confirmedByUser | boolean | Set true once the user has agreed to widen the project to an out-of-scope `focus`. |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| criteriaAdded* | array<string> | — |
| sourcesAdded* | array<object> | — |
| sourcesAdded[].type* | string | — |
| sourcesAdded[].value* | string | — |
| storiesAdded* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| warming* | boolean | — |
| retryAfterMs* | number | — |
Raw schema JSON
{
"name": "betterpost_expand_coverage",
"description": "Broadens a project39;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#",
"type": "object",
"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)$"
},
"focus": {
"description": "The topic to get more on (e.g. \"League of Legends\"). Omit to broaden the whole project.",
"type": "string"
},
"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"
}
},
"required": [
"projectId"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"criteriaAdded": {
"type": "array",
"items": {
"type": "string"
}
},
"sourcesAdded": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
}
},
"storiesAdded": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"warming": {
"type": "boolean"
},
"retryAfterMs": {
"type": "number"
}
},
"required": [
"criteriaAdded",
"sourcesAdded",
"storiesAdded",
"warming",
"retryAfterMs"
],
"additionalProperties": false
}
}betterpost_humanize
4 params · 1 required
Rewrite existing text into BetterPost's readable, human voice. Preserves the meaning, facts, links, and format…
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.
Input schema
| Parameter | Type | Description & constraints |
|---|---|---|
| text* | string | The text to humanize (max 30,000 characters). minLen: 1 · maxLen: 30000 |
| projectId | string | 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 | enum(5) | Apply this channel's style rules to the rewrite. one of: "blog", "newsletter", "linkedin", "x", "bluesky" |
| tone | string | Tone override; wins over the project tone. |
Output schema
| Parameter | Type | Description & constraints |
|---|---|---|
| text* | string | The rewritten text, a drop-in replacement for the input |
| changes* | array<string> | Short notes on the main edits made |
| inputWords* | integer | — min: -9007199254740991 · max: 9007199254740991 |
| creditsCharged* | integer | — min: -9007199254740991 · max: 9007199254740991 |
Raw schema JSON
{
"name": "betterpost_humanize",
"description": "Rewrite existing text into BetterPost39;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 project39;s tone and instructions, `type` to apply a channel39;s style, or `tone` to set the voice directly.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 30000,
"description": "The text to humanize (max 30,000 characters)."
},
"projectId": {
"description": "Use this project39;s tone and writing instructions.",
"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": {
"description": "Apply this channel39;s style rules to the rewrite.",
"type": "string",
"enum": [
"blog",
"newsletter",
"linkedin",
"x",
"bluesky"
]
},
"tone": {
"description": "Tone override; wins over the project tone.",
"type": "string"
}
},
"required": [
"text"
]
},
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"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",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"creditsCharged": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"text",
"changes",
"inputWords",
"creditsCharged"
],
"additionalProperties": false
}
}Resources 0
No resources advertised.
Prompts 0
No prompts advertised.
Inventory recorded Aug 6, 2026 — 5:45 AM as rev 1. Listing calls only — tools are never invoked.
Canonical contract hash
sha256:8ab92538dd02a9c56fb1d43daace9b579aec87b7e432f1b6e5bc772129fbc41c
Computed centrally from the normalized capability inventory (normalizer v1). Scanners submit raw observations; the control plane normalizes and hashes, so every scanner agrees on the same value.
Revisions 1
| Rev | Observed | Hash |
|---|---|---|
| rev 1 baseline | Aug 6, 2026 — 5:45 AM (43 d ago) |
Contract changes 0
No drift observed — every successful observation since Aug 6, 2026 has matched the baseline hash. Boring, in the best way.
Full snapshots are stored only when the canonical hash changes — unchanged observations update freshness without duplicating the contract.
Recent observations latest 30
| Observed | Result | Latency |
|---|---|---|
| Sep 17, 2026 — 7:25 PM (48 min ago) | Reachable | 132 ms |
| Sep 17, 2026 — 5:20 PM (3 h ago) | Reachable | 239 ms |
| Sep 17, 2026 — 3:20 PM (5 h ago) | Reachable | 209 ms |
| Sep 17, 2026 — 1:15 PM (7 h ago) | Reachable | 112 ms |
| Sep 17, 2026 — 11:15 AM (9 h ago) | Reachable | 151 ms |
| Sep 17, 2026 — 9:10 AM (11 h ago) | Reachable | 113 ms |
| Sep 17, 2026 — 7:05 AM (13 h ago) | Reachable | 94 ms |
| Sep 17, 2026 — 5:00 AM (15 h ago) | Reachable | 97 ms |
| Sep 17, 2026 — 2:55 AM (17 h ago) | Reachable | 135 ms |
| Sep 17, 2026 — 12:50 AM (19 h ago) | Reachable | 112 ms |
| Sep 16, 2026 — 10:50 PM (21 h ago) | Reachable | 123 ms |
| Sep 16, 2026 — 8:45 PM (23 h ago) | Reachable | 127 ms |
| Sep 16, 2026 — 6:45 PM (1 d ago) | Reachable | 126 ms |
| Sep 16, 2026 — 4:40 PM (1 d ago) | Reachable | 210 ms |
| Sep 16, 2026 — 2:35 PM (1 d ago) | Reachable | 116 ms |
| Sep 16, 2026 — 12:35 PM (1 d ago) | Reachable | 112 ms |
| Sep 16, 2026 — 10:30 AM (1 d ago) | Reachable | 147 ms |
| Sep 16, 2026 — 8:30 AM (1 d ago) | Reachable | 185 ms |
| Sep 16, 2026 — 6:25 AM (2 d ago) | Reachable | 142 ms |
| Sep 16, 2026 — 4:20 AM (2 d ago) | Reachable | 175 ms |
| Sep 16, 2026 — 2:15 AM (2 d ago) | Reachable | 132 ms |
| Sep 16, 2026 — 12:10 AM (2 d ago) | Reachable | 116 ms |
| Sep 15, 2026 — 10:05 PM (2 d ago) | Reachable | 112 ms |
| Sep 15, 2026 — 8:00 PM (2 d ago) | Reachable | 219 ms |
| Sep 15, 2026 — 6:00 PM (2 d ago) | Reachable | 147 ms |
| Sep 15, 2026 — 3:55 PM (2 d ago) | Reachable | 148 ms |
| Sep 15, 2026 — 1:55 PM (2 d ago) | Reachable | 130 ms |
| Sep 15, 2026 — 11:50 AM (2 d ago) | Reachable | 146 ms |
| Sep 15, 2026 — 9:45 AM (2 d ago) | Reachable | 146 ms |
| Sep 15, 2026 — 7:40 AM (3 d ago) | Reachable | 121 ms |
Latest check — evidence & validation Sep 17, 2026 — 7:25 PM
{
"server": "cloudflare",
"content-type": "text/event-stream"
}{
"name": "betterpost",
"version": "0.1.0",
"title": null
}Publisher supplied
unverified| Name | BetterPost MCP |
| Vendor | BetterPost |
| Category | productivity |
| Docs | — |
| Repository | — |
| Auth expected | Auth expectations unknown |
Registry and publisher metadata from the deployment seed. Displayed as supplied — MCP Tools does not verify it.
Independently observed
verified| Server name | betterpost |
| Server version | 0.1.0 |
| Transport | Streamable HTTP |
| Protocol version | 2025-06-18 |
| First observed | Aug 6, 2026 |
| Last observed | 48 min ago |
| Last successful | 48 min ago |
| Origin | Registry seed |
Facts recorded by scanners during passive observation — initialize and list calls only, never tool invocation.