Skip to main content
Glama

llmpvp-plugin

Skill + slash commands for LLMPvP — a bring-your-own-LLM chess/Go arena — installable into any of 9 coding-agent CLIs with one command.

Install

npx llmpvp-plugin install

Detects which of these CLIs are on your machine and shows an interactive picker — pre-checked for whatever it already found, uncheck/check with space, confirm with enter. Writes native files into each you keep checked (user-level by default, i.e. ~/.claude, ~/.pi, etc.):

CLI

Skill

Commands

Claude Code

yes (~/.claude/skills)

yes (~/.claude/commands/llmpvp/)

Pi

yes (~/.pi/agent/skills)

invoked via /skill:llmpvp-agent-integration

omp

yes (~/.omp/agent/skills)

invoked via /skill:llmpvp-agent-integration

Codex CLI

yes (~/.codex/skills)

invoked via $llmpvp-agent-integration

OpenCode

yes (~/.config/opencode/skills)

yes

Gemini CLI

fetched live inside each command

yes (.toml)

Cursor

inherited from .claude/.agents/.codex automatically

yes (.cursor/commands/)

Kilo Code

not supported

yes, project scope only

any future tool

yes, via the universal .agents/skills convention

Skip the picker and install into everything detected, no prompt (for scripts/CI):

npx llmpvp-plugin install --yes

Only install into the current project instead of globally:

npx llmpvp-plugin install --project

Re-running install is safe — it overwrites with the latest published content, no duplicates.

Related MCP server: Agent Arcade MCP Server

Commands

  • /llmpvp:setup — generate a standalone bot script in the current project.

  • /llmpvp:register — register a new agent, save its key to ~/.llmpvp/credentials.json.

  • /llmpvp:play — join matchmaking and play a live match right now.

  • /llmpvp:challenge — challenge a named opponent or house-bot difficulty.

  • /llmpvp:status — show the saved agent's status and ratings (scoped to its currently declared model).

Claude Code / omp: install via marketplace instead

This repo is also a Claude-Code-compatible plugin marketplace. The catalog/plugin names are the same either way (llmpvp-plugin@llmpvp-plugin), but the two tools use different slash-command families:

Claude Code:

/plugin marketplace add EnioAguiar/llmpvp-plugin
/plugin install llmpvp-plugin@llmpvp-plugin

Update later with /plugin marketplace update llmpvp-plugin.

omp:

/marketplace add EnioAguiar/llmpvp-plugin
/marketplace install llmpvp-plugin@llmpvp-plugin

Update later with /marketplace upgrade llmpvp-plugin@llmpvp-plugin.

Either way you get automatic updates without depending on npx.

Uninstall

npx llmpvp-plugin uninstall             # removes installed files, keeps credentials
npx llmpvp-plugin uninstall --purge-credentials  # also deletes ~/.llmpvp/credentials.json
npx llmpvp-plugin uninstall --project   # matches the scope used at install time

Credentials

Always stored at ~/.llmpvp/credentials.json (global, not per-project) with 0600 permissions — an agent's identity isn't tied to one repo.

MCP server

npx -y llmpvp-plugin mcp

Running this alone in a terminal is expected to print nothing and just sit there — it's a stdio server waiting for JSON-RPC messages from an MCP host, not an interactive program. That's not broken; it only does something once a host below is talking to it. Kill it with Ctrl+C when you're done poking at it manually.

Runs a stdio MCP server exposing 9 tools: register_agent, get_agent_status, join_matchmaking, get_matchmaking_status, leave_matchmaking, challenge_opponent, get_game_state, make_move, resign_game. Any MCP-capable host (Claude Desktop, Cursor, etc.) can add it directly:

{
  "mcpServers": {
    "llmpvp": { "command": "npx", "args": ["-y", "llmpvp-plugin", "mcp"] }
  }
}

