Skip to main content
Glama
sharkusmanch

RetroAchievements MCP Server

by sharkusmanch

retroachievements-mcp

A token-efficient Model Context Protocol server for the RetroAchievements Web API. It covers all 38 documented API_Get* endpoints through 15 read-only tools, and runs over stdio for local clients or Streamable HTTP for a hosted endpoint.

Why another one

Raw RetroAchievements responses are large and repetitive. GetClaims returns ~400 KB, GetAchievementOfTheWeek ~69 KB, and GetGameList repeats a dozen keys on every one of thousands of rows. Passing that through to a model wastes context. This server shapes every response:

Call

Raw upstream

Tool output

Achievement of the week

69,150 B

~790 chars

Recent claims (10)

398,397 B

~1,150 chars

Game + all 35 achievements

15,963 B

~4,000 chars

User progress on a game (5 locked achievements + rank)

34,610 B

~820 chars

How it does that:

  • Compact output. JSON has no whitespace. Lists come back as tables ({"cols":[…],"rows":[[…]]}). Empty fields and all-empty columns are dropped. Timestamps are shortened, and images are omitted unless you ask for them.

  • Projection. Each tool returns the fields a model actually uses, under short names. Duplicate and internal fields (MemAddr, ULIDs, forum IDs, rich-presence scripts) are dropped.

  • Server-side filtering and pagination. Examples: locked achievements only, games by award status, the newest N unlocks. Results carry total/next_offset only when truncated.

  • Few tools. 15 tools cover all 38 endpoints, which keeps the per-turn tool-schema cost low.

  • API efficiency. Every upstream call goes through:

    • a per-endpoint TTL cache;

    • request coalescing for identical in-flight calls;

    • a concurrency ceiling and a client-side rate limiter tuned to RetroAchievements' observed limits, with retries and backoff on 429/5xx.

  • Game search. RetroAchievements has no search endpoint, so per-console game catalogs are cached on disk. find_games searches every system without re-downloading 80+ catalogs on each run.

Related MCP server: Yuvansh MCP Server

Tools

Tool

Covers

get_user_profile

profile, summary (rank, status, recent games/unlocks), site awards

get_user_unlocks

achievements unlocked in the last N minutes, a date range, or on a day

get_user_games

recently played, completion progress (filter by mastered/beaten/…), completed, want-to-play

get_user_game_progress

one game's progress + locked/unlocked achievements with rarity; or a multi-game summary

get_user_social

following, followers, set requests, claims

find_games

search titles across all consoles, or list a console's games

list_consoles

console/system IDs

get_game

game info, plus achievements, hashes, progression/median times, unlock distribution, claims

get_game_rankings

high scores / latest masters

get_leaderboards

a game's leaderboards, a leaderboard's entries, or a user's entries on a game

get_achievement_unlocks

who unlocked an achievement, with rarity

get_feed

achievement of the week, top users, recent game awards, active/completed/dropped/expired claims

get_comments

comments on a game, achievement, or user wall

get_tickets

tickets: recent, by id, by game/achievement/developer, most-ticketed games

ra_api_raw

escape hatch: any endpoint, cleaned and size-capped

All user-scoped tools default to RA_USERNAME, so "how am I doing on Chrono Trigger?" needs no username argument.

Configuration

Get a Web API key from your RetroAchievements control panel.

Env

Default

RA_API_KEY

—

Required. RETROACHIEVEMENTS_API_KEY is accepted as an alias.

RA_USERNAME

—

Default user for user-scoped tools.

MCP_TRANSPORT

stdio (http in the container)

Or pass --stdio / --http.

MCP_HOST / MCP_PORT

127.0.0.1 / 8080

HTTP bind. Also --host / --port.

MCP_ALLOWED_HOSTS

—

Host allowlist for /mcp. Required off-loopback; on loopback defaults to localhost names. * disables.

MCP_AUTH_TOKEN

—

Optional bearer token (≥16 chars) required on /mcp.

RA_CACHE_DIR

$XDG_CACHE_HOME/retroachievements-mcp

Game-catalog cache. none = memory only.

RA_PREWARM_CATALOG

false

Load every console catalog in the background at startup.

RA_RATE_PER_MINUTE / RA_RATE_BURST

72 / 10

Client-side request pacing; a 429 pauses all requests.

