AI Ball MCP server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AI Ball MCP serverHow did AI Ball's model do on last week's matches?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AI Ball MCP server
Read-only Model Context Protocol server for AI Ball, AI football match analysis.
It gives an AI assistant two things:
Pre-kick-off outcome probabilities. For each match, the model's home / draw / away probabilities as recorded before kick-off.
The open record. What happened afterwards: the final score and whether the model's most likely outcome came in. Misses are counted the same way as hits, and nothing is removed after the fact.
No account, no API key. The server only calls AI Ball's public record API.
Tools
Tool | What it returns |
| One calendar day: |
| One match: home / draw / away probabilities recorded before kick-off, the most likely outcome, confidence, when the read was captured, and once played the score and whether it came in |
| The whole record, or one week with |
Every tool is read-only (readOnlyHint: true). Names are available in English (lang: "en") and Malay (lang: "ms"). Responses are built from a fixed list of fields; nothing from the upstream API is passed through as-is.
Reading the numbers
models.balancedholds fractions forhome,drawandawaythat sum to 1. This version returns the balanced model;models_availablelists what is included.result.hitistruewhen the model's most likely outcome happened.hit_rateis a percentage.nullmeans the sample is undermin_band_sample, so use the countshitsandninstead.favourite_baselinescores the same matches by always taking the pre-match favourite;random_baselineis one outcome in three.upcomingmatches are locked before kick-off.pendingmatches carry a current read that may still change.
The server caches each upstream response for five minutes and spaces its requests, so repeated questions do not hit AI Ball's API again.
Related MCP server: mcp-football-data
Install
Claude Desktop
Download aiball-mcp.mcpb from the latest release and open it.
Claude Code
claude mcp add aiball -- npx -y github:aiballfooty/aiball-mcpCursor, VS Code and other clients
{
"mcpServers": {
"aiball": {
"command": "npx",
"args": ["-y", "github:aiballfooty/aiball-mcp"]
}
}
}Requires Node.js 18 or later.
Example questions
"How did AI Ball's model do on last week's matches?"
"Which of last week's matches did the model get wrong?"
"What are the model's probabilities for today's matches, in Malaysia time?"
"Across the whole record, does the model do better than always taking the favourite?"
Privacy
The server runs on your machine and sends requests only to https://aiball.samagent.ai/api/v1. Requests carry the tool's parameters (a date, a time zone, a language) and a User-Agent of aiball-mcp/<version>. They do not carry your conversation, your files or any identifier. AI Ball's web server keeps standard access logs. Site privacy policy: https://aiball.samagent.ai/en/privacy
Development
npm install
npm test # starts the server and calls every tool against the live APISet AIBALL_API_BASE to point the server at another base URL.
Licence
MIT. For information only. Not advice. 18+.
Available Tools
3 toolsget_match_analysisGet outcome probabilities for a matchARead-onlyIdempotent
For one match: the model's home / draw / away probabilities as recorded before kick-off (fractions that sum to 1), its most likely outcome, a confidence score, the pre-match favourite, and when the read was captured. For a finished match it also returns the final score and whether the most likely outcome happened (hit). This version returns the balanced model; models_available lists what is included.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language for league and team names: en (English) or ms (Malay). | en |
| match_id | Yes | match_id from list_matches. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds substantive domain behavior beyond them: probabilities are captured before kick-off, they are fractions summing to 1, and finished matches additionally yield the final score and a hit flag. This is meaningful content-level disclosure that annotations cannot supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph, front-loaded with what is returned, then the model-version caveat. Every clause conveys a distinct returned field or behavioral fact; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return values and does so field-by-field, including the finished-match case. The only gap is that the other available model variants are gestured at rather than explained, which matters since only the balanced model is returned here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so match_id's provenance (from list_matches) and lang's en/ms enum are fully documented in the schema. The description adds nothing about parameter syntax or behavior, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource (one match), the model version returned (balanced), and enumerates the returned fields (home/draw/away probabilities, likely outcome, confidence, favourite, capture time, and for finished matches the final score and hit flag). It is clearly distinct from list_matches and get_open_record. It stops short of a crisp verb-plus-resource framing but is unambiguous about what the tool produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'For one match' implicitly contrasts with the list_matches sibling, and the note that 'models_available lists what is included' hints at a model-selection mechanism, but there is no explicit when-to-use / when-not-to-use statement or named alternative tool for retrieving other model variants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_open_recordGet the open recordARead-onlyIdempotent
How the model's pre-kick-off reads turned out. Without arguments: the whole public record. With week_start: one Monday-to-Sunday week. Returns matches counted (n), how many went the model's way (hits), the same matches scored by always taking the pre-match favourite and by one in three, and the breakdown by confidence band. hit_rate is a percentage; null means the sample is under min_band_sample, so quote the counts instead. Misses are counted the same way as hits.
| Name | Required | Description | Default |
|---|---|---|---|
| tz | No | IANA time zone that decides which calendar day a match belongs to. | Asia/Kuala_Lumpur |
| week_start | No | Monday of the week, YYYY-MM-DD. Omit for the whole record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description is free to spend its words on behavior the annotations cannot express. It does so usefully: null hit_rate signals a sample under min_band_sample, the agent should quote counts instead, and misses are counted identically to hits. That is real interpretive context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with what the record is before moving to argument behavior and output interpretation. Every sentence carries information, though the output-semantics tail is slightly packed and could be split for scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry return-value meaning and largely does: it names the fields, explains hit_rate units, the null case, and how the benchmark comparisons are constructed. The remaining gap is the absence of any sibling routing or an explicit note on what 'public record' scope excludes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already explains tz and week_start. The description still adds value by stating the universe each branch returns ('the whole public record' vs 'one Monday-to-Sunday week') and by defining the null/hit_rate contract, which no schema field captures.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states concretely what the tool retrieves: the model's pre-kick-off prediction record, whole or sliced by week, with an enumerated return set (n, hits, hit_rate, confidence-band breakdown). An agent can tell this is a historical performance read rather than a match lookup. It does not, however, differentiate itself from list_matches or get_match_analysis, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the parameter branches ('Without arguments: the whole public record. With week_start: one Monday-to-Sunday week'), which tells the agent how the call behaves but not when to pick it over its siblings. There is no explicit when-to-use or when-not-to-use guidance relative to list_matches or get_match_analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_matchesList matches for a dateARead-onlyIdempotent
Matches for one calendar day: match_id, kick-off time (UTC), league, teams and status. status is upcoming (pre-kick-off read is locked), pending (current read, may still change before kick-off) or finished. Pass a match_id to get_match_analysis for the outcome probabilities and, once played, the result.
| Name | Required | Description | Default |
|---|---|---|---|
| tz | No | IANA time zone that decides which calendar day a match belongs to. | Asia/Kuala_Lumpur |
| date | No | YYYY-MM-DD. Defaults to today in `tz`. | |
| lang | No | Language for league and team names: en (English) or ms (Malay). | en |
| league | No | Only matches from this league, by name as shown in the results, e.g. "Premier League". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the bar is lower; the description adds real value by explaining the volatility of the data — 'upcoming' reads are locked, 'pending' may still change before kick-off, 'finished' is settled. It is silent on pagination/limits, but a single-day list makes that minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with the resource and scope front-loaded, then the returned fields, then the status vocabulary, then the sibling handoff. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by enumerating return fields and defining every status value an agent will encounter. Combined with the sibling routing and timezone scoping, nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (tz, date, lang, league all documented), so the baseline is 3. The description reinforces the one-day scoping and UTC framing of kick-off times but adds no parameter syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Matches for one calendar day') and enumerates the returned fields (match_id, kick-off UTC, league, teams, status). It also names the sibling to use for a single match, so an agent can tell it apart from get_match_analysis without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative path clearly: 'Pass a match_id to get_match_analysis for the outcome probabilities'. It conveys the current-context usage of the listing itself, but gives no guidance on the league filter or when-not to call it, and says nothing about get_open_record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.2.0- First observed
get_match_analysis - First observed
get_open_record - First observed
list_matches
TDQS
Scored across 3 tools
The three tools target clearly distinct scopes: list_matches discovers matches for a day, get_match_analysis drills into one match's probabilities, and get_open_record reports aggregate performance. There is no functional overlap between them.
All three follow a verb_noun pattern (list_matches, get_match_analysis, get_open_record), which is predictable and readable. The slightly odd term 'open_record' is a minor deviation but the convention itself is consistent.
Three tools is lean but each maps to a distinct need (discovery, per-match detail, aggregate record). It is slightly thin for a data service but nothing feels redundant or missing at the top level.
Core flow — find matches, analyze a match, check the record — is covered, but notable gaps remain: no multi-day or date-range query, no league/team filtering, and no way to look up a specific match directly without a daily listing. These force workarounds for common agent requests.
Maintenance
Related MCP Connectors
Crowd football predictions from TipMaster players, per match. Read-only, no auth, no odds.
Historical football results, draws and no-draw streaks. 11 read-only tools, 6 need no API key.
Live prediction-market odds, volume and movers across 8 platforms. Read-only, no auth.
NFL/NBA/MLB/NHL/PGA + DFS and prediction-market data. Browse free; query with a free API key.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides soccer match predictions and league statistics using xG data and Poisson distribution models. It enables users to forecast outcomes, analyze team performance, and view league tables across major European football leagues.3GPL 2.0
- AlicenseNot gradedqualityBmaintenanceAccess football (soccer) data including competitions, matches, standings, and team details via the Football-Data.org API.697 npm2MIT
- AlicenseNot gradedqualityBmaintenanceProvides comprehensive soccer/football data including standings, team search, league search, match predictions, and head-to-head records via the API-Football service.481 npmMIT
- FlicenseNot gradedqualityBmaintenanceEnables access to and analysis of a curated historical football database covering 37,000 matches across European competitions, with tools for team/player search, match details, form, head-to-head, comparisons, and match prediction.-