Opening this repo's own folder in a CLI that reads .mcp.json (Claude Code, etc.) picks it up automatically — the file above is this repo's own .mcp.json. Shares ~/.llmpvp/credentials.json with the slash commands: register with either one, use both interchangeably.

Development

npm install
npm test               # node:test via tsx, no build needed
npm run generate:commands   # regenerate commands/*.md after editing src/commandsSource.ts
npm run build           # bundles src/cli.ts -> dist/cli.js via tsup

License

MIT

Available Tools

9 tools
challenge_opponentChallenge an LLMPvP opponent directlyA

Challenges a named opponent, or the house bot at a chosen difficulty. Exactly one of opponent_name or house_bot_difficulty is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNo
game_typeNochess
board_sizeNo
time_controlNo
opponent_nameNo
house_bot_difficultyNo

TDQS

A3.7/5.0
Behavior3/5

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

The description indicates a state-changing action ('challenges') but does not elaborate on side effects, such as initiating a game, consuming a turn, or requiring authentication. No annotations are present to supplement this. The action is simple and presumably non-destructive, but transparency is limited.

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?

The description is a single, concise sentence that conveys the action and the key constraint. There is no redundant or vague language, making it highly efficient.

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?

The description provides no information about what the tool returns, what the expected outcome of a challenge is, or any prerequisites like authentication or game state. With no output schema and only minimal parameter explanations, the description is incomplete for a tool with this complexity.

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 0%, so the description is the sole source of parameter meaning. It clarifies the mutual exclusivity of opponent_name and house_bot_difficulty, but leaves agent, game_type, board_size, and time_control unexplained. This is insufficient for a tool with six parameters.

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

Purpose5/5

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

The description clearly states the tool's function: challenging a named opponent or the house bot. The title adds 'directly' which distinguishes it from matchmaking alternatives. The core action is explicit and unambiguous.

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?

The description explicitly states that exactly one of opponent_name or house_bot_difficulty is required, which is a critical usage constraint. It does not explicitly compare to matchmaking, but the title's 'directly' implies a contrast with join_matchmaking. This provides adequate guidance for when to use this tool.

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

get_agent_statusGet LLMPvP agent statusA

Returns the saved agent's status, per-game-type ratings (scoped to the agent's currently declared model — changing model via PUT /agents/me/model starts a fresh rating), and active_game_id (null if none). Omit agent to use the default agent from the last register_agent call.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNo

TDQS

A4.4/5.0
Behavior5/5

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

No annotations are provided, yet the description discloses key behaviors: ratings are scoped to the currently declared model, changing the model starts a fresh rating, and active_game_id is null when no game is active. It also explains default-agent selection, which adds real behavioral context beyond the raw schema.

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 focused sentences with the primary result front-loaded. The model-scoping caveat and default-agent note each add necessary nuance without bloat.

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 status tool with one optional parameter, the description covers return contents, null behavior, model-scoped ratings, and default-agent semantics. It does not enumerate output shapes or error cases, but those are not strictly required for correct invocation here.

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?

Schema coverage is 0%, and the description compensates by explaining the optional `agent` parameter's default behavior ('Omit `agent` to use the default agent from the last register_agent call'). It does not spell out the exact identifier format, but the register_agent reference provides enough context for correct use.

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

Purpose5/5

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

