{"service":"Tigzig Database MCP","description":"Read-only SQL over Postgres (ODI cricket) and DuckDB (T20 cricket), ~1M ball-by-ball records each. Exposed as MCP tools and a REST API.","tables":{"postgres":{"table":"odi_cricket_ball_by_ball","contents":"ODI cricket ball-by-ball, ~1M rows, 2013 onward"},"duckdb":{"table":"ball_by_ball","contents":"T20 cricket ball-by-ball, ~1M rows, 2013 onward"},"columns_both_tables":["match_id","season","start_date","venue","innings","ball","batting_team","bowling_team","striker","non_striker","bowler","runs_off_bat","extras","wides","noballs","byes","legbyes","penalty","wicket_type","player_dismissed","other_wicket_type","other_player_dismissed","match_type"]},"mcp":{"url":"https://db-mcp.tigzig.com/mcp","transport":"streamable-http","how_to_use":"Add as a custom connector in Claude.ai (Settings > Connectors), ChatGPT, Cursor, LM Studio or n8n."},"rest":{"base_url":"https://db-mcp.tigzig.com/v1","swagger":"https://db-mcp.tigzig.com/v1/docs","openapi":"https://db-mcp.tigzig.com/v1/openapi.json","get_variant":"GET /v1/query/{postgres|duckdb}?sql=<url-encoded SQL> also works (fetch-only clients); POST preferred","endpoints":[{"path":"/health","methods":["GET"],"summary":"Returns service status, version, and connectivity to both databases."},{"path":"/v1/query/duckdb","methods":["POST"],"summary":"Execute a read-only SQL query against the DuckDB database. Contains ~1M rows of T20 (Twenty20) cricket ball-by-ball data from 2013 onwards. Table: ball_by_ball."},{"path":"/v1/query/duckdb","methods":["GET"],"summary":"GET variant for fetch-only clients (browsers, crawler-style agents, no-code HTTP nodes that cannot send a POST body). Same engine, same read-only SQL validation"},{"path":"/v1/query/postgres","methods":["POST"],"summary":"Execute a read-only SQL query against the Supabase Postgres database. Contains ~1M rows of ODI (One Day International) cricket ball-by-ball data from 2013 onwar"},{"path":"/v1/query/postgres","methods":["GET"],"summary":"GET variant for fetch-only clients (browsers, crawler-style agents, no-code HTTP nodes that cannot send a POST body). Same engine, same read-only SQL validation"}],"example":"curl -X POST \"https://db-mcp.tigzig.com/v1/query/duckdb\" -H \"Content-Type: application/json\" -d '{\"sql\": \"SELECT COUNT(*) AS balls FROM ball_by_ball\", \"format\": \"json\"}'"},"limits":{"response_headers":"Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix epoch seconds) for your per-IP budget. On 429, Retry-After is set. Read these at runtime instead of hard-coding numbers.","max_concurrent_per_ip":4,"guidance":"This is a read-only SQL endpoint over ~1M-row tables. Aggregate or LIMIT server-side in the SQL rather than paginating many small queries - one GROUP BY costs a single request where pagination costs dozens.","per_ip":"30 requests per minute per IP","per_ip_amount":30,"per_ip_window_seconds":60},"v":"1.0.0","catalog":"https://api.tigzig.com/.well-known/api-catalog","health":"https://db-mcp.tigzig.com/health","help":{"openapi":"https://db-mcp.tigzig.com/v1/openapi.json","docs":"https://db-mcp.tigzig.com/v1/docs","catalog":"https://api.tigzig.com/.well-known/api-catalog"}}