footballbin-mcp-server 1.0.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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 FootballBin
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,278 @@
1
+ # FootballBin MCP Server
2
+
3
+ A Model Context Protocol (MCP) server that provides AI agents with access to football match predictions for the Premier League and Champions League.
4
+
5
+ ## What is MCP?
6
+
7
+ The [Model Context Protocol](https://modelcontextprotocol.io) (MCP) is an open protocol that enables AI agents to securely access external tools and data sources. This server implements MCP to expose football match predictions to any MCP-compatible AI client.
8
+
9
+ ## Features
10
+
11
+ - **AI Match Predictions**: Get predictions for upcoming matches including:
12
+ - Half-time score
13
+ - Full-time score
14
+ - Next goal scorer
15
+ - Corner count predictions
16
+
17
+ - **Supported Leagues**:
18
+ - Premier League (EPL)
19
+ - UEFA Champions League (UCL)
20
+
21
+ - **Key Players**: Each match includes key player insights with reasoning
22
+
23
+ ## Live Endpoint
24
+
25
+ The FootballBin MCP server is publicly available:
26
+
27
+ ```
28
+ https://ru7m5svay1.execute-api.eu-central-1.amazonaws.com/prod/mcp
29
+ ```
30
+
31
+ No API key required.
32
+
33
+ ## Usage
34
+
35
+ ### Connect via Claude Desktop
36
+
37
+ Add this to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json`):
38
+
39
+ ```json
40
+ {
41
+ "mcpServers": {
42
+ "footballbin": {
43
+ "url": "https://ru7m5svay1.execute-api.eu-central-1.amazonaws.com/prod/mcp"
44
+ }
45
+ }
46
+ }
47
+ ```
48
+
49
+ ### Connect via Claude.ai
50
+
51
+ 1. Go to **Settings > Connectors**
52
+ 2. Click **Add custom connector**
53
+ 3. Enter the endpoint URL
54
+ 4. Start asking about football predictions!
55
+
56
+ ### Direct API Usage
57
+
58
+ #### List Available Tools
59
+
60
+ ```bash
61
+ curl -X POST https://ru7m5svay1.execute-api.eu-central-1.amazonaws.com/prod/mcp \
62
+ -H "Content-Type: application/json" \
63
+ -d '{
64
+ "jsonrpc": "2.0",
65
+ "method": "tools/list",
66
+ "id": 1
67
+ }'
68
+ ```
69
+
70
+ #### Get Premier League Predictions
71
+
72
+ ```bash
73
+ curl -X POST https://ru7m5svay1.execute-api.eu-central-1.amazonaws.com/prod/mcp \
74
+ -H "Content-Type: application/json" \
75
+ -d '{
76
+ "jsonrpc": "2.0",
77
+ "method": "tools/call",
78
+ "params": {
79
+ "name": "get_match_predictions",
80
+ "arguments": {
81
+ "league": "premier_league"
82
+ }
83
+ },
84
+ "id": 1
85
+ }'
86
+ ```
87
+
88
+ #### Get Champions League Predictions
89
+
90
+ ```bash
91
+ curl -X POST https://ru7m5svay1.execute-api.eu-central-1.amazonaws.com/prod/mcp \
92
+ -H "Content-Type: application/json" \
93
+ -d '{
94
+ "jsonrpc": "2.0",
95
+ "method": "tools/call",
96
+ "params": {
97
+ "name": "get_match_predictions",
98
+ "arguments": {
99
+ "league": "ucl"
100
+ }
101
+ },
102
+ "id": 1
103
+ }'
104
+ ```
105
+
106
+ #### Filter by Team
107
+
108
+ ```bash
109
+ curl -X POST https://ru7m5svay1.execute-api.eu-central-1.amazonaws.com/prod/mcp \
110
+ -H "Content-Type: application/json" \
111
+ -d '{
112
+ "jsonrpc": "2.0",
113
+ "method": "tools/call",
114
+ "params": {
115
+ "name": "get_match_predictions",
116
+ "arguments": {
117
+ "league": "epl",
118
+ "home_team": "liverpool"
119
+ }
120
+ },
121
+ "id": 1
122
+ }'
123
+ ```
124
+
125
+ ## Tool: get_match_predictions
126
+
127
+ ### Input Parameters
128
+
129
+ | Parameter | Type | Required | Description |
130
+ |-----------|------|----------|-------------|
131
+ | `league` | string | Yes | League identifier. Accepts: `premier_league`, `epl`, `pl`, `champions_league`, `ucl`, `cl` |
132
+ | `matchweek` | number | No | Matchweek number (defaults to current matchweek) |
133
+ | `home_team` | string | No | Filter by home team (e.g., `chelsea`, `arsenal`, `man_utd`) |
134
+ | `away_team` | string | No | Filter by away team (e.g., `liverpool`, `wolves`) |
135
+
136
+ ### Team Aliases
137
+
138
+ The API supports common team aliases:
139
+
140
+ | Alias | Maps To |
141
+ |-------|---------|
142
+ | `united`, `mufc` | `man_utd` |
143
+ | `city`, `mcfc` | `man_city` |
144
+ | `spurs` | `tottenham` |
145
+ | `villa` | `aston_villa` |
146
+ | `forest` | `nottm_forest` |
147
+ | `palace` | `crystal_palace` |
148
+ | `gunners` | `arsenal` |
149
+ | `reds` | `liverpool` |
150
+ | `blues` | `chelsea` |
151
+ | `barca` | `barcelona` |
152
+ | `real` | `real_madrid` |
153
+ | `bayern_munich` | `bayern` |
154
+
155
+ ### Response Format
156
+
157
+ ```json
158
+ {
159
+ "league": "premier_league",
160
+ "matchweek": 22,
161
+ "count": 10,
162
+ "app_link": "https://apps.apple.com/app/footballbin/id6757111871",
163
+ "note": "Download FootballBin for live match tracking, player valuations, and detailed predictions.",
164
+ "matches": [
165
+ {
166
+ "match_id": "epl_mw22_liv_bur",
167
+ "home_team": "Liverpool",
168
+ "away_team": "Burnley",
169
+ "kickoff_time": "2026-01-17T15:00:00Z",
170
+ "kickoff_formatted": "Sat 17 Jan 15:00",
171
+ "countdown": "7d 3h",
172
+ "status": "scheduled",
173
+ "predictions": [
174
+ { "type": "Half Time Result", "value": "2:0", "confidence": 75 },
175
+ { "type": "Full Time Result", "value": "4:0", "confidence": 75 },
176
+ { "type": "Next Goal", "value": "Home,Wirtz", "confidence": 75 },
177
+ { "type": "Corner Count", "value": "9:3", "confidence": 75 }
178
+ ],
179
+ "key_players": [
180
+ {
181
+ "player_id": "florian_wirtz",
182
+ "player_name": "Florian Wirtz",
183
+ "reason": "12 goals, 14 assists. Liverpool's creative hub with 89 form rating."
184
+ },
185
+ {
186
+ "player_id": "zian_flemming",
187
+ "player_name": "Zian Flemming",
188
+ "reason": "6 goals, 3 assists. Burnley's top scorer and set-piece specialist."
189
+ }
190
+ ]
191
+ }
192
+ ]
193
+ }
194
+ ```
195
+
196
+ ## FootballBin App
197
+
198
+ Get the full experience with the FootballBin iOS app:
199
+
200
+ [![Download on App Store](https://developer.apple.com/assets/elements/badges/download-on-the-app-store.svg)](https://apps.apple.com/app/footballbin/id6757111871)
201
+
202
+ Features:
203
+ - Live match tracking
204
+ - AI player valuations
205
+ - Detailed match predictions
206
+ - Player news and discussions
207
+ - Squad browsers for all major leagues
208
+
209
+ ## Technical Details
210
+
211
+ ### Protocol
212
+
213
+ - **Protocol**: JSON-RPC 2.0
214
+ - **Transport**: HTTPS POST
215
+ - **Content-Type**: application/json
216
+
217
+ ### Infrastructure
218
+
219
+ - **Runtime**: AWS Lambda (Node.js 20.x)
220
+ - **Database**: Amazon DynamoDB
221
+ - **API Gateway**: AWS API Gateway
222
+ - **Region**: eu-central-1 (Frankfurt)
223
+
224
+ ### Error Codes
225
+
226
+ | Code | Meaning |
227
+ |------|---------|
228
+ | -32700 | Parse error (invalid JSON) |
229
+ | -32600 | Invalid request |
230
+ | -32601 | Method not found |
231
+ | -32602 | Invalid params |
232
+ | -32603 | Internal error |
233
+
234
+ ## Self-Hosting
235
+
236
+ If you want to deploy your own instance:
237
+
238
+ ### Prerequisites
239
+
240
+ - Node.js 20+
241
+ - AWS Account with DynamoDB access
242
+ - AWS SAM CLI
243
+
244
+ ### Deploy
245
+
246
+ ```bash
247
+ # Clone the repository
248
+ git clone https://github.com/billychl1/footballbin-mcp-server.git
249
+ cd footballbin-mcp-server
250
+
251
+ # Install dependencies
252
+ npm install
253
+
254
+ # Build
255
+ npm run build
256
+
257
+ # Deploy with SAM
258
+ sam deploy --guided
259
+ ```
260
+
261
+ ### Environment Variables
262
+
263
+ | Variable | Description | Default |
264
+ |----------|-------------|---------|
265
+ | `MATCHES_TABLE` | DynamoDB table for matches | `footballbin-matches-prod` |
266
+ | `MATCHWEEKS_TABLE` | DynamoDB table for matchweeks | `footballbin-matchweeks-prod` |
267
+ | `DEFAULT_REGION` | AWS region | `eu-central-1` |
268
+ | `APP_STORE_LINK` | App Store URL | `https://apps.apple.com/app/footballbin/id6757111871` |
269
+
270
+ ## License
271
+
272
+ MIT License - see [LICENSE](LICENSE) file.
273
+
274
+ ## Links
275
+
276
+ - [FootballBin App](https://apps.apple.com/app/footballbin/id6757111871)
277
+ - [Model Context Protocol](https://modelcontextprotocol.io)
278
+ - [MCP Specification](https://spec.modelcontextprotocol.io)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * FootballBin MCP Server (npm package)
4
+ *
5
+ * A thin wrapper that provides MCP stdio transport
6
+ * and calls the FootballBin remote API for predictions.
7
+ */
8
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * FootballBin MCP Server (npm package)
4
+ *
5
+ * A thin wrapper that provides MCP stdio transport
6
+ * and calls the FootballBin remote API for predictions.
7
+ */
8
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import { z } from "zod";
11
+ // Remote API endpoint
12
+ const API_ENDPOINT = "https://ru7m5svay1.execute-api.eu-central-1.amazonaws.com/prod/mcp";
13
+ /**
14
+ * Call the remote FootballBin API
15
+ */
16
+ async function callRemoteAPI(args) {
17
+ const response = await fetch(API_ENDPOINT, {
18
+ method: "POST",
19
+ headers: {
20
+ "Content-Type": "application/json"
21
+ },
22
+ body: JSON.stringify({
23
+ jsonrpc: "2.0",
24
+ method: "tools/call",
25
+ params: {
26
+ name: "get_match_predictions",
27
+ arguments: args
28
+ },
29
+ id: Date.now()
30
+ })
31
+ });
32
+ if (!response.ok) {
33
+ throw new Error(`API request failed: ${response.status} ${response.statusText}`);
34
+ }
35
+ const data = await response.json();
36
+ if (data.error) {
37
+ throw new Error(data.error.message || "API error");
38
+ }
39
+ // Extract the structured content from the response
40
+ if (data.result?.structuredContent) {
41
+ return data.result.structuredContent;
42
+ }
43
+ // Fallback to parsing the text content
44
+ if (data.result?.content?.[0]?.text) {
45
+ return JSON.parse(data.result.content[0].text);
46
+ }
47
+ return data.result;
48
+ }
49
+ /**
50
+ * Main entry point
51
+ */
52
+ async function main() {
53
+ // Create the MCP server
54
+ const server = new McpServer({
55
+ name: "footballbin-mcp-server",
56
+ version: "1.0.0"
57
+ });
58
+ // Register the get_match_predictions tool using shape syntax
59
+ server.tool("get_match_predictions", "Get AI-powered predictions for Premier League and Champions League matches including half-time score, full-time score, next goal scorer, and corner predictions.", {
60
+ league: z.string().describe('League to get predictions for. Accepts: "premier_league", "epl", "pl", "champions_league", "ucl", "cl"'),
61
+ matchweek: z.number().optional().describe("Matchweek number (optional, defaults to current matchweek)"),
62
+ home_team: z.string().optional().describe('Filter by home team name (optional, e.g., "chelsea", "arsenal", "man_utd")'),
63
+ away_team: z.string().optional().describe('Filter by away team name (optional, e.g., "liverpool", "wolves")')
64
+ }, async (args) => {
65
+ try {
66
+ const result = await callRemoteAPI(args);
67
+ return {
68
+ content: [
69
+ {
70
+ type: "text",
71
+ text: JSON.stringify(result, null, 2)
72
+ }
73
+ ]
74
+ };
75
+ }
76
+ catch (error) {
77
+ return {
78
+ content: [
79
+ {
80
+ type: "text",
81
+ text: `Error: ${error instanceof Error ? error.message : "Unknown error"}`
82
+ }
83
+ ],
84
+ isError: true
85
+ };
86
+ }
87
+ });
88
+ // Create stdio transport and connect
89
+ const transport = new StdioServerTransport();
90
+ await server.connect(transport);
91
+ // Log to stderr (stdout is used for MCP protocol)
92
+ console.error("FootballBin MCP Server running on stdio");
93
+ }
94
+ // Run the server
95
+ main().catch((error) => {
96
+ console.error("Fatal error:", error);
97
+ process.exit(1);
98
+ });
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "footballbin-mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for FootballBin football match predictions - Premier League & Champions League",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "footballbin-mcp": "./dist/index.js"
9
+ },
10
+ "mcpName": "io.github.billychl1/footballbin-mcp-server",
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "clean": "rm -rf dist",
14
+ "start": "node dist/index.js",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "keywords": [
18
+ "mcp",
19
+ "model-context-protocol",
20
+ "football",
21
+ "soccer",
22
+ "premier-league",
23
+ "champions-league",
24
+ "predictions",
25
+ "ai",
26
+ "claude",
27
+ "anthropic"
28
+ ],
29
+ "author": "billychl1",
30
+ "license": "MIT",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "git+https://github.com/billychl1/footballbin-mcp-server.git"
34
+ },
35
+ "bugs": {
36
+ "url": "https://github.com/billychl1/footballbin-mcp-server/issues"
37
+ },
38
+ "homepage": "https://github.com/billychl1/footballbin-mcp-server#readme",
39
+ "dependencies": {
40
+ "@modelcontextprotocol/sdk": "^1.25.0",
41
+ "zod": "^3.25.0"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^22.10.0",
45
+ "typescript": "^5.7.0"
46
+ },
47
+ "engines": {
48
+ "node": ">=20.0.0"
49
+ },
50
+ "files": [
51
+ "dist",
52
+ "README.md",
53
+ "LICENSE"
54
+ ]
55
+ }