get_recipes / price_recipe: filters narrow recipes but ship the full unfiltered graph index anyway (MCP-unusable) #254
Labels
No labels
burndown-2026-06
headless
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/eco-app#254
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
get_recipesandprice_recipeapply their filters correctly to therecipesarray, but emittags,byProduct,byStation, andbySkillcompletely unfiltered on every call. The result blows the MCP client response cap even on a single-recipe query, so neither tool is usable over MCP for its primary documented use case.get_recipes' own description says "Summary-first — the full graph is ~1,450 recipes, so pass a filter or raiselimit." Passing a filter does not help, because the filter never reaches the index maps.Evidence
mcp__eco__get_recipes(product="SteelAxeItem")→ 196,560 characters, over the cap.Byte breakdown of that response:
tagsbyProductbyStationbySkillskillsrecipescounts.recipes: 1,recipesMatched: 1,recipesReturned: 1. The caller asked for one recipe, got the right one recipe, and 189 KB of graph index around it. Signal is 0.34% of payload.price_recipe(product="SteelAxeItem")→ 197,311 characters, identical shape. Its actual output (recipes[0].cost, 1,401 bytes) is 0.7% of the response.Worth stressing: the pricing logic itself is good.
SteelAxeItemcosted cleanly atperUnitCost: 22.48,complete: true,unpricedInputs: [], with each leaf correctly attributedsource: "market"vssource: "craft". Only the envelope is broken.Expected
When a filter (
product/skill/station) or alimitis supplied, the index maps should be restricted to the returned recipes — or omitted entirely, since a caller who filtered to one recipe has no use for a 1,323-key product index.price_recipein particular should probably not return the recipe-graph schema at all; it has one documented job (cost one product) and should return that.Repro
All three exceed the response cap. Found during a QA sweep of all 25 Eco MCP tools.