@claudinho/mcp 0.5.1 → 0.5.2

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.
Files changed (2) hide show
  1. package/dist/index.js +14 -4
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -2812,9 +2812,15 @@ var EspnAdapter = class {
2812
2812
  async fetchWindow(startDate, endDate) {
2813
2813
  return this.fetchScoreboard(`${toEspnDate(startDate)}-${toEspnDate(endDate)}`);
2814
2814
  }
2815
+ /**
2816
+ * In-play matches from ESPN's DEFAULT scoreboard bucket only (no `dates`). This
2817
+ * single bucket misses a late kickoff ESPN files under an adjacent day, so it
2818
+ * is a fallback for window-less callers — the domain `getLiveMatches` wraps a
2819
+ * ±1-day window around this to catch boundary-crossing matches. Prefer it.
2820
+ */
2815
2821
  async fetchLive() {
2816
2822
  const today = await this.fetchScoreboard();
2817
- return today.filter((m) => m.status === "LIVE" || m.status === "HT");
2823
+ return today.filter((m) => isLive(m.status));
2818
2824
  }
2819
2825
  /** Standings endpoint URL (lives under apis/v2, not site/v2; derived from base). */
2820
2826
  standingsUrl() {
@@ -2957,9 +2963,13 @@ async function getMatchById(adapter, id) {
2957
2963
  return { match: base, degraded: true };
2958
2964
  }
2959
2965
  }
2960
- async function getLiveMatches(adapter) {
2966
+ async function getLiveMatches(adapter, now = /* @__PURE__ */ new Date()) {
2961
2967
  try {
2962
- return { matches: await adapter.fetchLive(), degraded: false, source: adapter.name };
2968
+ const day = now.toISOString().slice(0, 10);
2969
+ const matches = adapter.fetchWindow ? (await adapter.fetchWindow(shiftUtcDate(day, -1), shiftUtcDate(day, 1))).filter(
2970
+ (m) => isLive(m.status)
2971
+ ) : await adapter.fetchLive();
2972
+ return { matches, degraded: false, source: adapter.name };
2963
2973
  } catch {
2964
2974
  return { matches: [], degraded: true };
2965
2975
  }
@@ -4007,7 +4017,7 @@ async function toolGetShareSnippet(args) {
4007
4017
 
4008
4018
  // src/server.ts
4009
4019
  var SERVER_NAME = "claudinho";
4010
- var SERVER_VERSION = "0.5.1";
4020
+ var SERVER_VERSION = "0.5.2";
4011
4021
  var VOICE = asFlavorLevel(process.env.CLAUDINHO_FLAVOR) === "off" ? "" : `
4012
4022
  Voice: when relaying scores, narrate with lively, regionally-appropriate football-commentary energy in the user's language. Each match line may end with a short exclamation ("\u2014 \xA1GOOOOL!") \u2014 use it as a tone cue. Keep every fact exact; never invent details and never impersonate or name a real commentator.`;
4013
4023
  var INSTRUCTIONS = `Claudinho serves live scores, fixtures, and group standings for the 2026 men's football tournament.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudinho/mcp",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "mcpName": "io.github.arturogarrido/claudinho",
5
5
  "description": "MCP server for the 2026 men's football tournament — live scores, fixtures, standings, read-only prediction-market signals, and paste-ready match cards. Works with Claude Code, Cursor, Codex, Windsurf, Zed. Not affiliated with FIFA or Anthropic.",
6
6
  "type": "module",
@@ -54,7 +54,7 @@
54
54
  "tsup": "^8.0.0",
55
55
  "typescript": "^5.7.0",
56
56
  "vitest": "^4.1.0",
57
- "@claudinho/core": "0.5.1"
57
+ "@claudinho/core": "0.5.2"
58
58
  },
59
59
  "scripts": {
60
60
  "build": "tsup",