VR.org VR / AR / XR Reader
Read-only VR / AR / XR news, full-text editorial, events, deals, and buyer guides from VR.org.
Install
Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).
vr-org-mcpclaude mcp add vr-org-vr-ar-xr-reader -- npx -y vr-org-mcp@0.4.4
{
"mcpServers": {
"vr-org-vr-ar-xr-reader": {
"command": "npx",
"args": [
"-y",
"vr-org-mcp@0.4.4"
]
}
}
}
Documentation
From the project's README on GitHub, refreshed weekly. Links open on GitHub.
Contents
vr-org-mcp
Read-only Model Context Protocol server for VR.org, a dedicated VR / AR / XR news publication and aggregator.
It gives any MCP-compatible agent (Claude Desktop, Claude Code, Cursor, Continue, and others) one-call access to live VR, AR, and XR news, VR.org's original editorial (including full article text), the VR/AR/XR events calendar, curated headset deals, buyer-guide answers, and top-game and top-app lists.
Eleven tools, five resources, and three prompts. Zero keys. Zero writes. Zero payments.
Install
Run it directly with npx (no global install needed):
npx vr-org-mcp
Claude Desktop
One-click: download the .mcpb bundle from the latest release and double-click it to install into Claude Desktop. Or configure manually:
Add to your claude_desktop_config.json:
{
"mcpServers": {
"vr-org": {
"command": "npx",
"args": ["-y", "vr-org-mcp"]
}
}
}
Claude Code
claude mcp add vr-org -- npx -y vr-org-mcp
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"vr-org": {
"command": "npx",
"args": ["-y", "vr-org-mcp"]
}
}
}
Hosted remote endpoint (no install)
VR.org also runs the same tools as a remote server over MCP's streamable-HTTP transport, so web clients (ChatGPT connectors, Claude.ai connectors) can use it with no local install:
https://vr.org/mcp
Human setup walkthrough for every client: vr.org/connect.
Tools
| Tool | What it returns |
|---|---|
search_vr_news | Latest VR / AR / XR headlines from the live feed, with optional category filter and keyword search (all keywords must match, in any order) |
get_vr_trending | Topics currently trending across the feed |
list_vr_originals | Summaries of VR.org's own editorial articles, newest first |
get_vr_article | Full content of one original by slug: metadata, canonical URL, and the article body HTML |
get_vr_events | Upcoming VR / AR / XR industry events (conferences, expos, launches), soonest first |
get_vr_deals | Curated product picks with prices, badges, and retailer links |
compare_vr_headsets | Side-by-side of two headsets (partial names accepted) |
get_top_vr_games | Current ranked top VR games list |
get_top_vr_apps | Current ranked top VR apps and utilities list |
list_vr_sources | The news sources VR.org aggregates, with counts |
vr_explain | Canonical short answer plus pillar-page link for a common question |
Resources
Browsable MCP resources an app can attach as context:
| Resource | Contents |
|---|---|
vrorg://news/latest | Latest aggregated VR / AR / XR headlines |
vrorg://originals/latest | Index of VR.org's newest original articles |
vrorg://events/upcoming | Upcoming VR / AR / XR industry events |
vrorg://guides | VR.org's canonical pillar-guide answers in one doc |
vrorg://article/{slug} | Full HTML body of any original article (resource template) |
Prompts
| Prompt | What it does |
|---|---|
recommend_a_headset | Recommends a headset from VR.org's picks given a budget and use case |
this_week_in_vr | Drafts a weekly VR / AR / XR roundup from the feed and originals |
explain_vr_topic | Explains a VR topic grounded in VR.org's canonical answer |
How it works
Every tool composes VR.org's public JSON API (https://vr.org/api/*) into a single agent-friendly response. The server is a thin proxy: it holds no secrets, writes nothing, and cannot move money.
Threat model
VR.org's editorial is controlled, but the live feed also carries third-party RSS headlines. To keep a malicious or compromised upstream headline from manipulating the calling model, every tool output is:
- Sanitized. Control characters and zero-width / direction-override characters are stripped from every string.
- Capped. Serialized responses are limited to 50 KB so a large payload cannot flood the agent's context window.
Inputs are validated before any outbound request and every free-text parameter is length-capped at the schema layer. Errors are returned as structured, non-echoing objects rather than raw stack traces; on the rare path where an error string reaches the caller it runs through the same output scrub as a tool result, with any credential-shaped substring redacted and the text capped, and is flagged with isError.
Configuration
The API base URL is fixed to https://vr.org in source and cannot be overridden, so the server can only ever talk to VR.org.
| Env var | Default | Purpose |
|---|---|---|
VR_ORG_UA_SUFFIX | (none) | Optional suffix appended to the outbound User-Agent |
Development
npm install
npm run dev # run from source over stdio
npm run build # compile to dist/
npm test # run the offline test suite
npm run typecheck # type-check without emitting
Changelog
0.5.0
Protocol upgrade. Requires Node.js 20 or newer.
- The server now runs on the MCP SDK v2 (
@modelcontextprotocol/server) and speaks the 2026-07-28 protocol revision. Clients on the 2025 revisions connect exactly as before: the opening message decides which revision a connection uses. - Node.js 18 is no longer supported, because the v2 SDK needs Node.js 20. If you are pinned to Node 18, stay on 0.4.4.
- The install is much smaller. The old SDK pulled in an HTTP stack this stdio server never used, more than 80 packages of it. The production dependency tree is now three packages, and
npm auditis clean with no overrides. - The hosted endpoint at
https://vr.org/mcpmoved to the same protocol on the same day. It also answers at/mcpdirectly now instead of redirecting to/api/mcp, which halves the round trips for clients configured with the short URL. - No tool, resource or prompt changed.
0.4.4
search_vr_news now matches on words instead of one exact phrase.
- The keyword filter used to require the whole query to appear, as typed, somewhere in a headline or snippet. Agents tend to send queries like "steam frame release date" or "best vr headset 2026", and those came back empty even when the feed was full of matching stories. In a replay of 25 realistic queries against the live feed, 18 returned nothing.
- A query is now split into keywords. Filler ("what is the latest", "news", "today", years and month names) is dropped, and every remaining keyword has to appear in the headline, snippet, tags, category or source name, in any order. Plurals match singulars, punctuation is ignored ("half-life alyx" finds "Half-Life: Alyx"), and a model name typed without its space still matches ("psvr2" finds "PS VR2"). Numbers and two-letter terms match whole words only, so "quest 3" does not return Quest 3S stories.
- Headline matches are listed first, newest first inside each group.
- When a query is sent, the response adds
match(all_terms,partial,none, orlatestfor a query that was all filler),terms(the keywords actually used) andtotal_matches. If nothing matches every keyword, the closest matches are returned and labelledpartialwith ahint. A call with no query returns exactly what it did before. - The hosted endpoint at
https://vr.org/mcpcarries the same matcher.
0.4.3
Maintenance release.
- The
vr_explaintool description now names the newer topics it can answer ("steam frame price", "meta vr glasses"), so an agent reading the tool list knows to ask for them. The hosted endpoint athttps://vr.org/mcpcarries the same wording. - The release workflow now publishes through npm trusted publishing (OIDC) and only falls back to a token if that is rejected. Provenance is attached as before.
0.4.2
vr_explain and the vrorg://guides resource now answer from VR.org's live explainer feed, so they stay current between releases.
- The answers used to be a list compiled into the package in July 2026. By October most realistic topics ("steam frame", "steam frame price", "meta vr glasses", "quest 4") returned
no_explainer, and several of the answers that did exist were out of date. The list is now fetched fromhttps://vr.org/api/explainersand cached for ten minutes, the same way deals and events are, so a guide refresh on the site reaches agents without a package release. - Every fetched entry is validated before use (keys must be a non-empty list of non-empty strings, and the link must be on
https://vr.org) and passes through the same sanitizer as other upstream text. If the fetch fails or returns nothing valid, the built-in list answers instead. That list now mirrors the site's current 34 guides, up from 10, so an offline server still gives current answers. A failed fetch is remembered for one minute so an outage does not slow down every call. - Matching is unchanged: the longest key contained in the topic wins, so "steam frame price" reaches the price page and not the Steam Frame hub.
- The
explain_vr_topicprompt no longer offers 'passthrough' as an example topic, which had no answer. It and theno_explainerhint now suggest 'steam frame'. - The
get_vr_dealsdescription names all five catalog sections: headsets, AR and XR glasses, accessories, haptics and body tracking, gaming hardware. - Bumps
@modelcontextprotocol/sdkfrom 1.30.0 to 1.32.1 and refreshes theip-addressandproxy-addrpins. The advisories behind this sit in the SDK's OAuth client and HTTP transport, which this stdio server never loads.npm auditon the production dependencies reports zero vulnerabilities.
0.4.1
Fixes from a September 2026 audit, matched on the hosted endpoint at vr.org/mcp.
get_vr_articlenow returns the whole article.body_htmlwas cut at the general 4,096-character string cap, which truncated most articles mid-tag while still reportingok: true. It now has its own 45,000-character cap, and the 50 KB response cap still applies. The article also carriesupdated, the date a correction was applied, which the hosted endpoint already returned.vr_explainno longer answers short topics with the wrong guide. A topic like "vr" or "3" used to match inside a longer key and return "PSVR2 vs Quest 3" with confidence; the reverse match now needs four or more characters starting on a word boundary.compare_vr_headsetsmatches "Pimax Dream Air SE" correctly. Thepimaxalias was a prefix match that rewrote every Pimax query to Crystal.- Reading
vrorg://news/latestno longer shrinks keyword search to 25 items for the next minute (the two shared a cache key with different request sizes). - A malformed slug in
vrorg://article/{slug}now says "not found" instead of "temporarily unavailable, retry shortly". - Refreshed transitive dependency pins (hono, fast-uri, qs) for
npm audit.
0.4.0
Content provenance. Feed results now carry a provenance field on every item, either vr_org_editorial (written and edited by VR.org) or third_party_feed (a headline or snippet relayed verbatim from an outside publisher). Any response containing relayed text also carries a content_notice saying to treat that text as data rather than instructions, and the vrorg://news/latest resource carries the same notice in prose. This is additive metadata, so existing fields and existing consumers are unaffected.
The point is to let a calling client tell which text VR.org actually stands behind. It follows the August 2026 GhostSplice research on splitting instructions across MCP channels, whose core mitigation is that clients should treat server output as data. This server is not a vector for that attack (it never requests sampling, its tool descriptions are static literals, and every value that can flow back in as a tool argument is validated against a strict allowlist), but it does relay text it did not write, and now it says so.
Also bumps @modelcontextprotocol/sdk to 1.30.0 and pins four transitive dependencies of the SDK's HTTP transport that carried advisories. This server is stdio-only and never loads that transport, so the pins are hygiene rather than an exposure fix. npm audit --omit=dev reports zero vulnerabilities.
0.3.2
Error-path hardening: tool errors now pass through the same output scrub as tool results, with secrets redacted and error text capped. All free-text parameters gain schema-level max lengths. No behavior change for valid inputs.
License
MIT. A VR.org project.
Frequently asked questions
What is VR.org VR / AR / XR Reader?
Read-only VR / AR / XR news, full-text editorial, events, deals, and buyer guides from VR.org.
How do I install VR.org VR / AR / XR Reader?
It runs on your machine. In Claude Code: claude mcp add vr-org-vr-ar-xr-reader -- npx -y vr-org-mcp@0.4.4. For other clients, paste the JSON configuration from this page into their MCP settings.
Does VR.org VR / AR / XR Reader need an API key?
Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.
Is VR.org VR / AR / XR Reader open source?
Yes. Its code is on GitHub under the MIT license.
Who maintains VR.org VR / AR / XR Reader?
It is published by evanatpizzarobot. AI.tn lists it but does not maintain or endorse it.
From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.