{"_id":"cito-mcp","_rev":"38-5e4b7b04e33f93d9762db3784a900091","name":"cito-mcp","dist-tags":{"latest":"0.4.7"},"versions":{"0.1.0":{"name":"cito-mcp","version":"0.1.0","_id":"cito-mcp@0.1.0","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"80d7136b6fef08b57e46735c29e1a72412aa28fb","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.1.0.tgz","fileCount":6,"integrity":"sha512-l9GfmOYo42ZJtSVRlt63hIi9YKYlzDT079y+PfQx76zeNb/3nSGNu/YJSelU6+WH1UkgHsFVaHBEIELglhzSQg==","signatures":[{"sig":"MEUCIHX4atEBn/sf8tBNK+NNfkKWy6ouIwsiPBjoX3zblqQxAiEA8d/ihQKgpdpUt8T9CbuXgY6B7uUyaPpM6nlWYRUIwss=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37401},"type":"module","engines":{"node":">=20"},"gitHead":"687169bf58dc453360ce87dc476f739a1ba3e39f","scripts":{"test":"tsx --test src/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.15.0","description":"Standalone MCP server for the Cito esports API — tools generated from the live OpenAPI spec, zero per-endpoint code.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.1.0_1784920344218_0.8956367285893545","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"cito-mcp","version":"0.2.1","_id":"cito-mcp@0.2.1","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"9d14a9c8909aad9b31c60636a2429359422ad0dc","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.2.1.tgz","fileCount":17,"integrity":"sha512-HBMdcdLhyYuH4Iiapn8/KKj7smnb3P/NxiRXuak2w/W1hTOesUs74BdGh69PPWjvOJp1EBHknnSrJ2+rWpCoaA==","signatures":[{"sig":"MEQCICOyRR7+KZFpbN89WCMXsg8JpTtbFZyg7e9I6xZF6MlJAiBS19yOSwJ+jzMZGj7/0z/aM0lVpnYCy0Zg5e1k4aD6oQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239894},"type":"module","engines":{"node":">=20"},"gitHead":"879d8f8db0d1ee152fb640460f3dae6ecb947f15","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.15.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.2.1_1785185106805_0.9011095974749206","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"cito-mcp","version":"0.2.2","_id":"cito-mcp@0.2.2","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"5d1963a154825a150356f00adc76c95a397a1c34","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.2.2.tgz","fileCount":17,"integrity":"sha512-3ISr6CRoM3sgbUMNcd9up9040k9C3Jz36kCyADTkUZivcbyfpQd3yUYlvOFNaIVJBcu5x0NN9T6Bij30Z8hZew==","signatures":[{"sig":"MEUCIQDJT/ITY8+U2ML0m9UQmOZfWqUc7B69PWgfhVzjZos/tAIgbcxBKccjU3MDH37+XS6KZmZr1njYXcAzTlQxa6s6z00=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247615},"type":"module","engines":{"node":">=20"},"gitHead":"879d8f8db0d1ee152fb640460f3dae6ecb947f15","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.15.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.2.2_1785190138649_0.8583198970488006","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"cito-mcp","version":"0.2.3","_id":"cito-mcp@0.2.3","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"1ab40829fe869302cc2e411e1d4c7bcffc42c71c","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.2.3.tgz","fileCount":17,"integrity":"sha512-NMzkImVgKbpWne7HatvUBwbrqcHDzKfojHmQCQZfvqx5IiPcTL1gtX1caTpDS3n/mzADX/0jn1Ova/mqi2kgTQ==","signatures":[{"sig":"MEUCIBMNK0wDnzgVQTsC3amJwakwXj5ZVOwVukIsY1VQ8PxbAiEAsXuuENtUAd5d/MgAhnrTDPiCCUvzcgbt0V1vaa+JUjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258233},"type":"module","engines":{"node":">=20"},"gitHead":"879d8f8db0d1ee152fb640460f3dae6ecb947f15","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.15.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.2.3_1785190493848_0.0330073794014516","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"cito-mcp","version":"0.2.4","_id":"cito-mcp@0.2.4","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"e88b17293c5cb1b6ca3f2276dbc4c8d6ddfa4fbd","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.2.4.tgz","fileCount":17,"integrity":"sha512-azxx68fO4eeETW+RdlwyG0ts1BkSE2wojZpYz4mIDEizUO0mfaeC0nlSFzj+siYI6ibVa1sqVwPTmTCoyAg0gQ==","signatures":[{"sig":"MEUCIByAslXXBsZmfOKKm6Vz/0s8TYiRWrJ/m7VDLqJssYzwAiEAihqqfswNTVh0LDP0GwSq94x/GcSMVyLAQV3yibxENfE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272445},"type":"module","engines":{"node":">=20"},"gitHead":"879d8f8db0d1ee152fb640460f3dae6ecb947f15","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.15.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.2.4_1785190872725_0.9056039129347979","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"cito-mcp","version":"0.2.5","_id":"cito-mcp@0.2.5","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"048ab9c33ca7d01fb36b56fdb993ace06d9a6499","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.2.5.tgz","fileCount":18,"integrity":"sha512-2+VvtY0NvId9lnJpEnzmd8EwymgU9jhpLBZ64Zrj72efFzqDpGI9w2nCsL5A07vwHqMikxjPJLBRWr8EuLIU6g==","signatures":[{"sig":"MEQCIFu6cF+nSciY1faNeNA4EQfTVngmlkyMDiCVCA6/uTMBAiBbOiVbf6zQjEoacLhbX3mnHS7Htdr5Bsn9qFmVNCmsFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295232},"type":"module","engines":{"node":">=20"},"gitHead":"4353fe2abece863f21527e734c2c7e6d3b4a9e9e","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.2.5_1786923715582_0.30641462116738016","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"cito-mcp","version":"0.2.6","_id":"cito-mcp@0.2.6","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"85e95877dd400c0af4e677f61585c61ae3f2b163","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.2.6.tgz","fileCount":18,"integrity":"sha512-n5yQKMVLnCmAI6qp6Qrwn8L4I2bNcXXXH+LlVPWy7OqdNAmDPyI+BcuyAL5baasHo0ziBJUG8LXVnEdM5toBWw==","signatures":[{"sig":"MEYCIQDXpA2HhBPUxsEqlNsDqAgQPkQXea8jCMBWFlm5lNDSCgIhANDRyJrACudg94VNtwb3BBXpiqL4wsSRzPi5hVaCrfN0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":322584},"type":"module","engines":{"node":">=20"},"gitHead":"1fbf55e1808b16b0bc439003d67d320879846372","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.2.6_1787011418442_0.18759169154466782","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"cito-mcp","version":"0.2.7","_id":"cito-mcp@0.2.7","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"574a0c8695e937a6a7db9f58cc1757021212fde2","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.2.7.tgz","fileCount":19,"integrity":"sha512-jy+45OuDdJUPfcUmno58yg+btlkk9vA139zquTa9QFv1trBKyNthr2myxk3Dl3yT2HjCucnAfNoi0Loxp2TMfg==","signatures":[{"sig":"MEUCIQDpn18m72VGAgCdRo+Om8SPC8U335nqJcMXB2mUTFrJLwIgd6fnaSYTxBRRvXBDu8cW9xJ4geoOr7VnxLwd4+58sC0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336872},"type":"module","engines":{"node":">=20"},"gitHead":"cd6cf49f72a35c8072f1c0b1695b037eae765904","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.2.7_1787011972346_0.14831194693744076","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"cito-mcp","version":"0.3.0","_id":"cito-mcp@0.3.0","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"c12fbeed1b51a67c9e3d8c88282022e5857a601f","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.0.tgz","fileCount":20,"integrity":"sha512-Sv1XE0zBQtipD4ldQFacgjHbAi7KsEXoOQ8ANOwSEBsB36PL9f8GQ1w71emEdLEclqmbqybuH8K4TOOAvpsuNg==","signatures":[{"sig":"MEYCIQCquT2GboEL5uAy2gt2M18CG4hwgSJsDHC94hqxtNRFzwIhAOPvUI7CRsneqZ2Wy+HmEDdKGUpJb+6lD2LwbT/khWUV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":358429},"type":"module","engines":{"node":">=20"},"gitHead":"b08bc367aebee8f3e5b8303390b1b8777f76b4e9","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.0_1788118881649_0.2845307371259729","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"cito-mcp","version":"0.3.1","_id":"cito-mcp@0.3.1","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"40cb59e10818425bbc40c7ced2d12612561e99dd","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.1.tgz","fileCount":20,"integrity":"sha512-CD6y7PmBJ1iiz64w8tHbiQefYvxN3/jXkpULMe706MgX3tD1gnU/PDbQewQAoC2/Bujh54NXV7OYn8JkNtDJRQ==","signatures":[{"sig":"MEUCIQDwnKmLuHsVncTMjO7wZAq3gG0nyqpo9z7wB0oS9dJp0gIgPOCyuWS/8z8aqBvj+DHty3IWBpGS8ILeLR0mcFS347A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":359972},"type":"module","engines":{"node":">=20"},"gitHead":"8a4083993be32794b2e9821fd56028c8df8800bd","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.1_1788125331191_0.3739804914869733","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"cito-mcp","version":"0.3.2","_id":"cito-mcp@0.3.2","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"317daf5dd9f152051e6dea6acffcdbcff5492eb4","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.2.tgz","fileCount":20,"integrity":"sha512-EQJ6yKgPhrrSN7KJhWeAqQ+8j5ZSVnsuId9c3Ee1CLS8FWLpCIpzPN8Y3+qt5PvjqBKdviqhll+evZtazyJXDA==","signatures":[{"sig":"MEYCIQDZQAU/ZutyVDYhrwiR9HKeH15gvtmB5AM7QtJmWskK4AIhANw/qyT/wB3XBodcX1waVgeBl7W1daekaTDFCzY+8Noy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":361469},"type":"module","engines":{"node":">=20"},"gitHead":"488453a9645d3c507c84467bbb83d7efc6818677","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.2_1788126057627_0.12265177322812693","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"cito-mcp","version":"0.3.3","_id":"cito-mcp@0.3.3","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"c5e6b06ffc75332245e8c05e3e3250e9263dd0ef","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.3.tgz","fileCount":20,"integrity":"sha512-88aJACHGGIom/nXt6LiJubBxIEACX7tQnd71ngzsjRDjyunO8+NEM7X0Untp5yCctCHyZCb0Tu3lVwHTfsloBA==","signatures":[{"sig":"MEUCIGd3ruo+IZlY5s7ahTM/EyKy0QcYmMCaULhTkRDex67kAiEAwr5pIe57nwpE+GA3pDwPLwX5UlTW4EXPlyIi8xl35Eo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362231},"type":"module","engines":{"node":">=20"},"gitHead":"15e5c1b0e09d628dd5ae331519f973594cf5ebd1","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.3_1788126698716_0.5413741866859532","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"cito-mcp","version":"0.3.4","_id":"cito-mcp@0.3.4","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"a9909f75ec14e4c5e5b86b5a26e0b336e83b6470","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.4.tgz","fileCount":20,"integrity":"sha512-bcUnCRwkSfNHWMD/UdrXQ5ykmEGvgn6bqD30a/JyebpyZWE0DIwYvaZKDk9/Zsek8z8F9KDBu0UeNwa1w0QSbQ==","signatures":[{"sig":"MEUCIQClduhbREXRufR7xo1sHHemZN/3xikn+3ff9avgL5Z6gAIgWjDIm451XFYcA6ltnicJ8ocr6iG9Fd92jn+fhXLmYtQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":363367},"type":"module","engines":{"node":">=20"},"gitHead":"de9a3e3be6bc97d2ef2456f823f7af53e895cceb","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.4_1788127411365_0.8914725189063584","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"cito-mcp","version":"0.3.5","_id":"cito-mcp@0.3.5","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"a672de3d1b557b807e60860034d047db323c4ead","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.5.tgz","fileCount":20,"integrity":"sha512-6SZxgCf9iy/qf2fj4103Km4iG+ntSSVdm46gZQjiOxQKtV3NUxQx/Hm/1DL9cbF3B9kCqdYdc1l493AtunFj3g==","signatures":[{"sig":"MEQCIFHZNy31sBVqT2Q/d4gvJ9B7jwa31CIDJ1LePGnGaEHxAiBHXVjrRapEKgbpt/46Ss+brX775flFwdi2+nUz/quPvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":364241},"type":"module","engines":{"node":">=20"},"gitHead":"92bcf00d65c6de8f4619b27b523d61d17c7c0a62","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.5_1788127945598_0.06214288179202865","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"cito-mcp","version":"0.3.6","_id":"cito-mcp@0.3.6","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"1de679f175e5f3bcdf5493ead04f8b84b557c19a","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.6.tgz","fileCount":20,"integrity":"sha512-NcZW0nh5t7enJ4JFeQ7NgSqZPhcGq4Rj+St1GeOj2ZusxV7ECcb7UHAh60p6QwcMc++4xkF91MTuqEXRNUF8Pw==","signatures":[{"sig":"MEUCIQDY0HMXK86f5ihr0ZMzbMxTwsVhstrvzpFgfTO2GJxiOwIgdTaj6aNECkJU7lxeFOKY7yUNjpVyTgwW4640sBLyIYM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":374036},"type":"module","engines":{"node":">=20"},"gitHead":"1ddf7a38ec9341be0b2458c7b04cfb9f57ab4dbd","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.6_1788386463791_0.007629271652397573","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"cito-mcp","version":"0.3.7","_id":"cito-mcp@0.3.7","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"6fab79899404ee67af66bf1f585832694163c47e","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.7.tgz","fileCount":20,"integrity":"sha512-/N2JD9zn3ILt4kAW9vjJDul5UzNQUy6er+jYAt6kRRGd+No/hP+IBTDAU278xsg4NfB3BXi1Eo8Rd5cUpwabnA==","signatures":[{"sig":"MEUCIBUsMUgGyl/2BF3zOplX5thqRUVDytax8hvSFkJmvOGBAiEArTK0KCov35nqF21xUQp9Fo3ASo11DCRlYr9VUQzNoxA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375119},"type":"module","engines":{"node":">=20"},"gitHead":"0deb2b25368a5c0a6b96673112f17b9979fb5d87","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.7_1788391124745_0.08119713041855703","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"cito-mcp","version":"0.3.8","_id":"cito-mcp@0.3.8","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"cb7cc95c92db0158e9b4d982aa916e54575d4ee0","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.8.tgz","fileCount":20,"integrity":"sha512-smWpemvlJ0IPqrJ7KUVYX3bQDC+byppk7cBcpbVoJhXAluceqlvePAiyjNWT6nU+lCfz/IyegT4aFyfGbpzgfQ==","signatures":[{"sig":"MEQCIGl++izJYz/uKAnA+6QIdIyE3GvZ6yiYZTQuL5CG6bIfAiAOgw6dBL8+c3+leKRMmZRhvX1OIUZh1fGw3uw0j5fR3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375134},"type":"module","engines":{"node":">=20"},"gitHead":"7479dc7f6288cb694a0c46d9af059a25d9eac648","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.8_1788395305454_0.23307453645350606","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"cito-mcp","version":"0.3.9","_id":"cito-mcp@0.3.9","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"559103402cb4262b79720fb60e41d2bc83885b07","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.9.tgz","fileCount":20,"integrity":"sha512-oxBQdMNqgylukUUdxp4ymKcOqylRN+xmqlptyUOU21lXHp/8imIuKFRMXXHcjC9lei36p+xEx1NQqEJK4IVQ0w==","signatures":[{"sig":"MEUCIQD/iuNc25yVhfBB1Hw0Vd+5dWCbLWKpNz7euZHq8wblCgIgbjkqWbqZgf0krU7AJHmGO05fJvSpqgrFwA+5Itjkvbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":383391},"type":"module","engines":{"node":">=20"},"gitHead":"91b4f760dc5cb7ffb6acff67df5c24af2efa6ca2","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.9_1788396514212_0.3979132951808908","host":"s3://npm-registry-packages-npm-production"}},"0.3.10":{"name":"cito-mcp","version":"0.3.10","_id":"cito-mcp@0.3.10","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"483eeed4143e4e15cd12e92b51c683cafd02f100","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.10.tgz","fileCount":20,"integrity":"sha512-gjJAhqOX9oC47l0+Hb71ibBXJ6cYybzwnup+/qlDK8esqQzGXwCVINp0Mv8a81fjNg6sBzYxrTe/zyhS60H09g==","signatures":[{"sig":"MEUCIQDO+K+RJYFA4L9OtyUun46cnu3sljyfHYW2xT9ZmR8+RQIgQfHAo369R3MVyCORE+9upPGw+KO0rPgpyNB8M0U0HrI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":383392},"type":"module","engines":{"node":">=20"},"gitHead":"dbfc32242a63ee5ecd519c323f71f36982d13c79","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.10_1788398300834_0.06755211711463494","host":"s3://npm-registry-packages-npm-production"}},"0.3.11":{"name":"cito-mcp","version":"0.3.11","_id":"cito-mcp@0.3.11","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"357478cb5bf0c41672cb8fafb8c18687122178ee","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.11.tgz","fileCount":20,"integrity":"sha512-HSc7ltmV+GEu5o31rlEHq55jkZoEpj5FWU8ffRNRj7Jo69GE5lWINqT5CQvkuj8BKlndjbizu146Yq5OLFRl7A==","signatures":[{"sig":"MEQCIBExIaMruK6PD9KrjJbQcrvfmgD3OLw6Jz1KYbsRZcQyAiBk2sViR96qNJQcNQRr2bqBdAC3BWaBfFnKlNwfDzBxXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":386944},"type":"module","engines":{"node":">=20"},"gitHead":"17f9f80cc75f4c5a12bb1552c3cf0d8fe323fa55","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.11_1788401831117_0.3828808609238874","host":"s3://npm-registry-packages-npm-production"}},"0.3.12":{"name":"cito-mcp","version":"0.3.12","_id":"cito-mcp@0.3.12","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"ca018f9aff0479885aef39ea10c37e4e78285767","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.12.tgz","fileCount":20,"integrity":"sha512-khrtnju8cB6ceIcFCsDBrGfpz87Hs005gjbUMJvdMIPyhlUUzQs2YpfDrVgou4d2oYUFjBFj1d4GwkCdUn1XWQ==","signatures":[{"sig":"MEUCIEie9/D+dXg75TtIfVDyiEs5/YPEFUt4AOfeEjUyXi2ZAiEAipM3wfw1VlVxzgjsVWV5jIic+niZrFdH4eHI/0yP2ZE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDUvyqBPLIiMu9By/noNn+PkOFz0J6ovf15xR13i/qBiAIhAIHsFFI/FvhOGFEJr6w3NOuVnQF9YCtk+ZL6Cxd8UoO2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":393638},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.12_1788476184254_0.870997503381636","host":"s3://npm-registry-packages-npm-production"}},"0.3.13":{"name":"cito-mcp","version":"0.3.13","_id":"cito-mcp@0.3.13","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"3892864b3e160bba79bd2fb58d5fa71cb2a212c1","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.13.tgz","fileCount":20,"integrity":"sha512-eMF80NYnF69pSZjgJngn+wCPfN3b7o1bxJj3qXK9Bmwe4tIkxnQZozy+vfaegJUFaX08b7OMnChmghZU5+HNQw==","signatures":[{"sig":"MEQCIBG9aA0BvAWSzc6K9y9CLzk9dttCHOi1vh2c89LqQT7VAiBrp1jkwmKLluSux0so/Cou59BT9TRV2M6r6vKSnQ20tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIF18x19jpKCpuaX+JM0JmKVi3Cq2He+cK3DxzaYdzF73AiEA7O6sGkxtKJ57L+syLseIDQxfkNjmu+adQSnMSH5ZDkg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":402111},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.13_1788478709734_0.6211123259047773","host":"s3://npm-registry-packages-npm-production"}},"0.3.14":{"name":"cito-mcp","version":"0.3.14","_id":"cito-mcp@0.3.14","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"8ce7d9510332e0e130608da56dc0e15d48896874","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.14.tgz","fileCount":20,"integrity":"sha512-O+XhcfAhwdfHObcTA7wzVfMyGum6TRfKbyvURxGLlvlRByGtm47Kbk21wnf3cSjQljva5PAoicrCKIPRFa5vfg==","signatures":[{"sig":"MEYCIQCFM00Yohfhu+QRKpgAf5CsXy1r9Z4n4g/Dmk5Mr0iBsQIhANpZ9Lm4nowGm4u5JgzJ8z9BizB508piGUwqiF/agS2T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD/VJOTrf59yl/5v9XZF6G5NwtRiGX+XWnSv0LaFyEcggIhAO6yneDR9aiFs/XRQSDZSuVS63L+IOQqcK7owhUsxTsL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407848},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.14_1788480160692_0.919560873167075","host":"s3://npm-registry-packages-npm-production"}},"0.3.15":{"name":"cito-mcp","version":"0.3.15","_id":"cito-mcp@0.3.15","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"6be0422e5c9eb6969ea6a59fcc34c493f71937e2","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.15.tgz","fileCount":20,"integrity":"sha512-3llrSaMUlhDdm6k/VGM+zJUwid/Lrjdaq3HDewgKh71jdZp4C+Z6sHPfO3MwktDovYa1zodaWgRUpk5n3XiMrg==","signatures":[{"sig":"MEUCIDt+4XP3GQOW+jva+L7ku2moxUW1d3oG+SiuFS7o5H5AAiEAnguw/VY2HDdcJg48uCIhsoElUpZ2mz+TBCdjoRsazIg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIF019N0HrZRN9IutX/iv+tLbE9amk2l3gDu/aZDgy35nAiBgrODrmxLwODexp1cI2nNisfqoCFd1KX9SzhV6lDONYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":418400},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.15_1788487786312_0.24371222567635464","host":"s3://npm-registry-packages-npm-production"}},"0.3.16":{"name":"cito-mcp","version":"0.3.16","_id":"cito-mcp@0.3.16","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"e9c952d9a7cdc15f64e3c26450a042dbd696b5d5","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.16.tgz","fileCount":20,"integrity":"sha512-793P3RNupQYdsroWL0Kq0TssDZAPlDOeB1MQeITTVnJIXC430BCNSKW1489ViWM/kk/TaEGmrL0GhrAtHd70Cg==","signatures":[{"sig":"MEQCIF+uxMbUQsTvtL9iPilYEl360lmvgb7BCPhJtDTAcxsuAiBDWpqvqM+zYva9ILhOtmBpAtL8gxVE0AZoTnj/Eatg3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDjHXy466g3Lihd7C2Ud5pwsBRW7Qf7plGWdHGaBuWUKAIgJbNBi0lOJwF2dvspOuvNCZ4cMwwxHA5qXmO/tYpQQXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":418662},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.16_1788562403177_0.573128297775914","host":"s3://npm-registry-packages-npm-production"}},"0.3.17":{"name":"cito-mcp","version":"0.3.17","_id":"cito-mcp@0.3.17","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"9c0eef671db034367701c846463654ddab97a3d0","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.17.tgz","fileCount":20,"integrity":"sha512-9EjSjA6YM10iU7Eu9pjnJCUDEwbGLjREtkqmACu926Q4LekROvyn5X7eE15Yfs8NJQxkPsFchLEtGnP4m+SGjg==","signatures":[{"sig":"MEYCIQDEhAEBPrR/HFF0OXcNM7JRdf1Bu5tANKJSLFYiWQjgxAIhAIU9SMTtDIdW/m4YT/+KjXBN139NeVBZqnxiFunkZSpi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE46O7MxwMtf1+1iwATKJ3/vJ01pm04Eohv1UNmV5LXOAiEAmv77O2tKYLDmDCl9CrSUnG/8gAbIvLAd9qgWo09zYvg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":431209},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.17_1788618021939_0.6954779448798076","host":"s3://npm-registry-packages-npm-production"}},"0.3.18":{"name":"cito-mcp","version":"0.3.18","_id":"cito-mcp@0.3.18","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"2e1eb429ccb3d362b5b0c5e6317c34546d9e03f2","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.18.tgz","fileCount":20,"integrity":"sha512-GC1eFJkpbYW+a0Fr9E6fy0TAQsXs5DXkWqjkAUqmwdRt6SRv0pJmr3MzWyK0Tuz+V9FV8x559UXav/Kf/URJyg==","signatures":[{"sig":"MEUCIDYbFqms0105ncXerpV9HnjR8QmUb9wZ6IcKBGAnAlBzAiEApNrRgfum1ppiamIvNAw5HnYBLMvYdMkyy1N+guYOcSY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDwXPfCiPfDy5xVuDpWGZBmYxQDP3ayXqwve19h+BWqjAiEAwpWOPo7BV197xnbsFWDrEef6yiff68aShRQr1mhbePg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":434482},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.18_1788658564264_0.29442473835102256","host":"s3://npm-registry-packages-npm-production"}},"0.3.19":{"name":"cito-mcp","version":"0.3.19","_id":"cito-mcp@0.3.19","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"434addec287a68fc943d3ecc7970bc501c69857c","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.19.tgz","fileCount":20,"integrity":"sha512-tzmdgu7SkGjvcbicqI3Hz1f5yB0mc1MyKlOadgO46aC+O1H7NxuLbRU0rycZC2wChKgOENrMreBZl9cLrARhaw==","signatures":[{"sig":"MEUCIQCWozellXfXA3mlmNgbmNNr56uUWvgemBZpvsRwoKnRmQIgWL8u6TSdl9BT8e4gAJ4tB6BG0TYeWpPNIZHIAOZYb3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGq/hR82Lt4cmAKitWV6eQMFmKIGSbR5p6L+7pBJgKDIAiBLGpxvOBJt3mk8ecef9RyArieEsekLZ30iIQTPPf/Wag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":435630},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports API — 15 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.19_1788668569538_0.3841128045532618","host":"s3://npm-registry-packages-npm-production"}},"0.3.20":{"name":"cito-mcp","version":"0.3.20","_id":"cito-mcp@0.3.20","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"4ea6c1f1a535ef7e11d9f4036812b86fcf2d3bdf","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.20.tgz","fileCount":21,"integrity":"sha512-/6RMgiFezvuTphStqt/k6+2dOdyv83nirAGHJaUXIyfikmMCldLzdRpBbXG4QZefShJnto9SdwlHyhsMGdTwcQ==","signatures":[{"sig":"MEYCIQCiig6tzu5v+9Fkof9HQSmq3bo9sWIDbDr+gb8r42UwjQIhALvLEk9SlmnWxIFYnyzH7xA99kihxbar5GY+4oSy5ejN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHcZP2/0l5Z8kgcu1XAvVvMsvd7umyxc+TxaonAojA6iAiB0OzvDAjTNwJjwwdOkV8sb3baqC0bujljTnyrA+FQ6ng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":455784},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports and sports API — 18 curated outcome tools for agents (live, schedule, profiles, standings, previews, event cards, player form, rankings movers).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.20_1788896218786_0.6757694209312606","host":"s3://npm-registry-packages-npm-production"}},"0.3.21":{"name":"cito-mcp","version":"0.3.21","_id":"cito-mcp@0.3.21","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"59c92c28a89980dfc32be492ee0369d784b7dae6","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.3.21.tgz","fileCount":23,"integrity":"sha512-sHmCYuWQ6CzorJ44oB0d15ievnVXsdPeZNtJ6f4wbiKQSnaX+EENdHQgKTdd2gFNaG0DxpvqeN6oP70tHrLCGw==","signatures":[{"sig":"MEQCIG1n1/4VvNk2FuhOyU/N7Nhlr3NIO1+5kOu4V/EmvXwrAiB0lvREgH1/WA/g/RWAxrZFoyi2ngiC5scrWyQblknVMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDAS/aPk4lqvGFG0zfqu0UElVx/LyEWJTZC1bJBOQnGYgIgO/bKtqODwkZ4cyUpXtq8OiZjOqhvcAtJd+kwdSX+24c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505933},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports and sports API — 36 curated outcome tools for agents (live scoreboards, round economy, opening duels, clutches, vetoes, rosters, tennis, mma).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.3.21_1789009227767_0.28014518192661253","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"cito-mcp","version":"0.4.0","_id":"cito-mcp@0.4.0","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"54f507371223ab75a101723e525aebf291e8a5a1","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.4.0.tgz","fileCount":26,"integrity":"sha512-IsCA+qb5gmE0jjGsULs4jTJP1ZiHa40L2VSPAseCtGkoo1EJlQdwnmQzvoBJmfh23Mq7WO+1CT7LsziYQ07xUA==","signatures":[{"sig":"MEYCIQCt4CbPjB/IckzR8d8Rsx/GV6hM8YI0e/alel6XT1DKrgIhAIKvJruL99tiejU1E+0FtAXPnKD+LV5NKv46Hf6Ao8os","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFHlGRrgDGYOCxhrvU9J2XFrl4cgLYtwiiWzUI798Jo2AiAID+HPpgEzRwfzmogmCoyz0sAWwLjMoReBLsF4gf1q3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":564807},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports and sports API — 42 curated outcome tools for agents (live scoreboards, round economy, opening duels, clutches, vetoes, rosters, tennis, mma).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.4.0_1789228522042_0.5539402289179296","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"cito-mcp","version":"0.4.1","_id":"cito-mcp@0.4.1","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"adbe6d33da17f9847a64fc3c887499ae280642fd","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.4.1.tgz","fileCount":26,"integrity":"sha512-vI05bMmRj67+dwZSodgv+YMaYA+xBBFPfaXs3HoSoG/VdU21LcO6H7wi+bSTLIhTgPfCFwedAk1Km9WRTumBMw==","signatures":[{"sig":"MEQCIGqpYUU9Wycxcvg0caL0oNF5Iaz8vUk+JP9pNAJ/wCKaAiBNB2f8EM37WHx0nz7kUuJT8Ue+NlMEVOtGJ79pqvY9GQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBhhCZaKkvWxfUxM6RjOHd15A1EHoG/6Ft99tSFFgYjHAiBPMDuGcmdtFdCkbTKTVo3gdZh3RMflJihikmiuDfe+Qw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":612345},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports and sports API — 42 curated outcome tools for agents (live scoreboards, round economy, opening duels, clutches, vetoes, rosters, tennis, mma).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.4.1_1789240030097_0.7552291025982043","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"cito-mcp","version":"0.4.2","_id":"cito-mcp@0.4.2","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"a28a6ffe4f4d1e9650f20e1dff3e25781ca9dd73","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.4.2.tgz","fileCount":26,"integrity":"sha512-wwsOIo1uGpTaOcGfTprXCLrdj+uQTDbJA2LPuWQBGddG3g3w3FDwXjvA2Tujw8qrvimGpF0eMUJ4c2i5xD/Qvw==","signatures":[{"sig":"MEQCIFpAZZpRLy5+t1SsJbqO9j0sYFvc62x0a+0Nj5AGup46AiBzCv4ujComgKikwYkQBlugI9HRsH7pd4Xh1pbH/0WEjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDRjuRHHiz42l0cr1epfC/Z56k5BenKsUuTwSpmdRLAfgIgaszUOioNo9uKdyJpSR+BXW/4sJSbI8wCJyFjj/Kwxes=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":626989},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports and sports API — 42 curated outcome tools for agents (live scoreboards, round economy, opening duels, clutches, vetoes, rosters, tennis, mma).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.4.2_1789245159675_0.5984417175545689","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"cito-mcp","version":"0.4.3","_id":"cito-mcp@0.4.3","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"54dd0e6e0871224300bc1af8881deed781d53291","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.4.3.tgz","fileCount":26,"integrity":"sha512-nWAJZmBo90p/ZS/z+sQ3oZvWs8KTeaVeQhaYEATyL8yhEWgDmc+pjK/37tbQNteUMCjAbAXNn6L5zREuf9wywA==","signatures":[{"sig":"MEUCIFlfbnE22gKk0rUx1KwtNZ0qxED5qJDnwcd2U9R+jX1qAiEAhYVRFYfo+fN2VyTY5fo+qk2GcLcAgjgM1ywxl3SDl20=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHJsD0PdcvgdZ9+fw5lSuNg6Fv4/WFjtOYXlFtrM1z8WAiBNH1NYkHqTdHL+MVUwygluHGuIfDoyKmmWQbcpJUBswA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":629202},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports and sports API — 42 curated outcome tools for agents (live scoreboards, round economy, opening duels, clutches, vetoes, rosters, tennis, mma).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.4.3_1789254431455_0.3023921383483399","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"cito-mcp","version":"0.4.4","_id":"cito-mcp@0.4.4","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"84f7ce1da8a7107f9ce096abcb16006caaf9c9dd","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.4.4.tgz","fileCount":26,"integrity":"sha512-PFB+PHbeET9fzHJGJDDk5PPuhvNd9vr2Q/DKZPYepa4Wt+l1mZA4iZyWuBh7/M9oLNjWD2Y6s9DvIeUBu1t2eA==","signatures":[{"sig":"MEQCIBTEI4zhtZPb3EoE5eWCeH+xq82wDEuNPTX74Qt+ENpvAiBgAFn8HLhujPFp7+TdkczpDJHt4sGPIVGU38+3evsXQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDm0HZSGeLyXTGQuHgE6Yrc+lsqjQB01T/n+GfoaqElvAiBRw3UqfASS5O+N1HXhlOZ89iC1rDYIipxXDwJFj5rXhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":634650},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports and sports API — 42 curated outcome tools for agents (live scoreboards, round economy, opening duels, clutches, vetoes, rosters, tennis, mma).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.4.4_1789269960514_0.14865942189707404","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"cito-mcp","version":"0.4.5","_id":"cito-mcp@0.4.5","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"94bb034c44298d12332b68513bcbbc310f56bf07","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.4.5.tgz","fileCount":27,"integrity":"sha512-aY2tsgTZeapiCAVEAd6n9NKF9pfwwWn4Io7scuuOS7KzTpjQ9/vtYvu3kKjw0NTP6hTLARpzVFdEVFNGGF0gdw==","signatures":[{"sig":"MEYCIQDYjAdcOEHhw0dTjLqIPAc49yjtlSbJZJ2IF0gG3fco/AIhAMPRfq5E5X9v5ZJSaXjkx0GWEwdyRtn9+HYdBq8AAHAQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDHbItkmvJqzjXlrHXATOIpUSb98gtYMgjcZMHBBisgfAIhANgJ9V4Qzpnn1on03TU6EUGr+J7d4MTEAVacemtINNWU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":542550},"type":"module","engines":{"node":">=20"},"gitHead":"d4794e9c6b6552e59506d33fba0333a71e3821df","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports and sports API — 42 curated outcome tools for agents (live scoreboards, round economy, opening duels, clutches, vetoes, rosters, tennis, mma).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.4.5_1789442144489_0.7730482430609922","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"cito-mcp","version":"0.4.6","keywords":["mcp","model-context-protocol","esports","cs2","counter-strike","counter-strike-2","lol","league-of-legends","dota2","cod","ufc","mma","tennis","live-scores","sports-data","esports-api"],"_id":"cito-mcp@0.4.6","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"homepage":"https://cito.gg","bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"179888c94bf13736b1808bc5e9a94aa834193021","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.4.6.tgz","fileCount":27,"integrity":"sha512-+fJNwAlh9W3ynOMxMDFPIxJkbaxhz144pMYRiaSauC71R4ubnTIyAmCJ9zibZfosG4cfZepnK4z2lswLsLLqQg==","signatures":[{"sig":"MEYCIQD3/VK/BUxW7HlvHp7hG0M7T75P4Li7KT9oSCS09Z8vFwIhAKSnEmz2bC9bbmrz+uTsH36XfvSzCtjZgzJJvl2UVnQ7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFBYrufo+r3Sp7bnP6dn2enjBAFUtNGvcjoAAyzUUY6iAiEAiP+wGt0WOWAC1O2lwDv1camCcJ1mHe4YntHxt6UZDNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546448},"type":"module","engines":{"node":">=20"},"gitHead":"d1211315b695fbf8b141dbadab9cd3e983c13ef7","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports and sports API — curated outcome tools for agents (live scoreboards, round economy, opening duels, clutches, vetoes, rosters, tennis, mma).","directories":{},"//REPOSITORY":"Intentionally NOT set. cito-api-scraper and cito.gg are PRIVATE repos and must stay that way, so a repository URL pointing at them would render as a broken 404 link on the public npm page and would not satisfy MCP Registry npm ownership validation. Set this only if a PUBLIC repo for this package is ever created (e.g. achillesscriptsvip/cito-mcp with this directory as root) — then use `git+https://github.com/OWNER/REPO.git` and mirror it in the `mcpName`/server.json `name` pair. Do not point it at the private monorepo.","_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cito-mcp_0.4.6_1790127472270_0.8754619514896813","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"_id":"cito-mcp@0.4.7","bin":{"cito-mcp":"dist/index.js"},"dist":{"shasum":"eccbf0c15b3538c71c12887c716d1888445321f4","tarball":"https://registry.npmjs.org/cito-mcp/-/cito-mcp-0.4.7.tgz","fileCount":26,"integrity":"sha512-8p0HUC+p380KGNxCTARjoqDO0FiRfmnrZp8o7JFwEGPs8w0dTd2EHuoYBvrG4OEmkOVd7XPMmN15vGhAcSzjNw==","signatures":[{"sig":"MEUCIGJ5wX8cKVAatkrsib4y1FttH90Y7twnvJuAKCC+e+UZAiEAy+J7Np5WVo1Y9Ro3sKA7apyK/940SqHtKmcMeuQF+VM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHz1ue5vLsylxeiWS95N9xaiS/7eMmDdsbwoWedH6DU7AiBWAwAN8AJ+B30kwIQZxcTFta5ZUySBwGCfvAMvKuc0Pw=="}],"unpackedSize":532556},"name":"cito-mcp","type":"module","engines":{"node":">=20"},"gitHead":"45fe4744294f6554c423748758ce0385d4f792c7","scripts":{"test":"tsx --test src/**/*.test.ts src/*.test.ts","build":"tsc -p tsconfig.json","smoke":"node scripts/smoke.mjs","start":"node dist/index.js","prepublishOnly":"npm run build && npm test && npm run smoke"},"version":"0.4.7","_npmUser":{"name":"citoapi","email":"support@citoapi.com"},"homepage":"https://cito.gg","keywords":["mcp","model-context-protocol","esports","cs2","counter-strike","counter-strike-2","lol","league-of-legends","dota2","cod","ufc","mma","tennis","live-scores","sports-data","esports-api"],"_npmVersion":"11.17.0","description":"Standalone MCP server for the Cito esports and sports API — curated outcome tools for agents (live scoreboards, round economy, opening duels, clutches, vetoes, rosters, tennis, mma).","directories":{},"maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"//REPOSITORY":"Intentionally NOT set. cito-api-scraper and cito.gg are PRIVATE repos and must stay that way, so a repository URL pointing at them would render as a broken 404 link on the public npm page and would not satisfy MCP Registry npm ownership validation. Set this only if a PUBLIC repo for this package is ever created (e.g. achillesscriptsvip/cito-mcp with this directory as root) — then use `git+https://github.com/OWNER/REPO.git` and mirror it in the `mcpName`/server.json `name` pair. Do not point it at the private monorepo.","_nodeVersion":"22.23.1","dependencies":{"@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^5.9.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cito-mcp_0.4.7_1790298591209_0.18582924059935535"}}},"time":{"created":"2026-07-24T19:12:23.976Z","modified":"2026-09-25T01:09:51.495Z","0.1.0":"2026-07-24T19:12:24.367Z","0.2.1":"2026-07-27T20:45:06.967Z","0.2.2":"2026-07-27T22:08:58.795Z","0.2.3":"2026-07-27T22:14:53.999Z","0.2.4":"2026-07-27T22:21:12.890Z","0.2.5":"2026-08-16T23:41:55.760Z","0.2.6":"2026-08-18T00:03:38.582Z","0.2.7":"2026-08-18T00:12:52.545Z","0.3.0":"2026-08-30T19:41:21.780Z","0.3.1":"2026-08-30T21:28:51.351Z","0.3.2":"2026-08-30T21:40:57.826Z","0.3.3":"2026-08-30T21:51:38.852Z","0.3.4":"2026-08-30T22:03:31.511Z","0.3.5":"2026-08-30T22:12:25.770Z","0.3.6":"2026-09-02T22:01:03.957Z","0.3.7":"2026-09-02T23:18:44.937Z","0.3.8":"2026-09-03T00:28:25.629Z","0.3.9":"2026-09-03T00:48:34.368Z","0.3.10":"2026-09-03T01:18:20.970Z","0.3.11":"2026-09-03T02:17:11.305Z","0.3.12":"2026-09-03T22:56:24.329Z","0.3.13":"2026-09-03T23:38:29.821Z","0.3.14":"2026-09-04T00:02:40.846Z","0.3.15":"2026-09-04T02:09:46.458Z","0.3.16":"2026-09-04T22:53:23.260Z","0.3.17":"2026-09-05T14:20:22.033Z","0.3.18":"2026-09-06T01:36:04.372Z","0.3.19":"2026-09-06T04:22:49.627Z","0.3.20":"2026-09-08T19:36:58.869Z","0.3.21":"2026-09-10T03:00:27.872Z","0.4.0":"2026-09-12T15:55:22.127Z","0.4.1":"2026-09-12T19:07:10.213Z","0.4.2":"2026-09-12T20:32:39.767Z","0.4.3":"2026-09-12T23:07:11.568Z","0.4.4":"2026-09-13T03:26:00.617Z","0.4.5":"2026-09-15T03:15:44.601Z","0.4.6":"2026-09-23T01:37:52.363Z","0.4.7":"2026-09-25T01:09:51.348Z"},"homepage":"https://cito.gg","keywords":["mcp","model-context-protocol","esports","cs2","counter-strike","counter-strike-2","lol","league-of-legends","dota2","cod","ufc","mma","tennis","live-scores","sports-data","esports-api"],"description":"Standalone MCP server for the Cito esports and sports API — curated outcome tools for agents (live scoreboards, round economy, opening duels, clutches, vetoes, rosters, tennis, mma).","maintainers":[{"name":"citoapi","email":"support@citoapi.com"}],"readme":"# cito-mcp\r\n\r\nStandalone [MCP](https://modelcontextprotocol.io) server for the [Cito esports API](https://api.citoapi.com) — **curated outcome tools** for agents building esports apps, dashboards, bots, and research flows.\r\n\r\n**Version:** `0.4.7` · **Node:** `>=20` · **Install:** `npx cito-mcp`\r\n\r\nPrimary games & sports: **lol · cs2 · dota2 · cod · ufc · tennis**. Long-tail REST stays available via `call_api`.\r\n\r\n---\r\n\r\n## Philosophy: outcomes, not endpoints\r\n\r\nv0.1 exposed ~100+ tools auto-generated from OpenAPI. Agents had to pick among thin path wrappers, invent IDs, and stitch multi-call UI screens themselves. That catalog was hard to select against and brittle across games.\r\n\r\n**Ships 42 curated outcome tools** that answer *jobs* instead of mirroring REST:\r\n\r\n| Job | Tool |\r\n| --- | --- |\r\n| What’s live right now? | `live_matches` |\r\n| What’s coming up? | `upcoming_schedule` |\r\n| Build a match card / recap | `match_summary` |\r\n| Deep timeline / live state | `match_details` |\r\n| Team page | `team_profile` |\r\n| Player / fighter profile | `player_profile` |\r\n| Player form & win streak | `player_form` |\r\n| Table / rankings | `standings` |\r\n| Ranking climbers & droppers | `rankings_movers` |\r\n| Pre-match briefing (with surface) | `match_preview` |\r\n| Event / fight-night card | `event_card` |\r\n| Rivalry record | `head_to_head` |\r\n| Tennis tournament catalog | `tournaments` |\r\n| One day of tennis | `tennis_schedule` |\r\n| Tennis player match log | `player_matches` |\r\n| Tennis career statistics | `player_stats` |\r\n| Tennis ranking trajectory | `player_rankings_history` |\r\n| Fighter / team photos | `event_card` · `player_profile` |\r\n| Which raw REST route exists? | `list_routes` |\r\n| Name → ID | `resolve_entity` / `search_entities` |\r\n\r\nComposites multi-fetch server-side, return a **stable JSON envelope**, and isolate partial failures in `partial[]` so one bad secondary section does not fail the whole page.\r\n\r\n**MCP is design-time / agent assistance.** Ship production backends with Cito REST + the user’s API key. Do not put multi-tenant traffic through this process.\r\n\r\n### Honest gaps, in-band\r\n\r\nWhere the source data is partial, the tool says so instead of shipping a plausible-looking wrong value:\r\n\r\n| Situation | What the tool returns |\r\n| --- | --- |\r\n| The two ranking lists compared by `rankings_movers` are not a week apart | `gapDays` + `comparisonWindow` (`\"12-week gap\"`), `comparisonsAreWeekly: false`, and a warning naming both dates |\r\n| A tennis tournament draw is missing matches | `draw.shortRounds` (`[\"R128 45/64\"]`), `draw.missingRounds`, `draw.complete` |\r\n| A stats section the endpoint does not publish | `player_stats.unavailable` names the section and why, rather than a block of nulls |\r\n| `search_entities` results that do not match at all | dropped, counted under `data.relevance.droppedBelowFloor`, with a warning naming them |\r\n\r\n---\r\n\r\n## Install\r\n\r\n### One command (recommended)\r\n\r\n```bash\r\nnpx cito-mcp install --key cito_your_key_here\r\n```\r\n\r\nDetects the MCP clients installed on your machine — Claude Code, Claude Desktop, Cursor, Windsurf, Codex CLI — and writes the config for each. Then restart your editor.\r\n\r\nIt is safe to re-run: existing config is merged, not replaced, your other MCP servers are left alone, a `.cito-bak` backup is written before the first change, and running it again just rotates the key rather than adding a second entry.\r\n\r\n```bash\r\nnpx cito-mcp install --dry-run                     # show the plan, write nothing\r\nnpx cito-mcp install --key … --client cursor       # one client only\r\nnpx cito-mcp install --help\r\n```\r\n\r\nGet a key at [citoapi.com/dashboard](https://citoapi.com/dashboard).\r\n\r\n### Manual — Claude Code\r\n\r\n```bash\r\nclaude mcp add cito -e CITO_API_KEY=cito_your_key_here \"--\" npx -y cito-mcp\r\n```\r\n\r\n**Quote the `--`.** PowerShell 5.1 strips a bare `--` before the CLI sees it; because `-e` takes a variable number of values it then swallows `npx -y cito-mcp` as env vars and fails with `unknown option '-y'`. The quoted form works in PowerShell, cmd, bash and zsh alike. `npx cito-mcp install` avoids the problem entirely.\r\n\r\nFrom a local clone (development):\r\n\r\n```bash\r\ncd mcp\r\nnpm install\r\nnpm run build\r\nclaude mcp add cito -e CITO_API_KEY=cito_your_key_here \"--\" node \"%CD%\\dist\\index.js\"\r\n```\r\n\r\n### Cursor\r\n\r\nAdd to Cursor MCP settings (e.g. `.cursor/mcp.json` or Cursor Settings → MCP):\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"cito\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"cito-mcp\"],\r\n      \"env\": {\r\n        \"CITO_API_KEY\": \"cito_your_key_here\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nWindows local clone:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"cito\": {\r\n      \"command\": \"node\",\r\n      \"args\": [\"C:/Users/Owner/Projects/cito-api-scraper-windows/mcp/dist/index.js\"],\r\n      \"env\": {\r\n        \"CITO_API_KEY\": \"cito_your_key_here\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Windsurf / other MCP hosts\r\n\r\nSame shape as Cursor: `command` + `args` + `env.CITO_API_KEY`. Prefer `npx cito-mcp` so clients pick up published patches without a local install.\r\n\r\nThe server **exits immediately** if `CITO_API_KEY` is missing. The key is sent only as the `x-api-key` header and is never logged.\r\n\r\n---\r\n\r\n## Environment\r\n\r\n| Variable | Required | Default | Description |\r\n| --- | --- | --- | --- |\r\n| `CITO_API_KEY` | **yes** | — | Cito API key → `x-api-key` on every upstream call |\r\n| `CITO_API_BASE` | no | `https://api.citoapi.com/api/v1` | Override base URL (staging / self-hosted) |\r\n\r\n---\r\n\r\n## Preferred tool order\r\n\r\n1. Unsure → `list_capabilities` (optional `api_health` for tier / included games)\r\n2. Name without ID → `resolve_entity` (chain) or `search_entities` (browse)\r\n3. Live / upcoming → `live_matches` / `upcoming_schedule`\r\n4. Match card → `match_summary` (then `match_details` if needed)\r\n5. Team / player pages → `team_profile` / `player_profile`\r\n6. Tables / rivalry / preview / event card → `standings` / `head_to_head` / `match_preview` / `event_card`\r\n7. Escape hatch → `list_routes` to find a path, then `call_api` (allowlisted paths only)\r\n\r\n**Never invent IDs** — resolve them or take them from live / schedule / search results.\r\n\r\nMnemonic: **resolve → live/schedule → summary → deep**.\r\n\r\n---\r\n\r\n## Tool catalog (16)\r\n\r\nAll tools are **read-only**. Names are `snake_case` with **no** `cito_` prefix (the server name already brands the surface).\r\n\r\n| Tool | Outcome | When to use | When not to use | Key inputs |\r\n| --- | --- | --- | --- | --- |\r\n| `list_capabilities` | Catalog of tools, games, jobs, recipes (no network) | Session start; map UI screens to tools; filter by `game` / `job` | You already know the tool and have IDs | `game?`, `job?`, `q?`, `includeExamples?`, `includeRecipes?` |\r\n| `api_health` | Reachability, key validity, tier, rate limits, optional game probes | Once per session; after 401/403/RATE_LIMIT; entitlement checks | Fetching live scores or entity data | `includeGameProbes?` |\r\n| `resolve_entity` | Name → best typed id/slug (+ ranked candidates) | User named “T1”, “s1mple”, “IEM Cologne” without an ID; chaining into profiles | Already have a stable id/slug; large browse lists | `q`, `game?`, `type?`, `limit?` |\r\n| `search_entities` | Paginated entity browse/search for one game | Typeahead / pickers; “list teams matching…” | Single-name resolve for chaining; full profile pages | `game`, `q?`, `type?`, `limit?`, `cursor?`, `activeOnly?` |\r\n| `live_matches` | Live board (one game or all); CS2 uses `/cs2/live`; includes UFC | “What’s live?”; ops/dashboard strip | Upcoming fixtures; historical recaps | `game?` (`all` or omit), `limitPerGame?`, `includeLabelsOnly?` |\r\n| `upcoming_schedule` | Upcoming fixtures/events with filters | “What’s on this week?”; team next matches | Live-only boards; deep match recaps | `game`, `hours?`, `from?`, `to?`, `team?`, `league?`, `tournamentId?`, `limit?`, `cursor?` |\r\n| `match_summary` | Composite match card: score, performances, media stubs | Default match UI / recap after a known `matchId` | No matchId yet; pure pre-match → `match_preview`; deep timelines | `game`, `matchId`, `view?`, `includePlayerStats?`, `includeMedia?` |\r\n| `match_details` | Deep sections: timeline, live state, maps, advanced | Analyst dive; live in-game window; full demo list | First-pass live board; simple chat recaps | `game`, `matchId`, `gameId?`, `sections?`, `includeTimeline?`, `includeLiveState?`, `includeAdvanced?` |\r\n| `player_profile` | Player/fighter + form/trends/radar when available | “How is X playing?”; player page scaffold | Full roster → `team_profile`; unresolved name | `game`, `playerId` **or** `slug`, `recentLimit?`, `includeTrends?`, `view?`, `window?`, `role?` |\r\n| `team_profile` | Team/org + roster + recent form | Team page / “who is on this roster?” | UFC fighters → `player_profile`; unresolved name; pure tables | `game`, `teamId` **or** `slug`, `recentLimit?`, `includeFormer?`, `view?` |\r\n| `head_to_head` | Composed H2H (no first-class REST H2H) | Rivalry / series record; preview context | Single-side form only; live scores; standings | `game`, `sideA`, `sideB`, `entityType?`, `limit?`, `from?`, `to?` |\r\n| `standings` | League/event tables or world/division rankings | Playoff picture; UFC rankings; CDL / CS2 tables | Team form; live scores; match recaps | `game`, `scope?`, `leagueId?`, `tournamentId?`, `eventId?`, `season?`, `stage?`, `division?`, `limit?` |\r\n| `match_preview` | Pre-match briefing: sides, rosters/form, H2H stub | Upcoming deep link; pick’ems; preview cards | Completed recaps; deep live state | `game`, `matchId` **or** (`teamA` + `teamB`), `eventId?`, `includeH2H?`, `includeRosters?`, `recentLimit?` |\r\n| `event_card` | Event / fight-night card: identity + bouts in card order (main event first), each corner with photos, record, nickname, weight class; optional rankings. Tennis returns the draw bracket with per-round completeness | UFC card, CS2 event hub, tournament overview | Live-only strip; single match recap | `game`, `eventIdOrSlug` **or** `q`, `includeBouts?`, `includeStandings?`, `limit?`, `drawMaxMatches?` |\r\n| `list_routes` | Index of raw REST routes from the live OpenAPI spec (method, path, summary, tag) | Finding a long-tail path before `call_api`; checking an endpoint exists | A curated tool covers the outcome | `game?`, `q?`, `limit?` |\r\n| `call_api` | Allowlisted raw REST (`data.raw`) | Fortnite / long-tail paths; payload debugging | Any job covered by a curated tool | `path`, `method?`, `queryJson?`, `bodyJson?` |\r\n\r\n### Images\r\n\r\nFighter and team sides carry an `images` object wherever upstream supplies one —\r\non `event_card` bout corners and on `player_profile`. No extra call, no N+1.\r\n\r\n```jsonc\r\n\"team1\": {\r\n  \"name\": \"Islam Makhachev\",\r\n  \"slug\": \"islam-makhachev\",\r\n  \"record\": { \"wins\": 28, \"losses\": 1, \"draws\": 0, \"text\": \"28-1-0 (W-L-D)\" },\r\n  \"championStatus\": \"champion\",\r\n  \"images\": {\r\n    \"headshotUrl\":     \"https://…/MAKHACHEV_ISLAM_BELT_01-18.png\",\r\n    \"bodyImageUrl\":    \"https://…/athlete_bio_full_body/…\",\r\n    \"imageUrl\":        \"https://…/event_fight_card_upper_body/…\",\r\n    \"proxiedImageUrl\": \"https://api.citoapi.com/api/v1/public/images/ufc/aHR0cHM6…\"\r\n  }\r\n}\r\n```\r\n\r\n**Use `proxiedImageUrl` in a browser.** the image host sends no CORS header and can\r\nhotlink-block, so raw URLs render as broken images in a web UI. The proxied URL\r\nis served by the API and is safe to put in an `<img src>`.\r\n\r\nWhen a key is `null` the image does not exist for that entity; when the whole\r\n`images` object is absent, upstream sent nothing for that side. The object is\r\nnever partially shaped — if any image exists, all four keys are present.\r\n\r\nTennis is the exception on purpose: the feed supplies a single `portrait_url`\r\n(Wikimedia Commons) and no square crop, so that one URL fills both `headshotUrl`\r\nand `imageUrl`, and `proxiedImageUrl` stays `null` because only fighter image URLs have\r\na proxy.\r\n\r\n**Tennis images carry their licence and credit** — and a UI is expected to render\r\nthem:\r\n\r\n```jsonc\r\n\"images\": {\r\n  \"headshotUrl\": \"https://commons.wikimedia.org/wiki/Special:FilePath/Hoang_WMQ18_%2833%29_%2842647295495%29.jpg?width=400\",\r\n  \"license\":     \"CC BY-SA 2.0\",\r\n  \"attribution\": \"si.robi\",\r\n  \"sourceUrl\":   \"https://commons.wikimedia.org/wiki/File:Hoang_WMQ18_(33)_(42647295495).jpg\"\r\n}\r\n```\r\n\r\nCommons portraits are mostly CC BY / CC BY-SA, which for commercial display\r\ngenerally requires naming the author and stating the licence. `attribution` is\r\n`null` for public-domain and CC0 images, which need no credit — that is a fact,\r\nnot missing data. Anything without a defensible licence has its URL removed\r\nupstream, so a non-null `headshotUrl` always has a `license` beside it.\r\n\r\n### Games\r\n\r\n| Game | Depth | Notes |\r\n| --- | --- | --- |\r\n| `lol` | deep | Team slugs; `lol-match-*`; no native global search |\r\n| `cs2` | deep | Prefixed ids; live path **`GET /cs2/live`**; trends / rankings |\r\n| `dota2` | thin | Numeric ids; radar; weak/no standings & roster endpoints |\r\n| `cod` | medium | Org slugs; CDL standings; UUID match ids |\r\n| `ufc` | medium | Fighter slugs; `boutId`; live + rankings |\r\n\r\n### UFC projection notes (0.2.4)\r\n\r\nHardened agent-facing UFC shapes (offline-tested):\r\n\r\n- **`normalizeMatch`** reads `fighters[]` (`corner` + `fighterName` / `profile.name`), live `red`/`blue`, and `boutId` / `dataId` / bare `id`. Never keeps label `? vs ?` when fighter names exist (including blue-first arrays).\r\n- **`live_matches`** uses `extractLiveRows`: prefer `liveBouts` (empty array = honest empty board); never promote supervisor `events[]` shells into match rows.\r\n- **UFC empty board honesty:** when `count === 0`, section includes `note`, `emptyReason`, slim `health` (`workerAlive`, lag), optional non-live `supervisor` strip and `nextCard` (armed only). Also `data.note` + `meta.warnings` for single-game UFC. Do not treat empty as HTTP failure; do not invent `? vs ?` from event shells.\r\n- **`upcoming_schedule`** expands event → bout rows with fighter labels; applies client-side **`hours` / `from` / `to`** (API has no `hours`); event shells without bouts use the **event name**, not `? vs ?`.\r\n- **`event_card`** bouts share the same `normalizeMatch` path.\r\n- **`standings`** maps division champions to rank **`C`** (`rankText: \"C\"`, interim **`IC`**); contender `#1` stays numeric `1` — no dual numeric `#1`.\r\n\r\nFortnite: **`call_api` only** until promoted into the primary enum.\r\n\r\n### `call_api` allowlist\r\n\r\nPath must start with `/` and match one of:\r\n\r\n`/health` · `/lol` · `/cs2` · `/dota2` · `/cod` · `/ufc` · `/fortnite`\r\n\r\nAbsolute URLs and `..` traversal → `PATH_NOT_ALLOWED`. Prefer curated tools for all standard jobs.\r\n\r\n---\r\n\r\n## Response envelope\r\n\r\nEvery tool returns one JSON object:\r\n\r\n```json\r\n{\r\n  \"ok\": true,\r\n  \"data\": {},\r\n  \"meta\": {\r\n    \"game\": \"cs2\",\r\n    \"source\": \"match_summary\",\r\n    \"fetchedAt\": \"2026-07-27T12:00:00.000Z\",\r\n    \"requestId\": \"mcp_…\",\r\n    \"tookMs\": 120,\r\n    \"upstreamCalls\": 3,\r\n    \"rateLimit\": { \"tier\": \"pro\", \"remaining\": 54 }\r\n  },\r\n  \"pagination\": { \"limit\": 20, \"hasMore\": false, \"nextCursor\": null },\r\n  \"partial\": [],\r\n  \"error\": null\r\n}\r\n```\r\n\r\n| Condition | How to handle |\r\n| --- | --- |\r\n| `ok: false` | Tool-level failure; MCP `isError: true`; read `error.code` + `error.recover[]` |\r\n| `ok: true` with `partial[]` | Use successful sections; **do not** treat as total failure |\r\n| List tools | `data.items` + `pagination` (`limit`, `hasMore`, `nextCursor`, …) |\r\n\r\n**Error codes:** `VALIDATION` · `NOT_FOUND` · `UNSUPPORTED_GAME` · `UNAUTHORIZED` · `RATE_LIMIT` · `UPSTREAM` · `PATH_NOT_ALLOWED` · `NOT_IMPLEMENTED`\r\n\r\n**Ambiguity:** `resolve_entity` returns `ok: true` with `data.needsDisambiguation` + `data.candidates` — pick a candidate; do not wait for a hard error.\r\n\r\nRetry only when `error.retryable` is true (typically `RATE_LIMIT`, `UPSTREAM`).\r\n\r\n**Pagination:** default limit 20, max 50 (some tools clamp differently). Honor `pagination.hasMore` and pass `pagination.nextCursor` only — never invent cursors or reuse them after changing filters.\r\n\r\n---\r\n\r\n## Builder recipes\r\n\r\nUse these as agent playbooks when scaffolding apps. Prefer one composite per screen over N+1 thin GETs.\r\n\r\n### 1. Live scoreboard\r\n\r\n**Goal:** multi-game (or single-game) live strip with optional match drill-down.\r\n\r\n```\r\n1. api_health                          # optional — once per session\r\n2. live_matches { game: \"all\" }        # or \"cs2\" / \"lol\" / …\r\n3. For a selected row:\r\n   match_summary { game, matchId }     # default card\r\n   match_details { …, includeLiveState: true }  # only if needed\r\n```\r\n\r\n**UI map**\r\n\r\n| Screen region | Source |\r\n| --- | --- |\r\n| Live rows (label, score, status) | `live_matches` → `data.sections[].items` |\r\n| Expanded card | `match_summary` → `data.scoreline`, `playerPerformances`, `media` |\r\n| In-game window | `match_details` sections `liveState` / `timeline` |\r\n\r\n**Do not:** N+1 `match_details` for every live row; invent matchIds; use `upcoming_schedule` for live-only boards.\r\n\r\n### 2. Player profile page\r\n\r\n**Goal:** identity, team, recent form for a named player or fighter.\r\n\r\n```\r\n1. resolve_entity { q: \"s1mple\", game: \"cs2\", type: \"player\" }\r\n   # or type: \"fighter\" for UFC\r\n2. player_profile {\r\n     game,\r\n     playerId | slug,          # from resolve best/candidates\r\n     recentLimit: 10,\r\n     includeTrends: true,\r\n     view: \"summary\"\r\n   }\r\n3. Optional: head_to_head for rivalry context (fighters/teams)\r\n```\r\n\r\n**UI map**\r\n\r\n| Screen region | Source |\r\n| --- | --- |\r\n| Header / identity | `data.player` |\r\n| Current team | `data.currentTeam` |\r\n| Recent form list | `data.recentMatches` + `data.form` |\r\n| Career / radar | `data.career`, `data.radar`, `data.seasonStats` (when present) |\r\n\r\n**Do not:** invent playerIds; use `team_profile` for full rosters; skip resolve when the user only gave a display name.\r\n\r\n### 3. Event hub\r\n\r\n**Goal:** schedule strip + standings/rankings + match previews for a league, tournament, or event.\r\n\r\n```\r\n1. list_capabilities { job: \"schedule\" }   # optional orientation\r\n2. upcoming_schedule {\r\n     game: \"cs2\",                          # or lol / cod / ufc / dota2\r\n     hours: 168,                           # or from/to ISO window\r\n     league | tournamentId | team          # scope filters as available\r\n   }\r\n3. standings {\r\n     game,\r\n     scope: \"event\" | \"league\" | \"tournament\" | \"world\" | \"division\",\r\n     eventId | leagueId | tournamentId | division | season\r\n   }\r\n4. For a featured upcoming match:\r\n   match_preview { game, matchId }         # or teamA + teamB\r\n5. When a match goes live / completes:\r\n   match_summary { game, matchId }\r\n```\r\n\r\n**UI map**\r\n\r\n| Screen region | Source |\r\n| --- | --- |\r\n| Upcoming list | `upcoming_schedule` → `data.items` |\r\n| Table / ranks | `standings` → `data.rows` |\r\n| Featured match briefing | `match_preview` → `sideA` / `sideB` / `h2h` / `talkingPoints` |\r\n| Live / completed card | `match_summary` |\r\n\r\n**Notes:** Dota standings may return `NOT_IMPLEMENTED` or sparse data — fall back to schedule + profiles. UFC event hubs lean on fighter slugs, `boutId`, and `standings` with `scope: \"division\"`.\r\n\r\n### Other quick recipes (from `list_capabilities`)\r\n\r\n| Recipe id | Steps |\r\n| --- | --- |\r\n| `live_ops_board` | `api_health` → `live_matches` → `match_summary` / `match_details` |\r\n| `team_page` | `resolve_entity { type: \"team\" }` → `team_profile` |\r\n| `match_center_completed` | schedule/live for `matchId` → `match_summary` → optional `match_details` |\r\n| `app_scaffold` | `list_capabilities` ∥ `api_health` → sample composites → **ship REST in production** |\r\n\r\n---\r\n\r\n## Resources\r\n\r\n| URI | Purpose |\r\n| --- | --- |\r\n| `cito://capabilities` | Static tool / game / workflow summary |\r\n| `cito://llms.txt` | Live product agent context (may 404 upstream) |\r\n| `cito://openapi.json` | Live public OpenAPI for **typed clients** — not for tool generation |\r\n\r\n---\r\n\r\n## Transports\r\n\r\n**stdio** is the default (Claude Code, Cursor, Windsurf).\r\n\r\nOptional **stateless Streamable HTTP**:\r\n\r\n```bash\r\nCITO_API_KEY=cito_your_key_here node dist/index.js --http 8787\r\n# → http://127.0.0.1:8787/mcp\r\n```\r\n\r\nHosted (production): `https://api.citoapi.com/mcp`  \r\nSend the user's Cito key as `x-api-key`. Initialize and `list_capabilities` work without a key so Smithery can scan.\r\n\r\n---\r\n\r\n## Migration from 0.1 (auto-generated tools)\r\n\r\n**Breaking change.** `0.1.x` loaded OpenAPI at boot and mass-generated ~100+ tools (`generateAllTools`), plus a couple of hard-coded helpers (e.g. `cito_live_overview`, `cito_api_health`). Agents selected among thin REST wrappers and often reimplemented composition client-side.\r\n\r\n| 0.1 pattern | 0.2 replacement |\r\n| --- | --- |\r\n| Generated per-path tools (`/cs2/matches/...`, etc.) | Outcome tools in the table above |\r\n| `cito_live_overview` / ad-hoc live probes | `live_matches` (fixed CS2 path `/cs2/live`; UFC included) |\r\n| `cito_api_health` | `api_health` |\r\n| OpenAPI-named tools with `cito_` noise | **15** `snake_case` names, no `cito_` prefix |\r\n| Raw HTTP-shaped responses | Stable envelope: `ok`, `data`, `meta`, `pagination`, `partial`, `error` |\r\n| Agent stitches roster + matches + H2H | `team_profile`, `player_profile`, `head_to_head`, `match_preview` |\r\n| Fortnite / niche paths as first-class tools | `call_api` allowlist |\r\n| Spec cache / boot network for tool list | Static catalog; `list_capabilities` is offline |\r\n\r\n**Action items for existing clients**\r\n\r\n1. Drop any hardcoded 0.1 tool names; rebind prompts to the 15-tool catalog.\r\n2. Always parse the envelope (`ok` / `partial` / `error.recover`) — do not assume bare REST JSON.\r\n3. Use `resolve_entity` before profile tools when you only have a display name.\r\n4. Prefer composites over reintroducing N+1 `call_api` loops.\r\n5. Bump config to `npx cito-mcp` (or rebuild from this package) and re-test live board + one profile + one match flow.\r\n\r\nThere is **no compatibility shim** for 0.1 tool names in 0.2.\r\n\r\n---\r\n\r\n## Development\r\n\r\n```bash\r\nnpm install\r\nnpm run build     # tsc → dist/\r\nnpm test          # node:test via tsx, offline (no network)\r\nnpm start         # node dist/index.js (requires CITO_API_KEY)\r\n```\r\n\r\nSource layout (authoritative tool registry: `src/tools/index.ts`):\r\n\r\n```\r\nsrc/\r\n  index.ts              # MCP wiring, resources, stdio / --http\r\n  client.ts             # fetchJson, auth, present, cursors\r\n  envelope.ts           # success / error envelopes, MCP isError\r\n  instructions.ts       # server instructions for agents\r\n  tools/\r\n    index.ts            # allTools (15)\r\n    meta.ts             # list_capabilities, api_health, call_api\r\n    resolve.ts          # resolve_entity, search_entities\r\n    live.ts             # live_matches, upcoming_schedule\r\n    match.ts            # match_summary, match_details\r\n    player.ts           # player_profile\r\n    team.ts             # team_profile, head_to_head\r\n    standings.ts        # standings\r\n    insight.ts          # match_preview, event_card\r\n    normalize.ts        # cross-game normalization\r\n    types.ts            # ToolDef, schemas\r\n```\r\n\r\n---\r\n\r\n## Publish notes\r\n\r\nPackage: **`cito-mcp@0.2.4`**\r\n\r\n| Item | Value |\r\n| --- | --- |\r\n| npm name | `cito-mcp` |\r\n| bin | `cito-mcp` → `dist/index.js` |\r\n| published files | `dist/`, `README.md` (`package.json` `\"files\"`) |\r\n| engines | `node >= 20` |\r\n| runtime dependency | `@modelcontextprotocol/sdk` only |\r\n| prepublish | `npm run prepublishOnly` → `npm run build` |\r\n\r\n### Pre-publish checklist\r\n\r\n1. `npm test` — offline suite green.\r\n2. `npm run build` — clean `dist/`.\r\n3. Smoke against a real key (not in CI by default):\r\n   - `api_health`\r\n   - `live_matches`\r\n   - `resolve_entity` (e.g. T1 / s1mple)\r\n   - `match_summary` with a real `matchId` from live/schedule\r\n4. Confirm `package.json` version and README match the shipped tool list.\r\n5. `npm publish` from `mcp/` (or your release pipeline) with appropriate npm auth / access.\r\n   `prepublishOnly` runs build + tests + smoke, so a broken build cannot ship.\r\n\r\n### Install line for docs & marketing\r\n\r\n```bash\r\nnpx cito-mcp install --key cito_…\r\n```\r\n\r\nManual fallback (note the quoted `--`, required for PowerShell):\r\n\r\n```bash\r\nclaude mcp add cito -e CITO_API_KEY=cito_… \"--\" npx -y cito-mcp\r\n```\r\n\r\n```json\r\n{ \"command\": \"npx\", \"args\": [\"cito-mcp\"], \"env\": { \"CITO_API_KEY\": \"cito_…\" } }\r\n```\r\n\r\n### Semver expectations\r\n\r\n- **0.2.4** is a **major surface break** vs 0.1 (tool rename + removal of OpenAPI mass-generation).\r\n- Further 0.2.x patches may refine envelopes and composite quality without renaming the shipped tools. (This line previously said \"15 tools\" while the catalog shipped 42 — the count here is intentionally not restated, because a number duplicated in prose drifts the moment the catalog changes.)\r\n- Promoting Fortnite (or other titles) into the primary `game` enum would be a minor feature bump with catalog/docs updates.\r\n\r\n---\r\n\r\n## Changelog (summary)\r\n\r\n### 0.4.7\r\n\r\n- Removed the unregistered tennis odds module and its README entries; `match_details` `sections:[\"odds\"]` stays UFC-only and answers `NOT_IMPLEMENTED` for other games.\r\n\r\n### 0.4.2\r\n\r\nSecond tennis correctness pass, from the 2026-09-12 re-sweep. Five defects, each reproduced from a raw payload and re-verified after the fix. Two were upstream (fixed on the API and verified with the 40/40 invariant gate); three were MCP-side.\r\n\r\n- **Tennis `standings` published a fake total and could not be paged.** `/tennis/standings?top_n=5` set `rank_max=top_n`, so the count (which carried the rank bounds) equalled the page size: `total:5`, `hasMore:false` for a list of **150** ranked players. The API now counts the population without the rank window and returns `ranked_players`/`total_pages`/`has_next`, `/standings` takes a `page` argument, and the tool reports `total`/`rankedPlayers`/`totalPages`/`hasMore` — page 2 of the ATP list now starts at rank 6. The same `allRows.length` mistake in the `pagination` block was fixed too, so the two counts cannot disagree.\r\n- **`event_card` published the requested id as the event name.** With a bad id it answered `ok:true` and `event.name = \"atp_2026_999999\"` over a 404 that `partial[]` reported correctly. Names now come from the payload or are `null`, with `event.resolved` recording whether the detail fetch succeeded.\r\n- **`leaderboard_*` reported the page size as the population.** Every board returned `\"total\": len(items)` after applying `.limit(limit)`, so `limit=2` answered `total:2` — for boards whose own docs record thousands of qualifiers. Upstream now carries `count(*) OVER ()` (Postgres evaluates it after `GROUP BY`/`HAVING`, so it is exactly the qualifying population, at no extra round trip): aces **2488**, break-conversion **1089** (matching the figure in its own docstring), 1st-serve-won 1141, bp-saved 1186, return-games 987, tiebreak 364, deciders 334, comebacks 611, finals 66. Each tool also reports `returned` and the board's `minimumAttempts`.\r\n- **`resolve_entity { q: \"Nole\" }` answered \"M Canoles\".** The upstream name search puts Novak Djokovic first for `Nole` — it knows a nickname nothing in the payload carries, so `rankScore` scores it 0 — and the tool floored every unmatched row to 1 and then *sorted*, letting a substring collision win. `pushCandidates` now lets the upstream's own first row stand as the alias answer (labelled `meta.matchedBy: \"upstream-first\"`) when our scorer is silent, and `search_entities` exempts exactly that one row from its relevance floor. Padding is still dropped: `Sinner` still returns only Sinner.\r\n- **`/tennis/tournaments/calendar` silently ignored `?month=`.** FastAPI drops unknown query parameters, so `?month=9` and `?month=3` returned the identical 621-event season list and a caller asking \"what is on in September\" got the whole year. The route now takes `month` and filters on the event's start month (2026-09 → 12 events).\r\n- **`standings` and `leaderboards` were never cached**, so every call re-ran its grouped scan and paid db1's ~90ms RTT per query: 474–922ms on *every* request while every cached route answered in <20ms. That held eleven tools permanently over the 400ms latency budget. Both prefixes now have TTLs (1800s / 600s); repeat calls measure **4–5ms**.\r\n- **`bestOf`** now reads `best_of`, the only spelling the tennis route emits.\r\n\r\n### 0.4.1\r\n\r\nTennis correctness pass, driven by the 2026-09-12 sweep (`reports/tennis-mcp-sweep-2026-09-12.md`). Every item was reproduced against live ids and re-verified after the fix.\r\n\r\n- **`match_summary` tennis scoreline was always `- : -`.** `/tennis/matches/{id}` puts no `sets_won` on its player objects, so the sets-won score was null for every completed match while the same payload held the real score in `score` and `sets[]`. Sets won are now derived (explicit → `winner_sets_won` → `sets[]` → `score` string), `score.detail` carries the game score, and a set's `completed` is inferred when the archive omits `is_completed`. The winner-oriented `winner_games`/`loser_games` pair is deliberately not used as a side score. `bestOf` now reads `best_of`.\r\n- **`player_stats.bySurface` was always four nulls.** The endpoint publishes one object per surface and the projector coerced each to a number. Real per-surface blocks, `servingStats`, and an explicit `unavailable` map for sections the endpoint does not publish.\r\n- **`limit` was ignored** by `player_rankings_history` (asked 4, got 342) and by `/tennis/matches/completed`. Both are bounded locally now, with `*Returned` versus `*Count` so the day total is never confused with the page.\r\n- **`tournaments level=\"WTA 1000\"` returned ATP Masters events.** The API's level reverse-map is not tour-aware (`_TIER_WTA` maps both `PM` and `M` to \"WTA 1000\"), so the tool now sends and enforces the tour the level name states, and drops + counts contradicting rows. Fixed at the source too — the same widening also leaked `WTA 125`, `Challenger`, `Davis Cup` and `Billie Jean King Cup`.\r\n- **`rankings_movers` called an 84-day gap \"week-over-week\".** `gapDays`/`comparisonWindow`/`comparisonsAreWeekly` now state the real interval, with a warning. `standings` reports the tennis `ranking_date` as `updatedAt` instead of `null`.\r\n- **`tennis_schedule`** now counts the day's list/completed overlap, summarises statuses, and flags date-only `startsAt` placeholders.\r\n- **`live_matches` labelled tennis rows by tournament**, not players, because the live route's `name` is the event.\r\n- **Tennis players had no images** although `/tennis/players/{id}` carries `portrait_url`. Now surfaced (plus `ioc` as the side country on boards).\r\n- **`search_entities` had no relevance floor**: `q=Sinner` returned eight unrelated names. Rows that match nothing are dropped and reported, and a one- or two-character fragment no longer counts as a match.\r\n\r\n### 0.2.4\r\n\r\n- **UFC projection hardening** (offline-tested):\r\n  - `normalizeMatch`: `fighters[]` corners + profile, live red/blue, `boutId`/`dataId`; never keep `? vs ?` when names exist\r\n  - `extractRows` / `extractLiveRows`: prefer `liveBouts` (including empty); never fake match rows from supervisor `events[]`\r\n  - `upcoming_schedule`: client-side `hours`/`from`/`to`; bout expansion with fighter labels; event shells labeled by event name\r\n  - `event_card` bouts share the same normalize path\r\n  - `standings`: champion rank `C` / interim `IC`; no dual numeric `#1` for champ + contender\r\n\r\n### 0.2.4\r\n\r\n- **Breaking:** replaced OpenAPI mass-generated tools with **15 curated outcome tools**\r\n- Stable JSON envelope + MCP server instructions\r\n- Fixed CS2 live path (`/cs2/live`); UFC in live fan-out\r\n- Composites with `partial[]` recovery; `call_api` path allowlist\r\n- Resources: `cito://capabilities`, `cito://llms.txt`, `cito://openapi.json`\r\n\r\nSee [`_workflow/CHANGELOG-0.2.md`](_workflow/CHANGELOG-0.2.md) for the full 0.2 write-up.\r\n","readmeFilename":"README.md"}