MCP server bridging AI agents to Stardew Valley via SMAPI.
This server has 15 tools with severely underdeveloped parameter schemas and descriptions. Most tools accept zero parameters or have empty input schemas. While descriptions are present, they are terse and lack procedural context. No output schemas are documented. No error handling guidance, no recovery paths, and no actionable error messages are visible in the code. Tools 1-9 have completely empty input schemas (no parameters at all), which violates basic usability patterns. Tool 10 has one parameter with a description, tools 11-12 have proper parameter definitions with enums and descriptions, but tools 13-15 degrade again. The composition is reasonable (single actions per tool), but the execution falls far short of production-grade quality. This is a D-tier server with fundamental gaps in schema definition and parameter documentation.
Send a custom action (water, harvest, clear, hoe) at a tile.
Send a chat message in the game.
Enable auto-farm mode for all companions.
Enable fishing mode for all companions.
Make all companions follow the player.
Get a companion's inventory — tools and items they're carrying.
Get current game state — time, weather, location, player stats, companion status, nearby NPCs.
9 out of 15 tools have completely empty input schemas (no properties, no parameters). This violates the pattern:constrained-input requirement and forces LLMs to guess whether they can pass parameters. Tools: stardew_get_state, stardew_spawn, stardew_follow, stardew_stay, stardew_farm, stardew_mine, stardew_fish, stardew_water_all, stardew_harvest_all.
No output schemas are documented anywhere in the code. The ListToolsRequestSchema response does not include 'outputSchema' fields. LLMs cannot predict what these tools return, making downstream tool composition impossible and forcing them to guess at response structure. This violates pattern:tool and pattern:response-shaper.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2026-07-28+ | v2 |
Get what a companion can see — tiles, objects, crops, monsters, NPCs in a radius around them. The companion's 'eyes'. Companion must be in player mode.
Instantly harvest all ready crops in the current location.
Enable combat/mining mode for all companions.
Set a specific companion's mode. Modes: follow, farm, mine, fish, idle, player.
Spawn companions into the game world near the player.
Make all companions stop and stay at their current position.
Warp all companions to a location.
Instantly water all unwatered crops in the current location.
No error handling, recovery guidance, or actionable error messages visible in the CallToolRequest handler. When a command fails, the LLM has no way to know if it should retry, ask the user for clarification, or give up. The sendAction() function returns only 'Command sent.' with no confirmation, status, or error reporting. This violates pattern:recovery-guide and pattern:error-classification.
Descriptions for tools 1-9 are under 70 characters and lack procedural context. They describe the effect (e.g. 'Make all companions follow') but do NOT explain WHEN to use them, WHAT they require, or what they RETURN. Per the rubric, descriptions should answer: What does it do? When should the LLM call it? What does it return? Current descriptions fail on 2 of 3 counts.
stardew_action has an incomplete schema. It declares 'actionType' and 'x', 'y' parameters but marks only actionType as required, and x and y are required per the input schema but the schema does not list them in 'required'. Additionally, there is no description for 'actionType' parameter, what are valid values? This forces the LLM to hallucinate valid action types.
No parameter descriptions exist for most fields. E.g., stardew_warp has 'location' with a description, but 'x' and 'y' lack descriptions explaining what tile coordinates mean or their valid range. stardew_set_mode's 'target' enum has no description for what Companion1/Companion2 represent. This violates pattern:tool-description, every parameter needs a description.
No idempotency guarantees documented. Tools like stardew_spawn, stardew_follow, and stardew_farm could have side effects. If an LLM retries after a timeout, will it spawn 2 companions or 1? Will it apply the mode twice? No documentation exists, forcing agents to assume non-idempotency and avoid retries. This violates pattern:idempotent-operation.
No pagination or result limiting for tools that could return large datasets (e.g., stardew_get_state might return data for many NPCs, crops, or items). If the response is unbounded, it can exhaust the LLM's context window. No limit or pagination parameters visible. This violates pattern:paginated-result.
No confirmation or dry-run mode for destructive operations. stardew_harvest_all, stardew_water_all, and stardew_farm are irreversible actions that modify game state. No pattern:confirmation-request or dry-run preview exists to prevent accidental data loss if an LLM misunderstands the intent.
Tool names for global actions (stardew_spawn, stardew_follow, stardew_stay, stardew_farm, etc.) do not clarify SCOPE. Do they act on all companions, the player, or a specific companion? The descriptions say 'all companions' but the names do not reflect this. A clearer naming convention like 'stardew_spawn_all_companions' or 'stardew_follow_all' would avoid ambiguity. This violates pattern:tool name clarity.