RA_MAX_CONCURRENCY

4

Concurrent upstream requests.

RA_CACHE_MAX_BYTES

64MB

Response cache byte cap (bodies > 1 MB are never cached).

RA_CACHE_MAX_ENTRIES / RA_CACHE_TTL_SCALE

500 / 1

Response cache size; TTL multiplier (0 disables).

RA_TIMEOUT_MS

20000

Upstream request timeout.

LOG_LEVEL

info

Logs always go to stderr.

Running locally (stdio)

Claude Code, from a release tarball (fast: prebuilt, runtime dependencies only):

claude mcp add retroachievements \
  -e RA_API_KEY=your-key -e RA_USERNAME=your-name \
  -- npx -y https://github.com/sharkusmanch/retroachievements-mcp/releases/download/v0.1.0/sharkusmanch-retroachievements-mcp-0.1.0.tgz

Or straight from git. This builds on first launch (~1 minute with dev dependencies), so start it once in a terminal before a client with a short startup timeout uses it: npx -y github:sharkusmanch/retroachievements-mcp --version.

Any MCP client (mcpServers JSON):

{
  "mcpServers": {
    "retroachievements": {
      "command": "npx",
      "args": [
        "-y",
        "https://github.com/sharkusmanch/retroachievements-mcp/releases/download/v0.1.0/sharkusmanch-retroachievements-mcp-0.1.0.tgz"
      ],
      "env": { "RA_API_KEY": "your-key", "RA_USERNAME": "your-name" }
    }
  }
}

Or run the container over stdio. The named volume keeps the game-catalog cache between sessions:

{
  "command": "docker",
  "args": [
    "run",
    "-i",
    "--rm",
    "-e",
    "RA_API_KEY",
    "-e",
    "RA_USERNAME",
    "-v",
    "retroachievements-mcp-cache:/tmp/retroachievements-mcp",
    "ghcr.io/sharkusmanch/retroachievements-mcp:latest",
    "--stdio"
  ],
  "env": { "RA_API_KEY": "your-key", "RA_USERNAME": "your-name" }
}

Every GitHub release attaches the tarball (sharkusmanch-retroachievements-mcp-X.Y.Z.tgz) with a provenance attestation.

Running as a service (Streamable HTTP)

docker run -d -p 8080:8080 \
  -e RA_API_KEY=your-key -e RA_USERNAME=your-name \
  -e MCP_ALLOWED_HOSTS=ra-mcp.example.com \
  -e MCP_AUTH_TOKEN=a-long-random-token \
  ghcr.io/sharkusmanch/retroachievements-mcp:latest
  • POST /mcp: stateless Streamable HTTP. GET/DELETE return 405.

  • GET /healthz: liveness. It is outside the host/auth guards, and it never checks upstream health.

claude mcp add --transport http retroachievements https://ra-mcp.example.com/mcp \
  --header "Authorization: Bearer a-long-random-token"

The container runs as uid 1000 and works with a read-only root filesystem when /tmp is writable (the catalog cache defaults to /tmp/retroachievements-mcp in the image).

Supply chain

Releases are cut from v* tags only. Each release publishes:

  • a multi-arch image (linux/amd64, linux/arm64) to GHCR, with a SLSA build-provenance attestation and an SPDX SBOM attestation stored in the registry;

  • an npm tarball with its own provenance attestation, attached to the GitHub release.

Verify:

gh attestation verify oci://ghcr.io/sharkusmanch/retroachievements-mcp:vX.Y.Z --owner sharkusmanch

Development

npm ci
npm run lint && npm run typecheck && npm test
npm run build
RA_API_KEY=… RA_USERNAME=… node scripts/smoke.mjs                       # tool list + schema sizes
RA_API_KEY=… node scripts/smoke.mjs find_games '{"query":"chrono trigger"}'

See DESIGN.md for the design rules.

License

MIT

Available Tools

15 tools
find_gamesB
Read-only

