Skip to main content
Glama
README.md
# xarticle-mcp

Save an **X (Twitter) Article** to disk as **Obsidian-faithful Markdown** — with images and videos downloaded locally — so it reads in Obsidian the way it reads on X.

One tool: **`xarticle <url>`** → creates `<slug>/<slug>.md` + `images/` (+ `media/` for video) in your working directory, with YAML frontmatter and local, rewritten links.

Works in any MCP client: **Claude Code, Codex, Cursor, Windsurf**, … It fetches with **your own** X session, stored encrypted on your machine.

---

## Requirements

- **Node.js ≥ 18**
- **Google Chrome or Microsoft Edge** installed (Edge ships with Windows). The tool drives your existing browser — no separate browser download.

## Install (one line)

Add this to your MCP client config:

```json
{
  "mcpServers": {
    "xarticle": { "command": "npx", "args": ["-y", "xarticle-mcp"] }
  }
}
```

- **Claude Code** — `.mcp.json` in your project root (or your user MCP config).
- **Codex** — add an MCP server entry with the same `command` + `args`.
- **Cursor / Windsurf / others** — same `command` + `args` in their MCP settings.

> Prefer running straight from source? Use `"args": ["-y", "github:aniirude/xarticle-mcp"]`.

> macOS/Linux use the same config. The tool uses your installed Chrome/Edge; nothing else to install.

## One-time login (paste 2 cookies)

X Articles need your logged-in session. There's no automated login (X rate-limits those), so you paste two session cookies once — they're stored **encrypted** at `~/.xarticle/`.

```bash
npx -y xarticle-mcp login
```

It walks you through it:
1. In a browser logged into X, press **F12**.
2. **Application** tab (Chrome/Edge) or **Storage** (Firefox) → **Cookies** → `https://x.com`.
3. Copy the value of **`auth_token`**, paste, Enter.
4. Copy the value of **`ct0`**, paste, Enter.

Check it anytime with `npx -y xarticle-mcp status`.

*Alternative (no DevTools):* `npx -y xarticle-mcp login --browser` reuses your real Chrome profile — but you must fully quit Chrome first (it can be flaky on Windows).

## Use

In your MCP client, ask:

```
xarticle https://x.com/<user>/status/<id>
```

It writes, in your current working directory:

```
<article-slug>/
  <article-slug>.md     # frontmatter + body, local links
  images/               # 01.jpg, 02.jpg, …  (+ cover)
  media/                # <slug>-01.mp4, …   (videos, when downloadable)
```

- Saves to the directory your MCP client is running in. Pass `outputDir` to override.
- Videos with a direct MP4 are embedded as `![[…mp4]]` (Obsidian renders a player). Stream-only (HLS) videos fall back to a poster image + a link to X.

### Tool input

| field | type | default | notes |
|-------|------|---------|-------|
| `url` | string | — | the X Article/post URL |
| `outputDir` | string | working dir | where to create the folder |
| `imageFormat` | `"original"` \| `"png"` | `original` | `png` re-encodes (needs `sharp`) |

### CLI (handy for testing)

```bash
npx -y xarticle-mcp save <url> [outputDir]   # fetch without an MCP client
npx -y xarticle-mcp status                    # check the saved session
```

## Notes & caveats

- **Personal use.** This automates access with your own session; keep it low-volume. Respect X's Terms.
- **Only what you can see.** Articles your account can't view won't fetch.
- **Obsidian video** embeds (`![[…mp4]]`) render inside an Obsidian vault.
- **X changes its markup.** All X-DOM selectors live in `src/fetchArticle.ts` — the one file to update if extraction drifts.

## Develop

```bash
npm install
npm run build
npm run smoke   # offline: markdown/video conversion + tools/list
```

MIT © aniirude

TDQS

A4.4/5.0

Scored across 1 tool

Disambiguation5/5

Only one tool exists, so there is no possibility of confusion between tools.

Naming Consistency5/5

With a single tool, naming consistency is inherently perfect.

Tool Count4/5

For the narrow purpose of fetching X articles, a single tool is reasonable, though slightly limited in scope.

Completeness3/5

The tool handles fetch and save, but lacks operations like listing, deleting, or managing multiple articles, which could be useful.

Maintenance

ActivityInactive
ResponsivenessNo issues