vr-org-mcp
v0.3.2
Published
Read-only MCP server for VR.org. Gives AI agents one-call access to live VR, AR, and XR news, original editorial with full article text, the events calendar, headset deals, buyer guides, and top-game and top-app lists.
Maintainers
Readme
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-mcpClaude Desktop
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-mcpCursor
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/mcpTools
| Tool | What it returns |
|------|-----------------|
| search_vr_news | Latest VR / AR / XR headlines from the live feed, with optional category filter and keyword match |
| 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 emittingChangelog
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.
