{"_id":"@cyanheads/faostat-mcp-server","_rev":"18-75e7e5b501c7cbe71eb88500fc7b54d6","name":"@cyanheads/faostat-mcp-server","dist-tags":{"latest":"0.2.5"},"versions":{"0.1.0":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.0","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/faostat-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"c439511a6207cbe10a68c4f464766995e4065ba8","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.0.tgz","fileCount":85,"integrity":"sha512-4ht5B7t04OKBF3hLjJNjh33vEyjqrGXTdZjURUicx2OEgL5b1Zr2Lma7v8s7nAxyfkHftT+bCd4V4+XY8v93QQ==","signatures":[{"sig":"MEUCIQDhVFxC/nNls5cxudlWMENIab26ssyN5uysbj0dA8LuMQIgT+w56T5zB/bNSdDJ+vZI+SwKbTgV/16nxqGhHgrT8H8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":370545},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"c439511a6207cbe10a68c4f464766995e4065ba8","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-4ht5B7t04OKBF3hLjJNjh33vEyjqrGXTdZjURUicx2OEgL5b1Zr2Lma7v8s7nAxyfkHftT+bCd4V4+XY8v93QQ==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.2.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.0.0","@duckdb/node-api":"^1.5.3-r.3","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.8","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.0_1781373322623_0.3990500256856597","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.1","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":{"url":"https://github.com/cyanheads/faostat-mcp-server#readme","name":"cyanheads","email":"casey@caseyjhand.com"},"license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.1","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"c1b6dea587deaa57653c211626a50614155346f1","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.1.tgz","fileCount":86,"integrity":"sha512-/rdVimGqODrsEIW+dBZTazveaFyrldNW2vGFmoQ+XzLyKBy8VrYhufIWCFToemjhly7i3RFvOTHTyynGTJ/Xug==","signatures":[{"sig":"MEUCIH3rCNRPneluyjx/J9GFg/x8zOiWfMSb+3pdIBRw6iglAiEAqRGZCmNbVK+7JduvMsjzMsSs/gHKvUBxpgjmiwb7/k0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":371060},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"bun":">=1.3.0","node":">=24.0.0"},"gitHead":"e30d330010a384ca8a0b4b565505bea321ad5a0b","mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.2.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.10.1","@duckdb/node-api":"^1.5.3-r.3","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.8","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.1_1781433645834_0.7428711566399244","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.2","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/faostat-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.2","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"d2b029ae567dfd92e1a832ddfa8c96ef1744eea9","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.2.tgz","fileCount":87,"integrity":"sha512-CWhqMs2PIBJ0AcWP3Ns0oKTlmY5IC7GdWM+dTlQF3tPBN4NiVaCrDX5aE9eOHuehdJb6gc5KrsqqOungeS5ECQ==","signatures":[{"sig":"MEQCHwsaIKiI6NmnmS4Df1PBlQPTQ/3b9AvTebPhTVZid2oCIQCK+Gaj/tg1xtobid6l36rA+X4PzBx1n8WCXTjIDKBFyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":371990},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"d2b029ae567dfd92e1a832ddfa8c96ef1744eea9","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-CWhqMs2PIBJ0AcWP3Ns0oKTlmY5IC7GdWM+dTlQF3tPBN4NiVaCrDX5aE9eOHuehdJb6gc5KrsqqOungeS5ECQ==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.2.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.10.1","@duckdb/node-api":"^1.5.3-r.3","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.2_1781541838287_0.5300434170935933","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.3","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/faostat-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.3","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"81fee426945df6b5314b2245c1dbaa09f83a6c67","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.3.tgz","fileCount":88,"integrity":"sha512-NKj2MTZkmRTkXcTACuxtCVn1BB+7FTyvsfHi/hL6Yc5Yg8ufW1fpgwSBElhAxRhrYtBSNjBxxcDI5a6e7IDyJg==","signatures":[{"sig":"MEUCIBr631xFvhEkavQV9oBwHV5ybqb2OpFEFWiqNZJb5IxCAiEAwEBysEGH7X2ze8CFgW1GU4s+Id2jeDrx3Xtpabtn6rQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378823},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"81fee426945df6b5314b2245c1dbaa09f83a6c67","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-NKj2MTZkmRTkXcTACuxtCVn1BB+7FTyvsfHi/hL6Yc5Yg8ufW1fpgwSBElhAxRhrYtBSNjBxxcDI5a6e7IDyJg==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.4.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","@duckdb/node-api":"^1.5.3-r.3","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.3_1781924228527_0.5070190171452047","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.4","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/faostat-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.4","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"ade4c0d7b24a20df35cc8b31a3aaa7e00942c10d","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.4.tgz","fileCount":89,"integrity":"sha512-SrkCF7Pxf7vnE/NZoUkO1BtELEnPSK1nu89aT8R4zLwhJsrSOH5jWb4my5PoGYx8RxY5qXhug5iF7HJPsYHLIQ==","signatures":[{"sig":"MEUCIGlx6X2wSb+ZRykvI3RnT11AP7LX5WzWMDWEkQxNRt2QAiEAwCVdyi5d6ygTjwh/gILoa8Lx4YdDyaqUZoKYZVUIfEc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":382942},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"ade4c0d7b24a20df35cc8b31a3aaa7e00942c10d","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-SrkCF7Pxf7vnE/NZoUkO1BtELEnPSK1nu89aT8R4zLwhJsrSOH5jWb4my5PoGYx8RxY5qXhug5iF7HJPsYHLIQ==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.4.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","@duckdb/node-api":"^1.5.4-r.1","@cyanheads/mcp-ts-core":"^0.10.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"26.0.0","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.4_1781933284071_0.43569010806914044","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.5","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/faostat-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.5","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"0cae6326e59c0636108ba256f69fbf1fef3339dd","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.5.tgz","fileCount":90,"integrity":"sha512-Pou64RPp0wyornE1+27KqShN+2pCAX6HqsvFMIs17Iiv0VfZi6JEZirQ0v02ozzJpJ663kXL9zsBLHVRZ9pUsQ==","signatures":[{"sig":"MEYCIQCEA+LVzp8Kfimhss1yGBIZDBi7KSo3ZfH847N+pIKuUAIhAMBvXjvEKnuR2lhVXwZYmH3oh3gHfzet4sOlGqcX3VD2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":384593},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"0cae6326e59c0636108ba256f69fbf1fef3339dd","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-Pou64RPp0wyornE1+27KqShN+2pCAX6HqsvFMIs17Iiv0VfZi6JEZirQ0v02ozzJpJ663kXL9zsBLHVRZ9pUsQ==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.4.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","@duckdb/node-api":"^1.5.4-r.1","@cyanheads/mcp-ts-core":"^0.10.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"26.0.0","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.5_1781981291179_0.20602574965303977","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.6","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.6","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"c173633ae536d915d40f98fe9921f51835aed670","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.6.tgz","fileCount":91,"integrity":"sha512-x8kLc2e/voMM3Q0yEqHyIbeUp056U4gcnWMnvprqcmdjSb22qxxljS+vmWAgj5AoSTVsAohTVId5DypSH+podA==","signatures":[{"sig":"MEUCIQCjtrPMazB+r6i30gOBBIy3aQAy0PqHjGwU1sFTDUiirAIgM8vxkXRhkxUb516uRkK8fpeUTo68qpK1KzMEwWCPjDM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":397533},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"c173633ae536d915d40f98fe9921f51835aed670","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-x8kLc2e/voMM3Q0yEqHyIbeUp056U4gcnWMnvprqcmdjSb22qxxljS+vmWAgj5AoSTVsAohTVId5DypSH+podA==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.4.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","@duckdb/node-api":"^1.5.4-r.1","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.0","typescript":"^6.0.3","@types/node":"26.1.1","@biomejs/biome":"2.5.3","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.6_1783974690591_0.09321777949320564","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.7","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.7","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"bcbdf9cf5951f66af5bd2d54acabcd558e45855c","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.7.tgz","fileCount":92,"integrity":"sha512-RhLfqEVqvlg5UYpWAIKsT0tKUTtLvpFrp+IBOk2LYlcabasH3Mo5ub+wZGubfVn4vqWCCAbbxfBetEgs7SZ/MA==","signatures":[{"sig":"MEUCIQCsBrvJn/3DWywryqU/Zkg5Csa0ovMI2bGNyr1sHv+tZgIgI7gIWtGMuySt9SYCiXUOoNHmMm65/hQLeA2ajAGot8U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":409399},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"bcbdf9cf5951f66af5bd2d54acabcd558e45855c","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-RhLfqEVqvlg5UYpWAIKsT0tKUTtLvpFrp+IBOk2LYlcabasH3Mo5ub+wZGubfVn4vqWCCAbbxfBetEgs7SZ/MA==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.4.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","@duckdb/node-api":"^1.5.4-r.1","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.0","typescript":"^6.0.3","@types/node":"26.1.1","@biomejs/biome":"2.5.3","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.7_1783978274570_0.8155373131370567","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.8","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.8","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"2c26e02540b60663dd959c2dee8fe75fdf2cc3f5","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.8.tgz","fileCount":93,"integrity":"sha512-Vd6U2zpzWvnV0egMQAAi1gPFYPIiaJDQdvZwgYnHP0Pnzz3MVLWvFyAJaz4L7U9FcHat1dy02yIex0Yrn+YibA==","signatures":[{"sig":"MEUCIEw+qxjuKemyQkoG252DB2j58jQiR50KY+zIAn1gxuKuAiEAtzoWk91q/zo/yfffxLY8nw0KmQBa/ifZD/nyb1cfJ64=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":412151},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"2c26e02540b60663dd959c2dee8fe75fdf2cc3f5","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-Vd6U2zpzWvnV0egMQAAi1gPFYPIiaJDQdvZwgYnHP0Pnzz3MVLWvFyAJaz4L7U9FcHat1dy02yIex0Yrn+YibA==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.4.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","@duckdb/node-api":"^1.5.4-r.1","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.0","typescript":"^6.0.3","@types/node":"26.1.1","@biomejs/biome":"2.5.3","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.8_1783981664280_0.3559346453374419","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.9","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.9","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"3c9d4bc8d299a3f579fefebbeeba57e70f54abb4","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.9.tgz","fileCount":94,"integrity":"sha512-Mk4ytVUeiO94tzkuqGP/I8za6ijOWMTIfubAi53mlrJEF24UC3c6EwGF+Idd22mZyFi4X9HIdH6t3YSMhW5Syg==","signatures":[{"sig":"MEUCIQCe3rTofdcHglzkz8B+RZtbUpGf18F3maBiFeiCSsmXDwIgG5WaQ/tekJP8+ZEeokeHFBlqNmmmgnmwiXYkRcmqcXQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424987},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"3c9d4bc8d299a3f579fefebbeeba57e70f54abb4","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-Mk4ytVUeiO94tzkuqGP/I8za6ijOWMTIfubAi53mlrJEF24UC3c6EwGF+Idd22mZyFi4X9HIdH6t3YSMhW5Syg==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.4.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","@duckdb/node-api":"^1.5.4-r.1","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.0","typescript":"^6.0.3","@types/node":"26.1.1","@biomejs/biome":"2.5.3","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.9_1783989676693_0.047705523583853715","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.10","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.10","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"3d6bae7ea0cfec2e6ec6483f7adcfa56bef8fd4f","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.10.tgz","fileCount":95,"integrity":"sha512-JkaLGpTrBZd5z7fN33RX/9rXP1kVaJoZiBWBo8auRnSDgB1F6o4TMHtSXP3EtBllBIINj4vZXnCVoEuHj03ISg==","signatures":[{"sig":"MEQCIB9QFOT4adKpepxVCB6mx8Yamv0eJZb3bdi+p+lvn9ONAiBJEwFS6NUaK8AwgfGl5mlHE0Pcmk32L8IBdcuZLXAxkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":433848},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"3d6bae7ea0cfec2e6ec6483f7adcfa56bef8fd4f","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-JkaLGpTrBZd5z7fN33RX/9rXP1kVaJoZiBWBo8auRnSDgB1F6o4TMHtSXP3EtBllBIINj4vZXnCVoEuHj03ISg==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.4.1","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","@duckdb/node-api":"^1.5.4-r.1","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.0","typescript":"^6.0.3","@types/node":"26.1.1","@biomejs/biome":"2.5.3","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.10_1783994435331_0.28560290513290854","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@cyanheads/faostat-mcp-server","version":"0.1.11","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.1.11","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"438ecadec48c70550c32152f92a5b12a9c77647c","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.1.11.tgz","fileCount":96,"integrity":"sha512-q7E7wcDQ6hjHz4qCeVJhDBNZBL0c/s0P4R/eS+ocM6HehP5QAwdwHJlr1jDkKkPNJiPR25u33WL7TQg4JRquig==","signatures":[{"sig":"MEUCIENXM2VviFNjOmMLHhX+fcRQWW7yKHAhctXMHnDD2HZnAiEAjZMeLZ8Oo5cpnPBkfs1zfZH2z31BvV+HkooUJE9dyLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":445050},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"438ecadec48c70550c32152f92a5b12a9c77647c","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-q7E7wcDQ6hjHz4qCeVJhDBNZBL0c/s0P4R/eS+ocM6HehP5QAwdwHJlr1jDkKkPNJiPR25u33WL7TQg4JRquig==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.1","@duckdb/node-api":"^1.5.5-r.1","@cyanheads/mcp-ts-core":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.1","typescript":"^7.0.2","@types/node":"26.1.1","@biomejs/biome":"2.5.5","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.1.11_1785169802280_0.29535489494711764","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cyanheads/faostat-mcp-server","version":"0.2.0","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.2.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"dea848bfbd35e25d5b5eab2f1cb126e9024a98f0","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.2.0.tgz","fileCount":97,"integrity":"sha512-AFH8g3npsnlYs7JZvutEGgz1eQcchK48vrxBp3P0zO+HDy6woprPeHoEz+gCtDZpbqW3DiRsGSgOq1j0K5iIIQ==","signatures":[{"sig":"MEUCIQCnrSb0v9uZ0HrXZGxZFVbORo2asM+cYLloBUqZ89M8rwIgAp36z+2TMq68JYtm/3TJHwDyII/Rva/CgzopqWgZh+w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":466591},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"dea848bfbd35e25d5b5eab2f1cb126e9024a98f0","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-AFH8g3npsnlYs7JZvutEGgz1eQcchK48vrxBp3P0zO+HDy6woprPeHoEz+gCtDZpbqW3DiRsGSgOq1j0K5iIIQ==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.1","@duckdb/node-api":"^1.5.5-r.1","@cyanheads/mcp-ts-core":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.1","typescript":"^7.0.2","@types/node":"26.1.1","@biomejs/biome":"2.5.5","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.2.0_1785174871364_0.7685665489765521","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@cyanheads/faostat-mcp-server","version":"0.2.1","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.2.1","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"362fcc3d9d081fe789f765f98dd2f4244c52496b","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.2.1.tgz","fileCount":98,"integrity":"sha512-KnqNgfyeu3Y+h+StDmwO/xRzou4sZZxZLXCLNfWanNWZhxck8XGB0/oSFzPs2THSW4vtFSCd+Ph8xBveQVgUow==","signatures":[{"sig":"MEUCIQCSSUHqImG95khX/DTPZ44NWOv34/5Rt4VNSNJ9P+I7DgIgPzdiQHDbG1fq7tYxAiQ3y5xcQG2J5DbbCn0gW5ow3Ao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":483019},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"362fcc3d9d081fe789f765f98dd2f4244c52496b","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-KnqNgfyeu3Y+h+StDmwO/xRzou4sZZxZLXCLNfWanNWZhxck8XGB0/oSFzPs2THSW4vtFSCd+Ph8xBveQVgUow==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.1","@duckdb/node-api":"^1.5.5-r.1","@cyanheads/mcp-ts-core":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.1","typescript":"^7.0.2","@types/node":"26.1.1","@biomejs/biome":"2.5.5","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.2.1_1785179882643_0.45671998244858747","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@cyanheads/faostat-mcp-server","version":"0.2.2","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.2.2","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"4c70b85e2b6159d9eafb6884cee3a76aafc0eefb","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.2.2.tgz","fileCount":99,"integrity":"sha512-IfDM8aa43+SXo4ARE2lS3QTtKB0Hyk2E31aaoscBHBCCw2mVgTJmiSHJV9NllBgmidDzUH5HVQro+1CvYL57QQ==","signatures":[{"sig":"MEUCIQCW9QEWRZbjJjPN7uhcQLMgRfym6cXWh05AaI/1lmwHIwIgPhyrBxS2ci+aEJEGSyLcbWfwkDi3eRLHS9rf1pDS/3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":491195},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"4c70b85e2b6159d9eafb6884cee3a76aafc0eefb","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-IfDM8aa43+SXo4ARE2lS3QTtKB0Hyk2E31aaoscBHBCCw2mVgTJmiSHJV9NllBgmidDzUH5HVQro+1CvYL57QQ==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.1","@duckdb/node-api":"^1.5.5-r.1","@cyanheads/mcp-ts-core":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.1","typescript":"^7.0.2","@types/node":"26.1.1","@biomejs/biome":"2.5.5","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.2.2_1785182655565_0.49120245521833894","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@cyanheads/faostat-mcp-server","version":"0.2.3","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.2.3","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"d5599d969f699e43039615b13609d4a7d345f274","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.2.3.tgz","fileCount":100,"integrity":"sha512-XgW4dGs6QltxFzJM8b6aHaDxvejwBZVzrp4IlyEELuUDtOs5VJ/lwb1hmpbt1fbf8FnEF9bxy7D/OK3BoYSwLg==","signatures":[{"sig":"MEQCICuwkNmsXzu/BoWlzAqunDdcCCd0SO2TEZzCTIjBM8XBAiAP6ohcyOxuD4zo2ARYSwiZYQZAfeDMRjEzmMlMrdqExg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505771},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"d5599d969f699e43039615b13609d4a7d345f274","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-XgW4dGs6QltxFzJM8b6aHaDxvejwBZVzrp4IlyEELuUDtOs5VJ/lwb1hmpbt1fbf8FnEF9bxy7D/OK3BoYSwLg==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","@duckdb/node-api":"^1.5.5-r.4","@cyanheads/mcp-ts-core":"^0.12.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.11","depcheck":"^1.4.7","tsc-alias":"^1.9.2","typescript":"^7.0.2","@types/node":"26.2.0","@biomejs/biome":"2.5.10","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.2.3_1787636894126_0.4825331744685202","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@cyanheads/faostat-mcp-server","version":"0.2.4","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/faostat-mcp-server@0.2.4","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"bin":{"faostat-mcp-server":"dist/index.js"},"dist":{"shasum":"597077ef0809f73710da89951843d66a9273ce2a","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.2.4.tgz","fileCount":102,"integrity":"sha512-hey0O/7O+pKGuYfWSn0qJDW02kZS04SNch+9y6HAvh2Sz8mLgOTaT5iTXjJoYviEWfNEVAFiPHM/d+tiQ0UCNw==","signatures":[{"sig":"MEQCICRCZqvnpzRg02iIzSnxb96EFscGogYEzpYFPbXR11wXAiA1/Hh9kA/x+vQPGxw1Rks+FalrMBTC/6ngNv9LrQZoOQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHokmNzNXO4s8qQr93frnCN9mJ9Ya9m4VenJCNbx4UtEAiEA6jb/H7027V3EJ0G+VtT8ptcU+P48+dm+JaKiOsiw/do=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18301947},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"597077ef0809f73710da89951843d66a9273ce2a","engines":{"bun":">=1.4.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-hey0O/7O+pKGuYfWSn0qJDW02kZS04SNch+9y6HAvh2Sz8mLgOTaT5iTXjJoYviEWfNEVAFiPHM/d+tiQ0UCNw==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","fflate":"^0.8.3","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","@duckdb/node-api":"^1.5.5-r.5","@cyanheads/mcp-ts-core":"^0.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.9","vitest":"^4.1.11","depcheck":"^1.4.7","tsc-alias":"^1.9.5","typescript":"^7.0.2","@types/node":"26.5.1","@biomejs/biome":"2.5.14","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/faostat-mcp-server_0.2.4_1789840782026_0.2067060693879812","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"_id":"@cyanheads/faostat-mcp-server@0.2.5","bin":{"faostat-mcp-server":"dist/index.js"},"bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"dist":{"shasum":"133e59849fbd7c013db3497d2d46af41aaa21bdc","tarball":"https://registry.npmjs.org/@cyanheads/faostat-mcp-server/-/faostat-mcp-server-0.2.5.tgz","fileCount":114,"integrity":"sha512-8G1L7J5oshzMsXmBBs/mEH9v2N+Wg1IW9gh9+6s/J4kjyH9dT8C07HhlwagsRu9f1Bj2xEf6btJ9eGzku8osOg==","signatures":[{"sig":"MEUCIQDAQjMyeRpJtUNRfpvLzRhE9dNe1KJItm8xua4MVNv4AgIgLujRvs8mVff+++yBVJJiFxep+0w8VuHsr/eXdwr8Yj4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDPcvAV0V5OgutoiiPTbcSF3Kzo6fm9NgF51L+3Hny+5QIgXs+It2KDkPHnaNQEE6md/aBRiMn8XIxFntglrKslX28="}],"unpackedSize":603057},"main":"dist/index.js","name":"@cyanheads/faostat-mcp-server","type":"module","types":"dist/index.d.ts","author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","shasum":"133e59849fbd7c013db3497d2d46af41aaa21bdc","engines":{"bun":">=1.4.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"license":"Apache-2.0","mcpName":"io.github.cyanheads/faostat-mcp-server","scripts":{"test":"vitest run && bun run test:node","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/faostat-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/faostat-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","audit:fix":"bun audit fix","test:node":"bun run scripts/test-node.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun scripts/faostat-mirror-init.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun scripts/faostat-mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun scripts/faostat-mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"version":"0.2.5","_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"_integrity":"sha512-8G1L7J5oshzMsXmBBs/mEH9v2N+Wg1IW9gh9+6s/J4kjyH9dT8C07HhlwagsRu9f1Bj2xEf6btJ9eGzku8osOg==","repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","directories":{},"maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","fflate":"^0.8.3","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","@duckdb/node-api":"^1.5.5-r.5","@cyanheads/mcp-ts-core":"^0.13.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.2","devDependencies":{"ignore":"^7.0.10","vitest":"^5.0.2","depcheck":"^1.4.7","tsc-alias":"^1.9.5","typescript":"^7.0.2","@types/node":"26.6.3","@biomejs/biome":"2.5.14","@socketsecurity/bun-security-scanner":"^1.1.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/faostat-mcp-server_0.2.5_1790791563213_0.7664241301237524"}}},"time":{"created":"2026-06-13T17:55:22.494Z","modified":"2026-09-30T18:06:03.483Z","0.1.0":"2026-06-13T17:55:22.817Z","0.1.1":"2026-06-14T10:40:45.983Z","0.1.2":"2026-06-15T16:43:58.414Z","0.1.3":"2026-06-20T02:57:08.675Z","0.1.4":"2026-06-20T05:28:04.248Z","0.1.5":"2026-06-20T18:48:11.329Z","0.1.6":"2026-07-13T20:31:30.793Z","0.1.7":"2026-07-13T21:31:14.763Z","0.1.8":"2026-07-13T22:27:44.447Z","0.1.9":"2026-07-14T00:41:16.850Z","0.1.10":"2026-07-14T02:00:35.499Z","0.1.11":"2026-07-27T16:30:02.431Z","0.2.0":"2026-07-27T17:54:31.507Z","0.2.1":"2026-07-27T19:18:02.843Z","0.2.2":"2026-07-27T20:04:15.714Z","0.2.3":"2026-08-25T05:48:14.277Z","0.2.4":"2026-09-19T17:59:42.328Z","0.2.5":"2026-09-30T18:06:03.311Z"},"bugs":{"url":"https://github.com/cyanheads/faostat-mcp-server/issues"},"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","homepage":"https://github.com/cyanheads/faostat-mcp-server#readme","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","faostat","fao","agriculture","food-security","agricultural-statistics","crop-production","agricultural-trade","food-balances","duckdb","sqlite","dataframe"],"repository":{"url":"git+https://github.com/cyanheads/faostat-mcp-server.git","type":"git"},"description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"readme":"<div align=\"center\">\n  <h1>@cyanheads/faostat-mcp-server</h1>\n  <p><b>Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, over MCP. STDIO & Streamable HTTP.</b>\n  <div>6 Tools • 0 Resources • 0 Prompts</div>\n  </p>\n</div>\n\n<div align=\"center\">\n\n[![Version](https://img.shields.io/badge/Version-0.2.5-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.1.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/faostat-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/faostat-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.2-blueviolet.svg?style=flat-square)](https://bun.sh/)\n\n[![Install in Claude Desktop](https://img.shields.io/badge/Install_in-Claude_Desktop-D97757?style=for-the-badge&logo=anthropic&logoColor=white)](https://github.com/cyanheads/faostat-mcp-server/releases/latest/download/faostat-mcp-server.mcpb) [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=faostat-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvZmFvc3RhdC1tY3Atc2VydmVyIl19) [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22faostat-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Ffaostat-mcp-server%22%5D%7D)\n\n[![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-67E8F9?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)\n\n</div>\n\n<div align=\"center\">\n\n**Public Hosted Server:** [https://faostat.caseyjhand.com/mcp](https://faostat.caseyjhand.com/mcp)\n\n</div>\n\n---\n\n## Overview\n\nGlobal food and agriculture statistics from the UN FAOSTAT bulk-download corpus — crop and livestock production, agricultural trade, food balances, food security and nutrition, land use, fertilizer use, and agrifood-systems emissions for 245+ countries and territories from 1961 to the present. Discover a domain, resolve area/item/element codes, then query the cube; large or merged result sets spill to a DataCanvas SQL surface for `GROUP BY`, ranking, and time-series analysis. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above.\n\n### Tools\n\n| Tool | Description |\n|:---|:---|\n| `faostat_list_domains` | Discover FAOSTAT statistical domains with codes, descriptions, last-update date, upstream row count, and local index status. The entry point — every query keys on a domain code. |\n| `faostat_resolve_codes` | Resolve human terms to the opaque integer codes a query needs (areas, items, elements), flagging each area as a country or an aggregate region. |\n| `faostat_query_observations` | Query a domain's cube by area(s), item(s), element(s), and year range. Inline preview for small results; large sets spill to a DataCanvas table. |\n| `faostat_commodity_profile` | Workflow: assemble top producers, the production trend, and trade flows for one commodity from the production and trade domains in a single call. |\n| `faostat_dataframe_query` | Run a read-only SQL `SELECT` against the canvas tables staged by the analytical tools. |\n| `faostat_dataframe_describe` | List the canvas tables staged this session, each with provenance, row count, and column schema. |\n\n## Capability reference\n\n### `faostat_list_domains` <sub>tool</sub>\n\n- Full FAOSTAT catalog (~69 domains) read live from the bulk manifest, annotated with local mirror status\n- `code` for an exact domain lookup; `topic` substring filter over code/name/topic; `indexed_only` to list only domains queryable from the local mirror\n- `offset` + `limit` (max 200, default 20) page the catalog — response reports `totalMatches`, `truncated`, and `nextOffset`\n- Each entry reports `indexed` / `index_ready` flags, local row count, and last completed sync\n\n---\n\n### `faostat_resolve_codes` <sub>tool</sub>\n\n- FTS5 full-text `query`, substring `name_contains`, or exact `code` lookup within a `dimension`: `area`, `item`, or `element`\n- Item/element matches are scoped to codes present in the given `domain`'s cube; area codes are shared across domains\n- Every area match is flagged `country` or `aggregate` (codes ≥ 5000, plus curated sub-threshold roll-ups such as China=351)\n- `limit` (max 200, default 50) + `offset` page the match set\n- Typed errors: `unknown_domain`, `index_not_ready`, `query_timeout`\n\n---\n\n### `faostat_query_observations` <sub>tool</sub>\n\n- Filters by `area_codes` / `item_codes` / `element_codes` and an inclusive `year_start` / `year_end` range\n- Aggregate regions excluded by default (`include_aggregates: false`); explicit `area_codes` bypass the exclusion\n- `limit` caps the inline page (default 200, max 1000); a match that exceeds it spills in full to a DataCanvas table (50,000-row staging cap) — `faostat_dataframe_describe` for its columns, then SQL via `faostat_dataframe_query`\n- Every row carries its data-quality `flag` (`A`/`E`/`I`/`B`/`M`/`T`/`X`, others per domain) — never dropped\n- Typed errors: `domain_not_indexed`, `index_not_ready`, `canvas_disabled`, `canvas_not_found`, `invalid_year_range`, `query_timeout`\n\n---\n\n### `faostat_commodity_profile` <sub>tool</sub>\n\n- Resolves `item_query` to up to 5 item codes, then ranks top producers/exporters/importers and returns an annual production trend in one call\n- Rankings are per-country sums grouped by unit, each country at its own latest reporting year; countries only (aggregates excluded)\n- Returns a partial, production-only profile with a notice — rather than failing — when the trade domain (TCL) isn't indexed or still syncing\n- `top_n` caps each ranked list (max 50); when the merged observation set is too large to inline it spills to a DataCanvas table — `faostat_dataframe_describe` for its columns, then `faostat_dataframe_query` for further SQL\n- Every staging outcome is stated in the notice: the staged table, a set that fit inline, a staging failure, or a disabled canvas\n- Typed errors: `no_match`, `domain_not_indexed`, `index_not_ready`, `invalid_year_range`, `canvas_not_found`, `query_timeout`\n\n---\n\n### `faostat_dataframe_query` <sub>tool</sub>\n\n- Single-statement read-only `SELECT` over staged `faostat_xxxxxxxx` tables — joins, aggregates, window functions, and CTEs all work\n- Writes, DDL, `DROP`, `COPY`, `PRAGMA`, `ATTACH`, external-file functions, and system catalogs (`information_schema`, `sqlite_master`, `duckdb_*`) are rejected\n- `row_limit` caps the response (default 1000, max 10000); `truncated` means more rows exist, with no exact total computed on this path\n- Typed errors: `canvas_disabled`, `canvas_not_found`, `missing_table`, `system_catalog_access`, `invalid_sql`\n\n---\n\n### `faostat_dataframe_describe` <sub>tool</sub>\n\n- Lists staged tables with source tool, query params, row count, column schema, and creation/expiry (2-hour sliding TTL)\n- `name` describes one table outright; otherwise `offset` + `limit` (max 100, default 20) page the listing newest-first\n- Typed errors: `canvas_disabled`, `canvas_not_found`, `missing_table`\n\n## Features\n\nBuilt on [`@cyanheads/mcp-ts-core`](https://github.com/cyanheads/mcp-ts-core): stdio and Streamable HTTP transports, pluggable auth (`none` / `jwt` / `oauth`), swappable storage (`in-memory`, `filesystem`, `Supabase`, `Cloudflare KV/R2/D1`), structured logging with optional OpenTelemetry tracing.\n\nFAOSTAT-specific:\n\n- Persistent local SQLite mirror of the FAOSTAT bulk corpus via the framework `MirrorService`, with FTS5 over the dimension labels driving code resolution\n- Streaming bulk-ZIP ingester — skips domains whose upstream update date hasn't advanced, and stream-parses the normalized CSV into SQLite without materializing the full file in memory\n- Config-driven domain selection (`FAOSTAT_DOMAINS`) — the indexed set can grow without code changes, and the full catalog stays browsable regardless\n- DataCanvas SQL surface (DuckDB) for `GROUP BY`, ranking, and time-series analysis over spilled result sets\n\nAgent-friendly output:\n\n- Country-vs-aggregate classification on every area, with aggregates excluded from sums by default — guards against double-counting World/continent rows with their member countries\n- Data-quality provenance — every observation carries its FAOSTAT flag (`A`/`E`/`I`/`B`/`M`/`T`/`X`, others per domain), never dropped from output\n- Graceful partial results — `faostat_commodity_profile` returns a production-only profile with a notice, rather than failing, when the trade domain isn't indexed\n- Typed error contracts — `index_not_ready`, `domain_not_indexed`, `canvas_disabled`, and others each carry a concrete recovery hint\n\n## Getting started\n\n### Public Hosted Instance\n\nA public instance is available at `https://faostat.caseyjhand.com/mcp` — no installation required. Point any MCP client at it via Streamable HTTP:\n\n```json\n{\n  \"mcpServers\": {\n    \"faostat-mcp-server\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://faostat.caseyjhand.com/mcp\"\n    }\n  }\n}\n```\n\n### Self-Hosted / Local\n\nAdd the following to your MCP client configuration file. The server runs entirely on a local mirror, so [build the mirror](#building-the-mirror) once before querying.\n\n```json\n{\n  \"mcpServers\": {\n    \"faostat-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"bunx\",\n      \"args\": [\"@cyanheads/faostat-mcp-server@latest\"],\n      \"env\": {\n        \"MCP_TRANSPORT_TYPE\": \"stdio\",\n        \"MCP_LOG_LEVEL\": \"info\"\n      }\n    }\n  }\n}\n```\n\nOr with npx (no Bun required):\n\n```json\n{\n  \"mcpServers\": {\n    \"faostat-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cyanheads/faostat-mcp-server@latest\"],\n      \"env\": {\n        \"MCP_TRANSPORT_TYPE\": \"stdio\",\n        \"MCP_LOG_LEVEL\": \"info\"\n      }\n    }\n  }\n}\n```\n\nOr with Docker:\n\n```json\n{\n  \"mcpServers\": {\n    \"faostat-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\", \"-i\", \"--rm\",\n        \"-e\", \"MCP_TRANSPORT_TYPE=stdio\",\n        \"-v\", \"faostat-mirror:/usr/src/app/.faostat-mirror\",\n        \"ghcr.io/cyanheads/faostat-mcp-server:latest\"\n      ]\n    }\n  }\n}\n```\n\nFor Streamable HTTP, set the transport and start the server:\n\n```sh\nMCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http\n# Server listens at http://localhost:3010/mcp\n```\n\nNo API key is required — the FAOSTAT bulk-download service is public and keyless.\n\n### Prerequisites\n\n- [Bun v1.3.0](https://bun.sh/) or higher (or Node.js v24+).\n- Disk for the local mirror. The default domain set (`QCL,TCL,FBS,FS,RL,GLE,RFN,QV`, ∼37M rows) needs a few GB; `TCL` (∼17M rows) dominates and can be dropped from `FAOSTAT_DOMAINS` on a constrained host.\n\n### Installation\n\n1. **Clone the repository:**\n\n```sh\ngit clone https://github.com/cyanheads/faostat-mcp-server.git\n```\n\n2. **Navigate into the directory:**\n\n```sh\ncd faostat-mcp-server\n```\n\n3. **Install dependencies:**\n\n```sh\nbun install\n```\n\n4. **Configure environment:**\n\n```sh\ncp .env.example .env\n# edit .env to override the default domain set, mirror path, or refresh cron\n```\n\n### Building the mirror\n\nThe corpus is not bundled. Before the data tools can answer queries, sync the selected domains into the local mirror:\n\n```sh\nbun run mirror:init      # one-time bootstrap — downloads and indexes the FAOSTAT_DOMAINS set\nbun run mirror:refresh   # re-sync domains whose upstream update date has advanced; build missing planner statistics\nbun run mirror:verify    # report sync status, local row counts, and sample reads\n```\n\n`mirror:init` is idempotent and resumable per domain — re-running after an interrupt re-streams only the unfinished domain ZIP. `FAOSTAT_DOMAINS` selects which domains are indexed; everything else in the catalog shows in `faostat_list_domains` with `indexed: false` until added and re-synced. On HTTP transport, set `FAOSTAT_REFRESH_CRON` to refresh in-process on a schedule; on stdio, run `mirror:refresh` out-of-band. The read tools return `index_not_ready` until the first sync completes.\n\n`mirror:refresh` also builds query-planner statistics (`ANALYZE`) for any selected domain that has none, even when its data is unchanged upstream — a mirror synced by an older release, or one whose last build failed. Otherwise the server builds them itself, in the background on a worker thread, the first time a data read touches that domain, and keeps answering meanwhile.\n\n## Configuration\n\n| Variable | Description | Default |\n|:---------|:------------|:--------|\n| `FAOSTAT_DOMAINS` | Comma-separated FAOSTAT domain codes to index into the local mirror. Domains outside this set appear in `faostat_list_domains` but are not queryable until added and re-synced. | `QCL,TCL,FBS,FS,RL,GLE,RFN,QV` |\n| `FAOSTAT_MIRROR_PATH` | Directory holding the per-domain SQLite stores and the shared dimension database. Created if absent. | `./.faostat-mirror` |\n| `FAOSTAT_BULK_BASE_URL` | FAOSTAT bulk-download service base URL (manifest + per-domain ZIPs). | `https://bulks-faostat.fao.org/production` |\n| `FAOSTAT_REFRESH_CRON` | Cron for the in-process incremental refresh (HTTP transport only). Omit to disable and run `mirror:refresh` out-of-band. | — |\n| `CANVAS_PROVIDER_TYPE` | DataCanvas engine. `duckdb` enables the SQL surface; set `none` to disable analytical staging (the `dataframe_*` tools then report `canvas_disabled` and large queries refuse to spill). | `duckdb` |\n| `MCP_TRANSPORT_TYPE` | Transport: `stdio` or `http`. | `stdio` |\n| `MCP_SESSION_MODE` | HTTP session mode: `stateless`, `stateful`, or `auto` (resolves to `stateful`). The server declares `stateless` in `src/index.ts` — no tool asks the caller for input mid-handler — and setting this overrides that declaration. | `stateless` |\n| `MCP_HTTP_PORT` | Port for the HTTP server. | `3010` |\n| `MCP_AUTH_MODE` | Auth mode: `none`, `jwt`, or `oauth`. | `none` |\n| `MCP_LOG_LEVEL` | Log level (RFC 5424). | `info` |\n| `LOGS_DIR` | Directory for log files (Node.js only). | `<project-root>/logs` |\n\nSee [`.env.example`](./.env.example) for the full list of optional overrides.\n\n## Running the server\n\n### Local development\n\n- **Build and run:**\n\n  ```sh\n  # One-time build\n  bun run rebuild\n\n  # Run the built server\n  bun run start:stdio\n  # or\n  bun run start:http\n  ```\n\n- **Run checks and tests:**\n\n  ```sh\n  bun run devcheck   # Lint, format, typecheck, security\n  bun run test       # Vitest suite under Bun, then under Node\n  bun run lint:mcp   # Validate MCP definitions against spec\n  ```\n\n### Docker\n\n```sh\ndocker build -t faostat-mcp-server .\ndocker run --rm -p 3010:3010 -v faostat-mirror:/usr/src/app/.faostat-mirror faostat-mcp-server\n```\n\nThe Dockerfile defaults to HTTP transport, stateless session mode, and logs to `/var/log/faostat-mcp-server`. A dedicated dependency stage installs the production tree for the target platform (DuckDB's prebuilt native binding included), so the slim runtime image carries no build toolchain and a multi-arch build never runs Bun under emulation. OpenTelemetry peer dependencies are installed by default — build with `--build-arg OTEL_ENABLED=false` to omit them. Mount a volume at the mirror path to persist the corpus across container recreations, and bootstrap it inside the container:\n\n```sh\ndocker exec <container> bun run mirror:init      # one-time bootstrap\ndocker exec <container> bun run mirror:verify    # sync status + sample reads\ndocker exec <container> bun run mirror:refresh   # re-sync updated domains; build missing planner statistics\n```\n\n## Project structure\n\n| Directory | Purpose |\n|:----------|:--------|\n| `src/index.ts` | `createApp()` entry point — registers the six tools, wires the mirror and canvas in `setup()`, schedules the HTTP refresh. |\n| `src/config` | Server-specific environment variable parsing and validation with Zod. |\n| `src/mcp-server/tools/definitions` | Tool definitions (`*.tool.ts`). |\n| `src/services/faostat-mirror` | The bulk-download mirror service — manifest discovery, streaming ZIP ingester, CSV parsing, dimension store, SQLite-backed `MirrorService` wiring, and the two-worker read pool (`read-pool.ts`, `read-worker.ts`) that runs cube reads and statistics builds off the main thread. |\n| `src/services/canvas-accessor.ts`, `canvas-staging.ts` | DataCanvas accessor and the spill/query/describe staging layer. |\n| `scripts/faostat-mirror-*.ts` | `mirror:init` / `mirror:refresh` / `mirror:verify` CLIs. |\n| `tests/` | Unit and integration tests mirroring `src/`. |\n\n## Development guide\n\nSee [`CLAUDE.md`/`AGENTS.md`](./CLAUDE.md) for development guidelines and architectural rules. The short version:\n\n- Handlers throw, framework catches — no `try/catch` in tool logic\n- Use `ctx.log` for request-scoped logging, `ctx.state` for tenant-scoped storage\n- Register new tools in the `createApp()` array in `src/index.ts`\n- Wrap external data: validate raw → normalize to domain type → return output schema; never fabricate missing fields, and carry the data-quality flag through\n\n## Data attribution\n\nData is sourced from [FAOSTAT](https://www.fao.org/faostat/), the statistics division of the Food and Agriculture Organization of the United Nations (FAO). FAOSTAT data is published under [CC BY-4.0](https://creativecommons.org/licenses/by/4.0/); cite FAO as the source in downstream use. This project is not affiliated with or endorsed by the FAO.\n\n## Contributing\n\nIssues are welcome. Run checks and tests before submitting:\n\n```sh\nbun run devcheck\nbun run test\n```\n\n## License\n\nApache-2.0 — see [LICENSE](LICENSE) for details.\n","readmeFilename":"README.md"}