This server has severe definition quality issues across nearly all dimensions. Tool descriptions are minimal (3 - 30 words), parameter schemas are generic 'object' types with no internal structure, and there is no documented output schema for any tool. The server exposes sensitive operations (file I/O, ROM building, API key injection) without error handling guidance, confirmation steps, or permission checks. Tool composition is poor: creating 14+ asset types as separate tools instead of a single 'create_asset' with an asset_type enum wastes agent reasoning. The set_claude_key tool exposes a secret as a parameter, violating the critical security rule against credentials in tool parameters. Error handling is absent, no guidance on what can fail, how to recover, or whether operations are retryable.
Tools (25)
build_gba_romwritesource verified65/100
Build a .gba ROM using a local GBA Studio checkout.
22 of 25 tools accept 'object' type parameters with no internal field documentation. LLMs cannot understand what fields to pass, leading to errors and wasted calls. Examples: create_scene's 'scene' param, create_actor's 'actor' param, create_background's 'background' param.
set_claude_key tool exposes API key as a string parameter. Critical security violation: credentials must never appear as tool parameters. This key ends up in agent traces, logs, and prompt history. Use server-side secret injection via environment variables instead.
Recommendations
Document the internal schema for all 'object' parameters. For create_scene, specify: scene = {id: string, name: string, type: 'TOPDOWN'|'PLATFORM'|..., ...}. For create_actor, specify: actor = {id: string, x: number, y: number, spriteId: string, ...}. This must be in the parameter description or a linked schema reference.
Remove set_claude_key from tool parameters entirely. Inject the Claude API key via environment variable (e.g., CLAUDE_API_KEY) at server startup. If the key must be configurable, use a server initialization step, not a runtime tool.
Add output schema documentation to every tool. Example for inventory: 'Returns {scenes: [{id: string, name: string, type: string}], actors: [...], triggers: [...], assets: [...]}'. This must appear in the tool description or return documentation.
Expand tool descriptions to 50 - 200 characters. Example: 'Find the first .gbsproj file in a directory tree. Useful for discovering project roots when given an arbitrary path. Returns the project file path or null if not found.'
Consolidate create_sprite, create_music, create_sound, create_tileset, create_palette, create_font, create_emote, create_avatar into a single create_asset tool with an asset_type enum parameter and a payload object specific to each type.
Add error handling guidance to all write tools. Examples: 'If the project root does not exist, returns error:not_found with the path tried, use find_project first.' 'If validation fails, returns error:invalid_structure with a list of problems and suggestions for fixes.'
Score history
Overall score trend
↑ 28 points across a rubric change (v1 → v2)
36/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-21
F
36
2026-07-28+
v2
2026-03-09
F
8
-
v1
38/100
Create a new font in the project.
create_musicwritesource verified38/100
Create a new music track in the project.
create_palettewritesource verified38/100
Create a new palette in the project.
create_prefab_actorwritesource verified38/100
Create a new actor prefab in the project.
create_prefab_triggerwritesource verified38/100
Create a new trigger prefab in the project.
create_scenewritesource verified38/100
Add a new scene to the specified GB Studio project.
create_scriptwritesource verified38/100
Create a new script in the project.
create_soundwritesource verified38/100
Create a new sound effect in the project.
create_spritewritesource verified38/100
Create a new sprite in the project.
create_tilesetwritesource verified38/100
Create a new tileset in the project.
create_triggerwritesource verified38/100
Create a new trigger in the specified scene.
create_variablewritesource verified38/100
Create a new variable in the project.
find_projectread onlysource verified55/100
Find the first .gbsproj file starting from a directory.
inventoryread onlysource verified53/100
List scenes, actors, triggers, and assets from a GB Studio project root.
No output schemas documented for any tool. LLMs cannot plan downstream operations, extract the right fields, or understand what data will be returned. Baseline requires 100% of A+ tools to have documented return types.
Tool descriptions are too brief (3 - 30 words). Descriptions under 20 characters cannot convey WHAT the tool does, WHEN to use it, or prerequisites. Baseline for A+ tools: 50 - 200 chars. Examples: 'List scenes, actors, triggers, and assets from a GB Studio project root.' (11 words) for inventory; 'Validate the structure of a GB Studio project.' (8 words) for validate.
No error handling guidance. Tools that modify state (create_*, update_*, build_gba_rom) provide no recovery hints, retryability classification, or actionable error messages. LLMs cannot determine whether to retry, ask the user, or escalate. Baseline requires 'what to do next' in error responses.
14+ 'create_*' tools (create_sprite, create_music, create_sound, etc.) should be consolidated into a single 'create_asset' tool with an asset_type enum. Current design forces the LLM to reason about which tool to use for each asset, wasteful and error-prone. Single canonical tool with type enum follows pattern:tool composition.
No permission checks or scope declarations. Destructive operations (delete data, build ROMs, inject API keys) have no gate or audit trail. Missing pattern:permission-gate and pattern:scope-declaration.
Destructive operations (build_gba_rom, all create_*/update_* tools) lack dry-run or confirmation steps. Agents make mistakes, no safety net before executing irreversible actions. Baseline requires pattern:confirmation-request for write operations.
Parameter descriptions are missing or generic. 'projectRoot' appears in 23 tools with no description of format, validation, or handling. 'scene', 'actor', 'background' object params lack any guidance on expected fields.
Tool chaining is broken. Tools like create_actor require a sceneId parameter but there is no documented way to discover scenes or their IDs. inventory lists scenes but no output schema indicates what field contains the scene ID. LLMs cannot chain tools without explicit ID passthrough.
build_gba_rom has optional parameters (gbaStudioRoot, buildCli, verbose, extraArgs) with no constraints, enums, or validation guidance. LLMs will guess at formats. 'extraArgs' is an array with no description of what values are valid.
build_gba_rom
Implement permission checks. Gate create_*, update_*, and build_gba_rom tools behind agent authorization. Return 403 with scope requirements if the agent lacks permission.
Add a dry-run or confirm_before_execute parameter to destructive tools (all create_* and update_* operations). When dry_run=true, validate the operation and return what would be created/modified without actually writing.
Document parameter constraints and relationships in descriptions. For build_gba_rom: 'gbaStudioRoot: Path to GBA Studio checkout (e.g., /opt/gbstudio). Defaults to GBA_STUDIO_ROOT env var. Must exist and be a directory. extraArgs: Array of strings, each a valid gb-studio-cli argument (e.g., ["--debug", "--no-pack"]). Consult gb-studio-cli --help for valid options.'
Add pagination to inventory if it can return large lists. Include limit, offset/cursor, and total_count in the response and parameters.
Add explicit return types for read-only tools. For find_project: 'Returns {path: string} if found, or null if not found.' For inventory: 'Returns {scenes: Scene[], actors: Actor[], triggers: Trigger[], assets: Asset[]}' with nested types defined.
Add audit logging: Log which agent/user called which tool, with input parameters (minus secrets), timestamp, and outcome. This is critical for compliance and debugging destructive operations.