getcompetitive 4.0.1 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/sprites.data.js +1282 -0
- package/dist/sprites.data.js.map +1 -0
- package/dist/tools/analyze.js +1 -1
- package/dist/tools/analyze.js.map +1 -1
- package/dist/tools/doctor.js +249 -0
- package/dist/tools/doctor.js.map +1 -0
- package/dist/tools/matchup.js +434 -0
- package/dist/tools/matchup.js.map +1 -0
- package/dist/tools/sprites.js +77 -0
- package/dist/tools/sprites.js.map +1 -0
- package/dist/tools/team.js +412 -0
- package/dist/tools/team.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Smogon-tier and archetype surface that used to sit alongside it is gone.
|
|
|
17
17
|
|
|
18
18
|
## What it provides
|
|
19
19
|
|
|
20
|
-
- **
|
|
20
|
+
- **26 tools** across six domains: data, team analysis, team workflows (paste in, diagnose, prepare matchups), meta (usage-derived), battle mechanics, and official regulation sets
|
|
21
21
|
- **Structured, agent-first definitions** — every tool declares MCP annotations and an output schema, returns `structuredContent` alongside JSON text, and documents all of its parameters; the deterministic half of the [TDQS](https://tdqs.dev) checklist is linted in CI
|
|
22
22
|
- Full **Pokémon Showdown** dataset — species, alternate forms, stats, moves, items, abilities, natures, learnsets, types
|
|
23
23
|
- **Battle math** from Smogon's calculator — stat calculation and full damage calculation (weather, terrain, boosts, items)
|
|
@@ -34,6 +34,7 @@ Built on [`@pkmn/dex`](https://github.com/pkmn/EPOKe) (Showdown data) and
|
|
|
34
34
|
| --- | --- |
|
|
35
35
|
| `get_pokemon` | Types, base stats, BST, abilities, forms, weight, gender, evolutions |
|
|
36
36
|
| `list_forms` | All forms of a species (alternate, cosmetic, battle-only) |
|
|
37
|
+
| `get_sprites` | Sprite URLs for a whole team in one call (artwork or icon), from a committed PokéAPI id table — URLs only, the server does no network I/O |
|
|
37
38
|
| `search_dex` | Fuzzy name search across species / moves / items / abilities / natures |
|
|
38
39
|
| `get_move` | Type, category, power, accuracy, PP, priority, target, secondary effects |
|
|
39
40
|
| `get_item` | Effect, flags, mega stone, Z-move, Fling, boosts |
|
|
@@ -48,6 +49,14 @@ Built on [`@pkmn/dex`](https://github.com/pkmn/EPOKe) (Showdown data) and
|
|
|
48
49
|
| --- | --- |
|
|
49
50
|
| `analyze_team` | Team synergy: stacked defensive weaknesses, offensive coverage gaps, speed placement, a heuristic score, and — with a regulation — coverage against the meta's real sets |
|
|
50
51
|
|
|
52
|
+
### Team workflows
|
|
53
|
+
| Tool | Purpose |
|
|
54
|
+
| --- | --- |
|
|
55
|
+
| `parse_team` | Turn a Showdown/Pokepaste block (or a `species @ item \| ability \| nature \| EVs \| moves` one-liner) into the canonical team every tool takes; unknown names become warnings, not errors |
|
|
56
|
+
| `format_team` | Render a canonical team back into paste text, round-tripping through `parse_team` |
|
|
57
|
+
| `diagnose_team` | "Fix my team": weaknesses with evidence, then concrete spread, move, item and member changes, each backed by exact math or usage data |
|
|
58
|
+
| `prepare_matchup` | "Prepare me": their likely sets by usage, speed races with margins, key damage rolls, bring-four, leads, and win/loss conditions |
|
|
59
|
+
|
|
51
60
|
### Meta (usage-derived)
|
|
52
61
|
| Tool | Purpose |
|
|
53
62
|
| --- | --- |
|
|
@@ -142,6 +151,9 @@ npm test # builds and drives every tool over real MCP stdio
|
|
|
142
151
|
- `calculate_damage` `{ "attacker": { "species": "Garchomp", "level": 50, "nature": "Jolly", "evs": { "atk": 252, "spe": 252 }, "item": "Choice Band" }, "defender": { "species": "Corviknight", "level": 50, "nature": "Impish", "evs": { "hp": 252, "def": 252 } }, "move": "Dragon Claw" }`
|
|
143
152
|
- `check_legality` `{ "regulation": "m-c", "team": [ { "species": "Garchomp", "item": "Choice Band" } ] }`
|
|
144
153
|
- `analyze_team` `{ "team": [ { "species": "Garchomp", "moves": ["Earthquake", "Dragon Claw", "Rock Slide"] } ], "regulation": "m-c" }`
|
|
154
|
+
- `parse_team` `{ "text": "Garchomp @ Choice Scarf | Rough Skin | Jolly | 252 Atk / 252 Spe | Earthquake / Dragon Claw" }`
|
|
155
|
+
- `diagnose_team` `{ "team": [ { "species": "Garchomp", "nature": "Jolly", "evs": { "atk": 252, "spe": 252 } } ], "goal": "improve against the current meta" }`
|
|
156
|
+
- `prepare_matchup` `{ "team": [ { "species": "Garchomp" } ], "opponent": ["Sneasler", "Salamence-Mega", "Gholdengo"] }`
|
|
145
157
|
|
|
146
158
|
## Data freshness
|
|
147
159
|
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,10 @@ import { registerCalcTools } from './tools/calc.js';
|
|
|
15
15
|
import { registerRegulationTools } from './tools/regulations.js';
|
|
16
16
|
import { registerAnalyzeTools } from './tools/analyze.js';
|
|
17
17
|
import { registerMetaTools } from './tools/meta.js';
|
|
18
|
+
import { registerTeamTools } from './tools/team.js';
|
|
19
|
+
import { registerDoctorTool } from './tools/doctor.js';
|
|
20
|
+
import { registerMatchupTool } from './tools/matchup.js';
|
|
21
|
+
import { registerSpritesTool } from './tools/sprites.js';
|
|
18
22
|
const { version } = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
|
|
19
23
|
const server = new McpServer({
|
|
20
24
|
name: 'getcompetitive',
|
|
@@ -25,5 +29,9 @@ registerCalcTools(server);
|
|
|
25
29
|
registerRegulationTools(server);
|
|
26
30
|
registerAnalyzeTools(server);
|
|
27
31
|
registerMetaTools(server);
|
|
32
|
+
registerTeamTools(server);
|
|
33
|
+
registerDoctorTool(server);
|
|
34
|
+
registerMatchupTool(server);
|
|
35
|
+
registerSpritesTool(server);
|
|
28
36
|
await server.connect(new StdioServerTransport());
|
|
29
37
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC3C,CAAC;AAEzB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,gBAAgB;IACtB,OAAO;CACR,CAAC,CAAC;AAEH,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAE5B,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC"}
|