Xtracticle

com.xtracticlev3.2.0更新於 Oct 3, 2026

Read public X (Twitter) posts, threads and X Articles as clean Markdown. Read-only, no auth.

已驗證Streamable HTTP可網頁執行Web Search & ScrapingKnowledge & Memory

概覽

AI 產生的概覽

讓助理透過遠端唯讀端點,把公開的 X(Twitter)貼文、串文和 X 文章讀取成乾淨的 Markdown。

功能
這是一個遠端 MCP 伺服器,在提供方的 /mcp 端點上以 Streamable HTTP 提供單一工具 read_x_post。它會把公開的 X 貼文、自我串文和 X 文章轉成 Markdown,並可選擇純文字、展開串文與 YAML front-matter。同一項服務也提供 Markdown HTTP API,以及 PDF、EPUB、ZIP 和文字等網頁匯出。
適用情境
當助理需要以文字形式引用、摘要或封存公開 X 內容,而不是爬取網頁時很適合。適用於研究、完整閱讀串文,以及把貼文匯入筆記或知識庫。
執行需求
需要支援 Streamable HTTP 的遠端 MCP 用戶端;未宣告任何套件、執行環境、帳號、API 金鑰或環境變數。需要能連線到提供方端點的網路。
安裝前請注意
宣告為唯讀且不需驗證,因此不會索取憑證。請求會送到第三方服務,由它代為抓取 X 內容,其回應有 5 分鐘的邊緣快取;提供方也提醒控制請求頻率。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Xtracticle,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "xtracticle": {
      "type": "http",
      "url": "https://xtracticle.com/mcp"
    }
  }
}

README

[Xtracticle Logo]

Xtracticle

Download X (Twitter) Articles, threads & posts as PDF, Markdown, EPUB/Kindle, text or a ZIP with images.

Free, open source, no login required.

[Xtracticle - Download X articles & threads as Markdown, Text or PDF | Product Hunt]

Features • Getting Started • Architecture • SEO & AI • API • Contributing

[React 19] [TypeScript] [Vite 6] [TailwindCSS 4] [Cloudflare Workers]

Live: xtracticle.com — or just change x.com to xtracticle.com in any post URL.

Features

Export formats

FormatWhat you get
PDFA4, print-ready; title/author/date/source header, images, page numbers, clickable source link. Rendered page by page so long articles never produce blank PDFs and lines are never cut.
MarkdownHeadings, bold/italic/strikethrough, links, nested lists, quotes, code, dividers, images, video thumbnails. Optional YAML front-matter (Obsidian properties, Hugo/Jekyll/Astro).
EPUB 3Reflowable e-book with embedded images and metadata — Kindle (Send to Kindle), Kobo, Apple Books.
ZIP + imagesMarkdown + every image stored locally — an offline archive that survives deleted posts.
TextClean .txt.
ObsidianCopies the Markdown and opens a new note via obsidian://new.