Find game IDs by title and/or console. First all-console search may be slow.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoAll words must match
offsetNo
console_idNo
has_achievementsNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds a genuinely useful performance caveat about the first all-console search, but says nothing about pagination behavior, rate limits, or what the slow operation implies for repeated calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the primary purpose front-loaded ahead of the performance note. Efficient overall, though the performance caveat could be slightly more specific.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With five parameters, 20% schema coverage, and no output schema, the description should carry more weight. It omits pagination semantics, the meaning of the has_achievements default, and what a result actually contains beyond 'game IDs'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (only 'query' is documented), and the description names just two of five parameters (title, console). It does not explain limit/offset pagination or what has_achievements=true (the default) filters on, leaving most parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Find game IDs by title and/or console' — which clearly distinguishes it from the singular sibling get_game and from list-oriented siblings like get_user_games. No explicit sibling routing, but the verb+resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The note that the 'first all-console search may be slow' implies you should supply a console filter when possible, which is useful implied guidance. However, it names no alternative tool and gives no explicit when-to-use/when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_achievement_unlocksC
Read-only

Who unlocked an achievement (newest first), with unlock rates.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
hardcore_onlyNo
achievement_idYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuinely useful behavioral context the annotations do not: results are sorted newest-first and include aggregate unlock rates. It says nothing about pagination behavior/caps for limit=500 or the effect of hardcore_only, so it is not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the key qualifiers (newest first, unlock rates) packed in and nothing wasted. It is arguably under-specified rather than over-long, but as prose it is efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must explain return shape, and it only gestures at it ('unlock rates'). With four undocumented parameters and no mention of pagination, filtering, or result size, an agent lacks what it needs to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for four parameters, so the description carries the full burden and largely fails: achievement_id, limit, offset, and hardcore_only are never explained, nor is the 500 maximum or the default of 25. Only the achievement scoping is obliquely implied by the word 'achievement'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (achievement unlocks) and what is returned (unlockers plus unlock rates, newest first), which distinguishes it from the sibling get_user_unlocks that works from the user side. It is clear but never explicitly contrasts itself with those siblings, so it stays short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this versus get_user_unlocks, get_user_game_progress, or the leaderboard tools. The reader must infer that this is the achievement-centric view from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_commentsC
Read-only

Comment wall of a game, achievement or user (system log entries hidden unless include_system).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoID, or username for user (default configured)
sortNonewest
limitNo
offsetNo
targetYes
include_systemNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and access profile are covered. The description adds useful behavior by noting that system log entries are hidden unless include_system is set, but it does not cover pagination, rate limits, or return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler, and the include_system condition is placed usefully in parentheses. It is concise, though the phrase 'comment wall' is slightly informal for a tool purpose statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with six parameters, low schema description coverage, and no output schema, the description is too sparse. It omits key parameter semantics and usage context that an agent would need to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, so the description must compensate but largely does not. It clarifies include_system and the target categories, but leaves id, sort, limit, and offset semantics unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as comments for a game, achievement, or user. It does not explicitly name sibling alternatives such as get_feed, but the target scope makes the purpose understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives like get_feed or get_user_social. Usage is only implied by the resource description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_feedC
Read-only

Site feeds: aotw (Achievement of the Week), top_users, recent_awards, active_claims, claims (finished).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNorecent_awards: start day
kindYes
limitNo
offsetNo
game_idNoclaims filter
award_kindNorecent_awards
claim_kindNoclaims; default completed
console_idNoclaims filter

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered elsewhere. The description adds nothing behavioral: no pagination semantics despite limit/offset existing, no ordering, no note that 'claims' returns only finished claims, no indication of what a feed entry contains. With annotations doing the light lifting, this remains well short of the bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very short and front-loaded, with zero filler. But it is a bare fragment rather than a sentence, and its brevity comes from omission rather than disciplined compression — there is no enough content to be concise about.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, no-output-schema, open-world feed tool, the description omits what a feed returns, how limit/offset paginate, and which optional filters pair with which kind. An agent must reverse-engineer all of this from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 63%, so several parameters (limit, offset, kind, game_id partly) are undocumented. The description does add real value by expanding the opaque enum value 'aotw' to 'Achievement of the Week' and clarifying that 'claims' means finished claims, but it says nothing about the filters that only apply to specific kinds (game_id, console_id, award_kind, claim_kind). Baseline-plus for the acronym expansion, not more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

It identifies the resource as 'Site feeds' and enumerates the five feed kinds, which does distinguish it from siblings like get_leaderboards or get_user_games. However, there is no verb ('retrieve', 'list') and the content is essentially a restatement of the 'kind' enum already present in the schema, so the purpose is only implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no conditions, no alternative named among the 14 sibling tools. An agent has no idea when this tool is preferable to get_leaderboards, get_achievement_unlocks, or get_user_profile.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gameC
Read-only

