by runesleo
Universal content reader MCP Server for 10+ platforms
# Add to your Claude Code skills
git clone https://github.com/runesleo/x-readerGuides for using ai agents skills like x-reader.
Last scanned: 8/8/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-08-08T04:55:36.308Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how x-reader compares with popular alternatives.
x-reader is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by runesleo. Universal content reader MCP Server for 10+ platforms. It has 988 GitHub stars.
Yes. x-reader passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/runesleo/x-reader" and add it to your Claude Code skills directory (see the Installation section above).
x-reader is primarily written in Python. It is open-source under runesleo on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh x-reader against similar tools.
No comments yet. Be the first to share your thoughts!
From $49 · 30 days · terms & refunds
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Automated security scan — not a certification.
Give your agent a URL. Let x-reader handle the source.
x-reader is a universal content reader for AI agents. It reads X/Twitter, articles, YouTube, Bilibili, podcasts, WeChat, Xiaohongshu, Telegram, RSS, and the open web, then normalizes the result into structured source content for downstream research, summarization, and automation.
Its differentiator is evidence-aware reading: a search snippet is not the source, a tweet caption is not the attached video, and a video description is not a transcript. When a material source layer is still missing, x-reader keeps that gap explicit instead of pretending the read is complete.
简体中文: README.zh-CN.md · Website: xreader.leolabs.me · Try it in the browser
Paste this into your AI agent (Claude Code, Codex, Cursor, …):
Set up x-reader on this computer by following the official instructions at https://github.com/runesleo/x-reader/blob/main/install.md.
Your agent installs the skill and the CLI, runs the read-only x-reader doctor self-check, and reads a first link with you. The steps it follows are in install.md; to do it by hand, see below.
The plugin bundles the skills in skills/ and the x-reader MCP server (started with uvx, so uv must be installed).
/plugin install x-reader --marketplace runesleo/x-readercodex plugin marketplace add runesleo/x-reader, then codex plugin add x-reader@runesleo.cursor-plugin/plugin.json; Cursor Marketplace listing is not live yet.Optional sources (logged-in pages, Telegram, transcription) still need the setup in install.md.
The same runesleo marketplace lists Leo's other tools. After adding it, install any of them by name:
| Plugin | What it does | Claude Code | Codex |
|---|---|---|---|
| polymarket-toolkit | Read-only Polymarket wallet profiles, PnL, Brier scores | ✓ | ✓ |
| x-signal-digest | Turn an X feed into 0–3 useful signals | ✓ | ✓ |
| video-explainer-kit | Brief → reviewed vertical explainer video | ✓ | ✓ |
| talk-human | Make drafts sound like you | ✓ | ✓ |
| multi-ai-sync | Check every agent's results reach your machine | ✓ | ✓ |
The public beta is live for public X, YouTube, and generic web URLs: Product · 中文 · Open app. Paste a URL and it returns the same canonical evidence states used by x-reader: PASS, PARTIAL, FAIL, or UNKNOWN. Results can be copied as a human-readable receipt or JSON, and shared without upgrading missing evidence into success.
Run it locally with x-reader-web, or use the hosted beta above. See Evidence Receipt, the distribution plan, and the public-beta gate.
npx skills add runesleo/x-reader --skill x-reader
Then give your agent a URL and ask it to read the original source. For example:
Read the original source. If it contains attached video/audio that matters to the answer, consume that too. Tell me what you actually read and what is still missing.
The canonical skill uses an explicit evidence contract:
PASS original source + all material media needed for the answer were read
PARTIAL some material layer is still missing
FAIL the original source could not be fetched reliably
UNKNOWN retrieved material is too ambiguous to verify
Run the same evidence contract through a small local web surface:
pip install -e .
x-reader-web --host 127.0.0.1 --port 8787
The current hosted-MVP policy accepts public X/Twitter, YouTube, and generic web URLs only. It uses a fresh temporary HOME/inbox per request and does not inherit saved browser sessions, Telegram credentials, Groq keys, Obsidian/output paths, or external X cookies.
The web layer does not add a second reader or evidence state machine: it invokes the existing x-reader URL --json path in the isolated environment and projects the result into PASS / PARTIAL / FAIL / UNKNOWN.
See Evidence Receipt for API examples, the isolation boundary, and the mixed-media receipt contract.
The source-fetch hardening has a live, reproducible delta against public v0.3.0:
https://example.com: v0.3.0 hit Jina HTTP 401 and failed; v0.3.1 safely falls back to direct_html_pinned and returns READ.media_status=present, so post text can be READ while unconsumed attached media stays PARTIAL.
Watch the 12-second MP4 proof · v0.3.1 release notes
A public X benchmark was run end-to-end after the Agent Skill merged to main:
Source:
https://x.com/dontbesilent/status/2103875422522077377
Post text PASS fetched from the original status via oEmbed
Attached video PASS public MP4 resolved and downloaded
Video duration ~178.3 seconds
Spoken content PASS native zh subtitle track retrieved and read
Broken URL FAIL non-zero exit + machine-readable JSON error
The public owner/repo install path was also verified from a fresh directory:
npx skills add runesleo/x-reader --skill x-reader
# Repository cloned
# Found 3 skills
# Selected 1 skill: x-reader
# Installation complete
See First-success receipt for the dated verification details.
Agents can often find something about a URL while still missing the source the user asked about.
x-reader makes these distinctions explicit:
| What the agent has | What it may claim |
|---|---|
| Search result / preview card | Discovery only — not source evidence |
| X post text | Claims in the post text only |
| X post text + unconsumed attached video | Post may pass; video stays PARTIAL |
| First post of a thread, quoted post or X Article not read | PARTIAL until that layer is shown absent (a quoted post can also be read; an X Article body never is) |
| Video page title / description | Metadata only — not spoken content |
| Subtitle track covering the whole video | Spoken-content evidence; the video stays PARTIAL because pictures are not analyzed |
| Login wall / deleted page / empty payload | FAIL or PARTIAL, never invented completion |
| Paywall teaser, cookie wall, menu-only page | PARTIAL, FAIL or UNKNOWN; a generic page passes only with substantial prose |
| Source | Base read path | Media / gated completion |
|---|---|---|
| X / Twitter | oEmbed → FxTwitter → Article/Jina → Playwright | Agent Skill can inspect attached media with local media tools |
| Web / articles | Pinned direct read (checks redirects and embedded audio/video) → Jina Reader text | A redirect into X, YouTube, podcasts, etc. is handed to that reader; the hosted beta shows the direct read |
| YouTube | yt-dlp metadata/subtitles | Groq Whisper fallback when configured |
| Bilibili | Bilibili API | Subtitle/audio transcription workflow |
| Jina → Playwright | Headless browser fallback for public articles; saved login sessions are not used yet | |
| Xiaohongshu | Jina → Playwright | One-time local login may be required |
| Telegram | Telethon | Telegram credentials required |
| RSS | feedparser | — |
| Xiaoyuzhou / Apple Podcasts | Episode page and show notes | Spoken audio only with the opt-in local ASR flags below; notes alone stay PARTIAL |
Platform behavior changes over time. x-reader's contract is to expose the gap rather than overclaim coverage.
x-reader, its MCP server, and its skills run on your machine. There is no telemetry, and nothing is sent to the author's servers: the hosted web beta at xreader.leolabs.me is a separate service that the CLI, MCP server, and plugin never call.
When you ask it to read a URL, data goes only to these places:
| What | Where it goes |
|---|---|
| The URL you asked to read | Fetched directly from that site |
| X / Twitter post URLs | publish.twitter.com (oEmbed), api.fxtwitter.com (FxTwitter), then r.jina.ai (Jina Reader) as fallbacks |
| Article, WeChat, and Xiaohongshu URLs | r.jina.ai (Jina Reader) as a fallback reader; a local headless browser (Playwright) as the last fallback |
| YouTube and Bilibili | The platform itse |