vr-org-mcp
A read-only MCP server that gives agents one-call access to live VR/AR/XR news, VR.org editorial, events, deals, rankings, and canonical explanations from VR.org.
Search latest VR/AR/XR headlines with category/keyword filters (
search_vr_news) and get trending topics (get_vr_trending).List VR.org original articles and fetch a full article by slug, including metadata, canonical URL, and body HTML (
list_vr_originals,get_vr_article).Get upcoming industry events (
get_vr_events), curated product deals/prices (get_vr_deals), and compare two headsets side-by-side (compare_vr_headsets).Get ranked top VR games/apps lists (
get_top_vr_games,get_top_vr_apps) and list aggregated news sources with counts (list_vr_sources).Ask for canonical short answers plus pillar-page links to common VR/AR/XR questions (
vr_explain).Attach browsable resources: latest news, latest originals, upcoming events, guides, and full article bodies via
vrorg://URIs.Use prompts:
recommend_a_headset,this_week_in_vr, andexplain_vr_topicfor guided workflows.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vr-org-mcpwhat are the latest VR deals?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
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-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/mcpHuman setup walkthrough for every client: vr.org/connect.
Related MCP server: korean-news-mcp
Tools
Tool | What it returns |
| Latest VR / AR / XR headlines from the live feed, with optional category filter and keyword search (all keywords must match, in any order) |
| Topics currently trending across the feed |
| Summaries of VR.org's own editorial articles, newest first |
| Full content of one original by slug: metadata, canonical URL, and the article body HTML |
| Upcoming VR / AR / XR industry events (conferences, expos, launches), soonest first |
| Curated product picks with prices, badges, and retailer links |
| Side-by-side of two headsets (partial names accepted) |
| Current ranked top VR games list |
| Current ranked top VR apps and utilities list |
| The news sources VR.org aggregates, with counts |
| Canonical short answer plus pillar-page link for a common question |
Resources
Browsable MCP resources an app can attach as context:
Resource | Contents |
| Latest aggregated VR / AR / XR headlines |
| Index of VR.org's newest original articles |
| Upcoming VR / AR / XR industry events |
| VR.org's canonical pillar-guide answers in one doc |
| Full HTML body of any original article (resource template) |
Prompts
Prompt | What it does |
| Recommends a headset from VR.org's picks given a budget and use case |
| Drafts a weekly VR / AR / XR roundup from the feed and originals |
| 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 |
| (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.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.
Available Tools
11 toolscompare_vr_headsetsCompare two VR headsetsARead-only
Returns a side-by-side of two headsets (price, badge, description, retailer links) drawn from VR.org's curated catalog. Accepts partial names like 'Quest 3' or 'PSVR2'.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | First headset name (partial match allowed). | |
| b | Yes | Second headset name (partial match allowed). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavioral context: the comparison is drawn from a curated catalog and returns specific field groups, which matters because no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The returned-value summary is front-loaded and the partial-name affordance trails it as supporting detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only comparison tool with no output schema, the description covers what is compared, what comes back, and where the data comes from. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters already document 'partial match allowed' with maxLength constraints. The description's example strings ('Quest 3', 'PSVR2') and the partial-match restatement add marginal illustration but no syntax or format detail beyond the schema, so the baseline 3 holds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (side-by-side comparison of two headsets) and names the exact fields returned (price, badge, description, retailer links) plus the data source (VR.org curated catalog). This is clearly distinguishable from every sibling, all of which are single-item get/list/search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (compare two named headsets) and usefully notes that partial names are accepted, so an agent knows it need not resolve exact titles first. However, it never states when to prefer this over a plain lookup or what happens when a name is ambiguous or missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_vr_appsGet the top VR apps listARead-only
Returns VR.org's current ranked list of the top VR apps and utilities.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds only that the list is 'current' (live ranking) and sourced from VR.org, with no detail on ordering basis, list size, or refresh cadence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is appropriately sized for a zero-parameter list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and annotations covering the safety profile, the description needs only to say what comes back – which it does. Minor gaps remain around how the ranking is determined and whether games are included, given the get_top_vr_games sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline for a 4 – there is nothing for the description to disambiguate, and the empty schema is self-consistent with a no-argument list endpoint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns ... ranked list of the top VR apps and utilities') and names the source (VR.org). It is clear what the agent gets, though it never explicitly contrasts itself with the close sibling get_top_vr_games, which shares the 'top' listing pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance, and no alternative is named. The nearest siblings get_top_vr_games and get_vr_trending are not mentioned, so the agent must infer whether this covers games too or only apps/utilities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_vr_gamesGet the top VR games listBRead-only
Returns VR.org's current ranked list of the top VR games.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds that results are 'current' and sourced from VR.org, which is useful context about freshness and provenance, but says nothing about list size, ordering, or caching.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every word carries information about source, freshness, and content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-param read tool with no output schema and annotations covering safety, the essentials are present. However, it omits how many entries are returned and how the ranking is determined, and leaves the overlap with get_top_vr_apps unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify; the baseline for a parameterless tool applies. No parameter-level ambiguity exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns VR.org's current ranked list of top VR games. It is clear what the tool produces, but it does not distinguish itself from the sibling get_top_vr_apps, which an agent could easily confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to choose this over get_top_vr_apps, get_vr_trending, or get_vr_deals. The agent must infer the selection criteria entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vr_articleGet a VR.org article by slugARead-only
Returns the full content of a single VR.org original article by its slug: metadata (title, author, date, category, tags, snippet), the canonical URL, and the article body HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The article slug, e.g. 'why-vr-is-the-perfect-horror-machine'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), and the description goes further by describing the return shape — metadata fields, canonical URL, and body HTML — which matters because there is no output schema. It omits error behavior for a bad slug and any rate/format caveats, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, followed by the returned payload. No filler, no redundancy with the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns, and it does so concretely (metadata, canonical URL, body HTML). It is nearly complete for a simple single-resource read; only edge-case behavior on a nonexistent slug is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself supplies an example slug, so the single parameter is fully documented structurally. The description adds no slug format or validity guidance beyond what the schema already provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns the full content of a single VR.org original article, keyed by slug. It enumerates exactly what comes back (metadata, canonical URL, body HTML). It does not explicitly contrast itself with list_vr_originals or search_vr_news, though the singular-by-slug framing implies the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'by its slug' — the agent knows it needs a slug in hand to call this. There is no explicit when-to-use/when-not statement and no alternative named for retrieving VR.org content (e.g. list_vr_originals for browsing, search_vr_news for discovery).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vr_dealsGet VR product deals and pricesARead-only
Returns VR.org's current curated product picks in five sections (headsets, AR and XR glasses, accessories, haptics and body tracking, gaming hardware) with prices, badges, and retailer links. Optionally filter to one section.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | Optional section filter, e.g. 'headsets'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds useful return-shape context (prices, badges, retailer links) but says nothing about data freshness, whether the curated set can be empty, or any rate limits on this external-facing call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the return content and section list come first, the optional filter second. No filler, nothing repeated from the title, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single optional-parameter read tool with no output schema, the description covers what is returned (five sections with prices, badges, retailer links) and how to narrow it. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description goes beyond the schema by enumerating the five valid section values (headsets, AR and XR glasses, accessories, haptics and body tracking, gaming hardware), whereas the schema only offers 'e.g. headsets'. This meaningfully helps the agent pick a legal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Returns) and resource (VR.org's current curated product picks) and enumerates the five sections it covers, which lets an agent separate it from siblings like compare_vr_headsets or get_vr_trending without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Optionally filter to one section' implies when the parameter is used, but there is no explicit guidance on when to prefer this tool over compare_vr_headsets for headset pricing or when not to call it. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vr_eventsGet upcoming VR / AR / XR eventsARead-only
Returns upcoming VR, AR, and XR industry events (conferences, expos, launches) from VR.org's events calendar, soonest first. Set include_past to also include events that have already ended.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results, 1-50 (default 10). | |
| include_past | No | Include events that have already ended (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds provenance (VR.org's events calendar) and ordering (soonest first), which is useful context, but it says nothing about return format or how limit affects results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core purpose front-loaded and the optional parameter behavior appended. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only, zero-required-parameter list tool with full schema coverage and annotations carrying the safety profile, the description covers purpose, source and ordering adequately. Only minor gaps remain, such as pagination or return-shape hints, which are not critical here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description restates include_past's effect but adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (returns upcoming VR/AR/XR industry events) and adds scope detail (conferences, expos, launches) plus the source calendar. It is clearly distinguishable from siblings like search_vr_news or get_vr_deals, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'upcoming' and the include_past toggle, which tells the agent how to broaden the query. There is no explicit when-not-to-use guidance and no alternative tool is named for adjacent needs such as news or deals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vr_trendingGet trending VR topicsBRead-only
Returns the topics currently trending across VR.org's aggregated VR / AR / XR feed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety and network behavior are covered. The description adds only that the data comes from an aggregated feed; it says nothing about how 'trending' is computed, the time window, ordering, or result size, which are the traits that actually matter for a zero-parameter feed tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and the resource, with zero filler or redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description is the only source of information about the return shape, yet it does not say how many topics are returned, how they are ranked, or over what period 'trending' is measured. It is minimally adequate but leaves the agent guessing about the most operationally relevant details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The single sentence neither contradicts nor needs to supplement an empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Returns) and resource (topics currently trending across the aggregated VR/AR/XR feed), which is meaningfully distinct from sibling list-style tools like get_top_vr_games or get_vr_events. It does not, however, explicitly contrast itself with those siblings, so an agent must infer the 'trending vs. top-ranked' distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to choose this over get_top_vr_games, get_top_vr_apps, or search_vr_news, nor any exclusions or prerequisites. It simply describes the output content with no usage framing at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vr_originalsList VR.org original articlesARead-only
Returns summaries of VR.org's own editorial articles (original reporting, opinion, retrospectives, and guides), newest first. Optionally filter by category.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results, 1-50 (default 15). | |
| category | No | Optional category filter: hardware, gaming, software, enterprise, ar, or xr. Omit for all categories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds two useful behavioral facts beyond the annotations: results are ordered newest first, and it returns summaries rather than full article bodies (implying get_vr_article is needed for content). No auth or rate-limit details, but that is a minor omission for a read-only list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the resource and content scope are front-loaded, and the optional filter is mentioned last. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only list with no output schema, the description covers scope, content types, ordering, and return granularity. It could go slightly further by noting the absence of pagination beyond the limit cap or by pointing to get_vr_article for full text, but nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the schema already documents limit (1-50, default 15) and enumerates the category values. The description only echoes that category filtering is optional, adding no syntax or semantic detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Returns summaries) and resource (VR.org's own editorial articles), and enumerates the content types (original reporting, opinion, retrospectives, guides). This clearly distinguishes it from siblings like search_vr_news and get_vr_article, which cover external news and full articles respectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions that category filtering is optional and implies a browsing/listing use case, but never states when to prefer this over search_vr_news or get_vr_article. The relationship to sibling tools is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vr_sourcesList VR.org news sourcesARead-only
Returns the news sources VR.org aggregates, with per-source article counts and status, plus aggregate totals.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly=true, destructive=false and openWorld=true, so the safety profile is covered. The description adds real behavioral value by disclosing what is returned (per-source article counts, status, aggregate totals), which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, front-loading the resource and immediately enumerating the returned fields. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return shape, and it does so adequately (counts, status, totals). Minor gaps remain — 'status' is undefined and no ordering or pagination behavior is mentioned — but nothing essential is missing for a no-arg catalogue lister.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate; baseline for zero-param tools is 4. No filter or pagination options exist that would need explaining.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb ('Returns') with a specific resource ('the news sources VR.org aggregates') and even previews the payload (per-source counts, status, totals). It is clearly distinct from siblings like search_vr_news or get_vr_article, though it does not explicitly name those alternatives as a contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no sibling is named as an alternative. However, for a zero-parameter list tool that enumerates the source catalogue, the intended use is strongly implied by the resource itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vr_newsSearch VR / AR / XR newsARead-only
Returns the latest VR, AR, and XR headlines from VR.org's live aggregated feed plus VR.org originals, newest first. Optionally filter by category and by keywords: every keyword must appear in the headline, snippet, tags or source, in any order, and headline matches are listed first. Use a few keywords ('steam frame price') rather than a sentence, and omit the query for the latest headlines.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results, 1-50 (default 20). | |
| query | No | Optional keywords, e.g. 'steam frame price'. All must match, in any order. Omit for the latest headlines. | |
| category | No | Optional category filter: hardware, gaming, software, enterprise, ar, or xr. Omit for all categories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, openWorld, non-destructive), and the description adds real behavioral detail beyond them: every keyword must match across headline/snippet/tags/source, matching is order-independent, and headline matches are ranked first. It adds value without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: source and ordering first, then match semantics, then a practical query-writing tip. Front-loaded with the most decision-relevant information and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only three optional parameters, no output schema, and full schema coverage, the description supplies everything needed to call the tool correctly: what it returns, ordering, filter semantics, and how to shape the query. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining where keywords are matched (headline, snippet, tags, source) and the ranking rule that headline matches come first. It also reinforces the 'omit for latest' behavior of the query parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the latest VR, AR, and XR headlines'), names the source ('VR.org's live aggregated feed plus VR.org originals'), and specifies ordering ('newest first'). This clearly separates it from siblings like get_vr_article and list_vr_originals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage guidance: use a few keywords rather than a sentence, and omit the query for the latest headlines — an explicit when/when-not. It doesn't name a sibling alternative or state exclusions relative to other news-ish tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vr_explainExplain a VR / AR / XR topicARead-only
Returns a canonical VR.org answer and the authoritative guide link for a common VR / AR / XR question, covering the main buying guides and product hubs (for example 'what is vr', 'best headset', 'steam frame price', 'meta vr glasses', 'ar glasses', 'vr for beginners').
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | The topic or question, e.g. 'what is vr' or 'steam frame price'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint=true, destructiveHint=false) and open-world scope, so the bar is lower. The description adds meaningful context beyond them: the answer is canonical/curated (not a live web lookup), and it is paired with an authoritative guide link covering buying guides and product hubs. It does not disclose failure behavior for unrecognized topics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with what is returned, then scopes the covered topics. The example list is long but each item clarifies the accepted input domain, so nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return, and it does so ('canonical VR.org answer and the authoritative guide link'). For a single-required-parameter tool this is largely sufficient; the only gap is what happens when a topic falls outside the guide/hub set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by enumerating representative topic strings ('best headset', 'meta vr glasses', 'ar glasses', 'vr for beginners') that widen the agent's sense of accepted input beyond the two examples in the schema. That materially reduces the risk of mis-typed queries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns a canonical answer plus an authoritative guide link for VR/AR/XR questions. This is clearly distinct from retrieval-style siblings like get_vr_article or search_vr_news. It stops short of naming any sibling directly, so it doesn't earn the explicit differentiation a 5 requires.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the tool is for 'a common VR / AR / XR question' and the examples show the intended scope. There is no explicit when-not guidance (e.g., 'for news use search_vr_news', 'for head-to-head specs use compare_vr_headsets'), leaving the agent to infer boundaries from the example list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.5.0- Changed
compare_vr_headsets2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_top_vr_apps1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_top_vr_games1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_vr_article2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_vr_deals2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_vr_events2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_vr_trending1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_vr_originals2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
list_vr_sources1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search_vr_news3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / query / descriptionPrevious value: -"Optional keyword to match in the title or snippet."New value: +"Optional keywords, e.g. 'steam frame price'. All must match, in any order. Omit for the latest headlines."
- Changed
vr_explain3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / topic / descriptionPrevious value: -"The topic or question, e.g. 'what is vr' or 'best vr headset'."New value: +"The topic or question, e.g. 'what is vr' or 'steam frame price'."
7 tool updates
v0.1.3- Changed
compare_vr_headsets2 fields changed- added
Input schema / properties / a / maxLengthAdded value: +200 - added
Input schema / properties / b / maxLengthAdded value: +200
- Changed
get_vr_article1 field changed- added
Input schema / properties / slug / maxLengthAdded value: +200
- Changed
get_vr_deals1 field changed- added
Input schema / properties / section / maxLengthAdded value: +200
- Added
get_vr_events - Changed
list_vr_originals1 field changed- added
Input schema / properties / category / maxLengthAdded value: +100
- Changed
search_vr_news2 fields changed- added
Input schema / properties / category / maxLengthAdded value: +100 - added
Input schema / properties / query / maxLengthAdded value: +500
- Changed
vr_explain1 field changed- added
Input schema / properties / topic / maxLengthAdded value: +500
10 tool updates
v0.1.2- First observed
compare_vr_headsets - First observed
get_top_vr_apps - First observed
get_top_vr_games - First observed
get_vr_article - First observed
get_vr_deals - First observed
get_vr_trending - First observed
list_vr_originals - First observed
list_vr_sources - First observed
search_vr_news - First observed
vr_explain
TDQS
Scored across 11 tools
Each tool targets a distinct resource or action: events, deals, headset comparison, top games, top apps, sources, explain, news search, trending, originals, and article retrieval. The only mild overlap is between news search, originals listing, and article retrieval, but their scopes are clearly separated by breadth and source type.
All names use snake_case and mostly follow a verb_noun pattern (get_vr_events, list_vr_sources, search_vr_news, compare_vr_headsets). However, vr_explain inverts the usual order and get_top_vr_games/apps add a modifier, creating minor deviations from the otherwise predictable convention.
Eleven tools is well-scoped for a VR content aggregation hub, covering the main content types without obvious redundancy. Each tool earns its place and the count stays within a manageable range for an agent to navigate.
Core workflows are covered: browsing events, deals, top lists, sources, trending, explainers, news search, originals, and full original articles. Minor gaps exist, such as no dedicated detail endpoint for individual events, deals, or aggregated external news articles, but agents can likely work around these via the available list/search tools.
Maintenance
Related MCP Connectors
Dive into the latest and greatest from the tech world with our Hacker News MCP server.
Read-only MCP server for RZ AI Labs — query its services, workshops, and contact info.
Public read-only MCP server for Genvernium product and developer resources.
Read-only MCP server for live Polymarket, Kalshi, Limitless odds; Manifold sentiment.
Related MCP Servers
- FlicenseBqualityFmaintenanceA read-only MCP server that provides access to financial news, Wall Street Bets sentiment analysis, and detailed options data from sellthenews.org. It enables LLMs to retrieve real-time news feeds, search historical data, and analyze options chains or Greek exposure for specific tickers.5-
- AlicenseNot gradedqualityDmaintenanceMCP server that provides Korean and global AI/tech news via 6 tools (categories, search, trending, article reading, daily briefing) without requiring an API key.1MIT
- AlicenseNot gradedqualityCmaintenanceSearch, trending, topics, and local news all in one MCP server. Article previews, deduplication, source filtering, and 40+ languages built in.24 npm2MIT
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that ingests and normalizes recent AI, tech, and research news from multiple sources, exposing tools for media agents to query and retrieve article content on demand.-