@claudinho/mcp 0.10.1 → 0.11.1
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 +75 -38
- package/dist/index.js +3929 -1109
- package/package.json +24 -10
package/README.md
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
# @claudinho/mcp ⚽
|
|
2
2
|
|
|
3
|
-
**An MCP server
|
|
4
|
-
|
|
5
|
-
Cursor, Codex, Claude Desktop, Windsurf, Zed, VS Code,
|
|
6
|
-
No API key, no signup
|
|
3
|
+
**An MCP server with live football scores, fixtures, standings and paste-ready match cards for
|
|
4
|
+
the competition you follow: the World Cup, the Premier League, LALIGA, the Champions League and
|
|
5
|
+
12 more.** Ask your agent in Claude Code, Cursor, Codex, Claude Desktop, Windsurf, Zed, VS Code,
|
|
6
|
+
or any MCP client (stdio). No API key, no signup. The World Cup's 104 fixtures ship bundled; the
|
|
7
|
+
other competitions' schedules are read from the feed, and live scores (and the optional,
|
|
8
|
+
read-only Polymarket signals for the World Cup) hit the network. It ran the 2026 World Cup from
|
|
9
|
+
the opener to the final.
|
|
7
10
|
|
|
8
11
|
<p align="center">
|
|
9
|
-
<img src="https://raw.githubusercontent.com/arturogarrido/claudinho/main/.github/assets/mcp-aha.gif" alt="An AI coding agent mid-task: asked 'did Germany get through?', it calls the Claudinho MCP server and answers with the result
|
|
12
|
+
<img src="https://raw.githubusercontent.com/arturogarrido/claudinho/main/.github/assets/mcp-aha.gif" alt="An AI coding agent mid-task during the 2026 World Cup: asked 'did Germany get through?', it calls the Claudinho MCP server and answers with the result: 🇩🇪 Germany 1(3)–1(4) Paraguay 🇵🇾, FT (Paraguay won the shootout)" width="760">
|
|
10
13
|
</p>
|
|
11
14
|
|
|
12
|
-
> ⭐ Added via `npx` or your MCP config? **[Star the repo](https://github.com/arturogarrido/claudinho)
|
|
15
|
+
> ⭐ Added via `npx` or your MCP config? **[Star the repo](https://github.com/arturogarrido/claudinho)**: a fan project runs on stars.
|
|
13
16
|
|
|
14
17
|
## Install
|
|
15
18
|
|
|
@@ -18,26 +21,26 @@ No API key, no signup — all 104 fixtures ship bundled; only live scores (and o
|
|
|
18
21
|
claude mcp add claudinho -- npx -y @claudinho/mcp
|
|
19
22
|
```
|
|
20
23
|
|
|
21
|
-
**Cursor
|
|
24
|
+
**Cursor**: add to `~/.cursor/mcp.json` (global) or a project `.cursor/mcp.json`:
|
|
22
25
|
```json
|
|
23
26
|
{ "mcpServers": { "claudinho": { "command": "npx", "args": ["-y", "@claudinho/mcp"] } } }
|
|
24
27
|
```
|
|
25
28
|
> Bonus: `claudinho init-cursor-statusline` (from `@claudinho/cli`) also puts the live score
|
|
26
|
-
> in your Cursor CLI statusline
|
|
29
|
+
> in your Cursor CLI statusline, or run `claudinho init cursor` to do both at once.
|
|
27
30
|
|
|
28
31
|
**Codex CLI**
|
|
29
32
|
```bash
|
|
30
33
|
codex mcp add claudinho -- npx -y @claudinho/mcp
|
|
31
34
|
```
|
|
32
35
|
|
|
33
|
-
**Claude Desktop / Windsurf / Zed / VS Code
|
|
36
|
+
**Claude Desktop / Windsurf / Zed / VS Code**: standard stdio config (same JSON as Cursor):
|
|
34
37
|
Claude Desktop: Settings → Developer → Edit Config, then restart. Codex config file:
|
|
35
38
|
`~/.codex/config.toml` (`[mcp_servers.claudinho]`, `command = "npx"`, `args = ["-y", "@claudinho/mcp"]`).
|
|
36
39
|
|
|
37
|
-
Then just ask your agent naturally
|
|
40
|
+
Then just ask your agent naturally; it picks the right tool and answers with live data:
|
|
38
41
|
|
|
39
|
-
> "What matches are on today?" · "Show me the live scores" · "What's
|
|
40
|
-
> "
|
|
42
|
+
> "What matches are on today?" · "Show me the live scores" · "What's Arsenal's next game?"
|
|
43
|
+
> "Show the Premier League table" · "Show the World Cup bracket" · "Make me a shareable card for today"
|
|
41
44
|
|
|
42
45
|
## Tools
|
|
43
46
|
|
|
@@ -45,54 +48,88 @@ Then just ask your agent naturally — it picks the right tool and answers with
|
|
|
45
48
|
|---|---|
|
|
46
49
|
| `get_today` | fixtures for a date (default: today), grouped in the caller's `tz`, live scores overlaid |
|
|
47
50
|
| `get_live` | matches in play right now |
|
|
48
|
-
| `get_match` | a single match by id |
|
|
49
|
-
| `get_standings` | live cumulative
|
|
50
|
-
| `get_bracket` | knockout bracket from the Round of 32 through the final
|
|
51
|
-
| `get_next_fixture` | a team's next match
|
|
52
|
-
| `get_market_signal` | read-only prediction-market signal for a match, a team's current-or-next fixture (in-play preferred while live), or a date
|
|
53
|
-
| `get_share_snippet` | a copy-pasteable plain-text card
|
|
54
|
-
| `get_team` | resolve a nation name or code to its FIFA 3-letter code, flag, and group
|
|
51
|
+
| `get_match` | a single match by id; in a club competition, looked for from yesterday to 14 days ahead (`window` names the days searched when it is not there) |
|
|
52
|
+
| `get_standings` | live cumulative standings: every table, or one by its key (a group letter, or `A1`, `A-B`, `LEAGUE`) |
|
|
53
|
+
| `get_bracket` | knockout bracket from the Round of 32 through the final, with an optional `stage` filter (`R32`, `R16`, `QF`, `SF`, `3P`, `F`); the Premier League and LALIGA, league seasons with no knockout tie of their own, answer `inapplicable`; the other competitions off the World Cup answer `unsupported` (not offered yet) |
|
|
54
|
+
| `get_next_fixture` | a team's next match, by name or code. A nation (`Mexico`, `MEX`): live-resolves a confirmed knockout tie from the feed, group fixtures offline, fails back to the bundled schedule if the feed is down; a club (`Arsenal`, `ARS`): its next match within 14 days, `candidates` when several teams match, `horizon` when it has none in that span. With no `team`: the server's `CLAUDINHO_TEAM`, else the team the user pinned (`claudinho follow <alias> --team <name>`) when the request is for its competition |
|
|
55
|
+
| `get_market_signal` | read-only prediction-market signal for a match, a team's current-or-next fixture (in-play preferred while live), or a date; informational only |
|
|
56
|
+
| `get_share_snippet` | a copy-pasteable plain-text card for a match, a team's next fixture, a group's standings table (`group`), the knockout bracket (`bracket: true`, optional `knockoutStage`), a date, or live; hand the returned snippet to the user as-is |
|
|
57
|
+
| `get_team` | the World Cup roster: resolve a nation name or code to its FIFA 3-letter code, flag, and group; fuzzy (`Mexico`, `mex`, `DR Congo`, `Türkiye`); handy for the code `get_market_signal` needs. It knows no clubs. Offline (no network) |
|
|
58
|
+
| `list_competitions` | the supported competitions: each one's alias (what `competition` takes), name, teams (nations or clubs), kind, and what it offers (scores, next, standings, bracket, markets: `offered`, `not-offered-yet`, `not-applicable`), plus `current`, the competition the request is for. Offline (no network) |
|
|
55
59
|
|
|
56
60
|
Most tools are **read-only** (`readOnlyHint`) and accept optional `tz`, `lang`
|
|
57
|
-
(`en`/`es`/`pt`/`fr`),
|
|
58
|
-
|
|
61
|
+
(`en`/`es`/`pt`/`fr`), `flavor` (`off`/`subtle`/`full`), and `competition`: an alias
|
|
62
|
+
such as `premier-league` (from `list_competitions`) or an ESPN slug such as `eng.1`
|
|
63
|
+
(without it: the server's `CLAUDINHO_COMPETITION`, else the user's saved choice, the one
|
|
64
|
+
`claudinho follow <alias>` saves; an unknown value is a tool error listing the aliases).
|
|
65
|
+
With none of the three, every competition-answering tool answers, before it reads
|
|
66
|
+
anything, `noCompetition: true` and `competition: null` beside its empty shape, and a
|
|
67
|
+
sentence saying what to do (pass `competition`, or the user runs `claudinho follow
|
|
68
|
+
<alias>`); `list_competitions` answers `current: null`, and `get_team` answers as ever. Every competition-answering tool's text
|
|
69
|
+
starts with the competition it is for (`Premier League · from the request`; a share
|
|
70
|
+
card says it in its title instead) and its structured content carries it as
|
|
71
|
+
`competition`. `get_team` (the World Cup's roster, whatever the competition) and
|
|
72
|
+
`list_competitions` are read-only **and** offline. Every response carries
|
|
59
73
|
human-readable text **and** structured content, validated against each tool's
|
|
60
|
-
declared `outputSchema`.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
74
|
+
declared `outputSchema`. When the provider's knockout answer was not whole,
|
|
75
|
+
`get_next_fixture`, `get_bracket` and the next/bracket share cards say so before
|
|
76
|
+
what was read and carry `partial` (`omitted`: the count of provider records left
|
|
77
|
+
out, when known); no fixture is then not "eliminated". `get_today`, `get_live`,
|
|
78
|
+
`get_match`, `get_market_signal` and their share cards carry `partial` for their own
|
|
79
|
+
reads too: an empty answer then means nothing was read, not that nothing exists, and a
|
|
80
|
+
World Cup day counts the fixtures shown from the bundled schedule without their live
|
|
81
|
+
state. In a club competition whose
|
|
82
|
+
edition has ended (and the next has not started), `get_today`, `get_live`,
|
|
83
|
+
`get_next_fixture` and `get_match` say so and carry `betweenEditions`. A club has no
|
|
84
|
+
`flag` (a nation's is generated from its name), and nothing is printed in its place; a
|
|
85
|
+
match's `stage` is the written one (`REGULAR` for a league's season, `LEAGUE` for a cup's
|
|
86
|
+
league phase, `PO` for play-offs), or `OTHER` with the provider's own words in `stageLabel`.
|
|
87
|
+
|
|
88
|
+
Resources: `standings://{group}` (its text starts with the competition it is for, like a tool's), `fixtures://{date}` (the bundled World Cup schedule, named first, whatever the competition). Prompts: `tournament_today`,
|
|
89
|
+
and `my_team` (the competition you follow: give it a club's or a nation's code or name, or
|
|
90
|
+
none for your team (the server's `CLAUDINHO_TEAM`, else the one pinned with `claudinho follow --team`);
|
|
91
|
+
it asks for the next fixture with its date and state and the team's standing, and on the World Cup
|
|
92
|
+
for the prediction-market read of that fixture).
|
|
65
93
|
|
|
66
94
|
## Market signals
|
|
67
95
|
|
|
68
|
-
Market signals are pre-match and in-play reads
|
|
96
|
+
Market signals are pre-match and in-play reads: finished matches never show one.
|
|
69
97
|
`get_today` / `get_match` include a short market line when a reliable market exists
|
|
70
98
|
(slugs are auto-derived per fixture; matching fails closed). Their structured output
|
|
71
99
|
includes `marketComplete`; the dedicated market tool uses `complete`. A false verdict
|
|
72
100
|
means the optional read was unavailable or incomplete and is never described as "no signal."
|
|
73
101
|
Share cards carry the same verdict and warning. **Read-only and
|
|
74
|
-
informational only
|
|
102
|
+
informational only, not betting advice:** market-implied percentages with Polymarket
|
|
75
103
|
attribution, never links or trade calls. Disable with `CLAUDINHO_MARKETS=off`; set
|
|
76
104
|
`CLAUDINHO_MARKETS_SOURCE=fake` in the server `env` for a network-free, clearly
|
|
77
105
|
labeled synthetic preview.
|
|
78
106
|
|
|
79
107
|
## Commentary flair
|
|
80
108
|
|
|
81
|
-
Match lines in the text end with a short, localized
|
|
82
|
-
(`— ¡GOOOOL!`)
|
|
83
|
-
|
|
84
|
-
|
|
109
|
+
Match lines in the text end with a short, localized exclamation for the match's
|
|
110
|
+
moment (`— ¡GOOOOL!`): a few hundred lines in four languages, no real person named
|
|
111
|
+
or impersonated, none repeated within one list while the bank lasts, never in the
|
|
112
|
+
structured JSON. A team's own rally cry takes its place when one side has one
|
|
113
|
+
(Mexico's `¿Y si sí?`, Pumas' `¡Goya!`, Arsenal's `COYG!`): when both do, the team
|
|
114
|
+
saved with `claudinho follow --team` for that competition, else the home side's
|
|
115
|
+
(the server's `CLAUDINHO_TEAM` is the team-taking tools' default query, not the
|
|
116
|
+
cry's tiebreak). A row with a cry takes no line from the bank, a postponed or
|
|
117
|
+
cancelled match prints neither, and the `fixtures://` resource prints a phrase,
|
|
118
|
+
never a cry (it states no team kind). Control with `CLAUDINHO_FLAVOR`
|
|
119
|
+
(`off`|`subtle`|`full`, default `full`; `subtle` is goals, full time, draws and
|
|
120
|
+
the cries) in the server `env`, or per call via the `flavor` argument.
|
|
85
121
|
|
|
86
122
|
## How it works
|
|
87
123
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
124
|
+
The World Cup's 104 fixtures ship bundled in the package; the other competitions'
|
|
125
|
+
schedules are read from the feed, and live state always hits the network: live scores
|
|
126
|
+
from **ESPN's** public scoreboard (swappable provider, attributed in output), market
|
|
127
|
+
signals from Polymarket. Stdout carries only the MCP protocol;
|
|
91
128
|
diagnostics go to stderr.
|
|
92
129
|
|
|
93
130
|
## Privacy Policy
|
|
94
131
|
|
|
95
|
-
No personal data collected
|
|
132
|
+
No personal data collected: no accounts, no telemetry, no analytics, no tracking, and no
|
|
96
133
|
Claudinho server. To show live scores, Claudinho makes read-only requests to public services
|
|
97
134
|
(ESPN; Polymarket for informational-only market signals) with no account or personal data
|
|
98
135
|
attached, though those services still receive standard request metadata (such as your IP
|
|
@@ -103,8 +140,8 @@ nothing to disk. Full policy: [PRIVACY.md](https://github.com/arturogarrido/clau
|
|
|
103
140
|
|
|
104
141
|
MIT © 2026 Arturo Garrido · [source & issues](https://github.com/arturogarrido/claudinho)
|
|
105
142
|
|
|
106
|
-
> **Not affiliated with, endorsed by
|
|
107
|
-
> open-source fan project showing factual match data with emoji flags only
|
|
143
|
+
> **Not affiliated with FIFA, any confederation, league or club, or Anthropic. Nor endorsed by or connected to any of them.** An independent,
|
|
144
|
+
> open-source fan project showing factual match data with emoji flags only: no logos, crests,
|
|
108
145
|
> kits, broadcast footage, or player likenesses.
|
|
109
146
|
|
|
110
147
|
---
|