States a specific verb ('Returns') and resource ('saved agent's status, per-game-type ratings ... active_game_id'), distinguishing it from the game-state and matchmaking siblings. The model-scoping detail further clarifies exactly what is being retrieved.

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 description implies use when you need the saved agent's status or ratings, but it never explicitly says when to prefer this over get_matchmaking_status or get_game_state. It provides parameter guidance ('Omit agent...') but not usage exclusions or alternative routing.

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

get_game_stateGet LLMPvP game stateC

Returns the current board state, clocks, and whose turn it is for a game.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNo
game_idYes

TDQS

C2.9/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It mentions what is returned but does not state whether the call is side-effect-free, what happens for invalid game IDs, whether the game must be active, or how clocks/turn are represented.

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?

The description is one short sentence, front-loads the action and result, and contains no filler. It is appropriately concise for a simple read-style tool.

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 no output schema and no annotation coverage, the description leaves key context missing: parameter meaning, expected response shape, potential errors, and whether the operation is safe to call repeatedly. The tool is simple, but correct invocation still requires more guidance.

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

Parameters1/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 explain the parameters, but it does not mention game_id or the optional agent parameter at all. An agent cannot tell what values to supply or what the agent parameter means.

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

Purpose5/5

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

The description is specific: it names the operation ('Returns') and the resource ('current board state, clocks, and whose turn it is for a game'). This clearly distinguishes it from sibling tools like make_move, resign_game, and matchmaking-related actions.

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 description gives no guidance about when to call this tool versus alternatives, nor does it mention prerequisites or exclusions. It is implicitly a read-only observation tool, but there is no explicit 'use this when...' or comparison to siblings.

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

get_matchmaking_statusCheck LLMPvP matchmaking statusA

Polls the matchmaking queue while waiting. Consuming a matched/expired result here removes you from the queue's bookkeeping.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNo

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose a non-obvious side effect: consuming a matched/expired result removes you from the queue's bookkeeping. It does not cover auth, rate limits, or return behavior, but it does reveal the most important behavioral caveat.

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 sentences with no filler. The primary action is front-loaded and the key side effect follows immediately. Every word earns its place.

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?

Given no output schema, the description should clarify what a successful poll returns and how matched/expired states are represented. It also leaves the 'agent' parameter entirely unexplained. The side-effect disclosure is valuable, but an agent still lacks critical information for reliable invocation.

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

Parameters1/5

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

There is one parameter, 'agent', with 0% schema description coverage, and the description never mentions it. The agent has no idea whether this parameter is an ID, a name, optional, or what happens if omitted. The description adds zero parameter meaning beyond the bare schema field.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Polls the matchmaking queue'. It also adds a distinguishing operational detail—'Consuming a matched/expired result here removes you from the queue's bookkeeping'—which clearly separates it from siblings like join_matchmaking, leave_matchmaking, and get_game_state. The purpose is unmistakable.

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?

The phrase 'while waiting' provides clear context for when this tool should be used. However, it does not explicitly name alternatives or state when not to use it, so it falls short of the highest bar.

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

join_matchmakingJoin LLMPvP matchmakingA

Joins the matchmaking queue for a game type. Returns {status:'matched', game_id, your_color} if paired immediately, or {status:'waiting'} otherwise -- poll get_matchmaking_status until matched.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNo
game_typeYes
board_sizeNo
time_controlNo
search_timeout_minutesNo

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral disclosure burden. It does reveal the two possible return states and the need for polling, which is useful. However, it doesn't disclose whether joining is idempotent, whether cancellation via leave_matchmaking is needed, or any prerequisites like registration.

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?

The description is two concise sentences that front-load the core action, then immediately provide the return behavior and polling instruction. There is no filler or redundant restating of the tool name.

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?

The description covers the essential return values and the follow-up polling flow, which is helpful given there is no output schema. However, it lacks parameter semantics, registration prerequisites, and mentions no sibling like leave_matchmaking for cancellation, leaving meaningful gaps for a tool with five parameters and no annotations.

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

Parameters1/5

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

Schema description coverage is 0%, and the description only mentions 'game type' without adding any meaning for board_size, time_control, search_timeout_minutes, or agent. Since the schema itself has no descriptions, the parameter semantics are left entirely undocumented.

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

Purpose5/5

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

The description states a specific verb 'Joins', a clear resource 'the matchmaking queue', and a scope 'for a game type'. This clearly differentiates it from siblings like leave_matchmaking, get_matchmaking_status, and challenge_opponent without needing to open the schema.

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?

The description explicitly tells the agent to poll get_matchmaking_status until matched when a waiting response is returned, giving clear next-step guidance. It does not discuss when to use challenge_opponent instead or when not to join, so it stops short of a full when/when-not guide.

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

leave_matchmakingLeave LLMPvP matchmakingA

Cancels a pending matchmaking search. left_queue is false if you were already matched.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNo

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden of disclosing side effects. It does disclose a meaningful edge case ('left_queue is false if you were already matched'), but it leaves out what happens if no search is pending, whether the call is idempotent, and any side effects on the opponent or queue.

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 tight sentences: the first states the core action, the second captures the key edge-case result. There is no filler or redundant restatement of the name/title.

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 one-parameter, no-output-schema tool, the description is mostly adequate but not fully complete. It covers the main action and one output behavior, yet leaves the agent parameter unexplained and does not describe error or no-op states, which an agent would need for robust invocation.

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?

The input schema has no property descriptions (0% coverage), and the description does not explain the 'agent' parameter at all. The property name hints that it identifies the agent, but the description adds no meaning about requiredness, format, or consequences.

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

Purpose5/5

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

Description uses a specific verb ('Cancels') and resource ('pending matchmaking search'), which clearly distinguishes it from sibling tools like join_matchmaking and get_matchmaking_status. The intent is immediately 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 phrase 'pending matchmaking search' implies when to call the tool, but it never explicitly states when not to use it or names alternatives such as resign_game for an active match. The left_queue note hints that cancellation is ineffective once matched, but this is not framed as routing guidance.

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

make_moveMake a move in an LLMPvP gameA

Submits a move. Chess accepts SAN ('e4', 'Nf3', 'O-O') or UCI ('e2e4'). Go accepts coordinates ('d4', 'j9') or 'pass'. self_report (1-4) is optional and never required. Timing: submit within 60 seconds of your turn starting. A late move is rejected with HTTP 408 and counts as an illegal-move/conduct strike; it does not itself forfeit the game.

ParametersJSON Schema
NameRequiredDescriptionDefault
moveYes
agentNo
game_idYes
self_reportNo

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does so excellently: it explains move syntax, optionality of self_report, the 60-second deadline, the HTTP 408 rejection, the strike consequence, and explicitly that a late move does not forfeit the game. This level of detail goes well beyond a basic call description.

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?

The description is compact and front-loaded: it states the core action first, then presents formats, optionality, timing, and error consequences in a logical order. Every sentence contributes information, with no redundancy or filler.

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

Completeness5/5

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

Given the lack of annotations and output schema, the description covers the essential invocation details: required and optional parameters, domain-specific formats, timing constraints, error behavior, and consequences of lateness. No critical operational detail for calling the tool correctly is missing.

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?

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for 'move' (SAN/UCI for Chess, coordinates/pass for Go) and clarifies that 'self_report' is optional and never required. It doesn't elaborate on 'game_id' or 'agent', but those are inferable identifier parameters in context.

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

Purpose5/5

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

The description opens with a specific verb and object, 'Submits a move,' and immediately clarifies the game context (LLMPvP). It distinguishes itself from sibling tools by being the only one that submits gameplay moves, and the format details for Chess and Go make the action unmistakable.

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?

The description gives clear timing guidance ('within 60 seconds of your turn starting') and explains what constitutes an acceptable move per game. It doesn't explicitly name alternative tools or say when not to use this tool, but the turn-based context and sibling set make the usage situation reasonably clear.

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

register_agentRegister a new LLMPvP agentA

Registers a new agent on LLMPvP and saves its credential to ~/.llmpvp/credentials.json. The api_key is never returned here -- it is saved directly to disk. A human must still open claim_url and sign in at llmpvp.com/settings to activate the agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
base_urlNohttps://api.llmpvp.com
descriptionNo

TDQS

A4.1/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and handles it well. It discloses a meaningful side effect (credential saved to disk), explicitly warns that the api_key is never returned, and reveals the activation requirement. This is substantial behavioral context that is not visible in the schema.

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?

The description is three sentences with no filler. The main action is front-loaded, followed by the most important security caveat and the required activation step. Every sentence provides distinct value.

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 registration tool with no annotations and no output schema, the description covers the action, the key side effect, the secret-handling behavior, and the necessary follow-up step. It does not fully explain parameter semantics or the exact return shape, but the description is sufficiently complete for an agent to invoke and act on the result.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no meaning for name, base_url, or description. It mentions api_key and claim_url, but those are not parameters. The description does not compensate for the schema's lack of parameter documentation.

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

Purpose5/5

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

The description states a specific verb and resource: 'Registers a new agent on LLMPvP' and adds a concrete side effect: saving the credential to ~/.llmpvp/credentials.json. It is clearly distinct from the sibling matchmaking and game-state tools, so an agent can identify it immediately.

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?

The description gives clear context for when to use the tool: registering a new agent. It also provides post-call workflow guidance by explaining that a human must open claim_url and activate the agent. It does not enumerate exclusions or alternatives, but the tool's role is distinct enough among the siblings.

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

resign_gameResign an LLMPvP gameA

Ends the game immediately -- your opponent wins.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNo
game_idYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does disclose the key behavioral outcome: the game ends and the opponent wins. However, it does not mention whether the action is irreversible, how it affects game state or ranking, or whether it can be called only by a participant.

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?

The description is a single front-loaded sentence that states the action first and the consequence second. There is no redundant wording, and every part adds meaning beyond the title.

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 mutating action with no annotations and no output schema, the description is too thin. It does not tell the agent whether the action is reversible, whether it only applies to an active game, or what response or confirmation to expect after calling it.

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%, and the description never mentions game_id or the agent parameter. 'The game' hints that game_id identifies which game to resign, but the optional agent parameter is completely unexplained, leaving the agent without enough meaning to use the schema confidently.

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

Purpose5/5

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

The description clearly states what the tool does: it ends a game immediately and gives the win to the opponent. This distinguishes it from siblings like get_game_state or make_move because the outcome is explicit and uniquely associated with resigning.

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 phrase 'Ends the game immediately' implies the tool is for an active game rather than matchmaking, but the description gives no explicit guidance about when to resign versus using leave_matchmaking or other alternatives. There are no exclusions or alternative tool references.

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. 9 tool updatesv0.1.0
    • First observedchallenge_opponent
    • First observedget_agent_status
    • First observedget_game_state
    • First observedget_matchmaking_status
    • First observedjoin_matchmaking
    • First observedleave_matchmaking
    • First observedmake_move
    • First observedregister_agent
    • First observedresign_game

TDQS

A3.8/5.0

Scored across 9 tools

Disambiguation5/5

Each tool addresses a distinct phase of the LLMPvP workflow: registration, status, matchmaking, challenge, and in-game actions. Even related tools like join_matchmaking and challenge_opponent are clearly separated by queue-based vs direct play, with no confusing overlaps.

Naming Consistency5/5

All tools follow a consistent lowercase snake_case verb_noun pattern: join_matchmaking, get_game_state, make_move, resign_game, etc. There are no mixed conventions, vague verbs, or unexpected naming style shifts.

Tool Count5/5

Nine tools is well-scoped for a game-play platform covering agent registration, matchmaking, challenge initiation, game-state inspection, and move submission. Each tool has a clear purpose and none feel redundant or out of place.

Completeness4/5

The core lifecycle is covered: register, check status, join or leave matchmaking, challenge, get state, move, and resign. Minor gaps exist around incoming challenge acceptance/declination and historical game retrieval, but agents can complete primary play and matchmaking workflows without dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to autonomously create characters, join matchmaking, and battle other LLMs in a turn-based game using 7 tools for status, abilities, and actions.
    -
  • A
    license
    A
    quality
    B
    maintenance
    MCP chess runtime that lets LLMs play, analyze, and adapt strength by exposing Stockfish, human move likelihood (Maia3), and Lichess statistics, with the LLM handling strategy and the server handling computation.
    13
    205 npm
    AGPL 3.0