odds-api-mcp-server 1.2.1 → 1.3.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/.mcpbignore +64 -0
- package/README.md +8 -3
- package/dist/index.js +10 -5
- package/manifest.json +68 -0
- package/odds-api-mcp-server.mcpb +0 -0
- package/package.json +1 -1
- package/src/index.ts +12 -5
package/.mcpbignore
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Source files (dist/ has the compiled output)
|
|
2
|
+
src/
|
|
3
|
+
tsconfig.json
|
|
4
|
+
*.ts
|
|
5
|
+
!dist/**
|
|
6
|
+
|
|
7
|
+
# Dev dependencies & test files
|
|
8
|
+
node_modules/vitest/
|
|
9
|
+
node_modules/@vitest/
|
|
10
|
+
node_modules/typescript/
|
|
11
|
+
node_modules/ts-node/
|
|
12
|
+
node_modules/vite/
|
|
13
|
+
node_modules/rolldown/
|
|
14
|
+
node_modules/@rolldown/
|
|
15
|
+
node_modules/lightningcss/
|
|
16
|
+
node_modules/lightningcss-*/
|
|
17
|
+
node_modules/fsevents/
|
|
18
|
+
node_modules/chai/
|
|
19
|
+
node_modules/tinybench/
|
|
20
|
+
node_modules/tinyexec/
|
|
21
|
+
node_modules/tinyrainbow/
|
|
22
|
+
node_modules/tinyglobby/
|
|
23
|
+
node_modules/picomatch/
|
|
24
|
+
node_modules/picocolors/
|
|
25
|
+
node_modules/postcss/
|
|
26
|
+
node_modules/source-map-js/
|
|
27
|
+
node_modules/magic-string/
|
|
28
|
+
node_modules/expect-type/
|
|
29
|
+
node_modules/stackback/
|
|
30
|
+
node_modules/siginfo/
|
|
31
|
+
node_modules/why-is-node-running/
|
|
32
|
+
node_modules/diff/
|
|
33
|
+
node_modules/fdir/
|
|
34
|
+
node_modules/assertion-error/
|
|
35
|
+
node_modules/@tsconfig/
|
|
36
|
+
node_modules/@types/chai/
|
|
37
|
+
node_modules/@types/deep-eql/
|
|
38
|
+
node_modules/@types/estree/
|
|
39
|
+
node_modules/@cspotcode/
|
|
40
|
+
node_modules/@jridgewell/
|
|
41
|
+
node_modules/@oxc-project/
|
|
42
|
+
node_modules/@standard-schema/
|
|
43
|
+
node_modules/v8-compile-cache-lib/
|
|
44
|
+
node_modules/create-require/
|
|
45
|
+
node_modules/make-error/
|
|
46
|
+
node_modules/yn/
|
|
47
|
+
node_modules/acorn/
|
|
48
|
+
node_modules/acorn-walk/
|
|
49
|
+
node_modules/arg/
|
|
50
|
+
node_modules/convert-source-map/
|
|
51
|
+
node_modules/es-module-lexer/
|
|
52
|
+
node_modules/estree-walker/
|
|
53
|
+
node_modules/nanoid/
|
|
54
|
+
node_modules/obug/
|
|
55
|
+
node_modules/pathe/
|
|
56
|
+
node_modules/std-env/
|
|
57
|
+
node_modules/detect-libc/
|
|
58
|
+
|
|
59
|
+
# Git, lockfiles, misc
|
|
60
|
+
.git/
|
|
61
|
+
.gitignore
|
|
62
|
+
package-lock.json
|
|
63
|
+
node_modules/.package-lock.json
|
|
64
|
+
*.mcpb
|
package/README.md
CHANGED
|
@@ -4,12 +4,16 @@ Model Context Protocol (MCP) server for [Odds-API.io](https://odds-api.io) - pro
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- **
|
|
7
|
+
- **22 API tools** covering the full Odds-API.io v3 surface: sports, events, odds, historical data, value bets, arbitrage, dropping odds, and more
|
|
8
8
|
- **Documentation resources** for AI context
|
|
9
9
|
- **Real-time data** from 265+ bookmakers across 34 sports
|
|
10
10
|
|
|
11
11
|
## Quick Start
|
|
12
12
|
|
|
13
|
+
### One-Click Install (Claude Desktop)
|
|
14
|
+
|
|
15
|
+
Download the latest `.mcpb` file from [Releases](https://github.com/odds-api-io/odds-api-mcp-server/releases/latest) and open it. Claude Desktop will prompt you for your API key.
|
|
16
|
+
|
|
13
17
|
### Claude Code CLI
|
|
14
18
|
|
|
15
19
|
```bash
|
|
@@ -133,6 +137,7 @@ Then use `odds-api-mcp` as the command instead of `npx -y odds-api-mcp-server`.
|
|
|
133
137
|
|------|-------------|
|
|
134
138
|
| `get_value_bets` | Get positive EV opportunities for a bookmaker |
|
|
135
139
|
| `get_arbitrage_bets` | Get arbitrage opportunities with optimal stakes |
|
|
140
|
+
| `get_dropping_odds` | Track sharp bookmaker line movements by sport, league, market, and time window |
|
|
136
141
|
|
|
137
142
|
### Participants
|
|
138
143
|
|
|
@@ -165,6 +170,8 @@ Once configured, ask your AI assistant things like:
|
|
|
165
170
|
- "Are there any arbitrage opportunities between Bet365 and Unibet?"
|
|
166
171
|
- "Show me how the odds moved for event 12345 on the spread market"
|
|
167
172
|
- "Get historical results for La Liga in January 2026"
|
|
173
|
+
- "Show me the biggest dropping odds in football right now"
|
|
174
|
+
- "What Premier League odds have dropped the most in the last 12 hours?"
|
|
168
175
|
|
|
169
176
|
## Development
|
|
170
177
|
|
|
@@ -186,5 +193,3 @@ MIT
|
|
|
186
193
|
- [Documentation](https://docs.odds-api.io) - API docs
|
|
187
194
|
- [API Reference](https://api.odds-api.io/v3/docs/index.html) - Swagger/OpenAPI
|
|
188
195
|
- [npm](https://www.npmjs.com/package/odds-api-mcp-server) - Package registry
|
|
189
|
-
ndex.html) - Swagger/OpenAPI
|
|
190
|
-
- [npm](https://www.npmjs.com/package/odds-api-mcp-server) - Package registry
|
package/dist/index.js
CHANGED
|
@@ -322,7 +322,7 @@ const tools = [
|
|
|
322
322
|
// ── Dropping Odds ───────────────────────────────────────────────
|
|
323
323
|
{
|
|
324
324
|
name: "get_dropping_odds",
|
|
325
|
-
description: "Get odds that have dropped the most from opening, based on sharp bookmaker data. Useful for tracking where sharp money is moving. Updated every ~10 seconds. Only available on paid plans.",
|
|
325
|
+
description: "Get odds that have dropped the most from opening, based on sharp bookmaker data. Useful for tracking where sharp money is moving. Updated every ~10 seconds. Only available on paid plans. Response includes drop percentages for multiple time windows (sinceOpening, 12h, 24h, 48h).",
|
|
326
326
|
inputSchema: {
|
|
327
327
|
type: "object",
|
|
328
328
|
properties: {
|
|
@@ -336,11 +336,15 @@ const tools = [
|
|
|
336
336
|
},
|
|
337
337
|
market: {
|
|
338
338
|
type: "string",
|
|
339
|
-
description: "Market
|
|
339
|
+
description: "Market name to filter by (case-insensitive). Supported: ML, Spread, Totals, Spread HT, Totals HT, Totals 1Q, Spread 1Q, Team Total Home, Team Total Away, Corners Spread, Corners Totals, Corners Spread HT, Corners Totals HT, Bookings Spread, Bookings Totals, Player Props",
|
|
340
340
|
},
|
|
341
341
|
timeWindow: {
|
|
342
342
|
type: "string",
|
|
343
|
-
description: "Time window for drop
|
|
343
|
+
description: "Time window for drop filtering and sorting: 'opening', '12h', '24h', '48h' (default: 'opening')",
|
|
344
|
+
},
|
|
345
|
+
sort: {
|
|
346
|
+
type: "string",
|
|
347
|
+
description: "Sort order: 'drop' (highest drop %), 'recent' (latest movement), 'kickoff' (soonest event). Default: 'drop'",
|
|
344
348
|
},
|
|
345
349
|
minDrop: {
|
|
346
350
|
type: "number",
|
|
@@ -362,12 +366,13 @@ const tools = [
|
|
|
362
366
|
required: [],
|
|
363
367
|
},
|
|
364
368
|
async handler(args) {
|
|
365
|
-
const { sport, league, market, timeWindow, minDrop, limit, page, includeEventDetails } = args;
|
|
369
|
+
const { sport, league, market, timeWindow, sort, minDrop, limit, page, includeEventDetails } = args;
|
|
366
370
|
return jsonResponse(await apiRequest("/dropping-odds", {
|
|
367
371
|
sport,
|
|
368
372
|
league,
|
|
369
373
|
market,
|
|
370
374
|
timeWindow,
|
|
375
|
+
sort,
|
|
371
376
|
minDrop,
|
|
372
377
|
limit,
|
|
373
378
|
page,
|
|
@@ -539,7 +544,7 @@ const tools = [
|
|
|
539
544
|
];
|
|
540
545
|
// ── Server Setup ─────────────────────────────────────────────────────────────
|
|
541
546
|
const toolMap = new Map(tools.map((tool) => [tool.name, tool]));
|
|
542
|
-
const server = new Server({ name: "odds-api-mcp", version: "1.
|
|
547
|
+
const server = new Server({ name: "odds-api-mcp", version: "1.3.0" }, { capabilities: { tools: {}, resources: {} } });
|
|
543
548
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
544
549
|
tools: tools.map(({ name, description, inputSchema }) => ({
|
|
545
550
|
name,
|
package/manifest.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": "0.3",
|
|
3
|
+
"name": "odds-api",
|
|
4
|
+
"display_name": "Odds-API.io",
|
|
5
|
+
"version": "1.2.2",
|
|
6
|
+
"description": "Real-time sports betting odds from 250+ bookmakers. Fetch odds, find value bets, spot arbitrage opportunities, and track dropping odds across 20+ sports.",
|
|
7
|
+
"long_description": "Connect Claude to the Odds-API.io platform for real-time sports betting data.\n\nFetch live and pre-match odds from 250+ bookmakers across football, basketball, tennis, baseball, ice hockey, and 15+ more sports. Compare odds, find value bets backed by sharp bookmaker consensus, discover arbitrage opportunities, and track dropping odds to see where the smart money is moving.\n\nIncludes tools for events, odds, historical data, value bets, arbitrage detection, and dropping odds.\n\nRequires an API key from odds-api.io (free tier available).",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "Odds-API.io",
|
|
10
|
+
"email": "hello@odds-api.io",
|
|
11
|
+
"url": "https://odds-api.io"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/odds-api-io/odds-api-mcp-server.git"
|
|
16
|
+
},
|
|
17
|
+
"homepage": "https://odds-api.io",
|
|
18
|
+
"documentation": "https://docs.odds-api.io",
|
|
19
|
+
"support": "https://github.com/odds-api-io/odds-api-mcp-server/issues",
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"keywords": ["sports", "betting", "odds", "football", "basketball", "arbitrage", "value-bets", "bookmakers"],
|
|
22
|
+
"server": {
|
|
23
|
+
"type": "node",
|
|
24
|
+
"entry_point": "dist/index.js",
|
|
25
|
+
"mcp_config": {
|
|
26
|
+
"command": "node",
|
|
27
|
+
"args": ["${__dirname}/dist/index.js"],
|
|
28
|
+
"env": {
|
|
29
|
+
"ODDS_API_KEY": "${user_config.api_key}"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"tools": [
|
|
34
|
+
{ "name": "get_sports", "description": "List all available sports" },
|
|
35
|
+
{ "name": "get_bookmakers", "description": "List all active bookmakers" },
|
|
36
|
+
{ "name": "get_leagues", "description": "Get leagues for a sport" },
|
|
37
|
+
{ "name": "get_events", "description": "Get upcoming events with filters" },
|
|
38
|
+
{ "name": "get_live_events", "description": "Get currently live events with scores" },
|
|
39
|
+
{ "name": "search_events", "description": "Search events by team name" },
|
|
40
|
+
{ "name": "get_odds", "description": "Get odds for an event from selected bookmakers" },
|
|
41
|
+
{ "name": "get_multi_odds", "description": "Get odds for multiple events in one call" },
|
|
42
|
+
{ "name": "get_odds_movements", "description": "Get historical odds movements for an event" },
|
|
43
|
+
{ "name": "get_updated_odds", "description": "Get recently updated odds across all events" },
|
|
44
|
+
{ "name": "get_dropping_odds", "description": "Find odds that have dropped significantly from sharp bookmakers" },
|
|
45
|
+
{ "name": "get_historical_events", "description": "Get past events for a sport and league" },
|
|
46
|
+
{ "name": "get_historical_odds", "description": "Get closing odds for a finished event" },
|
|
47
|
+
{ "name": "get_value_bets", "description": "Find value bets based on sharp bookmaker consensus" },
|
|
48
|
+
{ "name": "get_arbitrage_bets", "description": "Find arbitrage opportunities across bookmakers" },
|
|
49
|
+
{ "name": "get_selected_bookmakers", "description": "View your currently selected bookmakers" },
|
|
50
|
+
{ "name": "select_bookmakers", "description": "Set your active bookmaker selection" },
|
|
51
|
+
{ "name": "clear_selected_bookmakers", "description": "Reset bookmaker selection to default" }
|
|
52
|
+
],
|
|
53
|
+
"user_config": {
|
|
54
|
+
"api_key": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"title": "API Key",
|
|
57
|
+
"description": "Your Odds-API.io API key. Get one free at odds-api.io",
|
|
58
|
+
"sensitive": true,
|
|
59
|
+
"required": true
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"compatibility": {
|
|
63
|
+
"platforms": ["darwin", "win32", "linux"],
|
|
64
|
+
"runtimes": {
|
|
65
|
+
"node": ">=18.0.0"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
Binary file
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -413,7 +413,7 @@ const tools: ToolDefinition[] = [
|
|
|
413
413
|
{
|
|
414
414
|
name: "get_dropping_odds",
|
|
415
415
|
description:
|
|
416
|
-
"Get odds that have dropped the most from opening, based on sharp bookmaker data. Useful for tracking where sharp money is moving. Updated every ~10 seconds. Only available on paid plans.",
|
|
416
|
+
"Get odds that have dropped the most from opening, based on sharp bookmaker data. Useful for tracking where sharp money is moving. Updated every ~10 seconds. Only available on paid plans. Response includes drop percentages for multiple time windows (sinceOpening, 12h, 24h, 48h).",
|
|
417
417
|
inputSchema: {
|
|
418
418
|
type: "object",
|
|
419
419
|
properties: {
|
|
@@ -427,11 +427,16 @@ const tools: ToolDefinition[] = [
|
|
|
427
427
|
},
|
|
428
428
|
market: {
|
|
429
429
|
type: "string",
|
|
430
|
-
description:
|
|
430
|
+
description:
|
|
431
|
+
"Market name to filter by (case-insensitive). Supported: ML, Spread, Totals, Spread HT, Totals HT, Totals 1Q, Spread 1Q, Team Total Home, Team Total Away, Corners Spread, Corners Totals, Corners Spread HT, Corners Totals HT, Bookings Spread, Bookings Totals, Player Props",
|
|
431
432
|
},
|
|
432
433
|
timeWindow: {
|
|
433
434
|
type: "string",
|
|
434
|
-
description: "Time window for drop
|
|
435
|
+
description: "Time window for drop filtering and sorting: 'opening', '12h', '24h', '48h' (default: 'opening')",
|
|
436
|
+
},
|
|
437
|
+
sort: {
|
|
438
|
+
type: "string",
|
|
439
|
+
description: "Sort order: 'drop' (highest drop %), 'recent' (latest movement), 'kickoff' (soonest event). Default: 'drop'",
|
|
435
440
|
},
|
|
436
441
|
minDrop: {
|
|
437
442
|
type: "number",
|
|
@@ -453,12 +458,13 @@ const tools: ToolDefinition[] = [
|
|
|
453
458
|
required: [],
|
|
454
459
|
},
|
|
455
460
|
async handler(args) {
|
|
456
|
-
const { sport, league, market, timeWindow, minDrop, limit, page, includeEventDetails } =
|
|
461
|
+
const { sport, league, market, timeWindow, sort, minDrop, limit, page, includeEventDetails } =
|
|
457
462
|
args as {
|
|
458
463
|
sport?: string;
|
|
459
464
|
league?: string;
|
|
460
465
|
market?: string;
|
|
461
466
|
timeWindow?: string;
|
|
467
|
+
sort?: string;
|
|
462
468
|
minDrop?: number;
|
|
463
469
|
limit?: number;
|
|
464
470
|
page?: number;
|
|
@@ -470,6 +476,7 @@ const tools: ToolDefinition[] = [
|
|
|
470
476
|
league,
|
|
471
477
|
market,
|
|
472
478
|
timeWindow,
|
|
479
|
+
sort,
|
|
473
480
|
minDrop,
|
|
474
481
|
limit,
|
|
475
482
|
page,
|
|
@@ -680,7 +687,7 @@ const tools: ToolDefinition[] = [
|
|
|
680
687
|
const toolMap = new Map(tools.map((tool) => [tool.name, tool]));
|
|
681
688
|
|
|
682
689
|
const server = new Server(
|
|
683
|
-
{ name: "odds-api-mcp", version: "1.
|
|
690
|
+
{ name: "odds-api-mcp", version: "1.3.0" },
|
|
684
691
|
{ capabilities: { tools: {}, resources: {} } },
|
|
685
692
|
);
|
|
686
693
|
|