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 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 16 football data providers — event types, qualifier IDs, coordinate systems, API endpoints, data models, and cross-provider comparisons. Your agent looks up the real docs instead of guessing from training data.
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 | 143 | event-types, data-model, coordinate-system, api-access, xg-model |
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 | 71 | event-types, data-model, api-access |
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 | 61 | event-types, data-model, coordinate-system, api-access |
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 | 29 | event-types, qualifiers, coordinate-system, api-access |
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
- **640 searchable chunks** across 10 providers.
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.0",
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",