xpost
Server Details
Schedule posts to 9 social networks from Claude, ChatGPT or Cursor.
Glama couldn't complete the latest health check. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 51.7% over 21 days
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- xpost-to/xpost-agent
- GitHub Stars
- 0
TDQS
Scored across 18 tools
Most tools target distinct resource+action pairs, and descriptions actively cross-reference to steer agents away from wrong calls (e.g., bulk_post vs create_post, delete_post vs take_down_post vs retry_delivery). The one soft spot is the analytics cluster — get_post_metrics, get_insights, get_top_posts, get_best_times, and get_delivery_receipt all report engagement and could be confused at a glance, though the descriptions do scope each one (single post vs window vs ranked deliveries). Naming 5 gives the overall strong distinction.
Every tool follows a clean snake_case verb_noun/verb_target pattern: create_post, update_post, delete_post, take_down_post, list_posts, get_insights, upload_media, etc. No camelCase, no mixed styles; read tools uniformly use list_/get_ prefixes and write tools use action verbs.
18 tools is slightly heavy but justified by a broad domain spanning posting, scheduling, media upload, delivery/retry, analytics, account health, guardrails, and platform rules. Each tool earns its place with no obvious redundancy, though the count sits near the upper end of the comfortable band.
Full lifecycle is covered: create/update/delete for unposted posts, take_down_post for live posts, retry_delivery for failures, plus bulk_post, upload_media, scheduling (get_best_times), analytics (insights, metrics, top posts), account listing/health, guardrails, and platform rules. Approval is intentionally human-driven via links, so the absence of an approval-action tool is by design rather than a gap.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
create_post1 field changed- changed
Output schema / properties / free_post_ride / descriptionPrevious value: -"With free_first_post: this post reached another of their accounts as part of the same free first post, written minutes earlier. One free delivery per account, within half an hour of the first."New value: +"With free_first_post: this post reached another of their accounts as part of the same free first post, sent in the same reply. One free delivery per account, within a few minutes of the first."
- Changed
update_post1 field changed- changed
Output schema / properties / free_post_ride / descriptionPrevious value: -"With free_first_post: this post reached another of their accounts as part of the same free first post, written minutes earlier. One free delivery per account, within half an hour of the first."New value: +"With free_first_post: this post reached another of their accounts as part of the same free first post, sent in the same reply. One free delivery per account, within a few minutes of the first."
18 tool updates
- Changed
bulk_post1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
check_guardrails1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
create_post1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
delete_post1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
get_best_times1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
get_delivery_receipt1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
get_insights1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
get_post_metrics1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
get_posting_rules1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
get_project1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
get_top_posts1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
list_accounts1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
list_connection_issues1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
list_posts1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
retry_delivery1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
take_down_post1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
update_post2 fields changed- changed
Input schema / properties / post_id / descriptionPrevious value: -"The post to change — an id list_posts returned, never one built from memory. An id this project does not hold is refused with `error_code: not_found`; read the list again rather than trying another id."New value: +"The post to change — an id list_posts returned, never one built from memory. Every edit gives the post a NEW id (the answer's `id`); use that one next time. An id an edit retired is refused with `error_code: replaced` and `replaced_by`, the current id. An id this project does not hold is refused with `error_code: not_found`; read the list again rather than trying another id." - added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
- Changed
upload_media1 field changed- added
Output schema / properties / replaced_byAdded value: +{ + "description": "With error_code `replaced`: the id the post has now. An edit gives a post a new id; use this one.", + "type": "string" +}
2 tool updates
- Changed
create_post3 fields changed- changed
Output schema / properties / drafts_waiting / descriptionPrevious value: -"How many drafts this project now holds, none of them on its way anywhere. Sent with publishing_needs_plan."New value: +"How many drafts are now waiting, none of them on its way anywhere. Sent with publishing_needs_plan." - changed
Output schema / properties / publishing_needs_plan / descriptionPrevious value: -"Nothing on this project can publish beyond its one free post: sending needs a plan. Nothing REFUSES a draft or a scheduled post any more — a queue may be filled without one — so this is the only warning, and it is worth passing on as it is written rather than discovered one slot at a time."New value: +"Nothing here can publish beyond the one free post: sending needs an xpost subscription. Nothing REFUSES a draft or a scheduled post any more — a queue may be filled without one — so this is the only warning, and it is worth passing on as it is written rather than discovered one slot at a time." - changed
Output schema / properties / queued_posts / descriptionPrevious value: -"How many posts are scheduled on this project, none of them going anywhere beyond the free first one. Sent with publishing_needs_plan on a scheduled post."New value: +"How many posts are scheduled, none of them going anywhere beyond the free first one. Sent with publishing_needs_plan on a scheduled post."
- Changed
update_post3 fields changed- changed
Output schema / properties / drafts_waiting / descriptionPrevious value: -"How many drafts this project now holds, none of them on its way anywhere. Sent with publishing_needs_plan."New value: +"How many drafts are now waiting, none of them on its way anywhere. Sent with publishing_needs_plan." - changed
Output schema / properties / publishing_needs_plan / descriptionPrevious value: -"Nothing on this project can publish beyond its one free post: sending needs a plan. Nothing REFUSES a draft or a scheduled post any more — a queue may be filled without one — so this is the only warning, and it is worth passing on as it is written rather than discovered one slot at a time."New value: +"Nothing here can publish beyond the one free post: sending needs an xpost subscription. Nothing REFUSES a draft or a scheduled post any more — a queue may be filled without one — so this is the only warning, and it is worth passing on as it is written rather than discovered one slot at a time." - changed
Output schema / properties / queued_posts / descriptionPrevious value: -"How many posts are scheduled on this project, none of them going anywhere beyond the free first one. Sent with publishing_needs_plan on a scheduled post."New value: +"How many posts are scheduled, none of them going anywhere beyond the free first one. Sent with publishing_needs_plan on a scheduled post."
3 tool updates
- Changed
create_post1 field changed- added
Output schema / properties / plans_linkAdded value: +{ + "description": "The same page as a ready-made Markdown link. On a refusal with error_code needs_plan, include it in the reply as-is — it is where the person activates a plan.", + "type": "string" +}
- Changed
get_project1 field changed- added
Output schema / properties / publishing / properties / plans_linkAdded value: +{ + "description": "The plans page as a ready-made Markdown link. Where `needs_plan` is true, include it as-is.", + "type": "string" +}
- Changed
update_post1 field changed- added
Output schema / properties / plans_linkAdded value: +{ + "description": "The same page as a ready-made Markdown link. On a refusal with error_code needs_plan, include it in the reply as-is — it is where the person activates a plan.", + "type": "string" +}
3 tool updates
- Changed
create_post2 fields changed- changed
Input schema / properties / media_pending / descriptionPrevious value: -"The picture is still to come: the person adds it in the approval card. Lets a post for Instagram, TikTok, YouTube or Pinterest be created without media; it cannot be approved until the media is on it."New value: +"The picture is still to come: the person adds it in the approval card. Lets a post for Instagram, TikTok, YouTube or Pinterest be created without media; it goes out once the media is on it (or, on a project that holds agent posts, can be approved then)." - changed
Input schema / properties / scheduled_at / descriptionPrevious value: -"ISO 8601 with Z or an offset, or \"next_slot\" for the project's own posting schedule (get_project shows `queue`). Omit to go out on approval."New value: +"ISO 8601 with Z or an offset, or \"next_slot\" for the project's own posting schedule (get_project shows `queue`). Omit to publish now — or, on a project that holds agent posts, as soon as it is approved."
- Changed
get_delivery_receipt1 field changed- added
Output schema / properties / made_by_you_just_nowAdded value: +{ + "description": "You created this post minutes ago; its card is already on screen.", + "type": "boolean" +}
- Changed
update_post1 field changed- changed
Input schema / properties / scheduled_at / descriptionPrevious value: -"New time (Z or an offset); \"next_slot\" hands it to the project's queue; null clears it so it goes out once approved."New value: +"New time (Z or an offset); \"next_slot\" hands it to the project's queue; null clears it, and it goes out now — or once approved, on a project that holds agent posts."
2 tool updates
- Changed
create_post1 field changed- added
Output schema / properties / shownAdded value: +{ + "description": "Where this post is already on screen, and that a receipt call now would show it a second time.", + "type": "string" +}
- Changed
update_post1 field changed- added
Output schema / properties / shownAdded value: +{ + "description": "Where this post is already on screen, and that a receipt call now would show it a second time.", + "type": "string" +}
18 tool updates
- First observed
bulk_post - First observed
check_guardrails - First observed
create_post - First observed
delete_post - First observed
get_best_times - First observed
get_delivery_receipt - First observed
get_insights - First observed
get_post_metrics - First observed
get_posting_rules - First observed
get_project - First observed
get_top_posts - First observed
list_accounts - First observed
list_connection_issues - First observed
list_posts - First observed
retry_delivery - First observed
take_down_post - First observed
update_post - First observed
upload_media
Publisher details
- Operator
- xpost (Digital Abstracts SL, Barcelona) · Publisher source
- Operator website
- https://xpost.to · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://xpost.to/docs/mcp · Publisher source
- Trust center
- https://xpost.to/security · Publisher source
- Restrictions
- Needs an xpost account: sign in with OAuth when your client asks, or use an API key from Settings. Every plan includes the MCP server and API; 7-day free trial, then from $12/month. No admin approval, no regional limits, no custom OAuth app needed. · Publisher source
Related MCP Connectors
Draft, check and schedule posts to your connected social accounts from Claude, ChatGPT or Cursor.
Create, schedule and publish Instagram and Facebook posts from Claude or ChatGPT.
Draft, schedule and publish social posts to nine platforms from any AI agent.
Schedule social posts, threads and video to X, LinkedIn, Bluesky, Mastodon and YouTube from your AI.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceSchedule and analyze social media posts from Claude, ChatGPT, or Cursor. Remote OAuth server, 17 tools across 9 platforms, free on every plan. Server URL: https://socialrobot.io/api/mcpMIT
- FlicenseAqualityDmaintenanceSchedule and manage social media posts across Facebook, Instagram, Twitter/X, LinkedIn, YouTube, TikTok, and Pinterest directly from Claude.10-
- AlicenseBqualityCmaintenanceEnables posting, scheduling, and analyzing social media content across 16+ platforms through MCP clients like Claude Desktop, Claude Code, and Cursor.5128 npmMIT
- AlicenseNot gradedqualityBmaintenanceSocial media scheduling and publishing for AI agents. 17 validation-first tools to post to X, LinkedIn, Instagram, TikTok, YouTube, Reddit, Discord, Telegram, and more through one connected workspace.87 npm95MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.