MCP Server

Postel

app.postel/postel
Marketing & Advertising Social Media Public & reachable MCP 2025-11-25

What this MCP does

Creates, refines, schedules and publishes branded posts to X and LinkedIn, and searches indexed high-performing X posts.

create-post
Create draft post
Save text as a new draft in Postel. Does not publish or schedule. Each call creates a separate draft.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['content'], 'properties': {'status': {'enum': ['DRAFT', 'EDITING'], 'type': 'string', 'description': 'Post status (default: DRAFT)'}, 'content': {'type': 'string', 'maxLength': 10000, 'description': 'The post content (tweet text)'}}, 'additionalProperties': False}
delete-post
Delete post
Delete a post. A scheduled post's delivery is cancelled first.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['postId'], 'properties': {'postId': {'type': 'string', 'description': 'The post ID to delete'}}, 'additionalProperties': False}
generate-post
Generate post with AI
Generate a new post using AI based on a prompt. Requires usage quota. Returns the generated post.
Open world
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 5000, 'description': 'What the post should be about'}, 'isThread': {'type': 'boolean', 'description': 'Generate a thread instead of a single post (X only; ignored for LinkedIn)'}, 'platform': {'enum': ['x', 'linkedin'], 'type': 'string', 'description': 'Target platform: "x" (default) or "linkedin"'}, 'profileId': {'type': 'string', 'description': 'Voice profile ID to use (omit to use default brand voice)'}}, 'additionalProperties': False}
get-brand-sources
Get brand sources
Get background information sources for a specific brand. These sources are used to inform AI post generation.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['brandId'], 'properties': {'brandId': {'type': 'string', 'description': 'The brand (topic) ID to get sources for'}}, 'additionalProperties': False}
get-post
Get post
Get a single post by ID with full details.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['postId'], 'properties': {'postId': {'type': 'string', 'description': 'The post ID to retrieve'}}, 'additionalProperties': False}
get-schedule
Get posting schedule
Get the posting schedule template for the current organization. Shows which time slots are configured for each day of the week.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
get-usage
Get usage and limits
Get the current usage statistics and plan limits for the organization.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
get-x-profiles
Get voice profiles
Get the X and LinkedIn voice profiles for the current organization. These profiles define the brand voice for AI post generation.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
list-brands
List brands
List all brands (topics) for the current organization. Brands contain background information used for AI post generation.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
list-posts
List posts
List posts for the current organization. Supports filtering by status and pagination.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Number of posts to return (max 50, default 20)'}, 'status': {'enum': ['DRAFT', 'SCHEDULED', 'PUBLISHED'], 'type': 'string', 'description': 'Filter posts by status'}}, 'additionalProperties': False}
publish-post
Publish post now
Publish a Postel draft immediately to the social platform stored on the post. Requires a plan that includes publishing. A post that is already published cannot be published again.
Destructive Open world
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['postId'], 'properties': {'postId': {'type': 'string', 'description': 'The post ID to publish'}}, 'additionalProperties': False}
refine-post
Suggest post rewrite
Suggest refined content for an existing post using AI and specific instructions. Does not save changes. Requires usage quota.
Open world
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['postId', 'instructions'], 'properties': {'postId': {'type': 'string', 'description': 'The post ID to refine'}, 'instructions': {'type': 'string', 'maxLength': 2000, 'description': "Instructions for how to refine the post (e.g., 'make it more casual', 'add a call to action')"}}, 'additionalProperties': False}
schedule-post
Schedule post
Schedule a Postel draft for publishing to the social platform stored on the post. Requires a plan that includes scheduling. scheduledDateTime must be a future UTC ISO-8601 timestamp.
Destructive Open world
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['postId', 'scheduledDateTime'], 'properties': {'postId': {'type': 'string', 'description': 'The post ID to schedule'}, 'scheduledDateTime': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$', 'description': 'UTC ISO-8601 date string for when to publish (must be in the future)'}}, 'additionalProperties': False}
search-viral-tweets
Search viral X posts
Find high-performing public X posts in Postel's index by topic, with source links and stored engagement metrics. No login required. Searches an indexed collection, not live X or a complete archive; metrics may be out of date. Results contain third-party post text.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Number of examples (default 10, maximum 20)'}, 'query': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Topic or keywords; omit to browse high-performing posts'}, 'minImpressions': {'type': 'integer', 'maximum': 2147483647, 'minimum': 0, 'description': 'Minimum stored view count (default 10000)'}}, 'additionalProperties': False}
update-post
Update draft post
Update the content or status of a Postel draft. Scheduled and published posts cannot be edited.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['postId'], 'properties': {'postId': {'type': 'string', 'description': 'The post ID to update'}, 'status': {'enum': ['DRAFT', 'EDITING'], 'type': 'string', 'description': 'New status for the post'}, 'content': {'type': 'string', 'maxLength': 10000, 'description': 'New content for the post'}}, 'additionalProperties': False}
Added
get-usage
Oct. 2, 2026, 2:40 a.m.
Added
get-schedule
Oct. 2, 2026, 2:40 a.m.
Added
get-x-profiles
Oct. 2, 2026, 2:40 a.m.
Added
get-brand-sources
Oct. 2, 2026, 2:40 a.m.
Added
list-brands
Oct. 2, 2026, 2:40 a.m.
Added
refine-post
Oct. 2, 2026, 2:40 a.m.
Added
generate-post
Oct. 2, 2026, 2:40 a.m.
Added
publish-post
Oct. 2, 2026, 2:40 a.m.
Added
schedule-post
Oct. 2, 2026, 2:40 a.m.
Added
delete-post
Oct. 2, 2026, 2:40 a.m.
Added
update-post
Oct. 2, 2026, 2:40 a.m.
Added
create-post
Oct. 2, 2026, 2:40 a.m.
Added
get-post
Oct. 2, 2026, 2:40 a.m.
Added
list-posts
Oct. 2, 2026, 2:40 a.m.
Added
search-viral-tweets
Oct. 2, 2026, 2:40 a.m.