@claudinho/mcp 0.5.1 → 0.6.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/dist/index.js +14 -4
- 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
|
|
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
|
-
|
|
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.
|
|
4020
|
+
var SERVER_VERSION = "0.6.0";
|
|
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.
|
|
3
|
+
"version": "0.6.0",
|
|
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.
|
|
57
|
+
"@claudinho/core": "0.6.0"
|
|
58
58
|
},
|
|
59
59
|
"scripts": {
|
|
60
60
|
"build": "tsup",
|