football-docs 0.2.0 → 0.2.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
@@ -2,7 +2,11 @@
2
2
 
3
3
  Searchable football data provider documentation for AI coding agents. Like [Context7](https://context7.com) for football data.
4
4
 
5
- An MCP server that gives your AI agent instant access to documentation for Opta, StatsBomb, Wyscout, SportMonks, socceraction, kloppy, soccerdata, mplsoccer, databallpy, and free sources (FBref, Understat, ClubElo). Search event types, qualifier IDs, coordinate systems, API endpoints, and cross-provider mappings.
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
+
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.
8
+
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.
6
10
 
7
11
  MCP ([Model Context Protocol](https://modelcontextprotocol.io)) is a standard for connecting AI coding tools to external data sources.
8
12
 
package/data/docs.db CHANGED
Binary file
package/dist/index.js CHANGED
@@ -79,7 +79,7 @@ server.tool("search_docs", "Search football data provider documentation. Use for
79
79
  .optional()
80
80
  .default(10)
81
81
  .describe("Maximum number of results to return (default 10)"),
82
- }, async ({ query, provider, max_results }) => {
82
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: false }, async ({ query, provider, max_results }) => {
83
83
  const db = openDb();
84
84
  try {
85
85
  const safeQuery = sanitiseFtsQuery(query);
@@ -131,7 +131,7 @@ server.tool("search_docs", "Search football data provider documentation. Use for
131
131
  }
132
132
  });
133
133
  // Tool: list_providers
134
- server.tool("list_providers", "List all indexed football data providers, their document count, and coverage categories. Use to understand what documentation is available.", {}, async () => {
134
+ server.tool("list_providers", "List all indexed football data providers, their document count, and coverage categories. Use to understand what documentation is available. Call this first to see what providers are indexed before searching.", {}, { readOnlyHint: true, destructiveHint: false, openWorldHint: false }, async () => {
135
135
  const db = openDb();
136
136
  try {
137
137
  const rows = db
@@ -167,7 +167,7 @@ server.tool("list_providers", "List all indexed football data providers, their d
167
167
  server.tool("compare_providers", "Compare what two or more providers offer for a specific data type or concept. For example: 'How do Opta and StatsBomb represent shot events differently?'", {
168
168
  topic: z.string().describe("The concept to compare across providers. Examples: 'shot events', 'coordinate systems', 'xG', 'pass types'"),
169
169
  providers: z.array(z.string()).optional().describe("Providers to compare. If omitted, compares all indexed providers."),
170
- }, async ({ topic, providers }) => {
170
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: false }, async ({ topic, providers }) => {
171
171
  const db = openDb();
172
172
  try {
173
173
  const safeTopic = sanitiseFtsQuery(topic);
@@ -225,7 +225,7 @@ server.tool("request_update", "Request that a provider's documentation be added,
225
225
  provider: z.string().max(100).describe("Provider name (existing or proposed). Examples: 'statsbomb', 'mplsoccer', 'floodlight'"),
226
226
  reason: z.string().max(2000).describe("Why this update is needed. Be specific: version bump, missing event types, new API endpoints, etc."),
227
227
  suggested_urls: z.array(z.string().url().max(500)).max(10).optional().describe("URLs for documentation sources (readthedocs, GitHub, llms.txt, etc.)"),
228
- }, async ({ type, provider, reason, suggested_urls }) => {
228
+ }, { readOnlyHint: false, destructiveHint: false, openWorldHint: false }, async ({ type, provider, reason, suggested_urls }) => {
229
229
  const qdb = openQueueDb();
230
230
  try {
231
231
  // Hard cap on queue size
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "football-docs",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Searchable football data provider documentation for AI coding agents. Like Context7 for football data.",
5
5
  "type": "module",
6
+ "mcpName": "io.github.withqwerty/football-docs",
6
7
  "bin": {
7
8
  "football-docs": "bin/serve.js"
8
9
  },