Quickstart
The fastest path to a successful integration is:- resolve scope only when the prompt is ambiguous
- choose whether the job is competition-first or availability-first
- deepen only when the user actually needs more detail
Pick the right first path
- Unknown IDs
- Known competition or participant
Start with
resolve_entities when the prompt is fuzzy and your host does not yet know which competition, participant, venue, or program the user means.{
"jsonrpc": "2.0",
"id": "resolve-1",
"method": "tools/call",
"params": {
"name": "resolve_entities",
"arguments": {
"query": "Premier League",
"entityType": "competition",
"resolutionProfile": "balanced",
"limit": 5
}
}
}
curl "https://sports-mcp-server.etonecarg.com/" \
-X POST \
-H "Authorization: Bearer $SPORTS_MCP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "resolve-1",
"method": "tools/call",
"params": {
"name": "resolve_entities",
"arguments": {
"query": "Premier League",
"entityType": "competition",
"limit": 5
}
}
}'
const payload = {
jsonrpc: "2.0",
id: "resolve-1",
method: "tools/call",
params: {
name: "resolve_entities",
arguments: {
query: "Premier League",
entityType: "competition",
resolutionProfile: "balanced",
limit: 5,
},
},
};
const response = await fetch("https://sports-mcp-server.etonecarg.com/", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SPORTS_MCP_API_KEY!}`,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
import json
import os
import requests
payload = {
"jsonrpc": "2.0",
"id": "resolve-1",
"method": "tools/call",
"params": {
"name": "resolve_entities",
"arguments": {
"query": "Premier League",
"entityType": "competition",
"resolutionProfile": "balanced",
"limit": 5,
},
},
}
response = requests.post(
"https://sports-mcp-server.etonecarg.com/",
headers={
"Authorization": f"Bearer {os.environ['SPORTS_MCP_API_KEY']}",
"Content-Type": "application/json",
},
json=payload,
timeout=30,
)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))
Skip resolution when your host already has a stable provider ref.Choose the next call by job:
- use
list_schedulewhen the question is about the sports calendar - use
list_watchable_schedulewhen the question is about what can be watched - use
get_competition_hubwhen the product needs one coherent competition surface
Then choose the right schedule path
- Competition-first schedule truth
- Availability-first watchability
Use this when the user is asking about fixtures, rounds, matchups, or the sports calendar itself.
{
"jsonrpc": "2.0",
"id": "schedule-1",
"method": "tools/call",
"params": {
"name": "list_schedule",
"arguments": {
"competitionId": "LEAGUE_ID",
"timeFrom": "2026-04-08T00:00:00Z",
"timeTo": "2026-04-09T00:00:00Z"
}
}
}
curl "https://sports-mcp-server.etonecarg.com/" \
-X POST \
-H "Authorization: Bearer $SPORTS_MCP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "schedule-1",
"method": "tools/call",
"params": {
"name": "list_schedule",
"arguments": {
"competitionId": "LEAGUE_ID",
"timeFrom": "2026-04-08T00:00:00Z",
"timeTo": "2026-04-09T00:00:00Z"
}
}
}'
const payload = {
jsonrpc: "2.0",
id: "schedule-1",
method: "tools/call",
params: {
name: "list_schedule",
arguments: {
competitionId: "LEAGUE_ID",
timeFrom: "2026-04-08T00:00:00Z",
timeTo: "2026-04-09T00:00:00Z",
},
},
};
const response = await fetch("https://sports-mcp-server.etonecarg.com/", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SPORTS_MCP_API_KEY!}`,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
console.log(await response.json());
import os
import requests
payload = {
"jsonrpc": "2.0",
"id": "schedule-1",
"method": "tools/call",
"params": {
"name": "list_schedule",
"arguments": {
"competitionId": "LEAGUE_ID",
"timeFrom": "2026-04-08T00:00:00Z",
"timeTo": "2026-04-09T00:00:00Z",
},
},
}
response = requests.post(
"https://sports-mcp-server.etonecarg.com/",
headers={"Authorization": f"Bearer {os.environ['SPORTS_MCP_API_KEY']}"},
json=payload,
timeout=30,
)
response.raise_for_status()
print(response.json())
Use this when the user is asking what is on, what can be watched, or what is live.
{
"jsonrpc": "2.0",
"id": "watchable-1",
"method": "tools/call",
"params": {
"name": "list_watchable_schedule",
"arguments": {
"competitionId": "ON_COMPETITION_GID",
"timeFrom": "2026-04-08T00:00:00Z",
"timeTo": "2026-04-09T00:00:00Z"
}
}
}
curl "https://sports-mcp-server.etonecarg.com/" \
-X POST \
-H "Authorization: Bearer $SPORTS_MCP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "watchable-1",
"method": "tools/call",
"params": {
"name": "list_watchable_schedule",
"arguments": {
"competitionId": "ON_COMPETITION_GID",
"timeFrom": "2026-04-08T00:00:00Z",
"timeTo": "2026-04-09T00:00:00Z"
}
}
}'
const payload = {
jsonrpc: "2.0",
id: "watchable-1",
method: "tools/call",
params: {
name: "list_watchable_schedule",
arguments: {
competitionId: "ON_COMPETITION_GID",
timeFrom: "2026-04-08T00:00:00Z",
timeTo: "2026-04-09T00:00:00Z",
},
},
};
const response = await fetch("https://sports-mcp-server.etonecarg.com/", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SPORTS_MCP_API_KEY!}`,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
console.log(await response.json());
import os
import requests
payload = {
"jsonrpc": "2.0",
"id": "watchable-1",
"method": "tools/call",
"params": {
"name": "list_watchable_schedule",
"arguments": {
"competitionId": "ON_COMPETITION_GID",
"timeFrom": "2026-04-08T00:00:00Z",
"timeTo": "2026-04-09T00:00:00Z",
},
},
}
response = requests.post(
"https://sports-mcp-server.etonecarg.com/",
headers={"Authorization": f"Bearer {os.environ['SPORTS_MCP_API_KEY']}"},
json=payload,
timeout=30,
)
response.raise_for_status()
print(response.json())
Open a single event only when needed
Useget_event_center when the product truly benefits from one coherent bundle.
{
"jsonrpc": "2.0",
"id": "event-1",
"method": "tools/call",
"params": {
"name": "get_event_center",
"arguments": {
"eventId": "MATCH_ID",
"timeFrom": "2026-04-08T18:00:00Z",
"timeTo": "2026-04-08T23:00:00Z",
"includeLineups": true,
"includeTimeline": true,
"includeStats": true,
"includeWatchOptions": true
}
}
}
curl "https://sports-mcp-server.etonecarg.com/" \
-X POST \
-H "Authorization: Bearer $SPORTS_MCP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "event-1",
"method": "tools/call",
"params": {
"name": "get_event_center",
"arguments": {
"eventId": "MATCH_ID",
"timeFrom": "2026-04-08T18:00:00Z",
"timeTo": "2026-04-08T23:00:00Z",
"includeLineups": true,
"includeTimeline": true,
"includeStats": true,
"includeWatchOptions": true
}
}
}'
const payload = {
jsonrpc: "2.0",
id: "event-1",
method: "tools/call",
params: {
name: "get_event_center",
arguments: {
eventId: "MATCH_ID",
timeFrom: "2026-04-08T18:00:00Z",
timeTo: "2026-04-08T23:00:00Z",
includeLineups: true,
includeTimeline: true,
includeStats: true,
includeWatchOptions: true,
},
},
};
const response = await fetch("https://sports-mcp-server.etonecarg.com/", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SPORTS_MCP_API_KEY!}`,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
console.log(await response.json());
import os
import requests
payload = {
"jsonrpc": "2.0",
"id": "event-1",
"method": "tools/call",
"params": {
"name": "get_event_center",
"arguments": {
"eventId": "MATCH_ID",
"timeFrom": "2026-04-08T18:00:00Z",
"timeTo": "2026-04-08T23:00:00Z",
"includeLineups": True,
"includeTimeline": True,
"includeStats": True,
"includeWatchOptions": True,
},
},
}
response = requests.post(
"https://sports-mcp-server.etonecarg.com/",
headers={"Authorization": f"Bearer {os.environ['SPORTS_MCP_API_KEY']}"},
json=payload,
timeout=30,
)
response.raise_for_status()
print(response.json())
Quick rules
- Keep windows bounded.
- Preserve provider refs exactly as they came back.
- Treat
partial,missingSections, andlimitationsas first-class workflow signals. - Prefer atomic tools unless the product clearly benefits from a hybrid bundle.