Game details; include adds achievements (rarity, type), hashes, progression (median times), distribution, claims.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
imagesNo
offsetNo
game_idYes
includeNo
achievement_typeNonone = untyped

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing behavioral beyond that: no pagination behavior (limit/offset exist), no note that optional sections cost extra calls or that data may be missing, no return-shape context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the core purpose before the optional expansions. The semicolon-and-parenthetical style is compact and mostly earns its words, though it reads more like a schema comment than prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six params, no output schema, and 17% schema coverage, the definition should carry far more weight. It never mentions pagination defaults/bounds, the images flag, or how achievement_type interacts with the achievements include, so an agent has to guess at key invocation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 17%, so the description must compensate, and it does explain five of the six 'include' enum values with useful detail (achievements carry rarity/type, progression carries median times). However, limit, offset, and images are entirely unexplained in both schema and description, leaving a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Game details') that is clearly distinguishable from siblings like find_games (search) and get_user_games (user-scoped listing). It is terse and telegraphic, but an agent can tell what the tool retrieves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no named alternative. An agent can't tell from the description whether this is the right tool versus find_games or get_user_game_progress for a given lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_game_rankingsB
Read-only

A game's top 10: highest scorers, or most recent masters.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNohigh_scores
game_idYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds the useful constraint that the result is exactly a top 10 (bounded size), but says nothing about permissions, ordering guarantees, or pagination/absence of results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact clause that is front-loaded with the core resource. It is efficient, though the fragmentary phrasing costs a little clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no output schema, the description conveys the essential shape of the result (top 10, two ranking modes). It stops short of explaining what 'masters' means or how ties/ordering are handled, but nothing critical to invoking it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It does gloss the two type values ('highest scorers' = high_scores, 'most recent masters' = latest_masters), but game_id is left entirely unexplained and the gloss is loose rather than matching the enum semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (a game's top 10) and the two ranking modes, which lets an agent distinguish it at a high level. However it is a noun fragment with no verb, and it does not clearly separate itself from the sibling get_leaderboards.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no prerequisites, and no mention of the sibling alternatives such as get_leaderboards or get_game. The two modes are only implied by the phrase 'highest scorers, or most recent masters'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_leaderboardsB
Read-only

A game's leaderboards (user_entries: the user's entries), or one leaderboard's ranked entries. Give game_id or leaderboard_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
userNoDefault: configured user
limitNo
offsetNo
game_idNo
user_entriesNo
leaderboard_idNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one behavioral fact: the tool returns structurally different results depending on whether user_entries is set (a list of leaderboards vs. ranked entries). It says nothing about pagination behavior, result size, or the open-world lookup cost implied by the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the primary resource and the parameter selector front-loaded; no filler. The parenthetical for user_entries is compact but slightly cryptic in isolation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema and 0 required parameters, the description is adequate on the core axis of what is returned. It is incomplete on pagination semantics (limit/offset) and on how the configured-user default interacts with user_entries, both of which an agent needs to call it correctly in the ranked-entries mode.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17% across 6 parameters, so the description must compensate. It does clarify the game_id/leaderboard_id selectors and the user_entries flag, but leaves user, limit, and offset (pag ordering, max 500) entirely unexplained, and it is unclear to which mode pagination applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (leaderboards) and clearly distinguishes its two modes: a game's leaderboard list versus one leaderboard's ranked entries. It does not differentiate itself from the sibling get_game_rankings, which an agent could easily confuse with the second mode, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Give game_id or leaderboard_id" gives a concrete selector rule for which parameter drives which mode, which is genuine usage guidance. However, it offers no when-to-use/when-not guidance relative to get_game_rankings, and no note on whether the two modes are mutually exclusive or what happens if both are supplied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ticketsB
Read-only

