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 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
- - **21 API tools** covering the full Odds-API.io v3 surface: sports, events, odds, historical data, value bets, arbitrage, and more
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 type to filter by: 'ML', 'Spread', or 'Totals'",
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 calculation and sorting: 'opening', '12h', '24h', '48h' (default: 'opening')",
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.1.1" }, { capabilities: { tools: {}, resources: {} } });
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "odds-api-mcp-server",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "description": "MCP server for Odds-API.io - Access sports betting odds data from AI tools like Claude, Cursor, and VS Code",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
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: "Market type to filter by: 'ML', 'Spread', or 'Totals'",
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 calculation and sorting: 'opening', '12h', '24h', '48h' (default: 'opening')",
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.1.1" },
690
+ { name: "odds-api-mcp", version: "1.3.0" },
684
691
  { capabilities: { tools: {}, resources: {} } },
685
692
  );
686
693