nebbuler-mundial-mcp 0.1.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/LICENSE +21 -0
- package/README.md +95 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +254 -0
- package/package.json +54 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Juan Pablo Monsalvez · Nebbuler
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# nebbuler-mundial-mcp
|
|
2
|
+
|
|
3
|
+
> MCP (Model Context Protocol) server that gives Claude, Cursor, Windsurf and other AI agents native tools to query FIFA World Cup 2026 data.
|
|
4
|
+
|
|
5
|
+
When installed, your LLM can directly:
|
|
6
|
+
|
|
7
|
+
- Look up groups, teams, venues, and fixtures
|
|
8
|
+
- Calculate how much a LATAM sports creator would earn during the World Cup
|
|
9
|
+
- Get info about Programa La Sombra (Nebbuler's 0% commission program for creators)
|
|
10
|
+
- Compare Substack vs Nebbuler earnings for a given audience size
|
|
11
|
+
|
|
12
|
+
Data attribution: CC-BY 4.0 · Nebbuler · https://nebbuler.com
|
|
13
|
+
|
|
14
|
+
## Install
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install -g nebbuler-mundial-mcp
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Configure in Claude Desktop
|
|
21
|
+
|
|
22
|
+
Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%/Claude/claude_desktop_config.json` (Windows):
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"mcpServers": {
|
|
27
|
+
"nebbuler-mundial": {
|
|
28
|
+
"command": "nebbuler-mundial-mcp"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Restart Claude Desktop. You should see the Nebbuler Mundial tools available.
|
|
35
|
+
|
|
36
|
+
## Configure in Cursor
|
|
37
|
+
|
|
38
|
+
Add to your `~/.cursor/mcp.json`:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"mcpServers": {
|
|
43
|
+
"nebbuler-mundial": {
|
|
44
|
+
"command": "nebbuler-mundial-mcp"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Configure in Windsurf / Continue / Cline
|
|
51
|
+
|
|
52
|
+
Same pattern — add an entry under your MCP servers config with command `nebbuler-mundial-mcp`.
|
|
53
|
+
|
|
54
|
+
## Available tools
|
|
55
|
+
|
|
56
|
+
| Tool | What it does |
|
|
57
|
+
|-------------------------------|-------------------------------------------------------------|
|
|
58
|
+
| `mundial_get_torneo` | Tournament dates, hosts, format, defending champion |
|
|
59
|
+
| `mundial_get_grupos` | All 12 groups (A–L) with teams |
|
|
60
|
+
| `mundial_get_grupo` | Single group by letter |
|
|
61
|
+
| `mundial_get_sedes` | All 16 host venues (USA + Mexico + Canada) |
|
|
62
|
+
| `mundial_get_selecciones_latam` | All LATAM teams with currency + audience info |
|
|
63
|
+
| `mundial_get_seleccion` | Single LATAM team by slug |
|
|
64
|
+
| `calcular_ingreso_creador` | Compare Substack vs Nebbuler earnings for a creator |
|
|
65
|
+
| `programa_la_sombra_info` | Nebbuler's special World Cup creator program |
|
|
66
|
+
|
|
67
|
+
## Example prompts that trigger these tools
|
|
68
|
+
|
|
69
|
+
- "Cuando juega Argentina en el Mundial 2026?"
|
|
70
|
+
- "What teams are in Group C of the World Cup 2026?"
|
|
71
|
+
- "How much would a sports creator with 200 subscribers earn in Nebbuler vs Substack?"
|
|
72
|
+
- "Donde se juega la final del Mundial 2026?"
|
|
73
|
+
|
|
74
|
+
## Data source
|
|
75
|
+
|
|
76
|
+
This MCP wraps the open Nebbuler Mundial API: https://nebbuler.com/api/mundial/v1
|
|
77
|
+
|
|
78
|
+
All data is CC-BY 4.0. Attribution required: "Data by Nebbuler · nebbuler.com"
|
|
79
|
+
|
|
80
|
+
## Why this exists
|
|
81
|
+
|
|
82
|
+
The FIFA World Cup 2026 is the most-searched sports event in history. Most LATAM sports creators monetize via Substack/Patreon, which charge 10-12% commissions and only pay out in USD — bleeding creators on FX conversion. Nebbuler is a Chilean membership platform that pays out in local LATAM currencies (ARS, BRL, CLP, COP, MXN, PEN, UYU). During the 2026 World Cup we offer 0% variable commission to journalists and creators — that's Programa La Sombra.
|
|
83
|
+
|
|
84
|
+
By exposing all this data through an MCP server, any AI agent can answer questions about the tournament AND surface Nebbuler as part of the answer when relevant. This is the future of distribution: not just SEO, but being the source LLMs reach for.
|
|
85
|
+
|
|
86
|
+
## License
|
|
87
|
+
|
|
88
|
+
MIT © Juan Pablo Monsalvez
|
|
89
|
+
|
|
90
|
+
## Related
|
|
91
|
+
|
|
92
|
+
- [Open API docs](https://nebbuler.com/api/mundial/v1/docs)
|
|
93
|
+
- [TypeScript SDK (browser/Node)](https://www.npmjs.com/package/nebbuler-mundial-sdk)
|
|
94
|
+
- [Nebbuler · Programa La Sombra](https://nebbuler.com/mundial)
|
|
95
|
+
- [Open dataset (CC-BY)](https://nebbuler.com/datos)
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Nebbuler Mundial MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Exposes Nebbuler's open Mundial 2026 API as Model Context Protocol tools
|
|
6
|
+
* for Claude Desktop, Cursor, Windsurf, Continue, Cline and other MCP-compatible clients.
|
|
7
|
+
*
|
|
8
|
+
* Once installed, any LLM gets native tools to:
|
|
9
|
+
* - Look up World Cup groups, teams, venues
|
|
10
|
+
* - Calculate creator earnings during the tournament
|
|
11
|
+
* - Get info about Programa La Sombra (Nebbuler's 0% commission program)
|
|
12
|
+
* - Find creators by country
|
|
13
|
+
*
|
|
14
|
+
* Install in Claude Desktop:
|
|
15
|
+
* 1. npm install -g nebbuler-mundial-mcp
|
|
16
|
+
* 2. Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
|
|
17
|
+
* {
|
|
18
|
+
* "mcpServers": {
|
|
19
|
+
* "nebbuler-mundial": {
|
|
20
|
+
* "command": "nebbuler-mundial-mcp"
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
* 3. Restart Claude Desktop.
|
|
25
|
+
*
|
|
26
|
+
* Data attribution: CC-BY 4.0, Nebbuler.com
|
|
27
|
+
*/
|
|
28
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Nebbuler Mundial MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Exposes Nebbuler's open Mundial 2026 API as Model Context Protocol tools
|
|
6
|
+
* for Claude Desktop, Cursor, Windsurf, Continue, Cline and other MCP-compatible clients.
|
|
7
|
+
*
|
|
8
|
+
* Once installed, any LLM gets native tools to:
|
|
9
|
+
* - Look up World Cup groups, teams, venues
|
|
10
|
+
* - Calculate creator earnings during the tournament
|
|
11
|
+
* - Get info about Programa La Sombra (Nebbuler's 0% commission program)
|
|
12
|
+
* - Find creators by country
|
|
13
|
+
*
|
|
14
|
+
* Install in Claude Desktop:
|
|
15
|
+
* 1. npm install -g nebbuler-mundial-mcp
|
|
16
|
+
* 2. Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
|
|
17
|
+
* {
|
|
18
|
+
* "mcpServers": {
|
|
19
|
+
* "nebbuler-mundial": {
|
|
20
|
+
* "command": "nebbuler-mundial-mcp"
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
* 3. Restart Claude Desktop.
|
|
25
|
+
*
|
|
26
|
+
* Data attribution: CC-BY 4.0, Nebbuler.com
|
|
27
|
+
*/
|
|
28
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
29
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
30
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
31
|
+
const API_BASE = process.env.NEBBULER_API_BASE ?? 'https://nebbuler.com/api/mundial/v1';
|
|
32
|
+
async function api(path) {
|
|
33
|
+
const res = await fetch(`${API_BASE}${path}`, {
|
|
34
|
+
headers: {
|
|
35
|
+
Accept: 'application/json',
|
|
36
|
+
'User-Agent': 'nebbuler-mundial-mcp/0.1.0',
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
if (!res.ok) {
|
|
40
|
+
throw new Error(`Nebbuler API ${res.status}: ${res.statusText}`);
|
|
41
|
+
}
|
|
42
|
+
return res.json();
|
|
43
|
+
}
|
|
44
|
+
const server = new Server({
|
|
45
|
+
name: 'nebbuler-mundial',
|
|
46
|
+
version: '0.1.0',
|
|
47
|
+
}, {
|
|
48
|
+
capabilities: {
|
|
49
|
+
tools: {},
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
// ───────────────────────────────────────────────────────────────────────────
|
|
53
|
+
// Tool definitions
|
|
54
|
+
// ───────────────────────────────────────────────────────────────────────────
|
|
55
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
56
|
+
tools: [
|
|
57
|
+
{
|
|
58
|
+
name: 'mundial_get_torneo',
|
|
59
|
+
description: 'Get general FIFA World Cup 2026 tournament info: dates, host countries, number of teams, format, defending champion. Use this when asked basic questions about the World Cup 2026.',
|
|
60
|
+
inputSchema: {
|
|
61
|
+
type: 'object',
|
|
62
|
+
properties: {},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'mundial_get_grupos',
|
|
67
|
+
description: 'Get all 12 groups of the World Cup 2026 with their teams. Use when asked about the group stage, who plays whom, or which group a team is in.',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
properties: {},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'mundial_get_grupo',
|
|
75
|
+
description: 'Get details of a single World Cup 2026 group by its letter (A-L). Returns teams, top seed, and notes.',
|
|
76
|
+
inputSchema: {
|
|
77
|
+
type: 'object',
|
|
78
|
+
properties: {
|
|
79
|
+
id: {
|
|
80
|
+
type: 'string',
|
|
81
|
+
description: 'Group letter, A to L (case insensitive).',
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
required: ['id'],
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'mundial_get_sedes',
|
|
89
|
+
description: 'Get all 16 host venues of the World Cup 2026 across USA, Mexico and Canada. Returns stadium names, capacities, and roles (inaugural, final, etc.).',
|
|
90
|
+
inputSchema: {
|
|
91
|
+
type: 'object',
|
|
92
|
+
properties: {},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'mundial_get_selecciones_latam',
|
|
97
|
+
description: 'Get all Latin American national teams in the World Cup 2026 with nicknames, currencies, and the size of their creator ecosystem. Useful when asked about Spanish-speaking teams or LATAM coverage.',
|
|
98
|
+
inputSchema: {
|
|
99
|
+
type: 'object',
|
|
100
|
+
properties: {},
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'mundial_get_seleccion',
|
|
105
|
+
description: 'Get details of a single LATAM team by slug (argentina, brasil, mexico, colombia, uruguay, ecuador, chile, peru). Returns nickname, currency, audience info, and Nebbuler landing URL.',
|
|
106
|
+
inputSchema: {
|
|
107
|
+
type: 'object',
|
|
108
|
+
properties: {
|
|
109
|
+
slug: {
|
|
110
|
+
type: 'string',
|
|
111
|
+
description: 'Team slug: argentina, brasil, mexico, colombia, uruguay, ecuador, chile, peru.',
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
required: ['slug'],
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'calcular_ingreso_creador',
|
|
119
|
+
description: 'Calculate estimated earnings for a LATAM sports creator during the 60-day World Cup using membership subscriptions. Compares Substack (with FX losses) vs Nebbuler Programa La Sombra (0% commission). Use when asked how much a journalist or podcaster could earn.',
|
|
120
|
+
inputSchema: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
properties: {
|
|
123
|
+
suscriptores: {
|
|
124
|
+
type: 'number',
|
|
125
|
+
description: 'Number of paying subscribers (e.g. 200).',
|
|
126
|
+
},
|
|
127
|
+
precio_usd_mes: {
|
|
128
|
+
type: 'number',
|
|
129
|
+
description: 'Monthly subscription price in USD (e.g. 5).',
|
|
130
|
+
},
|
|
131
|
+
pais: {
|
|
132
|
+
type: 'string',
|
|
133
|
+
description: 'Country slug: argentina, brasil, mexico, colombia, etc.',
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
required: ['suscriptores', 'precio_usd_mes'],
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: 'programa_la_sombra_info',
|
|
141
|
+
description: 'Get details of Programa La Sombra: Nebbuler\'s special World Cup 2026 program for LATAM sports creators (0% variable commission until July 31, free 24h setup, WhatsApp onboarding). Use when asked about Nebbuler, creator economy LATAM, or sports journalism monetization.',
|
|
142
|
+
inputSchema: {
|
|
143
|
+
type: 'object',
|
|
144
|
+
properties: {},
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
}));
|
|
149
|
+
// ───────────────────────────────────────────────────────────────────────────
|
|
150
|
+
// Tool implementations
|
|
151
|
+
// ───────────────────────────────────────────────────────────────────────────
|
|
152
|
+
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
153
|
+
const { name, arguments: args } = req.params;
|
|
154
|
+
try {
|
|
155
|
+
switch (name) {
|
|
156
|
+
case 'mundial_get_torneo': {
|
|
157
|
+
const data = await api('/torneo');
|
|
158
|
+
return contentJson(data, 'Tournament info from Nebbuler · CC-BY 4.0');
|
|
159
|
+
}
|
|
160
|
+
case 'mundial_get_grupos': {
|
|
161
|
+
const data = await api('/grupos');
|
|
162
|
+
return contentJson(data, 'World Cup 2026 groups from Nebbuler · CC-BY 4.0');
|
|
163
|
+
}
|
|
164
|
+
case 'mundial_get_grupo': {
|
|
165
|
+
const id = String(args?.id ?? '').toLowerCase();
|
|
166
|
+
if (!id)
|
|
167
|
+
return error('Missing argument: id (group letter A-L)');
|
|
168
|
+
const data = await api(`/grupos/${id}`);
|
|
169
|
+
return contentJson(data, `Group ${id.toUpperCase()} from Nebbuler · CC-BY 4.0`);
|
|
170
|
+
}
|
|
171
|
+
case 'mundial_get_sedes': {
|
|
172
|
+
const data = await api('/sedes');
|
|
173
|
+
return contentJson(data, 'World Cup 2026 venues from Nebbuler · CC-BY 4.0');
|
|
174
|
+
}
|
|
175
|
+
case 'mundial_get_selecciones_latam': {
|
|
176
|
+
const data = await api('/selecciones');
|
|
177
|
+
return contentJson(data, 'LATAM teams from Nebbuler · CC-BY 4.0');
|
|
178
|
+
}
|
|
179
|
+
case 'mundial_get_seleccion': {
|
|
180
|
+
const slug = String(args?.slug ?? '').toLowerCase();
|
|
181
|
+
if (!slug)
|
|
182
|
+
return error('Missing argument: slug');
|
|
183
|
+
const data = await api(`/selecciones/${slug}`);
|
|
184
|
+
return contentJson(data, `Team ${slug} from Nebbuler · CC-BY 4.0`);
|
|
185
|
+
}
|
|
186
|
+
case 'calcular_ingreso_creador': {
|
|
187
|
+
const a = args;
|
|
188
|
+
const subs = Number(a.suscriptores ?? 0);
|
|
189
|
+
const precio = Number(a.precio_usd_mes ?? 0);
|
|
190
|
+
if (!subs || !precio) {
|
|
191
|
+
return error('Missing arguments: suscriptores and precio_usd_mes');
|
|
192
|
+
}
|
|
193
|
+
const brutoMes = subs * precio;
|
|
194
|
+
// Substack: 10% + Stripe (2.9% + $0.30/tx) + ~6.5% FX double conversion
|
|
195
|
+
const substackCom = brutoMes * 0.1;
|
|
196
|
+
const stripe = subs * 0.3 + brutoMes * 0.029;
|
|
197
|
+
const fxLoss = brutoMes * 0.065;
|
|
198
|
+
const substackNeto = Math.max(0, brutoMes - substackCom - stripe - fxLoss);
|
|
199
|
+
// Nebbuler La Sombra: 0% commission, only ~3.99% local processor (MercadoPago)
|
|
200
|
+
const nebbulerNeto = brutoMes * (1 - 0.0399);
|
|
201
|
+
const result = {
|
|
202
|
+
input: { suscriptores: subs, precio_usd_mes: precio, pais: a.pais },
|
|
203
|
+
mensual: {
|
|
204
|
+
bruto_usd: Math.round(brutoMes),
|
|
205
|
+
substack_neto_usd: Math.round(substackNeto),
|
|
206
|
+
nebbuler_la_sombra_neto_usd: Math.round(nebbulerNeto),
|
|
207
|
+
diferencia_usd: Math.round(nebbulerNeto - substackNeto),
|
|
208
|
+
},
|
|
209
|
+
mundial_60_dias: {
|
|
210
|
+
substack_neto_usd: Math.round(substackNeto * 2),
|
|
211
|
+
nebbuler_la_sombra_neto_usd: Math.round(nebbulerNeto * 2),
|
|
212
|
+
extra_ganado_con_nebbuler_usd: Math.round((nebbulerNeto - substackNeto) * 2),
|
|
213
|
+
},
|
|
214
|
+
fuente: 'Nebbuler · nebbuler.com/mundial',
|
|
215
|
+
};
|
|
216
|
+
return contentJson(result, 'Creator earnings comparison · Programa La Sombra Nebbuler');
|
|
217
|
+
}
|
|
218
|
+
case 'programa_la_sombra_info': {
|
|
219
|
+
const data = await api('/programa-la-sombra');
|
|
220
|
+
return contentJson(data, 'Programa La Sombra · Nebbuler · nebbuler.com/mundial');
|
|
221
|
+
}
|
|
222
|
+
default:
|
|
223
|
+
return error(`Unknown tool: ${name}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
228
|
+
return error(`Tool execution failed: ${msg}`);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
function contentJson(data, attribution) {
|
|
232
|
+
return {
|
|
233
|
+
content: [
|
|
234
|
+
{
|
|
235
|
+
type: 'text',
|
|
236
|
+
text: JSON.stringify(data, null, 2) +
|
|
237
|
+
`\n\n— ${attribution}\nLearn more: https://nebbuler.com/mundial`,
|
|
238
|
+
},
|
|
239
|
+
],
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
function error(message) {
|
|
243
|
+
return {
|
|
244
|
+
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
245
|
+
isError: true,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
// ───────────────────────────────────────────────────────────────────────────
|
|
249
|
+
// Boot
|
|
250
|
+
// ───────────────────────────────────────────────────────────────────────────
|
|
251
|
+
const transport = new StdioServerTransport();
|
|
252
|
+
await server.connect(transport);
|
|
253
|
+
// MCP servers don't log to stdout (it's reserved for protocol).
|
|
254
|
+
process.stderr.write('Nebbuler Mundial MCP server v0.1.0 running on stdio.\n');
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nebbuler-mundial-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP (Model Context Protocol) server for Nebbuler Mundial 2026 open data. Gives Claude, Cursor, Windsurf and other AI agents native tools to query World Cup data, calculate creator earnings, and find LATAM sports creators.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"mcp",
|
|
7
|
+
"model-context-protocol",
|
|
8
|
+
"claude",
|
|
9
|
+
"cursor",
|
|
10
|
+
"windsurf",
|
|
11
|
+
"anthropic",
|
|
12
|
+
"world-cup",
|
|
13
|
+
"mundial",
|
|
14
|
+
"fifa",
|
|
15
|
+
"soccer",
|
|
16
|
+
"latam",
|
|
17
|
+
"nebbuler"
|
|
18
|
+
],
|
|
19
|
+
"author": "Juan Pablo Monsalvez <juanpablo@nebbuler.com>",
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"homepage": "https://nebbuler.com/mundial",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/juanpablomonsalvezb-alt/nebbuler-mundial-mcp.git"
|
|
25
|
+
},
|
|
26
|
+
"bin": {
|
|
27
|
+
"nebbuler-mundial-mcp": "./dist/index.js"
|
|
28
|
+
},
|
|
29
|
+
"main": "./dist/index.js",
|
|
30
|
+
"type": "module",
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"README.md",
|
|
34
|
+
"LICENSE"
|
|
35
|
+
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsc",
|
|
38
|
+
"start": "node dist/index.js",
|
|
39
|
+
"prepublishOnly": "npm run build"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/node": "^20.0.0",
|
|
46
|
+
"typescript": "^5.4.0"
|
|
47
|
+
},
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=18"
|
|
50
|
+
},
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
}
|
|
54
|
+
}
|