Content

  • 📝 X Articles — full Draft.js conversion: cover, inline images, videos, captions, embedded posts
  • 🧵 Threads from any post — paste the first, a middle or the last post; the whole self-thread is assembled (other people's replies are excluded)
  • 💬 Posts — line breaks, photos, videos and quoted posts
  • 🔗 Flexible input — x.com, twitter.com, mobile, fxtwitter/vxtwitter/fixupx, nitter/xcancel links, /i/web/status/, bare IDs, links inside shared text

Workflow

  • 🔁 URL swap — xtracticle.com/{user}/status/{id} opens a post directly, with rich link previews (Open Graph) when shared
  • 📚 Batch mode — up to 20 links → one ZIP of Markdown files
  • 🔖 Bookmarklet and PWA share target (share from the X app on Android)
  • 🔊 Listen — read aloud with the browser's text-to-speech
  • 📱 iPhone/iPad Shortcut — share a post from the X app straight to Xtracticle (public/shortcuts/)
  • 🤖 MCP server + Markdown API — AI assistants read X posts as Markdown (/mcp, /api/markdown/:id)
  • 📜 History, 🌙 dark mode, 🌍 English, Español, Português, 日本語, 简体中文, العربية, Türkçe (Arabic is right-to-left)
  • 📈 Analytics events — extract, download (format), copy, share, listen, batch_extract, errors — in GA4

Getting Started

bash
git clone https://github.com/ahmetdeveci3112-crypto/Xtracticle.gitcd Xtracticlenpm installnpm run dev

The dev server runs at http://localhost:5173. /api/* is served by the same handler as the Worker (src/shared/api.ts), and every landing page is rendered on the fly — no wrangler needed.

ScriptDescription
npm run devVite dev server with the API
npm run buildProduction build → dist/ (all landing pages, 404, sitemap)
npm run preview:workerBuild and run the real Worker locally with wrangler dev (SSR status pages, 404s, _headers)
npm run lintType-check the app and the Worker

Deployment

Cloudflare Workers + Static Assets, deployed automatically on push to main (build: npm run build, deploy: npx wrangler deploy). No environment variables.

wrangler.json:

  • run_worker_first — only /api/*, /mcp, /video/* and /*/status/* hit the Worker; everything else is served straight from the CDN
  • not_found_handling: "404-page" — unknown URLs return a real 404 (no soft-404s)
  • public/_headers — security headers, Link: </llms.txt>, download headers for the iOS Shortcut

Architecture

Browser ──► Cloudflare             ├─ Static assets (dist/)          /, /x-article-to-pdf, /tr/, … , 404.html, sitemap.xml             └─ Worker (src/worker.ts)                 ├─ /api/thread/:id, /api/tweet/:id ──► src/shared/api.ts ──► FxTwitter API                 │                                        (edge cache, 5 min)                 └─ /{user}/status/{id} ──► app shell + per-post OG tags + preloaded JSON (noindex)
src/├── App.tsx              UI: extraction, exports, batch mode, deep links├── i18n.ts              UI strings (en, tr, es, pt, ja, zh)├── lib/export.ts        PDF (jsPDF + html2canvas-pro), EPUB, ZIP (fflate), Obsidian├── lib/url.ts           Input + path parsing├── lib/analytics.ts     GA4 event helper├── shared/fx.ts         FxTwitter client (v2 thread endpoint + v1 fallback), shared by Worker & dev server├── shared/api.ts        JSON API handler with edge caching├── shared/convert.ts    Posts / threads / Draft.js articles → Markdown + text + metadata (app + Worker)├── shared/markdown.ts   GET /api/markdown/:id├── shared/mcp.ts        Remote MCP server (POST /mcp)├── shared/text.ts       Title extraction└── worker.ts            Cloudflare Worker (API + status-page SSR)site/├── blocks.ts            Types + localized shared blocks (shortcuts, privacy)├── pages.ts             English pages (one per search intent) + page registry├── pages-{es,pt,ja,zh,ar,tr}.ts  The same pages, localized (linked by `group`)├── curated.ts           Weekly “Best X Articles” pages from site/curated/*.json├── guides.ts            /guides — informational guides├── mcp-page.ts          /mcp-server — MCP setup docs├── render.ts            Head/meta/JSON-LD/content/footer rendering└── plugin.ts            Vite plugin: emits every page, 404.html and sitemap.xml

Heavy export libraries are dynamically imported, so the initial page only loads React + the app.

SEO & AI Discoverability

LayerImplementation
Intent pages/x-article-to-pdf, /x-article-to-markdown, /x-thread-to-pdf, /x-article-to-epub, /save-x-articles-to-obsidian, /thread-reader-app-alternative — each with unique, visible HTML content and FAQ
LanguagesEvery page in 7 languages (/, /es/…, /pt/…, /ja/…, /zh/…, /ar/…, /tr/…) + UI in 7 languages; first-visit language banner, remembered choice redirects (never for crawlers)
Crawlable contentContent is static HTML outside the React root — no JS needed to index it
Structured dataWebApplication, FAQPage (matches visible FAQ), BreadcrumbList
i18nReciprocal hreflang for every translation group + x-default
Share pages/{user}/status/{id} get post-specific OG/Twitter tags; noindex, follow
Sitemap / 404Generated at build; real 404 status for unknown URLs
AI/llms.txt, /llms-full.txt, AI crawlers allowed in robots.txt

API

GET /api/thread/:id  → { tweets: Tweet[], count, isThread }   # self-thread containing :idGET /api/tweet/:id   → TweetGET /api/markdown/:id → text/markdown  # ?format=markdown|text&thread=0|1&front_matter=0|1POST /mcp            → MCP (Streamable HTTP, stateless), tool read_x_post

Tweet mirrors the FxTwitter status object (text, author, media, quote, article, …). Responses are edge-cached for 5 minutes — please be gentle.

Weekly “Best X Articles”

/best-x-articles is a hand-reviewed weekly selection built from site/curated/*.json (title, author and a one-sentence summary in our own words — never the article text).

bash
npm run curate -- 2026-W41 https://x.com/user/status/123 https://x.com/other/status/456# → site/curated/2026-w41.json with title/author/lang filled in; write "intro", "topic" and "summary"npm run build   # issues with an empty summary are skipped automatically

The newest issue is shown on /best-x-articles (its /best-x-articles/<week> page canonicals to the hub until the next issue); older issues stay at /best-x-articles/<week>.

Contributing

  1. Fork the repo
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes
  4. Open a Pull Request

Notes:

  • Landing page copy lives in site/pages.ts; run npm run build to see the generated HTML
  • Keep src/shared/* free of DOM/Node-only APIs — it runs in both the Worker and the dev server
  • Test Worker-only behavior (SSR, 404, headers) with npm run preview:worker

License

MIT

來源:README.md,提交 5f58f88

工具

0
工具後設資料尚未被收錄。

版本歷史

1
  1. v3.2.0最新Oct 3, 2026