API-Sports MCP server for AI agents

Live

API KEY

SPORTS DATA

Analytics

API-Sports gives your agent sports data across football, basketball, and hockey: fixtures and games, standings, team and player statistics, lineups, injuries, predictions, and pre-match odds.

  • Per-user credentials: each call uses the actual user's API key, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
API-Sports
agent · Acme Q3
Run
Who are the top scorers in the Premier League this season?
S
apisports_football_list_top_scorers
117ms
Sports data agent
The top 3 scorers have 18, 15, and 14 goals. The leader has scored in 13 of 24 matches.
Sources: API-Football, 20 top scorers
apisports
20 players
18:29
Message Claude...

Tools your sports data agent reaches for on API-Sports, scoped per user.

CALL ANY TOOL
38 tools for sports data on API-Sports: list fixtures and games, read standings, team and player statistics, lineups, and match events, and look up injuries, transfers, predictions, and odds.
apisports_basketball_get_standings
Basketball get standings
Get the basketball standings of a league season, optionally for one team, stage or group. Returns rows with position, stage, group, team, games played, won and lost (with percentages), points for and against, form and description. Bad or missing parameters come back as HTTP 200 with an empty `response` and the reason in `errors`. Use it for the league table. Use apisports_basketball_list_games for individual results.
Parameters
Name
Type
Required
Description
league
integer
Required
League or cup ID, from apisports_basketball_list_leagues. League IDs stay the same across seasons. Example: 12 (NBA).
season
string
Required
Season. Leagues that span two years use 'YYYY-YYYY' (NBA: '2023-2024'); single-year leagues use 'YYYY' (e.g. '2024'). Use a value listed in the league's seasons from apisports_basketball_list_leagues.
group
string
Optional
Group name as it appears in standings results. Example: 'Western Conference'.
stage
string
Optional
Stage name as it appears in standings results. Example: 'Regular Season'.
team
integer
Optional
Team ID, from apisports_basketball_list_teams. Example: 145.
apisports_basketball_get_status
Basketball get status
apisports_basketball_list_games
Basketball list games
apisports_basketball_list_leagues
Basketball list leagues
apisports_basketball_list_teams
Basketball list teams
apisports_football_get_fixture_events
Football get fixture events
apisports_football_get_fixture_lineups
Football get fixture lineups
apisports_football_get_fixture_statistics
Football get fixture statistics
apisports_football_get_head_to_head
Football get head to head
apisports_football_get_predictions
Football get predictions
apisports_football_get_squad
Football get squad
apisports_football_get_status
Football get status
apisports_football_get_team_statistics
Football get team statistics
apisports_football_list_bet_types
Football list bet types
apisports_football_list_coaches
Football list coaches
apisports_football_list_countries
Football list countries
apisports_football_list_fixtures
Football list fixtures
apisports_football_list_injuries
Football list injuries
apisports_football_list_odds
Football list odds
apisports_football_list_players
Football list players
apisports_football_list_rounds
Football list rounds
apisports_football_list_seasons
Football list seasons
apisports_football_list_teams
Football list teams
apisports_football_list_timezones
Football list timezones
apisports_football_list_top_scorers
Football list top scorers
apisports_football_list_transfers
Football list transfers
apisports_football_list_venues
Football list venues
apisports_hockey_get_standings
Hockey get standings
apisports_hockey_list_games
Hockey list games
apisports_hockey_list_leagues
Hockey list leagues

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// API-Sports tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["apisports"], toolNames: [
    "apisports_football_list_fixtures",
    "apisports_football_get_standings",
    "apisports_football_list_top_scorers"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Summarize this weekend's Premier League fixtures and the current table" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["apisports"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Summarize this weekend's Premier League fixtures and the current table" }],
  tools,
});

// Execute the tool call with the user's vaulted API-Sports API key
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["apisports"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Summarize this weekend's Premier League fixtures and the current table" }],
  tools,
});

// Tool call runs with the user's vaulted API-Sports API key
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["apisports"] }, pageSize: 100,
});

const agent = new Agent({
  name: "sports_data_agent",
  model: "gemini-2.5-pro",
  instruction: "API-Sports tools scoped to this user",
  tools,
});

await agent.run("Summarize this weekend's Premier League fixtures and the current table");
Try these prompts
Copy any prompt into your agent. Each maps directly to a API-Sports tool. Click to copy, paste into your agent, done.
Football fixtures
Copy the prompt
Copied
List today's Premier League fixtures.
Copy the prompt
Copied
Show both lineups for tonight's Arsenal fixture.
Copy the prompt
Copied
Which players are injured or suspended in the Premier League this season?
Stats and standings
Copy the prompt
Copied
Get the La Liga table for the 2025 season.
Copy the prompt
Copied
Show head-to-head results between these two teams.
Copy the prompt
Copied
What is API-Football's prediction for this fixture?
Basketball and hockey
Copy the prompt
Copied
List tonight's NBA games.
Copy the prompt
Copied
Show the NHL standings for this season.
Copy the prompt
Copied
How many requests are left on my API-Hockey plan?
SEE HOW AUTH WORKS
Each user connects their own API-Sports API key once, and Scalekit sends it with every call. Keys stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
API-Sports
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
API-Sports
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
API-Sports
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
API-Sports
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other analytics and media connectors.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
Test other agents
See the same per-user auth pattern across other analytics and media connectors.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared API-Sports API key looks fine in a demo. In production every lookup looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared key
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
API-Sports today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access API-Sports as the user or through a shared key?
As the user. Each user connects their own API-Sports API key once, and Scalekit sends it with every call. Audit logs attribute every lookup to that user, and requests count against that user's own API-Sports subscription.
Where is the API-Sports API key stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new API key. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in API-Sports?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example football tools only. Every API-Sports tool is read-only, so the agent cannot change anything in the account. Scalekit also enforces scope checks before every API call.
What happens when a user revokes API-Sports access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Which sports does the API-Sports connector cover?
Football, basketball, and hockey. Football has the deepest coverage, with fixtures, match events, lineups, player statistics, injuries, transfers, trophies, predictions, and pre-match odds. Basketball and hockey cover leagues, teams, games, and standings, and each sport has a status tool that reports the subscription for that API.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""apisports"": {
""url"": ""https://mcp.scalekit.com/apisports"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.apisports]
url = ""https://mcp.scalekit.com/apisports""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""apisports"": {
""url"": ""https://mcp.scalekit.com/apisports"",
""type"": ""http""
}
}
}