{
  "$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
  "name": "io.github.pc-style/x-md",
  "title": "x.md",
  "description": "Read public X posts, threads, profiles, and search results as Markdown or JSON.",
  "version": "1.2.0",
  "websiteUrl": "https://fast.mdfromx.com/",
  "documentationUrl": "https://fast.mdfromx.com/docs/mcp",
  "icons": [
    {
      "src": "https://fast.mdfromx.com/logo.svg",
      "mimeType": "image/svg+xml",
      "sizes": [
        "any"
      ]
    }
  ],
  "repository": {
    "source": "github",
    "url": "https://github.com/pc-style/x-md"
  },
  "url": "https://fast.mdfromx.com/mcp",
  "serverUrl": "https://fast.mdfromx.com/mcp",
  "transport": "streamable-http",
  "authentication": "none",
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://fast.mdfromx.com/mcp",
      "supportedProtocolVersions": [
        "2026-07-28",
        "2025-11-25",
        "2025-06-18"
      ]
    }
  ],
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "resources": {
      "listChanged": false
    }
  },
  "tools": [
    {
      "name": "x_md_get_post",
      "title": "Read an X post or thread",
      "description": "Read one public X (formerly Twitter) post together with its thread and conversation context, as Markdown plus structured post objects. Accepts a full status permalink, or a handle plus a numeric status id. Use it whenever you are handed an x.com or twitter.com status link and need the text, author, media, engagement metrics, quoted post, or replies. Read-only and unauthenticated: it never posts, replies, likes, follows, or reads protected accounts."
    },
    {
      "name": "x_md_get_profile",
      "title": "Read an X profile and its latest posts",
      "description": "Read a public X profile — display name, bio, location, follower and following counts, join date, verification — together with that account’s latest original posts, with reposts and replies filtered out. Use it to find out who an account is, what it posts about, or what it has said recently. Read-only and unauthenticated; protected accounts return an error instead of partial data."
    },
    {
      "name": "x_md_search_posts",
      "title": "Search public X posts and accounts",
      "description": "Search public X posts or accounts by keyword, phrase, hashtag, or X advanced-search operator such as from:, to:, since:, until:, and filter:. Use it to find current public discussion on a topic, or to locate an account by name. Returns Markdown plus structured results. Read-only and unauthenticated; live search is rate limited per caller, and the photos, videos, and users feeds need the deployment to have X sessions configured."
    },
    {
      "name": "x_md_get_followers",
      "title": "List an X account’s followers",
      "description": "Page through the public followers of an X account, returning each follower’s handle, display name, bio, and counts. Use it to size or sample an audience. Read-only and unauthenticated; protected accounts return an error instead of partial data."
    },
    {
      "name": "x_md_get_following",
      "title": "List the accounts an X account follows",
      "description": "Page through the accounts a public X account follows, returning each one’s handle, display name, bio, and counts. Use it to map who an account pays attention to. Read-only and unauthenticated; protected accounts return an error instead of partial data."
    },
    {
      "name": "x_md_import_posts",
      "title": "Import an X account’s post history",
      "description": "Bulk-import a public X account’s posts over a date range, newest first, as raw post objects with every upstream field (the same contract as the HTTP route /{handle}/posts). Use it to read or archive what an account posted between two dates, beyond what one profile page shows. Results are capped at 100 posts per call; when more exist, next_arguments holds the exact arguments for the next call into older posts. Each call spends one bulk import: 3 per hour and 5 per day per address without an API key, or the key’s own import allowance. Read-only; protected accounts return an error instead of partial data."
    },
    {
      "name": "submit_feedback",
      "title": "Submit feedback",
      "description": "Send feedback about x.md to the x.md team. Use it to report bugs, request features, ask questions or share what worked well. Include the exact steps or URL when reporting a problem."
    }
  ],
  "resources": [
    {
      "uri": "https://fast.mdfromx.com/llms.txt",
      "name": "x-md-llms-txt",
      "mimeType": "text/plain"
    },
    {
      "uri": "https://fast.mdfromx.com/llms-full.txt",
      "name": "x-md-llms-full-txt",
      "mimeType": "text/plain"
    },
    {
      "uri": "https://fast.mdfromx.com/openapi.json",
      "name": "x-md-openapi",
      "mimeType": "application/json"
    },
    {
      "uri": "https://fast.mdfromx.com/index.md",
      "name": "x-md-overview",
      "mimeType": "text/markdown"
    },
    {
      "uri": "https://fast.mdfromx.com/mcp/server-card",
      "name": "x-md-server-card",
      "mimeType": "application/mcp-server-card+json"
    }
  ],
  "protocolVersions": [
    "2026-07-28",
    "2025-11-25",
    "2025-06-18"
  ],
  "documentation": "https://fast.mdfromx.com/docs/mcp",
  "usage": {
    "method": "POST",
    "headers": {
      "Content-Type": "application/json",
      "Accept": "application/json, text/event-stream"
    },
    "example": {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/list",
      "params": {}
    }
  }
}