{"_id":"football-docs","_rev":"40-579916c34d8640b449c905d5ab316a45","name":"football-docs","dist-tags":{"latest":"0.14.0"},"versions":{"0.1.0":{"name":"football-docs","version":"0.1.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.1.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"5c6cd52d84d1f84865eb50fd09379a8171a0bce3","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.1.0.tgz","fileCount":30,"integrity":"sha512-3FCfwCUsNwNawVyNP+ONP3GDVQRG831e0w6rj6VHIJaC4LXhf50TUK0ZN8gkwgYvyZZrlgGWf+EyXywo8FrEQA==","signatures":[{"sig":"MEYCIQDyXDOm2+sjookh1zGfvCqCPuSnwt+OrUe4B97+EjH37wIhAKFusZk+3OZR9o9TfctnnmmySiP3NOhxhPW8f2d8yo6R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":519187},"type":"module","gitHead":"a4a72f4a3a4206b1e3a07c5cfe6c9bd43c260fb9","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","ingest":"tsx src/ingest.ts"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.4.1","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"22.15.1","dependencies":{"better-sqlite3":"^11.9.1","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","typescript":"^5.8.3","@types/node":"^22.15.2","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.1.0_1774465357661_0.07464434123321384","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"football-docs","version":"0.1.1","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.1.1","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"4069feb4aef2deea921989b9cd81a09d4a67d915","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.1.1.tgz","fileCount":32,"integrity":"sha512-hihKsmZMwWHuUxGYRIMDDfDZfb5e/BvMXGv2cZM0ZV+u00K2IC9lDNsKsh1fFRAiPzMaoMJjbxgMfri8jw3Tbg==","signatures":[{"sig":"MEYCIQDDNMKtRFeOtZbnA3EvTVcboyABkfTRCR5kpSoLZMuSLwIhAOrOhjdnoOANGqdSnvn9cwDv3rTfg2rPy0K6u1GAOLdZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":576017},"type":"module","gitHead":"6fa31bfedf539da02fdf690ffd0629add44b213a","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","ingest":"tsx src/ingest.ts"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.4.1","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"22.15.1","dependencies":{"better-sqlite3":"^11.9.1","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","typescript":"^5.8.3","@types/node":"^22.15.2","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.1.1_1774466898743_0.04161987942265899","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"football-docs","version":"0.1.2","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.1.2","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"81905a4445accadad51d0ac217d70153666777c9","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.1.2.tgz","fileCount":32,"integrity":"sha512-73fz4aUKjeQkh0MApHtPBoWNh6wfuQ4HdJZO9of/1rMLx1DGFaJOXPiTynshVABAVBCpzWjgCe4jrYlzK+7AhA==","signatures":[{"sig":"MEUCIQCJ9i6u6m0yBQRYsR4Nqd6hIkxjxRsdyYXV7CgllP8RHgIgYM2szmTW/gvWtaVAaWmozz0tPdX2dim9d7w5vbGFu/Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":576020},"type":"module","gitHead":"d0b12f942372b898a85c354142f1ec727a5278c5","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","ingest":"tsx src/ingest.ts"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.4.1","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"22.15.1","dependencies":{"better-sqlite3":"^11.9.1","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","typescript":"^5.8.3","@types/node":"^22.15.2","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.1.2_1774467895303_0.2482850146904625","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"football-docs","version":"0.2.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.2.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"abfca5b3068331682899a208dc429d6f1bb2ac4c","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.2.0.tgz","fileCount":48,"integrity":"sha512-rhtwgbXForfz/9UUZ82TYhDoAnK+bkkYYO8fGw9ulhpiu8h47rPTigRC/dOaUAoIbIM3hfJW7dMHlR8C7sPklg==","signatures":[{"sig":"MEUCIQCAI7JecZ87+fmnJIdWEwbbTMtkFjlOmeuJdYvaJGrY0QIgOkpu1cJG1esF9aQuixXt4a+EdHJG+yeVFgqGAgF7Bzw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1113236},"type":"module","engines":{"node":">=20"},"gitHead":"f64a90692c3e29013a0524f5dc1e653c465c56b1","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"npm run check","prepublishOnly":"npm run build && npm run ingest"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.4.1","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"22.15.1","dependencies":{"linkedom":"^0.18.12","turndown":"^7.2.2","better-sqlite3":"^11.9.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.12.1","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","vitest":"^4.1.2","typescript":"^5.8.3","@types/node":"^22.15.2","@biomejs/biome":"^2.4.9","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.2.0_1774613709681_0.4156440002585069","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"football-docs","version":"0.2.1","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.2.1","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"ec52ef73bb05d3cea72aad44380d81e96fb4e437","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.2.1.tgz","fileCount":48,"integrity":"sha512-NFA4yfis2Vabj8K0pMriKTrZCI0kSB2g/OrgtL0UtfE4mzf41IMBGLeqzFX6W8XJxZg2T3jYwjawwqe9ma0zEg==","signatures":[{"sig":"MEUCIQCAODSIFQz+oRfWfYLxfNOojgDzJwqHIg4izIiEcFYKGQIgMRGpOvgP214o2nyf3834vWwornTr1LJNnDY9+IhmcyA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1114170},"type":"module","engines":{"node":">=20"},"gitHead":"a91c8590dcaf5c65dcb381a51d516b1858a34c6c","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"npm run check","prepublishOnly":"npm run build && npm run ingest"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.4.1","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"22.15.1","dependencies":{"linkedom":"^0.18.12","turndown":"^7.2.2","better-sqlite3":"^11.9.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.12.1","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","vitest":"^4.1.2","typescript":"^5.8.3","@types/node":"^22.15.2","@biomejs/biome":"^2.4.9","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.2.1_1774647314622_0.13139240371164274","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"football-docs","version":"0.3.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.3.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"ae6c9096926c0861616af4b9dbfd08a3ed61c575","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.3.0.tgz","fileCount":48,"integrity":"sha512-6VX5Bm5jSgGBlyUfwTrFMMn8Q8W6zd7swdNaKngtJswkY3yXGiOYidM/WyujMFvmSvBKHM8j1AAotLrIbvXUrw==","signatures":[{"sig":"MEYCIQDXH2eY7YSLM4GlXzKJvojrYE0taP5H0WJ2htPZEc2rvQIhANcTaa/UkV6ptjFPxmXlNZ/qNdD+IlbxEJu+OCOO4/2P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1117707},"type":"module","engines":{"node":">=20"},"gitHead":"3b135b5448b48161975a2e2f00226f988a49ae12","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"npm run check","prepublishOnly":"npm run build && npm run ingest"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.4.1","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"22.15.1","dependencies":{"linkedom":"^0.18.12","turndown":"^7.2.2","better-sqlite3":"^11.9.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.12.1","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","vitest":"^4.1.2","typescript":"^5.8.3","@types/node":"^22.15.2","@biomejs/biome":"^2.4.9","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.3.0_1774720007275_0.01794342877853783","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"football-docs","version":"0.3.1","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.3.1","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"232949d66ad9ea3ac61f28e6768c05f66118d147","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.3.1.tgz","fileCount":57,"integrity":"sha512-oqi3fhmwlYnJBQB8XZK6uOVSyUKaE/qjiwL8wpa+4yuYXfvAzdAH94xcnhzsu3buYr6k5xPwH38nVlS9L3lEQA==","signatures":[{"sig":"MEQCIEVWCknb2SKTbuHF9vJt1J11XOlkFWERF35y1clxsgWhAiAjsDyJjrWJDVvIXU2PbYmncLe28OF6ZQPMfi4nD9MEjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1148265},"type":"module","_from":"file:football-docs-0.3.1.tgz","engines":{"node":">=20"},"mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"_resolved":"/private/var/folders/vj/fr0sr_kj1rq4y37fprjt3l2w0000gn/T/5633679aea3aa71aac13716ef1109db4/football-docs-0.3.1.tgz","_integrity":"sha512-oqi3fhmwlYnJBQB8XZK6uOVSyUKaE/qjiwL8wpa+4yuYXfvAzdAH94xcnhzsu3buYr6k5xPwH38nVlS9L3lEQA==","repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"10.9.4","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.12","turndown":"^7.2.2","better-sqlite3":"^11.9.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.12.1","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","vitest":"^4.1.2","typescript":"^5.8.3","@types/node":"^22.15.2","@biomejs/biome":"^2.4.9","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.3.1_1778499795419_0.21038605245868802","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"football-docs","version":"0.4.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.4.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"3d314c8e66ff3393ef2a8ba12a9570a60b54725c","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.4.0.tgz","fileCount":64,"integrity":"sha512-S7Y0SmoWZw7sxO+n5kY7z97WklaFbL173k1V0M/wEw/5ZHtWgzGHiJeK5C2FZsA3AWcLSw1CgwJrxkYFUMhNGA==","signatures":[{"sig":"MEUCIASAJf7NpfWZd8S8QG2reIEJRJu7E2zMWId1WqrZSPULAiEA8183VQvCbHUnnaq3lhg3B33BWqyrKd3Ylt3BUst1C1U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1241885},"pnpm":{"overrides":{"vite@<8.0.5":">=8.0.5","fast-uri@<3.1.2":">=3.1.2"},"onlyBuiltDependencies":["better-sqlite3","esbuild"]},"type":"module","engines":{"node":">=20"},"gitHead":"9648b967b0dc24c0c65d6113ca298b2fdfb3a32e","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","prepublishOnly":"pnpm build && pnpm ingest"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"10.9.4","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.12","turndown":"^7.2.2","better-sqlite3":"^11.9.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","vitest":"^4.1.5","typescript":"^5.8.3","@types/node":"^22.15.2","@biomejs/biome":"^2.4.9","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.4.0_1778834406709_0.979049224676984","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"football-docs","version":"0.7.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.7.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"57189c2e2e5c51dc98672a9b4825df2a57de778c","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.7.0.tgz","fileCount":225,"integrity":"sha512-C2D39gvXhXrIUgID7cQWGEIP412uFdaApPZPzjGmQnZvLXrNkjMWJnhKyCa0dvO6kkW3eF1647/HwmVxYn3MOw==","signatures":[{"sig":"MEUCIDLfv81IJrvUc+rERw8nHRvMBWwSfMu7Ug4OEFCQ/5Y7AiEA84dEvcSQxCaXJw0SMXE5KX8EPTJ1gUwZfOC/cbbVQxA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3613043},"type":"module","engines":{"node":">=20"},"gitHead":"97544472c390a12bb02496b877e8e6114ba5b8f7","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","prepublishOnly":"pnpm build && pnpm ingest"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"10.9.4","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.12","turndown":"^7.2.2","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.0","vitest":"^4.1.10","typescript":"^5.8.3","@types/node":"^22.15.2","@biomejs/biome":"^2.4.9","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.7.0_1785427099793_0.04173502017130515","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"football-docs","version":"0.8.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.8.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"b7029d11f1e8d1eb20b476a98c499fcf61fde5ae","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.8.0.tgz","fileCount":229,"integrity":"sha512-EV+GgUI2nOYxycndV5RB9pMZZcfBpgla8rTm6Emm4I0BY0nQZOUd1Wxp4ROr/TJoc+PMTCmT14Q2q+jWP1c8pA==","signatures":[{"sig":"MEQCIG1wwZ4iotJbmXEhSxHU9yAgf+gMdDhB8mMm6xO0snMWAiBoFbeZlaCOcatAhWvahaZeBhvG2CDec1QKWKYGPIfe3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3650517},"type":"module","engines":{"node":">=20"},"gitHead":"7d762300c7f346f90b87caa33f85efadc92f1bb9","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"10.9.4","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.12","turndown":"^7.2.2","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.0","vitest":"^4.1.10","typescript":"^5.8.3","@types/node":"^22.15.2","@biomejs/biome":"^2.4.9","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.8.0_1785518445368_0.14386682223150093","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"football-docs","version":"0.9.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.9.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"b7e0ee28529d22c8dfbd35c57bfd356c9e1a8fc0","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.9.0.tgz","fileCount":219,"integrity":"sha512-rz7FtZl89Ny/7kWIP3ytz5X8YGO42W9PpyqwfICl6aos+SLSH11Dt1LB66Ey4FO6cdUfxtfkl68USXhIr7ASMw==","signatures":[{"sig":"MEUCIQC5V3Tz1noYyY7rR8YjWpFDmhRofFsCLNkNEewBu4xKxAIgDbxFuUBo1PK+62js9TajSVaJzZ3QsqIoW0u2AI/ijqU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4335764},"type":"module","engines":{"node":">=20"},"gitHead":"dd9be3ae7bda32d68265eb9e304e6b1cd407575c","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.6.2","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.12","turndown":"^7.2.2","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.0","vitest":"^4.1.10","typescript":"^5.8.3","@types/node":"^22.15.2","@biomejs/biome":"^2.4.9","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.9.0_1786436506082_0.3111614816719084","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"football-docs","version":"0.9.1","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.9.1","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"d59d84f5e452277a4cadf23a88382e4ec83ac5d1","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.9.1.tgz","fileCount":219,"integrity":"sha512-kUp0a9El9owmti5si6iusy/Ki+MhzowBdecxS/HiSP01XwOkaBachqDVVg9MiJupgrKvGDJhRcvoKxDdJZ5Iuw==","signatures":[{"sig":"MEQCIDzgfQWjEylhRGq8TNQ/M7LON6c/FfKFryc/vYMPpNnzAiAWUsmVF2vY2ydMzRob+v+JcE5KTDmogUAtcWec7/Zyug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4371329},"pnpm":{"overrides":{"hono":"^4.12.34","js-yaml":"^4.3.1"}},"type":"module","engines":{"node":">=20"},"gitHead":"4b3e6e2494b0be7fc605419547d4daa3a4b11bc5","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.6.2","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.10","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.9.1_1786444934039_0.6146257281010399","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"football-docs","version":"0.10.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.10.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"e13e555a26248b40d5581506c6905b053643bfc3","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.10.0.tgz","fileCount":290,"integrity":"sha512-xYBrFKxZ06A08D0H0VnaicEho2C5jJe3HMTHzQUXVcKBchUFMzMMNX4UavnbBi+h9BhUtF/Pi+A15ib0C4RQ5A==","signatures":[{"sig":"MEYCIQC29qTvoGajQ1XF8YMQw2k1Jg/8O53LOrMrTHLF2RGnGwIhAIWCRpR3+DUfP3gFe7D2QAh5ADoDRp+yTrTQqnY3fpDy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6537265},"type":"module","_from":"file:football-docs-0.10.0.tgz","engines":{"node":">=20"},"mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"_resolved":"/private/var/folders/tm/t8c3pss57n17841phqhtdx940000gn/T/fb19c673184f323c3ed3219350539e09/football-docs-0.10.0.tgz","_integrity":"sha512-xYBrFKxZ06A08D0H0VnaicEho2C5jJe3HMTHzQUXVcKBchUFMzMMNX4UavnbBi+h9BhUtF/Pi+A15ib0C4RQ5A==","repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.6.2","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.10","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.10.0_1788138713711_0.9166896473014565","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"football-docs","version":"0.11.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.11.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"955b3d2e3d7a4f76710dfb3815dbb4b95cd63d8e","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.11.0.tgz","fileCount":354,"integrity":"sha512-W6h9rhR9kcCQNEEltKn9bYdPe+BmW3N+pAuePxZ74EyBeLn5yhsPLKKptkTSYtKDLlgd3nqUh3QNxnar/GNVoQ==","signatures":[{"sig":"MEQCIHdKllyF81uinlKpoBVfp2HT6+X7u3pT1vAKE+7+kbfXAiAvq0XuVL+tBHiOzvZHCk68jMUx9TTzXF4+NABXJQaNaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6784393},"pnpm":{"overrides":{"hono":"^4.12.34","js-yaml":"^4.3.1"}},"type":"module","engines":{"node":">=20"},"gitHead":"bdd64639b7938eb34e49b7ebcc2b746a81227213","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","notion:truth":"python3 scripts/gen_notion_truth.py","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.19.0","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.10","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.11.0_1788973869048_0.345754432525607","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"football-docs","version":"0.11.1","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.11.1","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"9539d9c3ca4e793d23d96132419a7d1518a21dc4","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.11.1.tgz","fileCount":293,"integrity":"sha512-dNY9TXVe3q+QN7/LYmuUP1pZIxVr5H8muUoUwjWHuI8xwhSRQqXsAC/9nTsbVyo13q8lp9knq3VpUlf0BPmGFQ==","signatures":[{"sig":"MEYCIQCn7o/OPhJ9rfDI6zFuWIVILrelphG6O+31CKZGvG2jxQIhAJSTp1wE58Ko+pjAmdNKSY84/XYVAr9HkvOsnLQfmHTT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGW+DZl8H102VnbEbhC1krsLvqUl9DqYpKc45uHPbCVVAiAcyHYlmfBM9NZufu10eOpw6IHK17ZCNE+Y/kD8W6tgaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/football-docs@0.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6575716},"pnpm":{"overrides":{"hono":"^4.12.34","js-yaml":"^4.3.1"}},"type":"module","engines":{"node":">=20"},"gitHead":"02de8c314bec19c122b3a95553266542c338a5d1","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","notion:truth":"python3 scripts/gen_notion_truth.py","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2cc2b82e-d2da-4635-9e28-266555fdae6b"}},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.19.0","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.10","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.11.1_1790073715792_0.9559484520524222","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"football-docs","version":"0.12.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.12.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"2fd87314541874cadc687be297039281cb49aa09","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.12.0.tgz","fileCount":304,"integrity":"sha512-G6om3vagbqIbE0qwyqvGmvxdjT1mzp4N1iYmp6rbv5Z3po/4onBchJutz4EFUOEJJlsPMY+CELlZFSk/SiYKaw==","signatures":[{"sig":"MEYCIQDZSTDv0kEHzeaoX0/zz2QZtOzS20sTBeDBJuVaClfiLQIhAPPTNb80zAgVAzufDPTGwyOcnRz40nAdlH0lneHYffTx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCdsmccsBIMlaBlFLaaCFQuHw/XMEDV7ppb6fHquXZv6gIgOBtuepfNkv2TKcxlUov8PpiFZ5L/RfFEcXZVFJGvwLY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/football-docs@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6636648},"pnpm":{"overrides":{"hono":"^4.12.34","js-yaml":"^4.3.1"}},"type":"module","engines":{"node":">=20"},"gitHead":"f98bc4bcf34de23fa8869a5ef59c26087b98e08a","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","notion:truth":"python3 scripts/gen_notion_truth.py","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2cc2b82e-d2da-4635-9e28-266555fdae6b"}},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.19.0","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.11","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"optionalDependencies":{"@duckdb/node-api":"1.5.5-r.5"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.12.0_1790098659685_0.7464772113876244","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"football-docs","version":"0.12.1","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.12.1","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"2e533f77617582af31da4dcad7f8e61a26564b4d","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.12.1.tgz","fileCount":321,"integrity":"sha512-muOGyOikqCQtN3Nk5trCDzWYvRAP1ho6CLGlOHOd2S2EWPc4CEqEzQjQEVq038oUnpGhE7flOmXp649oEi/voA==","signatures":[{"sig":"MEUCIDnbbYagGrmKIyvEyunEAwTqBKfbDQbxhb8FYKSF+U8SAiEAorZYGZN6hdG2gKRFkXBF0I4b88EuxvloYNnygMzHIuA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD8eUvYcn38snExmjjzWR2PffuxY1B4nMaPdPSTNd6NUQIgXhBnM0d7KbnDI61D7r75elyDfeKeZeNXMSoCta2ROl8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/football-docs@0.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6653531},"type":"module","engines":{"node":">=20"},"gitHead":"34b7ca862b810844eff7f58b40aa8675d6a838d9","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","notion:truth":"python3 scripts/gen_notion_truth.py","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2cc2b82e-d2da-4635-9e28-266555fdae6b"}},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.19.0","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.11","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"optionalDependencies":{"@duckdb/node-api":"1.5.5-r.5"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.12.1_1790214423573_0.9740044552606479","host":"s3://npm-registry-packages-npm-production"}},"0.12.2":{"name":"football-docs","version":"0.12.2","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.12.2","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"f08c3a71655fccda0dc4ff5f49c6e497f294384d","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.12.2.tgz","fileCount":395,"integrity":"sha512-fMo9j/4KKu7v3GPobBYRdg7FJb8DQR/Ylao1iDGrId8tZvN2NvhUDSc+cYPk2UwSZIzK9jga/nuq+1+HbAeH5w==","signatures":[{"sig":"MEUCIQC3T8IAaRdyK1A68Q0APBGsU1PHkI6srjFak0/XDfiVjQIgYxCP08LfPsgTVkYqs7hcyQgScmEE6kSYEzQJbUVQivk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIENQR27wQupdhZFmlotv2ydM5EaXm42sjdbQbhT/C7PRAiBse9x6iHvTqqE/zn0MnojQVItXlp8Ce6W1HOlZBYBVxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/football-docs@0.12.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9182377},"type":"module","engines":{"node":">=20"},"gitHead":"430e1f4096e8d8094b1adfacb21528493142c3b9","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","notion:truth":"python3 scripts/gen_notion_truth.py","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","check:upstream":"python3 scripts/check_upstream.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2cc2b82e-d2da-4635-9e28-266555fdae6b"}},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.19.0","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.11","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"optionalDependencies":{"@duckdb/node-api":"1.5.5-r.5"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.12.2_1790258195187_0.44288024699685846","host":"s3://npm-registry-packages-npm-production"}},"0.12.3":{"name":"football-docs","version":"0.12.3","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.12.3","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"9926762e479af5aba50e87400fd768bff42fdd5f","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.12.3.tgz","fileCount":395,"integrity":"sha512-0XA4WoiVwTJpk4TgXW6Pvkuu002E5i3hwViYU/H1LtM3qrYKzL9AyJGb2wrQArK29d4Vfj+qVs//OgCWMXFGAQ==","signatures":[{"sig":"MEQCIApt+3MboM+jWcMptfJg0KTorFBDdpd7G5yD6Bj9v+R7AiAe+SfVZk8f+t0UNbXm9s0bL6LWcP0B2XAwMHXgJU+7fg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGeXwMaUH6AQ+TM71QoykqPqcJCw0ty9u+gTUFdGttuOAiBKWSP7UKeXC28eWzwt65gkwRwIpGmM0ki1kn+mtck0xA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/football-docs@0.12.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9678061},"type":"module","engines":{"node":">=20"},"gitHead":"947e8f83bca1d97cc154e430f2bcdd0308cae386","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","notion:truth":"python3 scripts/gen_notion_truth.py","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","check:upstream":"python3 scripts/check_upstream.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"2cc2b82e-d2da-4635-9e28-266555fdae6b"}},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.19.0","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.11","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"optionalDependencies":{"@duckdb/node-api":"1.5.5-r.5"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.12.3_1790664292429_0.7862628421954672","host":"s3://npm-registry-packages-npm-production"}},"0.12.4":{"name":"football-docs","version":"0.12.4","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.12.4","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"1eda333c27b77f92fad8e1562db116d315324386","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.12.4.tgz","fileCount":395,"integrity":"sha512-09CZ5WTnnicPdGAW0EJwEAycZuFM65O5KnXCnCe/4L6Gh2+jX2YX2FB0u1827NR8sjw9OGgwRBNAh3k+6kLLIw==","signatures":[{"sig":"MEYCIQDsdujctEerHG01bbxO9DGrrk0gHVZKMzunu+sxSXcrVgIhANi70Q/NjW4DNWktp0f3qKmtDW3yxzuLkfIpQfp4AGVn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCsQnY/Zdr0qRqDYQMgmVL7Z/nzyaNjbLukc/B9vMyv4AIhAM+jgcxRkylydsLks1BfDkZ05UQf7U7CDh5qxLlu00vA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/football-docs@0.12.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9680918},"type":"module","engines":{"node":">=20"},"gitHead":"2d483df750ba47a26105afa05112deba66c2a215","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","notion:truth":"python3 scripts/gen_notion_truth.py","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","check:upstream":"python3 scripts/check_upstream.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"2cc2b82e-d2da-4635-9e28-266555fdae6b"}},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.19.0","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.11","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"optionalDependencies":{"@duckdb/node-api":"1.5.5-r.5"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.12.4_1790666955483_0.24222014295173988","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"football-docs","version":"0.13.0","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","_id":"football-docs@0.13.0","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"homepage":"https://github.com/withqwerty/football-docs#readme","bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"bin":{"football-docs":"bin/serve.js"},"dist":{"shasum":"b1e51fd8df3a4051b4f00265fb34e0d0aa28de6c","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.13.0.tgz","fileCount":401,"integrity":"sha512-zqrZmr5TaoDcMxXLuT+QODZ1HvL/adJudtVOmYGzcWg3y/LEOZ60emJEqV3gAZgRLNgthS8j+/14mHdtt/VeQQ==","signatures":[{"sig":"MEYCIQDVhFYf2DDYkbbWLzuj4yjHaOLPCwKbExH9Xa7RpEA15gIhAPOGiwH/PPNj5ZwVtYbzf0jqj4Fi74qNoMHjqY5JzlWE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHxVd7XkhVNGZZV1iVbqXBaVkDpvKC0IloVZdKOF6OPyAiB/sC3EGor24mG4Y6DFCrZ83XWuF/j3JiAuWygQp9EWgg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/football-docs@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9722273},"type":"module","engines":{"node":">=20"},"gitHead":"6eaa8177c20b2d6a17872b257a6eb9fe4ff5f747","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","notion:truth":"python3 scripts/gen_notion_truth.py","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","check:upstream":"python3 scripts/check_upstream.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"2cc2b82e-d2da-4635-9e28-266555fdae6b"}},"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.19.0","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.11","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"optionalDependencies":{"@duckdb/node-api":"1.5.5-r.5"},"_npmOperationalInternal":{"tmp":"tmp/football-docs_0.13.0_1790670146233_0.7054130401451824","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"_id":"football-docs@0.14.0","bin":{"football-docs":"bin/serve.js"},"bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"dist":{"shasum":"1469d939d404157749bf49af7f7ddf543243f880","tarball":"https://registry.npmjs.org/football-docs/-/football-docs-0.14.0.tgz","fileCount":403,"integrity":"sha512-0cN9Xzl7yblRY/h4Xvn3IwGn7XEYTVW/EHVAeDLI7VvaqDCSTlrSHE1spi+gcw2CnaRuvMF3Lp0yhfCt7tegmQ==","signatures":[{"sig":"MEUCIFjL5f3tn3+5g90qB8gfkrsDY59cB8ppg0JW/ge8HLDUAiEAkGVBPT5DqanlKEkgafZsJsSF4chYfM+Ggo4b8cB/zpM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDGA14NQNG0qI8caoeFztNPrVez0exvppDsx04/0FUPfAIhAPcnaNNop6v9hVJMRMJ2VQF8wBAphAmwze2XFQxnRO0m"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/football-docs@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9728637},"name":"football-docs","type":"module","author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"engines":{"node":">=20"},"gitHead":"55a197b2c11591e527a4ad4724efb5397a526d1f","license":"MIT","mcpName":"io.github.withqwerty/football-docs","scripts":{"dev":"tsx src/index.ts","lint":"biome check src/","test":"vitest run","build":"tsc","check":"tsc --noEmit","crawl":"tsx src/crawl.ts","start":"node dist/index.js","ingest":"tsx src/ingest.ts","discover":"tsx src/crawl.ts --discover","lint:fix":"biome check --write src/","prebuild":"pnpm check","impect:truth":"tsx src/impect-truth.ts","notion:truth":"python3 scripts/gen_notion_truth.py","openapi:truth":"bash scripts/gen_all_openapi_truth.sh","postman:truth":"python3 scripts/gen_postman_truth.py","check:upstream":"python3 scripts/check_upstream.py","prepublishOnly":"pnpm build && pnpm ingest","provider:truth":"bash scripts/gen_all_truth.sh"},"version":"0.14.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"2cc2b82e-d2da-4635-9e28-266555fdae6b"}},"homepage":"https://github.com/withqwerty/football-docs#readme","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"_npmVersion":"11.19.0","description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","directories":{},"maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","linkedom":"^0.18.13","turndown":"^7.2.4","better-sqlite3":"^12.11.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0","@apidevtools/swagger-parser":"^12.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.4","devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.11","typescript":"^5.9.3","@types/node":"^22.20.1","@biomejs/biome":"^2.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"optionalDependencies":{"@duckdb/node-api":"1.5.5-r.5"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/football-docs_0.14.0_1790673176336_0.3770313629454174"}}},"time":{"created":"2026-03-25T19:02:37.660Z","modified":"2026-09-29T09:12:56.838Z","0.1.0":"2026-03-25T19:02:37.836Z","0.1.1":"2026-03-25T19:28:18.911Z","0.1.2":"2026-03-25T19:44:55.499Z","0.2.0":"2026-03-27T12:15:09.896Z","0.2.1":"2026-03-27T21:35:14.827Z","0.3.0":"2026-03-28T17:46:47.491Z","0.3.1":"2026-05-11T11:43:15.626Z","0.4.0":"2026-05-15T08:40:06.913Z","0.5.0":"2026-06-03T20:09:21.722Z","0.5.1":"2026-06-03T20:39:26.119Z","0.5.2":"2026-07-09T01:35:41.676Z","0.6.0":"2026-07-09T07:44:32.023Z","0.6.1":"2026-07-09T09:35:43.087Z","0.6.2":"2026-07-09T15:20:27.794Z","0.6.3":"2026-07-13T18:34:42.252Z","0.6.4":"2026-07-15T18:25:19.626Z","0.7.0":"2026-07-30T15:58:20.007Z","0.8.0":"2026-07-31T17:20:45.591Z","0.9.0":"2026-08-11T08:21:46.275Z","0.9.1":"2026-08-11T10:42:14.214Z","0.10.0":"2026-08-31T01:11:54.095Z","0.11.0":"2026-09-09T17:11:09.202Z","0.11.1":"2026-09-22T10:41:55.905Z","0.12.0":"2026-09-22T17:37:39.797Z","0.12.1":"2026-09-24T01:47:03.783Z","0.12.2":"2026-09-24T13:56:35.378Z","0.12.3":"2026-09-29T06:44:52.590Z","0.12.4":"2026-09-29T07:29:15.636Z","0.13.0":"2026-09-29T08:22:26.419Z","0.14.0":"2026-09-29T09:12:56.494Z"},"bugs":{"url":"https://github.com/withqwerty/football-docs/issues"},"author":{"url":"https://github.com/withqwerty","name":"withqwerty"},"license":"MIT","homepage":"https://github.com/withqwerty/football-docs#readme","keywords":["football","soccer","opta","statsbomb","wyscout","sportmonks","mcp","model-context-protocol","analytics","data"],"repository":{"url":"git+https://github.com/withqwerty/football-docs.git","type":"git"},"description":"Searchable football data provider documentation for AI coding agents. Like Context7 for football data.","maintainers":[{"name":"rahaluha","email":"rahulkeerthi2@gmail.com"}],"readme":"# football-docs\n\nSearchable football data provider and tooling documentation for AI coding agents. Like [Context7](https://context7.com) for football data.\n\n**Who it's for:** Developers and analysts who use AI coding tools (Claude Code, Cursor, VS Code Copilot) to work with football data. Works with any tool that supports MCP.\n\n**What it does:** Gives your AI agent a searchable index of documentation for 24 football data providers and tools — event types, qualifier IDs, coordinate systems, API endpoints, data models, identity surfaces, and cross-provider comparisons for the data providers (StatsBomb, Opta, Wyscout, Impect, SkillCorner, Sportradar, TheSportsDB, FMDB Pro, TransferRoom, and more), plus the open-source libraries people build with (kloppy, mplsoccer, socceraction, soccerdata, floodlight, fast-forward, unravelsports, and more). Your agent looks up the real docs instead of guessing from training data.\n\n**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.\n\n## Strategy\n\nfootball-docs is intended to be a community-owned, source-transparent Context7\nfor football data. The public operating contract is in\n[STRATEGY.md](STRATEGY.md): what belongs here, what must stay out, how we handle\npublic-safe provider facts, and how contributors should prove retrieval quality.\n\n## Provider identity facts\n\nfootball-docs is the public source for provider identity-surface facts: access\nshape, ID schemes, matching fields, provider quirks, and provenance rules.\nCurated provider identity notes belong here when they can be stated as public\nfacts about the provider. They should say whether a fact comes from public docs,\npublic page evidence, licensed feed shape, or a reviewed public-safe\nobservation, and must not include credentials, local paths, internal tooling\ndetails, or restricted payloads from any private project.\n\nMCP ([Model Context Protocol](https://modelcontextprotocol.io)) is a standard for connecting AI coding tools to external data sources.\n\n## Quick start\n\n### Claude Code\n\n```bash\nclaude mcp add football-docs -- npx -y football-docs\n```\n\n### Cursor\n\nSettings → MCP → Add server. Use this config:\n\n```json\n{\n  \"mcpServers\": {\n    \"football-docs\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"football-docs\"]\n    }\n  }\n}\n```\n\n### VS Code / Copilot\n\nAdd to `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"football-docs\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"football-docs\"]\n    }\n  }\n}\n```\n\n### Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"football-docs\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"football-docs\"]\n    }\n  }\n}\n```\n\n## Tools\n\n| Tool | Description |\n|------|-------------|\n| `search_docs` | Full-text search across all provider docs. Filter by provider. Results include provenance (source URL, version). |\n| `resolve_provider_id` | Resolve provider names and aliases to canonical indexed provider keys before searching. |\n| `get_provider_docs` | Retrieve docs for a resolved provider, optionally filtered by topic or category. |\n| `list_providers` | List all indexed providers and their doc coverage. |\n| `compare_providers` | Compare how different providers handle the same concept. |\n| `request_update` | Request a new provider, flag outdated docs, or suggest a better doc source. Queues locally and points to the matching public GitHub issue template. |\n| `resolve_entity` | Map a player, coach, referee, team, competition, season, stage or match to its IDs at every provider through the [Reep register](https://reep.football). Uses a local copy of the free register (`REEP_DUCKDB_PATH`), else the Reep API (`REEP_API_KEY`; keys are issued by hand on request to getintouch+nutmeg@withqwerty.com, with no self-service sign-up), else returns setup steps and a DuckDB query. See [Reep through football-docs](docs/reep/overview.md#using-reep-through-football-docs). |\n\nProvider filters use the indexed provider keys shown by `list_providers`, but common aliases are accepted. Examples: `fbref`, `understat`, `ClubElo`, `football-data.co.uk`, and `engsoccerdata` search `free-sources`; `Sofascore` searches `soccerdata`; `ESPN`, `ESPN FC`, and `espn-soccer` search `espn`; `FMDB` searches `fmdb-pro`; `Transfer Room` searches `transferroom`; `Hudl Wyscout` searches `wyscout`; `Stats Perform` / `Opta F24` / `WhoScored` search `opta`; `Metrica`, `Sportec` / `DFL`, and `TRACAB` search `databallpy`; `Second Spectrum` searches `kloppy`; `Hawk-Eye`, `SciSports`, `Signality`, `Respovision`, `GradientSports` and `OptaVision` search `fast-forward`; `unravel` searches `unravelsports`; `SportRadar API` / `Soccer Extended` search `sportradar`; `The Sports DB` / `TSDB` search `thesportsdb`; `StatsBomb Open Data` searches `statsbomb`.\n\n## How the index stays current\n\nThe package ships a docs index, but doc fixes do not wait for a new package\nversion. Once a day at most, the server checks the\n[`data-latest`](https://github.com/withqwerty/football-docs/releases/tag/data-latest)\nrelease of this repository for a newer index built from `main`:\n\n- It reads a small signed manifest (`manifest-v1-signed.json`) and, only when that\n  names a newer build, downloads the index (about 6 MB).\n- It accepts the manifest only if its ed25519 signature verifies against a public\n  key shipped in the package (`src/data-signing.ts`). The manifest carries the\n  index's size and SHA-256, so the signature covers the index too.\n- It checks the download's size and SHA-256, its SQLite integrity, its exact\n  schema and its metadata before using it, and keeps the one it had on any failure.\n- It stores downloads in `$XDG_DATA_HOME/football-docs/data/` (by default\n  `~/.local/share/football-docs/data/`). The next tool call uses the new file; no\n  restart is needed.\n- It runs in the background after start-up and never delays a tool call.\n  `list_providers` ends with the build time of the index in use and whether it is\n  bundled or downloaded.\n\nPrivacy: the check is one HTTPS request a day to GitHub, plus the download when\nthere is one. No search queries or other usage data are sent.\n\nSettings, as environment variables in the server's MCP configuration:\n\n- `FOOTBALL_DOCS_DATA=bundled`: use only the index inside the package. No network,\n  no downloads.\n- `FOOTBALL_DOCS_DATA=auto`: the default for an installed package. Check daily and\n  use the newest valid index.\n- `FOOTBALL_DOCS_DB_PATH=<file>`: use exactly this index file.\n- `FOOTBALL_DOCS_DATA_BASE_URL=<url>`: read the manifest and index from a mirror\n  (HTTPS only).\n\nOffline, or behind a proxy that Node's built-in `fetch` does not use, the check\nfails quietly and the server keeps the index it has. Under CI (`CI` set) the check\ndoes not run. A server running from a git checkout defaults to `bundled`, so\ndevelopment and tests always use the working tree's docs.\n\n## Example queries\n\n- \"What is Opta qualifier 76?\" (big chance)\n- \"How does StatsBomb represent shot events?\"\n- \"Compare Opta and Wyscout coordinate systems\"\n- \"What player ID fields does Transfermarkt expose?\"\n- \"Does SportMonks have xG data?\"\n- \"What event types does kloppy map to GenericEvent?\"\n- \"How does SPADL represent a tackle?\"\n\n## Indexed providers\n\n| Provider | Chunks | Categories |\n|----------|--------|------------|\n| fast-forward | 250 | overview, getting-started, data-model, coordinate-system, orientations, layouts, transformations, distributed-compute, api-reference, 12 provider format pages |\n| StatsBomb | 237 | event-types, data-model, coordinate-system, api-access, api-endpoints, charting-lineups, xg-model, iq-metrics, player/team stats, player-mapping, identity-surfaces, data-provenance |\n| unravelsports | 202 | overview, installation, quickstart, concepts, graph converters, pressing intensity, formation detection, models, utils, american-football |\n| Wyscout | 165 | event-types, data-model, coordinate-system, api-access, api-endpoints, charting-analysis-metrics, glossary, identity-surfaces, data-provenance |\n| kloppy | 126 | data-model, usage, provider-mapping, tracking-rendering, event-derived-metrics |\n| floodlight | 144 | core data objects, io parsers (Tracab, DFL, Kinexon, Opta, SkillCorner, StatsBomb, StatsPerform, Second Spectrum), transforms, metrics, models, visualisation, guides |\n| SportMonks | 567 | full v3 endpoint reference (fixtures, livescores, leagues, seasons, states, types, statistics, brackets), syntax and includes, filtering, rate limits, error codes, changelog, plus curated event-types, data-model, api-access, charting-season-stories, identity-surfaces, data-provenance |\n| databallpy | 63 | data-model, overview, usage |\n| mplsoccer | 65 | overview, pitch-types, visualizations |\n| Impect | 79 | overview, data-model, event-types, coordinate-system, concepts, kpi-definitions, identity-surfaces, data-provenance |\n| SkillCorner | 51 | api-access, api-endpoints, data-model, physical-data, coordinate-system, concepts, identity-surfaces, data-provenance |\n| Free sources | 60 | overview, fbref, understat, contextual-story-joins, xg-timelines, data-provenance |\n| soccerdata | 40 | overview, data-sources, usage |\n| TransferRoom | 45 | api-access, api-endpoints, charting-availability, data-model, identity-surfaces, data-provenance |\n| Opta | 73 | event-types, qualifiers, coordinate-system, api-access, charting-game-state, charting-lineups, charting-passmaps, charting-set-pieces, charting-shot-placement, identity-surfaces, data-provenance |\n| FMDB Pro | 37 | api-access, api-endpoints, data-model, identity-surfaces, data-provenance |\n| Sportradar | 481 | integration guide (API basics, coverage tiers, ID handling, match status, update frequencies, push, historical data), Soccer Extended v4 endpoint reference with data-point tables, FAQ, plus curated api-access, api-endpoints, data-model, charting-and-stories, integration-notes, data-provenance |\n| socceraction | 34 | SPADL format, VAEP, Expected Threat |\n| BeSoccer | 16 | api-access, api-endpoints, data-provenance |\n| Driblab | 32 | api-access, api-endpoints, data-model, data-provenance |\n| ESPN | 21 | api-access, scoreboard, match-summary, teams-and-standings, identity-and-coverage |\n| Reep | 29 | overview, identity-and-ids, download-duckdb-csv, api, data-provenance |\n| TheSportsDB | 20 | api-access, api-endpoints, livescore, identity-surfaces, data-provenance |\n| FotMob | 5 | identity-surfaces, data-provenance |\n| Soccerdonna | 5 | identity-surfaces, data-provenance |\n| Transfermarkt | 5 | identity-surfaces, data-provenance |\n\n**2,852 searchable chunks** across 26 providers and tools.\n\nESPN coverage consists of curated, dated observations of ESPN-hosted soccer\nendpoints, checked for eng.1 and esp.1. These observations are not an official API\ncontract or an open-data licence. See [ESPN access notes](docs/espn/api-access.md)\nfor source status and [coverage notes](docs/espn/identity-and-coverage.md) for the\ntested requests and limitations.\n\n> **Impect** documentation is built solely from the public\n> [ImpectAPI/open-data](https://github.com/ImpectAPI/open-data) repository — a\n> static Bundesliga 2023/24 snapshot, representative of Impect's structure and\n> metric definitions rather than a complete or current mirror. Impect's\n> commercial API is deliberately not documented here. Every enum value, KPI name\n> and field name in `docs/impect/` is validated against that repository in CI\n> (`pnpm impect:truth`, `src/__tests__/impect-open-data-validation.test.ts`).\n> Data source: **Impect**; use is subject to the repository's own Terms of Use.\n\n## Documentation validation\n\nDocs for AI agents are only useful if they are correct, and prose about an API is\nexactly the kind of thing that drifts or gets invented. Where a machine-readable\nsource of truth exists, this repo checks the docs against it in CI rather than\ntrusting them.\n\n| Providers | Ground truth | Checked by |\n|---|---|---|\n| kloppy, socceraction, soccerdata, mplsoccer, floodlight, databallpy, skillcorner, fast-forward, unravelsports | The installed package itself — enum members, importable symbols, class constants, `Literal` parameter vocabularies | `src/__tests__/provider-truth.test.ts` |\n| Wyscout, SkillCorner, FMDB Pro, Sportradar | The vendor's own publicly published OpenAPI spec — endpoint paths and methods | `src/__tests__/provider-truth.test.ts` |\n| BeSoccer | The vendor's published Postman collection — request vocabulary and parameters | `src/__tests__/provider-truth.test.ts` |\n| Driblab | The vendor's published API guide — endpoint paths and methods. Field and group names are not in CI: the guide disagrees with the live API on them, so the docs follow the live API, checked by hand on 2026-09-22 | `src/__tests__/provider-truth.test.ts` |\n| Impect | The public [open-data](https://github.com/ImpectAPI/open-data) repository | `src/__tests__/impect-open-data-validation.test.ts` |\n| Reep | The public OpenAPI spec (endpoint paths and methods), and one release's manifest and column schema (CSV table list, columns used in the SQL examples, licence and exclusions) | `src/__tests__/provider-truth.test.ts`, `src/__tests__/reep.test.ts` |\n\nESPN has a separate observation check in `src/__tests__/espn.test.ts`. It validates\ndocumented endpoint paths, field-table names and types, and source URLs against\n`data/espn-observations.json`. These are selected structural observations, not a\npublished specification. CI reads them offline and does not contact ESPN.\nRefresh manually with `python3 scripts/observe_espn.py --scheduled-date YYYYMMDD`,\nchoosing a future fixture date and using permitted access. The script stores no\nraw responses. Review the diff, update the docs and dates, then rebuild the index.\n\nReep's snapshots age weekly, as a new release is cut each week. Run\n`python3 scripts/check_reep_live.py` to check every download link and list what\nhas changed since the snapshots; the refresh steps are in [specs/README.md](specs/README.md#reep).\n\n`pnpm check:upstream` runs every upstream check in one report: pinned package\nversions against PyPI, npm and GitHub, each spec snapshot against its public URL,\nBeSoccer's and Driblab's truth regenerated from their Postman collection and Notion\npage, and the free-source and Reep live checks below. It runs by hand, never in CI, and\nlists what to review.\n\nFree sources have no spec, and they tend to fail quietly: a page still answers\n200 after the data has gone. Run `python3 scripts/check_free_sources_live.py` to\nrequest each access path documented in `docs/free-sources/` and check that the\nresponse still carries the data the doc describes. When a doc's access recipe\nchanges, change its check in the same commit.\n\nTruth files live in `data/provider-truth/` and are generated, not hand-written:\n\n```bash\npnpm provider:truth      # rebuild every package truth file (needs python3.11)\npnpm openapi:truth       # rebuild every spec-derived truth file\n```\n\nThe specs those derive from are snapshots of **publicly published, unauthenticated**\nvendor documentation. Source URLs, fetch dates and refresh instructions are in\n[`specs/README.md`](specs/README.md). Wyscout's v3 and v4 specifications merge into\none truth file, because its docs span both. The v2 legacy specification is no\nlonger mirrored: the docs describe v3 and v4, and no documented fact derives from\nthe legacy surface.\n\nEach package gets its own pinned venv — co-installing them makes pip silently\ndowngrade conflicting versions, which would produce truth that disagrees with the\ndocs. Bump a pin in `scripts/gen_all_truth.sh` and the matching `version` in\n`providers.json` together, then re-run and fix whatever the tests flag.\n\nA doc that names an enum member or importable symbol which does not exist in the\nreal package fails the build. `scripts/gen_openapi_truth.py` derives the same kind\nof facts from a vendor OpenAPI spec, for providers documented that way.\n\nNot every vocabulary is an enum. fast-forward's coordinate systems, orientations\nand layouts are lowercase strings on `Literal`-annotated parameters, so the truth\nfiles also record what each parameter accepts, and a doc writing\n`coordinates=\"statsbomb\"` fails the same way an invented enum member would.\n\n## Contributing\n\nContributions are welcome from everyone. There are three ways to help:\n\n1. **Open an issue** — [request a new provider](https://github.com/withqwerty/football-docs/issues/new/choose), [flag outdated docs](https://github.com/withqwerty/football-docs/issues/new/choose), or [suggest a better doc source](https://github.com/withqwerty/football-docs/issues/new/choose)\n2. **Use the `request_update` tool** — AI agents can flag outdated or missing docs directly via the MCP server, which queues requests locally and points to the matching public GitHub issue template\n3. **Open a PR** — fix errors, add new providers, or improve existing docs\n\n**You don't need to be an expert.** See **[CONTRIBUTING.md](CONTRIBUTING.md)** for the full guide.\n\n## For maintainers\n\n### Crawl pipeline\n\nProvider doc sources are tracked in `providers.json`. The crawl pipeline discovers the best doc source (llms.txt > ReadTheDocs > GitHub README) and writes markdown with provenance frontmatter.\n\nTwo registry fields narrow a crawl. `llms_indexes` lists llms.txt files that link to pages rather than contain them; the crawler follows those links (and nested indexes) to each page's markdown copy instead of running discovery. Sportradar uses it for its integration guide and Soccer Extended reference. `exclude_categories` skips whole pages, and `exclude_sections` drops named `##`/`###` sections from pages that are otherwise kept, for content INCLUSION.md keeps out, such as odds. Pages crawled through an index are not byte-for-byte copies: the crawler drops the OpenAPI definition ReadMe appends and SVG diagrams, cuts example payloads over 3 KB with a note, replaces a data-point table repeated from an earlier page with a line naming that page, and marks a split long section \"(continued)\". It adds no other text.\n\n```bash\nnpm run discover                        # probe sources without crawling\nnpm run crawl                           # crawl all providers with sources\nnpm run crawl -- --provider kloppy      # crawl one provider\nnpm run ingest                          # rebuild search index from docs/\nnpm run ingest -- --provider kloppy     # re-ingest one provider (incremental)\n```\n\nEach crawled doc carries provenance metadata (source URL, source type, upstream version, crawl timestamp) that is surfaced in search results, so agents can distinguish between curated content and upstream documentation.\n\n### How doc changes reach users\n\nA merge to `main` that touches `docs/` or `providers.json` runs\n`.github/workflows/data.yml`, which rebuilds the index, runs the tests against it,\nchecks that the **published** server can use it (`scripts/check-data-compat.mjs`),\nand publishes it to the `data-latest` release. Installed servers pick it up within\nabout a day, including servers that have been running for days (they check again\nevery six hours, at most once a day). Merging a doc PR is therefore also shipping it; there is no later step at\nwhich to stop it. To undo a bad doc change, revert it on `main`, which publishes a\nnewer build.\n\n**What the signature guarantees.** The publish job signs the manifest with a key\nheld only in the `data-publish` environment, whose deployment policy allows only\n`main`. A manifest that verifies was therefore produced by `data.yml` running on\n`main`. Replacing release assets by hand, or from a workflow on another branch,\ncannot produce one. It does **not** mean anyone reviewed the change: `main`\naccepts a PR with no approvals, so anyone who can merge to `main` can still ship\ndata. Requiring approvals on `main`, or required reviewers on the `data-publish`\nenvironment (which makes every doc publish wait for a person), would close that\ntoo.\n\n**Rotating the key:** generate a new ed25519 pair, add its public key to\n`TRUSTED_KEYS` in `src/data-signing.ts`, release, then replace the\n`DATA_SIGNING_KEY` environment secret and `DATA_SIGNING_PUBLIC_KEY` in `data.yml`.\nDrop the old key in a later release. A lost private key is handled the same way.\n\nThe index carries its own metadata (`meta` table, `src/data-format.ts`): a schema\nversion, the oldest server version that can read it, the build stamp and the\nprovider registry. Two rules follow:\n\n- **Changing the schema** (`SCHEMA_SQL`) needs `DATA_SCHEMA_VERSION` raised and an\n  npm release. Servers read only `manifest-v<their schema>.json`, so older servers\n  keep their last compatible data rather than breaking.\n- **Data that relies on new server code** (for example a new `providers.json` field\n  the tools must read) needs `MIN_SERVER_VERSION` raised, and that server released\n  first. Until then the compatibility check fails, and no installed server would\n  accept the build anyway.\n\nCode changes, including changes to `src/ingest.ts`, still ship only through a\nrelease.\n\n### Cutting a release\n\n**Pushing the tag is the release.** `.github/workflows/release.yml` runs on any\n`v*` tag and does the rest: it re-runs the full check suite, creates the GitHub\nRelease, and publishes to npm.\n\nBefore a release, run `pnpm check:upstream` (see \"Documentation validation\"). It\nreports any provider whose package, spec or live access path has moved since the\ndocs were written, so a release does not ship docs that are already stale. Fix or\nnote what it lists; a known, tracked failure (an open issue) need not block.\n\n```bash\n# 1. Bump the version in package.json and server.json (three fields in total).\n#    Land it on main through a pull request, as `chore: release vX.Y.Z`.\n#\n# 2. Tag the merge commit and push the tag.\ngit tag -a v0.11.0 -m \"v0.11.0\"\ngit push origin v0.11.0\n```\n\nRelease notes come from the body of the `chore: release vX.Y.Z` commit, so write\nthat message as the release notes you want readers to see. The workflow reads it\nfrom the second parent when the tag sits on a merge commit, strips the commit\ntrailers, and falls back to GitHub's generated notes if the body is empty.\n\nThree properties worth knowing, because each one exists to stop a specific\nfailure:\n\n- **The tag must match `package.json`.** A mismatch fails the job before\n  anything is created or published, so a version can never ship under another\n  version's name.\n- **The full suite runs again.** A tag can be pushed to any commit, including\n  one that never went through a pull request, so the release path cannot assume\n  CI already passed on that tree.\n- **Re-running is safe.** An existing Release is left alone and an\n  already-published version is skipped, so a failed job can simply be re-run.\n\n**There is no npm token in this repository.** Publishing uses npm\n[trusted publishing](https://docs.npmjs.com/trusted-publishers): the registry\nauthenticates the workflow itself over OIDC, against a trust configuration on the\npackage that names this repository and this workflow file. Publishing rights are\nbound to `release.yml` rather than to a secret that would work from anywhere it\nleaked to, and there is nothing to rotate.\n\nThat trust was configured once, with the npm CLI:\n\n```bash\nnpm trust github football-docs \\\n  --repo withqwerty/football-docs \\\n  --file release.yml \\\n  --allow-publish\n```\n\n`npm trust list football-docs` shows it; `npm trust revoke` removes it. **Renaming\n`release.yml`, or publishing from a different workflow, breaks the match** — by\ndesign. Re-point it with `npm trust github ... --file <new-name>` if the file\never moves.\n\nTrusted publishing generates [provenance](https://docs.npmjs.com/generating-provenance-statements)\nautomatically, so the tarball on npm is attested to this repository and this\nworkflow run without the workflow asking for it.\n\nTwo consequences worth knowing:\n\n- **The release job runs on Node 24.** Trusted publishing needs npm >= 11.5.1 and\n  Node 22 still ships npm 10. The whole job uses one Node version, because\n  switching mid-job would leave `better-sqlite3`'s native binding built for the\n  wrong ABI and `pnpm ingest` would fail on it. Node 24 is in the CI matrix for\n  the same reason: a release must not be the first time the suite meets it.\n- **The release job does not cache dependencies.** This is the tree that gets\n  published, so it is resolved fresh from the lockfile rather than rehydrated\n  from a cache that earlier runs could have poisoned.\n\nNote that `prepublishOnly` runs `pnpm build && pnpm ingest`, which rebuilds\n`data/docs.db`. Publishing by hand therefore leaves that file dirty in the\nworking tree; the content is unchanged, only SQLite's page layout differs, so\n`git checkout data/docs.db` clears it.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}