Achievement bug tickets: recent, one ticket, per game/achievement/developer summary, or most_ticketed games.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoticket/game/achievement ID
modeYes
userNodeveloper; default configured
limitNo
offsetNo
detailsNoFull notes + resolution
unofficialNogame mode

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds essentially nothing beyond that — no note on pagination behavior, the fact that different modes require different id semantics, or output differences per mode, even though limit/offset exist and modes return heterogeneous shapes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, so nothing wastes space. The telegraphic, comma-fragmented style is efficient but slightly cryptic for an agent parsing mode semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, 57% schema coverage, no output schema, and modes that return fundamentally different structures, the description does far too little. It never explains what 'id' means per mode, how 'user' relates to the developer mode, or what 'details' expands, leaving an agent to guess at invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The mode listing does map the enum values to what is returned (one ticket vs per-game/achievement/developer summary), which adds real meaning for the required parameter. However, the other six parameters (id, user, limit, offset, details, unofficial) get no explanation in the description, and schema coverage is only 57%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely — 'Achievement bug tickets' — and enumerates the six retrieval modes (recent, ticket, game, achievement, developer, most_ticketed), so an agent understands this is a multi-mode ticket lookup rather than a generic list. It lacks an explicit verb, but the noun phrase plus mode list is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Listing the modes implies when each is appropriate, but the description never states conditions for choosing between them (e.g. when to use 'ticket' vs 'game'), and names no alternative sibling tools. Usage is inferred from the enum labels rather than explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_game_progressB
Read-only

