Skip to main content
Glama

Server Details

Schedule posts to 9 social networks from Claude, ChatGPT or Cursor.

Ownership verified

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

A4.1/5.0

Scored across 18 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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.

  1. 2 tool updates
    • Changedcreate_post1 field changed
      • changedOutput schema / properties / free_post_ride / description
        Previous 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."
    • Changedupdate_post1 field changed
      • changedOutput schema / properties / free_post_ride / description
        Previous 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."
  2. 18 tool updates
    • Changedbulk_post1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedcheck_guardrails1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedcreate_post1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changeddelete_post1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedget_best_times1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedget_delivery_receipt1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedget_insights1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedget_post_metrics1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedget_posting_rules1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedget_project1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedget_top_posts1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedlist_accounts1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedlist_connection_issues1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedlist_posts1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedretry_delivery1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedtake_down_post1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedupdate_post2 fields changed
      • changedInput schema / properties / post_id / description
        Previous 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."
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
    • Changedupload_media1 field changed
      • addedOutput schema / properties / replaced_by
        Added 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"
        +}
  3. 2 tool updates
    • Changedcreate_post3 fields changed
      • changedOutput schema / properties / drafts_waiting / description
        Previous 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."
      • changedOutput schema / properties / publishing_needs_plan / description
        Previous 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."
      • changedOutput schema / properties / queued_posts / description
        Previous 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."
    • Changedupdate_post3 fields changed
      • changedOutput schema / properties / drafts_waiting / description
        Previous 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."
      • changedOutput schema / properties / publishing_needs_plan / description
        Previous 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."
      • changedOutput schema / properties / queued_posts / description
        Previous 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."
  4. 3 tool updates
    • Changedcreate_post1 field changed
      • addedOutput schema / properties / plans_link
        Added 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"
        +}
    • Changedget_project1 field changed
      • addedOutput schema / properties / publishing / properties / plans_link
        Added value: +{
        +  "description": "The plans page as a ready-made Markdown link. Where `needs_plan` is true, include it as-is.",
        +  "type": "string"
        +}
    • Changedupdate_post1 field changed
      • addedOutput schema / properties / plans_link
        Added 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"
        +}
  5. 3 tool updates
    • Changedcreate_post2 fields changed
      • changedInput schema / properties / media_pending / description
        Previous 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)."
      • changedInput schema / properties / scheduled_at / description
        Previous 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."
    • Changedget_delivery_receipt1 field changed
      • addedOutput schema / properties / made_by_you_just_now
        Added value: +{
        +  "description": "You created this post minutes ago; its card is already on screen.",
        +  "type": "boolean"
        +}
    • Changedupdate_post1 field changed
      • changedInput schema / properties / scheduled_at / description
        Previous 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."
  6. 2 tool updates
    • Changedcreate_post1 field changed
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Where this post is already on screen, and that a receipt call now would show it a second time.",
        +  "type": "string"
        +}
    • Changedupdate_post1 field changed
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Where this post is already on screen, and that a receipt call now would show it a second time.",
        +  "type": "string"
        +}
  7. 18 tool updates
    • First observedbulk_post
    • First observedcheck_guardrails
    • First observedcreate_post
    • First observeddelete_post
    • First observedget_best_times
    • First observedget_delivery_receipt
    • First observedget_insights
    • First observedget_post_metrics
    • First observedget_posting_rules
    • First observedget_project
    • First observedget_top_posts
    • First observedlist_accounts
    • First observedlist_connection_issues
    • First observedlist_posts
    • First observedretry_delivery
    • First observedtake_down_post
    • First observedupdate_post
    • First observedupload_media

Publisher details

Operator
xpost (Digital Abstracts SL, Barcelona) · Publisher source
Vendor relationship
First-party · 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

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Schedule 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/mcp
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables posting, scheduling, and analyzing social media content across 16+ platforms through MCP clients like Claude Desktop, Claude Code, and Cursor.
    51
    28 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Social 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 npm
    95
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.