Skip to main content
Glama

Read an X (Twitter) post

read_x_post
Read-onlyIdempotent

Read public X (Twitter) posts from x.com or twitter.com URLs or post ids, through X's documented oEmbed endpoint (publish.x.com/oembed), with no login and no key. Use when the user shares a link to a post and wants what it says, who wrote it, the day it went up and its language. Each post row has text, author (handle, name), createdAt (YYYY-MM-DD), lang, the links in the text and hasMedia. X cuts posts longer than 280 characters in the embed and ends them with an ellipsis. The embed carries no media files, quoted post, like or view counts, replies or thread, so this tool cannot return them. A post X will not embed (deleted, protected, age-restricted, suspended author) comes back as a type "error" row with code unavailable, never partial data. Reads only the posts asked for; no timelines, search or profiles.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
postsYesPost URLs or numeric ids, e.g. ["https://x.com/jack/status/20", "20"]

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
cacheYesHow the result was served: HIT or STALE from a cache tier, MISS or BYPASS when it was fetched now.
resultsYesOne row per requested post, read through X's oEmbed endpoint, or an error row with a code.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • removedInput schema / properties / includeThread
      Removed value: -{
      -  "description": "Also return the author's earlier posts in the same self-thread, oldest first (default false, at most 25 posts)",
      -  "type": "boolean"
      -}
    • changedOutput schema / properties / results / description
      Previous value: -"One row per requested post (and its earlier thread posts when asked), or an error row with a code."New value: +"One row per requested post, read through X's oEmbed endpoint, or an error row with a code."
    • changedOutput schema / properties / results / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "article": {
      -        "additionalProperties": true,
      -        "type": [
      -          "object",
      -          "null"
      -        ]
      -      },
      -      "author": {
      -        "additionalProperties": true,
      -        "type": "object"
      -      },
      -      "counts": {
      -        "additionalProperties": true,
      -        "type": "object"
      -      },
      -      "createdAt": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "input": {
      -        "type": "string"
      -      },
      -      "media": {
      -        "items": {
      -          "additionalProperties": true,
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "quote": {
      -        "additionalProperties": true,
      -        "type": [
      -          "object",
      -          "null"
      -        ]
      -      },
      -      "replies": {
      -        "properties": {
      -          "available": {
      -            "const": false
      -          },
      -          "count": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "reason": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "available"
      -        ],
      -        "type": "object"
      -      },
      -      "text": {
      -        "type": "string"
      -      },
      -      "threadOf": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "post"
      -      },
      -      "url": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "id",
      -      "url",
      -      "text",
      -      "author",
      -      "counts",
      -      "replies",
      -      "input"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "code": {
      -        "type": "string"
      -      },
      -      "input": {
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "postId": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "retryable": {
      -        "type": "boolean"
      -      },
      -      "status": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "type": {
      -        "const": "error"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "input",
      -      "code",
      -      "message",
      -      "retryable"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "author": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "createdAt": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "hasMedia": {
      +        "type": "boolean"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "input": {
      +        "type": "string"
      +      },
      +      "lang": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "links": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "source": {
      +        "const": "oembed"
      +      },
      +      "text": {
      +        "type": "string"
      +      },
      +      "type": {
      +        "const": "post"
      +      },
      +      "url": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "id",
      +      "url",
      +      "text",
      +      "author",
      +      "input"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "input": {
      +        "type": "string"
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "postId": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "retryable": {
      +        "type": "boolean"
      +      },
      +      "status": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "error"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "input",
      +      "code",
      +      "message",
      +      "retryable"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "cache": {
      +      "description": "How the result was served: HIT or STALE from a cache tier, MISS or BYPASS when it was fetched now.",
      +      "properties": {
      +        "ageSeconds": {
      +          "type": "number"
      +        },
      +        "source": {
      +          "enum": [
      +            "worker",
      +            "origin",
      +            "coalesced"
      +          ],
      +          "type": "string"
      +        },
      +        "status": {
      +          "enum": [
      +            "HIT",
      +            "STALE",
      +            "MISS",
      +            "BYPASS"
      +          ],
      +          "type": "string"
      +        },
      +        "tier": {
      +          "type": "string"
      +        },
      +        "ttlSeconds": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "status",
      +        "tier",
      +        "ageSeconds",
      +        "ttlSeconds"
      +      ],
      +      "type": "object"
      +    },
      +    "results": {
      +      "description": "One row per requested post (and its earlier thread posts when asked), or an error row with a code.",
      +      "items": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": true,
      +            "properties": {
      +              "article": {
      +                "additionalProperties": true,
      +                "type": [
      +                  "object",
      +                  "null"
      +                ]
      +              },
      +              "author": {
      +                "additionalProperties": true,
      +                "type": "object"
      +              },
      +              "counts": {
      +                "additionalProperties": true,
      +                "type": "object"
      +              },
      +              "createdAt": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "id": {
      +                "type": "string"
      +              },
      +              "input": {
      +                "type": "string"
      +              },
      +              "media": {
      +                "items": {
      +                  "additionalProperties": true,
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "quote": {
      +                "additionalProperties": true,
      +                "type": [
      +                  "object",
      +                  "null"
      +                ]
      +              },
      +              "replies": {
      +                "properties": {
      +                  "available": {
      +                    "const": false
      +                  },
      +                  "count": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "reason": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "available"
      +                ],
      +                "type": "object"
      +              },
      +              "text": {
      +                "type": "string"
      +              },
      +              "threadOf": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "type": {
      +                "const": "post"
      +              },
      +              "url": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "id",
      +              "url",
      +              "text",
      +              "author",
      +              "counts",
      +              "replies",
      +              "input"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "additionalProperties": true,
      +            "properties": {
      +              "code": {
      +                "type": "string"
      +              },
      +              "input": {
      +                "type": "string"
      +              },
      +              "message": {
      +                "type": "string"
      +              },
      +              "postId": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "retryable": {
      +                "type": "boolean"
      +              },
      +              "status": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "type": {
      +                "const": "error"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "input",
      +              "code",
      +              "message",
      +              "retryable"
      +            ],
      +            "type": "object"
      +          }
      +        ]
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "results",
      +    "cache"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.