User's progress in one game (summary + achievements with rarity %), or one summary row per game_ids entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNorarity: most-earned firstdisplay
userNoDefault: configured user
limitNo
imagesNo
offsetNo
game_idNo
game_idsNoSummary only
achievementsNolocked
include_rankNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description usefully adds what is returned (summary + achievements with rarity %, or summary rows per game_ids entry), but says nothing about auth requirements, pagination, or the default-filtering behavior of the achievements field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that packs both operational modes efficiently with no wasted words. Brevity is appropriate, though the density leaves semantic gaps rather than trimming redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, 33% schema coverage, and no output schema, the description is too thin: it omits default filtering ('locked' achievements), pagination, and the optional parameters. Annotations cover the safety profile but not enough of the calling contract.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, so the description must compensate for roughly six undocumented parameters, yet it explains only the game_id vs game_ids output distinction. Critical params like achievements ('locked' default), limit, offset, images, and include_rank are left unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('User's progress in one game') and distinguishes the two output modes: full details for game_id versus summary rows for game_ids. It does not name siblings like get_user_unlocks or get_achievement_unlocks, so an agent must infer differentiation from the resource alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied through the parameter-dependent modes: one game produces summary+achievements, game_ids produces summary rows. There is no explicit when-to-use guidance versus siblings such as get_user_unlocks or get_user_games, and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_gamesB
Read-only

User's game lists: recent, progress (per-game counts + award), completed (100%), want_to_play.

ParametersJSON Schema
NameRequiredDescriptionDefault
listYes
sortNoprogress onlyrecent
userNoDefault: configured user
limitNo
imagesNo
offsetNo
statusNoprogress only; beaten includes mastered; in_progress = no award
console_idNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds semantic context about what data each list contains (progress = per-game counts + award, completed = 100%), which is genuinely useful, but says nothing about pagination, the default user, or result size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single terse sentence that front-loads the resource and enumerates the options; nothing is wasted. It is slightly cryptic (relies on list-noun vocabulary without a verb) but efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with 38% schema coverage and no output schema, the description covers only the primary enum semantics. Pagination behavior, filtering dimensions, and the user/console scoping are left entirely to the schema, leaving real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38% across 8 parameters, so the description must compensate more than it does. It usefully clarifies the meanings of the required 'list' enum values, but the other seven parameters (limit, offset, images, console_id, user default) get no added meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely ('User's game lists') and enumerates the four list types, so an agent knows this is a list-retrieval tool. It does not, however, distinguish itself from the closely related sibling get_user_game_progress, which likely overlaps with the 'progress' list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool over get_user_game_progress or get_user_unlocks, despite obvious overlap. No prerequisites, no exclusions, no alternative routing are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_profileC
Read-only

User profile and points. include: summary (rank, status, recent games/unlocks), awards.

ParametersJSON Schema
NameRequiredDescriptionDefault
userNoDefault: configured user
limitNoMax award rows
imagesNo
includeNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value by disclosing the shape of returned content (summary fields, awards) but says nothing about pagination, data freshness, or what the limit parameter controls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very short and front-loaded: the resource is stated first, then the include options. The telegraphic 'include: summary (...), awards' phrasing is compact but slightly fragmented; nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should carry more of the return-value burden; it does sketch the summary and awards sections, which helps. But three of four parameters remain undocumented in both the schema and the description, so an agent cannot fully determine how to scope or shape the request.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, and the description meaningfully expands on the 'include' enum by explaining what 'summary' contains. It gives no information about the undocumented 'user', 'limit' (max award rows), or 'images' parameters, leaving half the parameter surface unexplained. Baseline 3 given the partial coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (user profile and points) and enumerates the retrievable sections (summary: rank, status, recent games/unlocks; awards), which goes slightly beyond restating the name. However, it never states a verb and offers no differentiation from siblings like get_user_games, get_user_unlocks, or get_user_social, all of which appear to return overlapping user data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage signal is the 'include' list, which implies the include parameter's valid values but says nothing about when to call this tool versus the many sibling user-data tools. No exclusions, prerequisites, or alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_socialB
Read-only

User's set requests or dev claims; or who the API-key owner follows / is followed by (ignores user).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
userNoDefault: configured user
limitNo
offsetNo
all_requestsNoset_requests: include fulfilled

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds real behavioral context beyond that: it discloses that for following/followers the tool silently ignores the user argument and instead reads the API-key owner's graph. That is a non-obvious quirk worth surfacing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single compact sentence with no filler, and the behavioral caveat is present. However, the telegraphic phrasing and semicolon-splice make it harder to parse than a plainly front-loaded sentence would be, so brevity comes at some cost to clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 5 parameters, 40% schema coverage, and no output schema, the description covers the trickiest interaction (kind × user) but omits return shape and pagination semantics. It is minimally adequate rather than complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 40%, so the description is expected to carry some weight. It clarifies the semantics of `user` (ignored for two of four kinds) and implicitly the mapping of `kind` values, but says nothing about limit/offset pagination behavior or the all_requests flag, leaving a partial gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a resource (user social data) and enumerates the four facets it can return, but relies on opaque jargon like 'set requests' and 'dev claims' that an agent cannot decode without external knowledge. It does distinguish the two behavioral modes (per-user vs. API-key-owner), which separates it somewhat from siblings, but the core purpose remains murky.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '(ignores user)' clause is genuine usage guidance – it tells the agent that the user param is void for the following/followers kinds – but there is no explicit when-to-use framing and no mention of the sibling tools (get_user_profile, get_feed, etc.) that cover adjacent data. 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_user_unlocksC
Read-only

User's unlocks, newest first. One of minutes, from[/to], date; default last 24h.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoDefault now
dateNoYYYY-MM-DD
fromNoISO date/datetime, UTC
userNoDefault: configured user
limitNo
minutesNo
hardcore_onlyNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true and openWorldHint=true already declared, the safety profile is covered, and the description usefully adds the 'newest first' ordering and the default 24h window. It still omits auth requirements, pagination behavior, and what happens when multiple time parameters are supplied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two clipped sentences with zero filler, front-loading what the tool returns before the time-window constraints. It is dense and slightly telegraphic, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter read tool with no output schema, the description nails the time-window semantics but leaves limit/cap behavior (max 500), hardcore_only's meaning, and the user default unexplained. It is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 57%, but the description adds genuinely non-schema information: the mutual exclusivity of minutes/from/date and the default 24h window, which the schema does not state. It says nothing about limit, hardcore_only, or user, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (a user's unlocks) and the ordering (newest first), so the agent knows it returns a reverse-chronological list. However, it is a bare noun phrase with no verb and never clarifies what an 'unlock' is, leaving it ambiguous against the sibling get_achievement_unlocks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'One of minutes, from[/to], date; default last 24h' constrains how to use the time parameters but says nothing about when this tool should be chosen over siblings such as get_achievement_unlocks or get_user_game_progress. No exclusion or alternative routing is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_consolesC
Read-only

IDs of the active RetroAchievements game systems.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is covered. The description adds only the word 'active', implying an implicit filter on returned systems, and says nothing about the return shape, ordering, or whether the list is exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short fragment with no wasted words, but it is a noun phrase rather than a sentence, so it is under-specified rather than genuinely concise; nothing is front-loaded because there is no verb to lead with.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only list with no output schema, the description does the minimum: it names the resource and notes the 'active' filter. It omits any statement of the action performed and any hint at what the returned IDs represent or how to use them, leaving the agent to infer the operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema imposes no semantic load and the baseline for this dimension is 4. Nothing in the description contradicts or supplements the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The fragment identifies the resource and its scope ('IDs of the active RetroAchievements game systems'), and usefully maps 'consoles' to game systems, but it supplies no verb, so the agent must infer that this is a list/retrieve operation from the name alone. It is understandable but not stated as a specific action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no reference to alternatives. The sibling tools are mostly user/game/achievement oriented, so overlap is low, but the description does nothing to help the agent decide when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ra_api_rawA
Read-only

Escape hatch: raw JSON from any RA Web API endpoint (e.g. GetGameExtended). Prefer the dedicated tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNoQuery params (key added)
endpointYesName without API_/.php
max_charsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that it returns raw JSON and acts as an escape hatch, but it does not disclose output truncation via max_chars, rate limits, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with the core role front-loaded and no wasted words. The fallback guidance follows immediately and the example is embedded efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an open-world escape-hatch tool with no output schema, the description should clarify return format and truncation behavior. 'Raw JSON' is a start, but max_chars output limiting and any invocation constraints remain undocumented, leaving meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, with max_chars having no description anywhere. The description only illustrates the endpoint parameter with 'GetGameExtended' and adds no meaning for the params object or max_chars behavior, so it does not compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource ('raw JSON from any RA Web API endpoint') and gives a concrete example endpoint. The 'escape hatch' framing plus 'Prefer the dedicated tools' distinguishes it from the many specific sibling tools, though it never uses an explicit verb like 'fetch' or 'call'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly positions itself as a fallback by saying 'Prefer the dedicated tools,' which tells the agent to use siblings when available. It stops short of naming the exact condition or listing the relevant dedicated alternatives explicitly.

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.

  1. 15 tool updatesv0.1.0
    • First observedfind_games
    • First observedget_achievement_unlocks
    • First observedget_comments
    • First observedget_feed
    • First observedget_game
    • First observedget_game_rankings
    • First observedget_leaderboards
    • First observedget_tickets
    • First observedget_user_game_progress
    • First observedget_user_games
    • First observedget_user_profile
    • First observedget_user_social
    • First observedget_user_unlocks
    • First observedlist_consoles
    • First observedra_api_raw

TDQS

B3.2/5.0

Scored across 15 tools

Disambiguation4/5

Most tools target distinct resources (games, users, leaderboards, feeds, tickets), and the parenthetical 'include' hints clarify scope. However, get_user_unlocks vs get_achievement_unlocks and get_user_games vs get_user_game_progress share enough surface that an agent could occasionally misselect, and get_user_profile overlaps those aggregates.

Naming Consistency5/5

The set follows a strong get_/list_/find_ + noun pattern (get_user_profile, get_game_rankings, list_consoles, find_games), with verb choices reflecting retrieval vs collection vs search semantics. ra_api_raw is the only outlier but is clearly framed as a deliberate escape hatch.

Tool Count5/5

15 tools sits at the top of the well-scoped range and matches a genuinely broad domain (users, games, achievements, leaderboards, tickets, feeds, comments). Each tool maps to a distinct RetroAchievements entity, so none feels redundant.

Completeness4/5

The surface covers consoles, profiles, unlocks, progress, social, game search/details, rankings, leaderboards, feeds, comments, and tickets, which is close to full lifecycle for a read-only API client. Minor gaps like a dedicated achievement-detail tool are mitigated by get_game's achievement inclusion and the ra_api_raw escape hatch.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Exposes 30 tools to manage Redmine resources (issues, projects, users, time entries, wiki pages, news, files, roles) via the REST API using stdio transport.
    33
    320 npm
    4
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only Chatty Pi tools via a streamable HTTP MCP endpoint, enabling access to user profile, posts, notifications, and YuvaBucks balance.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables interaction with the full public ListenBrainz API, exposing 37 tools for listens, stats, playlists, radio, social, and cover art over stdio.
    37
    BSD Zero Clause
  • F
    license
    A
    quality
    B
    maintenance
    Provides read-only MCP tools over stdio for interacting with a Redmine instance, enabling users to list and retrieve projects, issues, queries, wiki pages, and other Redmine resources via the REST API.
    35
    -