football-docs 0.3.0 → 0.3.1
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/README.md +22 -6
- package/bin/serve.js +2 -2
- package/data/docs.db +0 -0
- package/docs/fotmob/identity-surfaces.md +62 -0
- package/docs/impect/identity-surfaces.md +61 -0
- package/docs/opta/identity-surfaces.md +71 -0
- package/docs/skillcorner/identity-surfaces.md +60 -0
- package/docs/soccerdonna/identity-surfaces.md +66 -0
- package/docs/sportmonks/identity-surfaces.md +65 -0
- package/docs/statsbomb/identity-surfaces.md +65 -0
- package/docs/transfermarkt/identity-surfaces.md +69 -0
- package/docs/wyscout/identity-surfaces.md +64 -0
- package/package.json +18 -18
- package/providers.json +45 -0
package/README.md
CHANGED
|
@@ -4,10 +4,20 @@ Searchable football data provider documentation for AI coding agents. Like [Cont
|
|
|
4
4
|
|
|
5
5
|
**Who it's for:** Developers and analysts who use AI coding tools (Claude Code, Cursor, VS Code Copilot, Windsurf) to work with football data. Works with any tool that supports MCP.
|
|
6
6
|
|
|
7
|
-
**What it does:** Gives your AI agent a searchable index of documentation for
|
|
7
|
+
**What it does:** Gives your AI agent a searchable index of documentation for 15 football data providers — event types, qualifier IDs, coordinate systems, API endpoints, data models, identity surfaces, and cross-provider comparisons. Your agent looks up the real docs instead of guessing from training data.
|
|
8
8
|
|
|
9
9
|
**Why not just let the AI figure it out?** LLMs get football data specifics wrong constantly — Opta qualifier IDs, StatsBomb coordinate ranges, API endpoint URLs, library method signatures. These are mutable facts that change across versions. football-docs gives the agent verified, sourced documentation with provenance tracking so you know where every answer came from.
|
|
10
10
|
|
|
11
|
+
## Provider identity facts
|
|
12
|
+
|
|
13
|
+
football-docs is the public source for provider identity-surface facts: access
|
|
14
|
+
shape, ID schemes, matching fields, provider quirks, and provenance rules.
|
|
15
|
+
Curated Reep-derived notes belong here when they can be stated without private
|
|
16
|
+
register state. They should say whether a fact comes from public docs, public
|
|
17
|
+
page evidence, licensed feed shape, or a reviewed public-safe observation, and
|
|
18
|
+
must not include private paths, credentials, scraper state, action ledgers, mint
|
|
19
|
+
salts, or raw restricted payloads.
|
|
20
|
+
|
|
11
21
|
MCP ([Model Context Protocol](https://modelcontextprotocol.io)) is a standard for connecting AI coding tools to external data sources.
|
|
12
22
|
|
|
13
23
|
## Quick start
|
|
@@ -92,6 +102,7 @@ Add to `claude_desktop_config.json`:
|
|
|
92
102
|
- "What is Opta qualifier 76?" (big chance)
|
|
93
103
|
- "How does StatsBomb represent shot events?"
|
|
94
104
|
- "Compare Opta and Wyscout coordinate systems"
|
|
105
|
+
- "Which provider IDs are safe identity bridges for Transfermarkt players?"
|
|
95
106
|
- "Does SportMonks have xG data?"
|
|
96
107
|
- "What event types does kloppy map to GenericEvent?"
|
|
97
108
|
- "How does SPADL represent a tackle?"
|
|
@@ -100,18 +111,23 @@ Add to `claude_desktop_config.json`:
|
|
|
100
111
|
|
|
101
112
|
| Provider | Chunks | Categories |
|
|
102
113
|
|----------|--------|------------|
|
|
103
|
-
| StatsBomb |
|
|
114
|
+
| StatsBomb | 150 | event-types, data-model, coordinate-system, api-access, xg-model, identity-surfaces |
|
|
104
115
|
| kloppy | 100 | data-model, usage, provider-mapping |
|
|
105
|
-
| SportMonks |
|
|
116
|
+
| SportMonks | 78 | event-types, data-model, api-access, identity-surfaces |
|
|
106
117
|
| databallpy | 63 | data-model, overview, usage |
|
|
107
118
|
| mplsoccer | 62 | overview, pitch-types, visualizations |
|
|
108
|
-
| Wyscout |
|
|
119
|
+
| Wyscout | 68 | event-types, data-model, coordinate-system, api-access, identity-surfaces |
|
|
109
120
|
| Free sources | 45 | overview, fbref, understat |
|
|
110
121
|
| soccerdata | 40 | overview, data-sources, usage |
|
|
111
|
-
| Opta |
|
|
122
|
+
| Opta | 36 | event-types, qualifiers, coordinate-system, api-access, identity-surfaces |
|
|
112
123
|
| socceraction | 26 | SPADL format, VAEP, Expected Threat |
|
|
124
|
+
| FotMob | 7 | identity-surfaces |
|
|
125
|
+
| Impect | 7 | identity-surfaces |
|
|
126
|
+
| SkillCorner | 7 | identity-surfaces |
|
|
127
|
+
| Soccerdonna | 7 | identity-surfaces |
|
|
128
|
+
| Transfermarkt | 7 | identity-surfaces |
|
|
113
129
|
|
|
114
|
-
**
|
|
130
|
+
**703 searchable chunks** across 15 providers.
|
|
115
131
|
|
|
116
132
|
## Contributing
|
|
117
133
|
|
package/bin/serve.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { resolve, dirname } from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
4
4
|
|
|
5
5
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
await import(resolve(__dirname, "..", "dist", "index.js"));
|
|
6
|
+
await import(pathToFileURL(resolve(__dirname, "..", "dist", "index.js")).href);
|
package/data/docs.db
CHANGED
|
Binary file
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
source_type: curated
|
|
3
|
+
source_url: null
|
|
4
|
+
upstream_version: null
|
|
5
|
+
crawled_at: null
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# FotMob Identity Surfaces
|
|
9
|
+
|
|
10
|
+
FotMob is useful as a public consumer-facing corroborator for fixtures, teams,
|
|
11
|
+
players, and competition pages. It should generally be treated as a bridge and
|
|
12
|
+
lookup surface rather than as the canonical ontology source.
|
|
13
|
+
|
|
14
|
+
## Access Surface
|
|
15
|
+
|
|
16
|
+
FotMob identity evidence usually comes from public web pages or undocumented
|
|
17
|
+
consumer-facing endpoints. Treat access and response shape as mutable, record
|
|
18
|
+
the public URL or endpoint family and snapshot date, and avoid publishing
|
|
19
|
+
scraping bypass or rate-limit evasion details.
|
|
20
|
+
|
|
21
|
+
## Stable Identity Surfaces
|
|
22
|
+
|
|
23
|
+
| Entity | Common surface | Notes |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| Competition | league or tournament ID | Useful public bridge. Check country, gender, season, and competition type. |
|
|
26
|
+
| Season | season ID or season path parameter where exposed | Treat as provider-scoped and audit URL/API stability. |
|
|
27
|
+
| Match | match ID | Strong public match corroborator when fixture fields align. |
|
|
28
|
+
| Team | team ID | Useful for clubs and national teams. Check side type and country. |
|
|
29
|
+
| Player | player ID | Useful public profile bridge. Corroborate with DOB, nationality, team, and position from stronger sources. |
|
|
30
|
+
| Coach or staff | manager profile where exposed | Treat as role evidence unless profile attributes are strong enough. |
|
|
31
|
+
|
|
32
|
+
## ID Scheme Notes
|
|
33
|
+
|
|
34
|
+
FotMob IDs are provider-scoped numeric IDs. Match, team, player, league, and
|
|
35
|
+
season IDs are useful bridges, while URL slugs and display labels are handles.
|
|
36
|
+
Because the public endpoint contract is undocumented, store source URL,
|
|
37
|
+
endpoint family, and snapshot date alongside any bridge evidence.
|
|
38
|
+
|
|
39
|
+
## Useful Matching Fields
|
|
40
|
+
|
|
41
|
+
- Match: FotMob match ID, date/time, home and away teams, score, league, season,
|
|
42
|
+
venue, status, lineups, and player stats.
|
|
43
|
+
- Team: team ID, official/display name, country, league participation, squad,
|
|
44
|
+
and fixtures.
|
|
45
|
+
- Player: player ID, full name, date of birth where present, nationality,
|
|
46
|
+
position, current team, shirt number, and match participation.
|
|
47
|
+
|
|
48
|
+
## Known Quirks
|
|
49
|
+
|
|
50
|
+
- FotMob is optimised for product display. Display names, slugs, and grouping
|
|
51
|
+
labels may change.
|
|
52
|
+
- Profile and current-team surfaces are point-in-time facts. Keep a snapshot
|
|
53
|
+
date when using them.
|
|
54
|
+
- Public endpoints may be undocumented. Treat access and response shape as
|
|
55
|
+
mutable unless the provider documents the contract.
|
|
56
|
+
|
|
57
|
+
## Reep Next Usage
|
|
58
|
+
|
|
59
|
+
Use this page as the public provider-fact reference for FotMob identity
|
|
60
|
+
surfaces, public URL families, and matching cautions. Reep Next can cite those
|
|
61
|
+
facts, but private endpoint handling, scrape internals, rate-limit tactics,
|
|
62
|
+
review outcomes, and register decisions belong outside football-docs.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
source_type: curated
|
|
3
|
+
source_url: null
|
|
4
|
+
upstream_version: null
|
|
5
|
+
crawled_at: null
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Impect Identity Surfaces
|
|
9
|
+
|
|
10
|
+
Impect is primarily useful as a commercial match and event data provider. Public
|
|
11
|
+
documentation for identity surfaces is limited, so this page records cautious
|
|
12
|
+
curated guidance for entity-resolution work that has legitimate data access.
|
|
13
|
+
|
|
14
|
+
## Access Surface
|
|
15
|
+
|
|
16
|
+
Access is through licensed Impect deliveries or customer APIs. Public
|
|
17
|
+
football-docs examples should stay synthetic or describe field families only.
|
|
18
|
+
Record delivery date, competition scope, and whether IDs are documented as
|
|
19
|
+
stable across deliveries before using them as durable bridges.
|
|
20
|
+
|
|
21
|
+
## Stable Identity Surfaces
|
|
22
|
+
|
|
23
|
+
| Entity | Common surface | Notes |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| Competition | provider competition key | Check whether the feed exposes stable competition IDs or only customer-specific names. |
|
|
26
|
+
| Season | provider season or competition-edition key | Treat as provider scoped until audited. |
|
|
27
|
+
| Match | provider match key | Strong bridge if the key is stable in the delivered feed and fixture fields align. |
|
|
28
|
+
| Team | provider team key | Corroborate with match participation, name, country, and side type. |
|
|
29
|
+
| Player | provider player key | Corroborate with lineup/event participation and biographical attributes from another authority. |
|
|
30
|
+
| Staff | provider staff or official key if exposed | Treat as role evidence unless profile attributes are available. |
|
|
31
|
+
|
|
32
|
+
## ID Scheme Notes
|
|
33
|
+
|
|
34
|
+
Treat Impect match, team, player, season, and competition keys as opaque
|
|
35
|
+
provider-scoped IDs. Some deliveries may be customer-shaped; do not assume a key
|
|
36
|
+
is globally stable until that is confirmed in the contract or repeated exports.
|
|
37
|
+
|
|
38
|
+
## Useful Matching Fields
|
|
39
|
+
|
|
40
|
+
- Match: provider match key, date, home and away teams, score, competition,
|
|
41
|
+
season, venue, and delivery snapshot.
|
|
42
|
+
- Team: provider team key, names, country, competition participation, and match
|
|
43
|
+
relationship evidence.
|
|
44
|
+
- Player: provider player key, display name, team in match, lineup status,
|
|
45
|
+
shirt number, position, and event participation.
|
|
46
|
+
|
|
47
|
+
## Known Quirks
|
|
48
|
+
|
|
49
|
+
- Commercial data extracts may be customer-shaped. Confirm whether IDs are
|
|
50
|
+
stable across deliveries before using them as durable bridges.
|
|
51
|
+
- Event participation is strong relationship evidence, but it does not prove
|
|
52
|
+
person identity without attribute or external-provider corroboration.
|
|
53
|
+
- If profile attributes are thin, keep Impect as a corroborator rather than a
|
|
54
|
+
canonical mint source.
|
|
55
|
+
|
|
56
|
+
## Reep Next Usage
|
|
57
|
+
|
|
58
|
+
Use this page as the public provider-fact reference for Impect identity field
|
|
59
|
+
families and matching cautions. Reep Next can cite those public-safe field
|
|
60
|
+
shapes, but customer deliveries, private IDs, raw feed payloads, and register
|
|
61
|
+
review outcomes belong outside football-docs.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
source_type: curated
|
|
3
|
+
source_url: null
|
|
4
|
+
upstream_version: null
|
|
5
|
+
crawled_at: null
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Opta / Stats Perform Identity Surfaces
|
|
9
|
+
|
|
10
|
+
Opta data usually has the strongest structured identity spine for professional
|
|
11
|
+
football projects that have licensed access to the SDAPI feeds. Treat Opta as a
|
|
12
|
+
canonical schedule and structure source only when the local entitlement and
|
|
13
|
+
coverage audit prove that the relevant competition family is complete.
|
|
14
|
+
|
|
15
|
+
## Access Surface
|
|
16
|
+
|
|
17
|
+
Primary access is through licensed Stats Perform / Opta feeds or customer
|
|
18
|
+
exports. Public-facing Opta Analyst surfaces can be useful for examples, but
|
|
19
|
+
they are not a substitute for an entitlement-safe feed contract. Record the feed
|
|
20
|
+
family, extraction date, and competition coverage when using Opta identity facts.
|
|
21
|
+
|
|
22
|
+
## Stable Identity Surfaces
|
|
23
|
+
|
|
24
|
+
| Entity | Common surface | Notes |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| Competition | competition or tournament identifiers | Use with tournament-calendar metadata. Names and display labels vary by locale and feed. |
|
|
27
|
+
| Season | tournament calendar UUID | Strong season or tournament-edition key. Split-stage competitions may need parent and child season modelling outside Opta. |
|
|
28
|
+
| Stage or round | stage, phase, group, round, or schedule metadata | Opta is often authoritative for schedule-stage shape, but label strings still need normalisation. |
|
|
29
|
+
| Match | fixture or match UUID | Best canonical match key when schedule coverage is complete. Fixture tuples should corroborate, not define, identity. |
|
|
30
|
+
| Team | contestant UUID | Can represent clubs, national teams, youth teams, reserve sides, or historical contestants. Use type/scope attributes. |
|
|
31
|
+
| Player | person UUID | Strong person key inside Opta. Still corroborate against names, DOB, nationality, and relationship evidence before cross-provider bridging. |
|
|
32
|
+
| Coach or staff | person UUID plus role surface | Person UUIDs can span player and coach roles. Keep role edges separate from person identity. |
|
|
33
|
+
|
|
34
|
+
## ID Scheme Notes
|
|
35
|
+
|
|
36
|
+
Opta identifiers are opaque provider keys. Do not parse semantic meaning from
|
|
37
|
+
their string shape, and do not assume that display labels, stage labels, or
|
|
38
|
+
contestant names are stable identifiers. Match, contestant, person, competition,
|
|
39
|
+
and tournament-calendar IDs should be stored with provider, feed family, and
|
|
40
|
+
snapshot metadata.
|
|
41
|
+
|
|
42
|
+
## Useful Matching Fields
|
|
43
|
+
|
|
44
|
+
- Match: date/time, home and away contestant UUIDs, score, competition, season,
|
|
45
|
+
stage, venue, and status.
|
|
46
|
+
- Team: contestant UUID, official name, short name, country, gender, age class,
|
|
47
|
+
national-team or club scope, and active period where available.
|
|
48
|
+
- Person: Opta person UUID, full name, short name, date of birth, nationality,
|
|
49
|
+
position, gender, and squad or career memberships.
|
|
50
|
+
- Relationships: schedule team participation, squads, lineups, coaching staff,
|
|
51
|
+
substitutions, and career memberships.
|
|
52
|
+
|
|
53
|
+
## Known Quirks
|
|
54
|
+
|
|
55
|
+
- Opta labels are provider display labels, not ontology. Do not mint a separate
|
|
56
|
+
competition or team solely because the feed label differs from another
|
|
57
|
+
provider.
|
|
58
|
+
- Some competitions have full schedule and squad coverage but sparse match-event
|
|
59
|
+
or lineup tables in a local mirror. Check all person substrates before
|
|
60
|
+
assuming people cannot be resolved.
|
|
61
|
+
- National teams need explicit team scope and country attributes. Do not encode
|
|
62
|
+
the full national-team concept only in a club-shaped team type.
|
|
63
|
+
- Some person facts are current-point-in-time surfaces, especially active squad
|
|
64
|
+
or career listings. Record the snapshot date when using them.
|
|
65
|
+
|
|
66
|
+
## Reep Next Usage
|
|
67
|
+
|
|
68
|
+
Use this page as the public provider-fact reference for Opta identity surfaces:
|
|
69
|
+
access shape, ID families, matching fields, and known quirks. Reep Next
|
|
70
|
+
acceptance policy, canonical-feed assignments, minting, review cases, action
|
|
71
|
+
ledgers, and private feed observations belong outside football-docs.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
source_type: curated
|
|
3
|
+
source_url: null
|
|
4
|
+
upstream_version: null
|
|
5
|
+
crawled_at: null
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# SkillCorner Identity Surfaces
|
|
9
|
+
|
|
10
|
+
SkillCorner is mainly a tracking and physical-data provider. Its identity
|
|
11
|
+
surfaces are most useful for linking delivered match, team, and player rows back
|
|
12
|
+
to an existing register rather than minting a full football ontology.
|
|
13
|
+
|
|
14
|
+
## Access Surface
|
|
15
|
+
|
|
16
|
+
Access is through licensed SkillCorner APIs or delivered tracking/physical-data
|
|
17
|
+
files. Public guidance should use synthetic examples or high-level field names,
|
|
18
|
+
not proprietary tracking payloads. Record delivery date, match scope, and data
|
|
19
|
+
product when using SkillCorner identity evidence.
|
|
20
|
+
|
|
21
|
+
## Stable Identity Surfaces
|
|
22
|
+
|
|
23
|
+
| Entity | Common surface | Notes |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| Competition | provider competition key where present | Often secondary to match delivery scope. Audit before treating as canonical. |
|
|
26
|
+
| Season | provider season or delivery context | Keep provider-scoped unless a stable season key is documented in the extract. |
|
|
27
|
+
| Match | provider match key | Strong bridge when fixture fields and delivery metadata agree. |
|
|
28
|
+
| Team | provider team key | Corroborate with match participation and team names. |
|
|
29
|
+
| Player | provider player key | Corroborate with tracking roster, shirt number, position, and external person attributes. |
|
|
30
|
+
|
|
31
|
+
## ID Scheme Notes
|
|
32
|
+
|
|
33
|
+
SkillCorner IDs should be treated as opaque and provider-scoped. Match delivery
|
|
34
|
+
IDs, team IDs, and player IDs are strongest when paired with the delivery
|
|
35
|
+
snapshot and fixture context. A tracking roster key is not automatically a
|
|
36
|
+
season membership or person identity without corroborating attributes.
|
|
37
|
+
|
|
38
|
+
## Useful Matching Fields
|
|
39
|
+
|
|
40
|
+
- Match: provider match key, date, competition, season, home and away teams,
|
|
41
|
+
score where present, and data delivery snapshot.
|
|
42
|
+
- Team: provider team key, name, side in match, and relationship to match.
|
|
43
|
+
- Player: provider player key, name, team in match, shirt number, position,
|
|
44
|
+
starter/substitute status where supplied, and tracking samples.
|
|
45
|
+
|
|
46
|
+
## Known Quirks
|
|
47
|
+
|
|
48
|
+
- Tracking feeds can expose matchday rosters without enough biographical detail
|
|
49
|
+
for safe person minting. Use them as relationship evidence unless another
|
|
50
|
+
source supplies the identity attributes.
|
|
51
|
+
- Delivery metadata may be more reliable than display names for reproducible
|
|
52
|
+
matching.
|
|
53
|
+
- A match-level tracking file is not proof of a season-long membership edge.
|
|
54
|
+
|
|
55
|
+
## Reep Next Usage
|
|
56
|
+
|
|
57
|
+
Use this page as the public provider-fact reference for SkillCorner identity
|
|
58
|
+
surfaces in tracking and physical-data deliveries. Reep Next can cite the field
|
|
59
|
+
families and matching cautions, but raw tracking payloads, private delivery
|
|
60
|
+
examples, and register review outputs belong outside football-docs.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
source_type: curated
|
|
3
|
+
source_url: null
|
|
4
|
+
upstream_version: null
|
|
5
|
+
crawled_at: null
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Soccerdonna Identity Surfaces
|
|
9
|
+
|
|
10
|
+
Soccerdonna is a useful public corroborator for women's football, particularly
|
|
11
|
+
for teams, competitions, player profiles, staff pages, and match reports. Treat
|
|
12
|
+
it as a public evidence provider whose coverage and structure vary by
|
|
13
|
+
competition and era.
|
|
14
|
+
|
|
15
|
+
## Access Surface
|
|
16
|
+
|
|
17
|
+
Soccerdonna is a public website surface. Use public profile pages, competition
|
|
18
|
+
pages, and match reports as corroborating evidence, with the page URL and
|
|
19
|
+
snapshot date recorded. Do not publish private scraping state, retry logs, or
|
|
20
|
+
local mirror paths.
|
|
21
|
+
|
|
22
|
+
## Stable Identity Surfaces
|
|
23
|
+
|
|
24
|
+
| Entity | Common surface | Notes |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| Competition | competition page ID or slug | Useful corroborator. Canonical competition shape should still follow the chosen match feed. |
|
|
27
|
+
| Season | season-scoped competition URL parameters | Can corroborate season membership but may not match a register season hierarchy exactly. |
|
|
28
|
+
| Stage or round | match-report round labels | Useful for stage naming after normalisation. Raw labels should not be minted directly. |
|
|
29
|
+
| Match | match-report or `spielbericht` ID | Strong public match corroborator when date, teams, and score align. |
|
|
30
|
+
| Team | team profile ID | Useful for women's clubs and competition participation. Check gender and side type explicitly. |
|
|
31
|
+
| Player | player profile ID | Useful for names, DOB where present, nationality, position, and career/team membership evidence. |
|
|
32
|
+
| Coach or staff | staff profile ID | Useful for coaching roles, but role labels need a normalised public vocabulary. |
|
|
33
|
+
|
|
34
|
+
## ID Scheme Notes
|
|
35
|
+
|
|
36
|
+
Treat profile, team, competition, and match-report IDs as provider-scoped
|
|
37
|
+
bridges. URL text and slugs are handles, not identity. Season and competition
|
|
38
|
+
URL parameters are useful context, but the target register still decides whether
|
|
39
|
+
they map to a season, stage, or competition entity.
|
|
40
|
+
|
|
41
|
+
## Useful Matching Fields
|
|
42
|
+
|
|
43
|
+
- Match reports: date, home team, away team, score, competition, round label,
|
|
44
|
+
lineups, substitutions, and staff.
|
|
45
|
+
- Player and coach profiles: full name, display name, date of birth,
|
|
46
|
+
nationality, position or role, profile URL, and career memberships.
|
|
47
|
+
- Team pages: official name, competition entries, country, gender context, and
|
|
48
|
+
match participation.
|
|
49
|
+
|
|
50
|
+
## Known Quirks
|
|
51
|
+
|
|
52
|
+
- DOB coverage varies by era and competition. Missing DOB should create review
|
|
53
|
+
residue rather than forcing a weak name-only bridge.
|
|
54
|
+
- Round labels need normalisation before stage minting. Preserve the raw label
|
|
55
|
+
as evidence where useful.
|
|
56
|
+
- Soccerdonna can expose people through match reports before profile data has
|
|
57
|
+
enough identity attributes to bridge safely.
|
|
58
|
+
- Some pages are better corroborators than canonical mint sources because their
|
|
59
|
+
season and competition hierarchy can differ from the schedule feed.
|
|
60
|
+
|
|
61
|
+
## Reep Next Usage
|
|
62
|
+
|
|
63
|
+
Use this page as the public provider-fact reference for Soccerdonna profile,
|
|
64
|
+
team, competition, and match-report identity surfaces. Reep Next can cite those
|
|
65
|
+
facts while keeping review decisions, private scrape state, action logs, and
|
|
66
|
+
women's-football implementation plans outside football-docs.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
source_type: curated
|
|
3
|
+
source_url: https://docs.sportmonks.com/v3
|
|
4
|
+
upstream_version: null
|
|
5
|
+
crawled_at: null
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# SportMonks Identity Surfaces
|
|
9
|
+
|
|
10
|
+
SportMonks exposes a broad REST API with stable numeric IDs for leagues,
|
|
11
|
+
seasons, stages, fixtures, participants, players, coaches, venues, and related
|
|
12
|
+
entities. It is a useful bridge and corroborator, especially where public API
|
|
13
|
+
access is available.
|
|
14
|
+
|
|
15
|
+
## Access Surface
|
|
16
|
+
|
|
17
|
+
Primary access is the documented SportMonks football API. Include expansions can
|
|
18
|
+
make identity, relationship, and event evidence available from the same request,
|
|
19
|
+
but callers should still record the endpoint, include set, plan scope, and
|
|
20
|
+
request date because coverage depends on subscription tier.
|
|
21
|
+
|
|
22
|
+
## Stable Identity Surfaces
|
|
23
|
+
|
|
24
|
+
| Entity | Common surface | Notes |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| Competition | league ID | Strong provider key. League names and display categories should be normalised. |
|
|
27
|
+
| Season | season ID | Strong provider key under a league. Use start/end years and league relationship for review. |
|
|
28
|
+
| Stage or round | stage ID, round ID, group ID | Useful provider structure, but may differ from a canonical schedule feed. |
|
|
29
|
+
| Match | fixture ID | Strong match bridge when date, participants, score, and competition align. |
|
|
30
|
+
| Team | participant ID | Can represent clubs or national teams. Check participant type and country. |
|
|
31
|
+
| Player | player ID | Strong provider key only if not reused or contaminated by previous bridge errors. Corroborate with attributes. |
|
|
32
|
+
| Coach or staff | coach ID | Treat as person identity with role-specific evidence. |
|
|
33
|
+
|
|
34
|
+
## ID Scheme Notes
|
|
35
|
+
|
|
36
|
+
SportMonks IDs are numeric provider IDs. Keep them provider-scoped and do not
|
|
37
|
+
merge by bare number across providers. League, season, stage, round, fixture,
|
|
38
|
+
participant, player, coach, and venue IDs should be stored with the source
|
|
39
|
+
endpoint and include path that supplied them.
|
|
40
|
+
|
|
41
|
+
## Useful Matching Fields
|
|
42
|
+
|
|
43
|
+
- Fixture: `fixture.id`, league, season, stage, round, participants, start time,
|
|
44
|
+
scores, state, venue, and lineups.
|
|
45
|
+
- Participant: ID, name, short code, country, gender or type where present, and
|
|
46
|
+
fixture participation.
|
|
47
|
+
- Player: ID, display name, common name, date of birth, nationality, position,
|
|
48
|
+
height, weight, image URL, and team/lineup relationships.
|
|
49
|
+
|
|
50
|
+
## Known Quirks
|
|
51
|
+
|
|
52
|
+
- Broad APIs can carry legacy or contaminated bridges if a downstream register
|
|
53
|
+
previously joined the wrong person. Validate same-provider ID uniqueness.
|
|
54
|
+
- Include-based responses can make relationship evidence easy to retrieve, but
|
|
55
|
+
consumers must still distinguish lineup, squad, current team, and historical
|
|
56
|
+
membership semantics.
|
|
57
|
+
- Stages and rounds are provider shape. Keep the canonical ontology decision
|
|
58
|
+
separate from the SportMonks response nesting.
|
|
59
|
+
|
|
60
|
+
## Reep Next Usage
|
|
61
|
+
|
|
62
|
+
Use this page as the public provider-fact reference for SportMonks ID families,
|
|
63
|
+
API identity surfaces, include paths, and matching cautions. Reep Next can cite
|
|
64
|
+
those facts, but contaminated-bridge review, private validation output, API
|
|
65
|
+
keys, paid-tier payloads, and register decisions belong outside football-docs.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
source_type: curated
|
|
3
|
+
source_url: https://github.com/statsbomb/open-data
|
|
4
|
+
upstream_version: null
|
|
5
|
+
crawled_at: null
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# StatsBomb Identity Surfaces
|
|
9
|
+
|
|
10
|
+
StatsBomb provides strong match, lineup, event, and tactical context for covered
|
|
11
|
+
competitions. Open Data is excellent for public examples and corroboration, but
|
|
12
|
+
its coverage is selective and should not be treated as a full canonical register
|
|
13
|
+
source unless the exact scope has been audited.
|
|
14
|
+
|
|
15
|
+
## Access Surface
|
|
16
|
+
|
|
17
|
+
StatsBomb identity examples can come from the public Open Data repository, the
|
|
18
|
+
`statsbombpy` wrapper, or licensed commercial APIs. Public docs should prefer
|
|
19
|
+
Open Data IDs and explicitly say when guidance is inferred from Open Data rather
|
|
20
|
+
than a commercial entitlement.
|
|
21
|
+
|
|
22
|
+
## Stable Identity Surfaces
|
|
23
|
+
|
|
24
|
+
| Entity | Common surface | Notes |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| Competition | `competition_id` | Stable inside StatsBomb. Pair with `competition_name` and country/region for human review. |
|
|
27
|
+
| Season | `season_id` under a competition | Stable inside StatsBomb. Not globally unique without competition context in some workflows. |
|
|
28
|
+
| Match | `match_id` | Strong match bridge for covered matches. |
|
|
29
|
+
| Team | `team_id` | Strong team bridge inside StatsBomb data. Check whether a single ID is being used across provider-side historical segmentation. |
|
|
30
|
+
| Player | `player_id` | Strong player bridge inside lineups/events. Corroborate with names, DOB from another authority, and relationship evidence. |
|
|
31
|
+
| Coach or manager | lineup or match metadata surfaces where present | Treat as role evidence. Coverage is less central than player/event data. |
|
|
32
|
+
|
|
33
|
+
## ID Scheme Notes
|
|
34
|
+
|
|
35
|
+
StatsBomb Open Data exposes numeric `competition_id`, `season_id`, `match_id`,
|
|
36
|
+
`team_id`, and `player_id` fields, plus event UUIDs. The numeric IDs are stable
|
|
37
|
+
inside the provider dataset but should stay provider-scoped. Do not infer global
|
|
38
|
+
identity from a bare number without provider and dataset context.
|
|
39
|
+
|
|
40
|
+
## Useful Matching Fields
|
|
41
|
+
|
|
42
|
+
- Competitions and seasons: IDs, names, country, gender, and season label.
|
|
43
|
+
- Matches: match ID, date, home and away team IDs, score, competition, season,
|
|
44
|
+
match status, and lineup availability.
|
|
45
|
+
- Teams: team IDs and names from matches, lineups, and events.
|
|
46
|
+
- Players: player IDs, names, team membership in lineups/events, shirt number,
|
|
47
|
+
position, and event participation.
|
|
48
|
+
|
|
49
|
+
## Known Quirks
|
|
50
|
+
|
|
51
|
+
- Open Data coverage is selective. Absence from open data is not evidence that
|
|
52
|
+
an entity or match does not exist.
|
|
53
|
+
- StatsBomb lineups are strong match-grain relationship evidence but not the
|
|
54
|
+
same as club or national-team contract membership.
|
|
55
|
+
- Public Open Data may include rich international matches but not full
|
|
56
|
+
tournament squad or call-up semantics.
|
|
57
|
+
- Names can be display names. Use another attribute authority for DOB where a
|
|
58
|
+
person bridge requires it.
|
|
59
|
+
|
|
60
|
+
## Reep Next Usage
|
|
61
|
+
|
|
62
|
+
Use this page as the public provider-fact reference for StatsBomb identity
|
|
63
|
+
surfaces. Reep Next can cite Open Data ID families and matching cautions, while
|
|
64
|
+
commercial entitlement assumptions, register acceptance policy, private review
|
|
65
|
+
evidence, and derived bridge decisions belong outside football-docs.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
source_type: curated
|
|
3
|
+
source_url: null
|
|
4
|
+
upstream_version: null
|
|
5
|
+
crawled_at: null
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Transfermarkt Identity Surfaces
|
|
9
|
+
|
|
10
|
+
Transfermarkt is valuable for cross-provider corroboration and public entity
|
|
11
|
+
pages, especially player biographical attributes and competition/team history.
|
|
12
|
+
Its public website shape should not be copied blindly into a register ontology.
|
|
13
|
+
|
|
14
|
+
## Access Surface
|
|
15
|
+
|
|
16
|
+
Transfermarkt is primarily a public website surface, not an official public API.
|
|
17
|
+
Use public entity pages, match reports, or licence-safe community exports as
|
|
18
|
+
evidence, and record the public URL plus snapshot date. Do not publish scraper
|
|
19
|
+
state, bypass details, or private mirror paths.
|
|
20
|
+
|
|
21
|
+
## Stable Identity Surfaces
|
|
22
|
+
|
|
23
|
+
| Entity | Common surface | Notes |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| Competition | `wettbewerb` code | Competition pages can model provider-specific containers that should map into a different canonical structure. |
|
|
26
|
+
| Season | competition code plus season year | Usually one page per competition year. Split phases may not have distinct Transfermarkt season IDs. |
|
|
27
|
+
| Match | match or game ID | Strong match bridge where coverage exists. Use date, teams, score, and competition for corroboration. |
|
|
28
|
+
| Team | `verein` ID | Same real team can sometimes appear under multiple provider IDs. Distinguish supplier segmentation from real succession. |
|
|
29
|
+
| Player | `spieler` ID | Useful public player bridge. Strong corroborator when DOB, nationality, birthplace, position, and career context agree. |
|
|
30
|
+
| Coach | staff or manager profile ID | Treat as a person surface with role-specific career evidence, not a separate human identity. |
|
|
31
|
+
|
|
32
|
+
## ID Scheme Notes
|
|
33
|
+
|
|
34
|
+
The numeric IDs embedded in public URLs are the bridge surfaces. URL slugs are
|
|
35
|
+
handles and can change without changing the underlying provider ID. Common URL
|
|
36
|
+
families include `spieler` for players, `verein` for teams, `wettbewerb` for
|
|
37
|
+
competitions, and match or game IDs for fixtures. Season query parameters and
|
|
38
|
+
display labels are context, not independent canonical IDs.
|
|
39
|
+
|
|
40
|
+
## Useful Matching Fields
|
|
41
|
+
|
|
42
|
+
- Player: name variants, date of birth, birth place, citizenship, height,
|
|
43
|
+
position, foot, profile aliases, current club, historical clubs, and
|
|
44
|
+
national-team profile surfaces where available.
|
|
45
|
+
- Team: official name, historical names, country, city, gender where inferable,
|
|
46
|
+
competition participation, and successor or predecessor context.
|
|
47
|
+
- Match: date, home and away teams, score, attendance, competition, season, and
|
|
48
|
+
round label.
|
|
49
|
+
- Season: competition code, season year, display label, and match membership.
|
|
50
|
+
|
|
51
|
+
## Known Quirks
|
|
52
|
+
|
|
53
|
+
- Transfermarkt sometimes models playoffs, cups, or provider-maintained
|
|
54
|
+
containers differently from a canonical match feed. For example, a playoff
|
|
55
|
+
container can corroborate stages without becoming a separate canonical
|
|
56
|
+
competition.
|
|
57
|
+
- Same-provider duplicate player pages exist. Do not merge by name alone.
|
|
58
|
+
- Team pages can represent supplier-side segmentation, historical successors,
|
|
59
|
+
phoenix clubs, youth sides, reserve sides, women's teams, or genuine
|
|
60
|
+
duplicates. Preserve relationship evidence when flattening would make history
|
|
61
|
+
ambiguous.
|
|
62
|
+
- URL slugs are handles. Numeric IDs are the bridge surface.
|
|
63
|
+
|
|
64
|
+
## Reep Next Usage
|
|
65
|
+
|
|
66
|
+
Use this page as the public provider-fact reference for Transfermarkt identity
|
|
67
|
+
surfaces. Reep Next can cite it for URL families, ID scheme notes, and matching
|
|
68
|
+
quirks, but register decisions, mint salts, review outcomes, private mirrors,
|
|
69
|
+
and scraper implementation details belong outside football-docs.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
source_type: curated
|
|
3
|
+
source_url: null
|
|
4
|
+
upstream_version: null
|
|
5
|
+
crawled_at: null
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Hudl Wyscout Identity Surfaces
|
|
9
|
+
|
|
10
|
+
Hudl Wyscout exposes structured football entities through competitions,
|
|
11
|
+
seasons, matches, teams, players, coaches, lineups, events, and career-like
|
|
12
|
+
profile fields. Treat its IDs as strong provider bridges, not as proof that its
|
|
13
|
+
ontology is the register ontology.
|
|
14
|
+
|
|
15
|
+
## Access Surface
|
|
16
|
+
|
|
17
|
+
Primary access is through licensed Hudl Wyscout APIs or delivered exports.
|
|
18
|
+
Public examples should stay at field-name and shape level unless Hudl has
|
|
19
|
+
published equivalent documentation. Record entitlement scope, export date, and
|
|
20
|
+
whether a fact came from match, event, profile, or career metadata.
|
|
21
|
+
|
|
22
|
+
## Stable Identity Surfaces
|
|
23
|
+
|
|
24
|
+
| Entity | Common surface | Notes |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| Competition | `competitionId` | Strong provider key. Check format, gender, country, and competition type. |
|
|
27
|
+
| Season | `seasonId` | Strong provider key under competition context. |
|
|
28
|
+
| Match | `matchId` | Strong match bridge when date, teams, score, and competition align. |
|
|
29
|
+
| Team | `teamId` | Can represent clubs, national teams, youth, or other sides. Use type/category/gender fields. |
|
|
30
|
+
| Player | `playerId` | Strong person bridge when profile attributes and relationship evidence agree. |
|
|
31
|
+
| Coach or referee | profile IDs in match/team metadata | Treat role-specific IDs as person or official surfaces only after attribute checks. |
|
|
32
|
+
|
|
33
|
+
## ID Scheme Notes
|
|
34
|
+
|
|
35
|
+
Wyscout IDs are provider-scoped keys. Store `competitionId`, `seasonId`,
|
|
36
|
+
`matchId`, `teamId`, `playerId`, and profile IDs with provider and snapshot
|
|
37
|
+
metadata, and treat round or stage IDs as provider structure until mapped into a
|
|
38
|
+
target-register stage model.
|
|
39
|
+
|
|
40
|
+
## Useful Matching Fields
|
|
41
|
+
|
|
42
|
+
- Match: `matchId`, `competitionId`, `seasonId`, `roundId`, date, home/away
|
|
43
|
+
teams, score, winner, venue, status, and duration.
|
|
44
|
+
- Team: `teamId`, official name, short name, area, type, category, gender, city,
|
|
45
|
+
child teams, and image/profile URL.
|
|
46
|
+
- Player: `playerId`, name fields, birth date, birth area, passport area, role,
|
|
47
|
+
foot, height, gender, current team, and status.
|
|
48
|
+
|
|
49
|
+
## Known Quirks
|
|
50
|
+
|
|
51
|
+
- Wyscout's `currentTeamId` is point-in-time profile data. Do not use it as a
|
|
52
|
+
historical membership edge without a snapshot date.
|
|
53
|
+
- Team `type`, `category`, and `gender` are useful gates, but still require
|
|
54
|
+
normalisation into the target register vocabulary.
|
|
55
|
+
- Match lineup and event participation can corroborate identity, but does not
|
|
56
|
+
replace attribute evidence for person bridging.
|
|
57
|
+
- Round and stage IDs are provider structure, not necessarily public ontology.
|
|
58
|
+
|
|
59
|
+
## Reep Next Usage
|
|
60
|
+
|
|
61
|
+
Use this page as the public provider-fact reference for Hudl Wyscout identity
|
|
62
|
+
surfaces and field families. Reep Next can cite those facts, but entitlement
|
|
63
|
+
coverage, canonical-source policy, private examples, review outputs, and
|
|
64
|
+
provider-specific bridge decisions belong outside football-docs.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "football-docs",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Searchable football data provider documentation for AI coding agents. Like Context7 for football data.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"mcpName": "io.github.withqwerty/football-docs",
|
|
@@ -10,20 +10,6 @@
|
|
|
10
10
|
"engines": {
|
|
11
11
|
"node": ">=20"
|
|
12
12
|
},
|
|
13
|
-
"scripts": {
|
|
14
|
-
"build": "tsc",
|
|
15
|
-
"prebuild": "npm run check",
|
|
16
|
-
"check": "tsc --noEmit",
|
|
17
|
-
"dev": "tsx src/index.ts",
|
|
18
|
-
"ingest": "tsx src/ingest.ts",
|
|
19
|
-
"crawl": "tsx src/crawl.ts",
|
|
20
|
-
"discover": "tsx src/crawl.ts --discover",
|
|
21
|
-
"lint": "biome check src/",
|
|
22
|
-
"lint:fix": "biome check --write src/",
|
|
23
|
-
"prepublishOnly": "npm run build && npm run ingest",
|
|
24
|
-
"start": "node dist/index.js",
|
|
25
|
-
"test": "vitest run"
|
|
26
|
-
},
|
|
27
13
|
"keywords": [
|
|
28
14
|
"football",
|
|
29
15
|
"soccer",
|
|
@@ -51,7 +37,8 @@
|
|
|
51
37
|
"@mozilla/readability": "^0.6.0",
|
|
52
38
|
"better-sqlite3": "^11.9.1",
|
|
53
39
|
"linkedom": "^0.18.12",
|
|
54
|
-
"turndown": "^7.2.2"
|
|
40
|
+
"turndown": "^7.2.2",
|
|
41
|
+
"zod": "^4.4.3"
|
|
55
42
|
},
|
|
56
43
|
"devDependencies": {
|
|
57
44
|
"@biomejs/biome": "^2.4.9",
|
|
@@ -68,5 +55,18 @@
|
|
|
68
55
|
"data/docs.db",
|
|
69
56
|
"docs/",
|
|
70
57
|
"providers.json"
|
|
71
|
-
]
|
|
72
|
-
|
|
58
|
+
],
|
|
59
|
+
"scripts": {
|
|
60
|
+
"build": "tsc",
|
|
61
|
+
"prebuild": "pnpm check",
|
|
62
|
+
"check": "tsc --noEmit",
|
|
63
|
+
"dev": "tsx src/index.ts",
|
|
64
|
+
"ingest": "tsx src/ingest.ts",
|
|
65
|
+
"crawl": "tsx src/crawl.ts",
|
|
66
|
+
"discover": "tsx src/crawl.ts --discover",
|
|
67
|
+
"lint": "biome check src/",
|
|
68
|
+
"lint:fix": "biome check --write src/",
|
|
69
|
+
"start": "node dist/index.js",
|
|
70
|
+
"test": "vitest run"
|
|
71
|
+
}
|
|
72
|
+
}
|
package/providers.json
CHANGED
|
@@ -50,6 +50,51 @@
|
|
|
50
50
|
],
|
|
51
51
|
"last_crawled": null
|
|
52
52
|
},
|
|
53
|
+
"transfermarkt": {
|
|
54
|
+
"description": "Public football entity pages for players, teams, competitions, matches, transfers, and market values",
|
|
55
|
+
"version": null,
|
|
56
|
+
"package": null,
|
|
57
|
+
"sources": [
|
|
58
|
+
{ "type": "curated", "note": "Public website identity surfaces and Reep-derived provider-quirk notes" }
|
|
59
|
+
],
|
|
60
|
+
"last_crawled": null
|
|
61
|
+
},
|
|
62
|
+
"soccerdonna": {
|
|
63
|
+
"description": "Public women's football entity pages, match reports, competition pages, player profiles, and staff profiles",
|
|
64
|
+
"version": null,
|
|
65
|
+
"package": null,
|
|
66
|
+
"sources": [
|
|
67
|
+
{ "type": "curated", "note": "Public website identity surfaces and Reep-derived women's football matching notes" }
|
|
68
|
+
],
|
|
69
|
+
"last_crawled": null
|
|
70
|
+
},
|
|
71
|
+
"fotmob": {
|
|
72
|
+
"description": "Consumer-facing football fixtures, teams, competitions, player profiles, lineups, and match statistics",
|
|
73
|
+
"version": null,
|
|
74
|
+
"package": null,
|
|
75
|
+
"sources": [
|
|
76
|
+
{ "type": "curated", "note": "Public website and undocumented endpoint identity-surface notes" }
|
|
77
|
+
],
|
|
78
|
+
"last_crawled": null
|
|
79
|
+
},
|
|
80
|
+
"impect": {
|
|
81
|
+
"description": "Commercial football match and event data provider with team and player identity surfaces in delivered feeds",
|
|
82
|
+
"version": null,
|
|
83
|
+
"package": null,
|
|
84
|
+
"sources": [
|
|
85
|
+
{ "type": "curated", "note": "High-level commercial-provider identity guidance; no proprietary payloads" }
|
|
86
|
+
],
|
|
87
|
+
"last_crawled": null
|
|
88
|
+
},
|
|
89
|
+
"skillcorner": {
|
|
90
|
+
"description": "Commercial tracking and physical-data provider with match, team, and player identity surfaces in delivered feeds",
|
|
91
|
+
"version": null,
|
|
92
|
+
"package": null,
|
|
93
|
+
"sources": [
|
|
94
|
+
{ "type": "curated", "note": "High-level commercial-provider identity guidance; no proprietary tracking payloads" }
|
|
95
|
+
],
|
|
96
|
+
"last_crawled": null
|
|
97
|
+
},
|
|
53
98
|
"kloppy": {
|
|
54
99
|
"description": "Python library for standardising football data across providers",
|
|
55
100
|
"version": "3.16.0",
|