@chessceo/mcp 0.49.4 → 0.49.5

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/dist/index.js CHANGED
@@ -114,6 +114,18 @@ const SUMMARY_AUTHORING_DOC = loadBundledDoc("summary-authoring.md", "Summary au
114
114
  // all intact) — not summarised into English.
115
115
  const EXAMPLE_OVERVIEW_PGN = loadBundledDoc("examples/italian-fried-liver.pgn", "Italian Fried Liver overview example");
116
116
  const EXAMPLE_REPERTOIRE_PGN = loadBundledDoc("examples/najdorf-6-f4-white.pgn", "Najdorf 6.f4 White repertoire example");
117
+ // Per-engine guidance surfaced in list_cloud_machine_options' RESPONSE only
118
+ // (an AUTHED_TOOLS-gated call, both transports — see authedRequest's
119
+ // missing-token check and isAuthedToolCall's 401+WWW-Authenticate
120
+ // pre-check). Deliberately NOT in this tool's static `description` in
121
+ // tools.ts, since tools/list itself is reachable without authentication —
122
+ // putting it there would surface this to any caller who can list tools,
123
+ // not just ones who actually hold a token.
124
+ const ENGINE_GUIDE = {
125
+ stockfish: "Objective calculation — the ground truth for whether a line is actually winning/drawn/losing with best play, whether a tactic is real, whether a defense holds. Gives 0.00 to a large share of normal positions even when one side is much harder to play for a human — that means 'drawn with best play,' not 'trivial' or 'nothing to look for.'",
126
+ lc0: "Neural-net engine trained on human-style play, roughly 3500-strength. Its evaluation approximates how a strong human judges the position (practical chances, initiative, structure) rather than pure objective truth — good for finding ideas and gauging which side is easier to play over the board. Has real weaknesses in unconventional/irregular positions outside its training distribution: evals there can be unstable or it can miss a deep concrete tactic. When it disagrees sharply with Stockfish, look for the tactical justification before trusting its read.",
127
+ combo: "Runs Stockfish and Lc0 together — use when you want both the objective read and the practical/human-feel read on the same position.",
128
+ };
117
129
  // v0.48: consolidated the five `read_*_guide` / `read_example_prep_files`
118
130
  // tools into ONE `read_docs`. LLM lists what it wants; we return them
119
131
  // in a single response. Also cleaner: enumerating available docs in one
@@ -367,8 +379,11 @@ async function callToolInner(name, args) {
367
379
  case "list_player_live_tournaments":
368
380
  // Note: snake_case fide_id, unlike the prep endpoints. Documented quirk.
369
381
  return get("/api/chess/live/player", { fide_id: Number(args.fide_id) });
370
- case "list_cloud_machine_options":
371
- return authedRequest("GET", "/api/agent/cloud-engines/options");
382
+ case "list_cloud_machine_options": {
383
+ const raw = await authedRequest("GET", "/api/agent/cloud-engines/options");
384
+ const resp = raw;
385
+ return { ...(resp && typeof resp === "object" ? resp : { options: [] }), engine_guide: ENGINE_GUIDE };
386
+ }
372
387
  case "start_cloud_engine":
373
388
  return authedRequest("POST", "/api/agent/cloud-engines", {
374
389
  machineType: String(args.machine_type),
package/dist/tools.js CHANGED
@@ -258,7 +258,7 @@ export const TOOLS = [
258
258
  },
259
259
  {
260
260
  name: "list_cloud_machine_options",
261
- description: "Returns the catalog of cloud-engine machine types the user can start — every engine shape (stockfish-only, lc0-only, and combo) they're entitled to, same visibility rules as the chess.ceo app (SKU, which engine(s) it runs, human display name, cost per hour, availability). ALWAYS call this before start_cloud_engine — SKU strings like 'rtx-5090-64' do not match the display names ('Stockfish 32 CPUs + Lc0 1× RTX 5090') and are NOT guessable, and a given SKU only supports the engine(s) shown in its `engine` field (a stockfish-only SKU cannot be started as lc0 or combo). Present the user the display names + prices; pass the SKU to start_cloud_engine.",
261
+ description: "Returns the catalog of cloud-engine machine types the user can start — every engine shape (stockfish-only, lc0-only, and combo) they're entitled to, same visibility rules as the chess.ceo app (SKU, which engine(s) it runs, human display name, cost per hour, availability), plus an `engine_guide` explaining what each engine type is actually good/bad for so you can pick the right one for the task, not just the cheapest. ALWAYS call this before start_cloud_engine — SKU strings like 'rtx-5090-64' do not match the display names ('Stockfish 32 CPUs + Lc0 1× RTX 5090') and are NOT guessable, and a given SKU only supports the engine(s) shown in its `engine` field (a stockfish-only SKU cannot be started as lc0 or combo). Present the user the display names + prices; pass the SKU to start_cloud_engine.",
262
262
  inputSchema: { type: "object", properties: {} },
263
263
  },
264
264
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chessceo/mcp",
3
- "version": "0.49.4",
3
+ "version": "0.49.5",
4
4
  "description": "Model Context Protocol server for chess.ceo — 11.7M+ games, ~1.5M FIDE player profiles, opening preparation, live broadcasts.",
5
5
  "type": "module",
6
6
  "bin": {