{"_id":"@cyanheads/noaa-marine-mcp-server","_rev":"16-b461cd9f9bbaf7e967094b21a46a5b9a","name":"@cyanheads/noaa-marine-mcp-server","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.1":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.1.1","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/noaa-marine-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.1.1","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"972c5cf1b96a555e0f9284612b495eec1385fcfb","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.1.1.tgz","fileCount":57,"integrity":"sha512-7BIsyCHhc76JvPyV37Afv+TqgymB5YASfKBo6YzCC/qgHRi9BzoNLO7Hg2in+rZ1G5kY/Ngkcy+O4b+uSUlWmA==","signatures":[{"sig":"MEQCIG81U+P4Gy4aYwrgXf9yg/NV8L6u37F8eJCtFwW+2xVgAiBk3xqXtNyYnGxTtnsENhNHtYEMLMH0zq4nfHEMOwB4Yg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256213},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"972c5cf1b96a555e0f9284612b495eec1385fcfb","engines":{"bun":">=1.3.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/noaa-marine-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":"npm run build && npx -y @anthropic-ai/mcpb pack . dist/noaa-marine-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","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 .","lint:packaging":"bun run scripts/lint-packaging.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-7BIsyCHhc76JvPyV37Afv+TqgymB5YASfKBo6YzCC/qgHRi9BzoNLO7Hg2in+rZ1G5kY/Ngkcy+O4b+uSUlWmA==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.9.21"},"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.1","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.1.1_1780662343782_0.25745535624700167","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.1.2","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/noaa-marine-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.1.2","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"aade05fb9a7c223461cff147c99f049ba70b47ac","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.1.2.tgz","fileCount":58,"integrity":"sha512-xB6/IgzKkqf+Vljsqk99lskKBAFlWv5e/2OHUNA5Zrbhp7YHwBQBp8Pe6z4EJtlYfay4GOPFruIEOies7THFFw==","signatures":[{"sig":"MEQCIAgTajlGU3PPuMECdBp1LgrwKN18oqn6Zajpt0NHcfANAiA0ZtfOwtH14gwNI4/KYNwPWPkz2ocepPo5kK0V5uNYEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257191},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"aade05fb9a7c223461cff147c99f049ba70b47ac","engines":{"bun":">=1.3.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/noaa-marine-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":"npm run build && npx -y @anthropic-ai/mcpb pack . dist/noaa-marine-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","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 .","lint:packaging":"bun run scripts/lint-packaging.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-xB6/IgzKkqf+Vljsqk99lskKBAFlWv5e/2OHUNA5Zrbhp7YHwBQBp8Pe6z4EJtlYfay4GOPFruIEOies7THFFw==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.9.21"},"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.2","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.1.2_1780783390992_0.9106662218387835","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.1.3","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/noaa-marine-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.1.3","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"a5d0d236b2c049c39121467a1f99e20e736d52b0","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.1.3.tgz","fileCount":59,"integrity":"sha512-dwsvce4NQDn4WUQNnEcgtVT2Wkz+k3h6/r2CYKlAqWXuDvi0OTGxOb5v8pbP9N6jjib/CQHFaZ4mDvjwUQHkeg==","signatures":[{"sig":"MEQCIDWbWve44JB4ZaqxX6WPD9vHr+eCc8BPmo1dhHYyIVP8AiBrmzXpZSlNwJGa1pabbgyt/bYYlP6OG17mHcJXjPW1Jw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":267314},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"a5d0d236b2c049c39121467a1f99e20e736d52b0","engines":{"bun":">=1.3.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/noaa-marine-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":"npm run build && npx -y @anthropic-ai/mcpb pack . dist/noaa-marine-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","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 .","lint:packaging":"bun run scripts/lint-packaging.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-dwsvce4NQDn4WUQNnEcgtVT2Wkz+k3h6/r2CYKlAqWXuDvi0OTGxOb5v8pbP9N6jjib/CQHFaZ4mDvjwUQHkeg==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.9.21"},"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.2","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.1.3_1780813940873_0.7908756411834883","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.1.4","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/noaa-marine-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.1.4","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"2afec67be9429be8c1055fabe4a123343666b3f2","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.1.4.tgz","fileCount":60,"integrity":"sha512-WH247jQgNunQ2qW55rX3qn32UKUpbwLrj3Ey8EhhkaXYTdqKFKI8t04IE38hfh0A7YnUMCcAj62h5+i2dmmDJQ==","signatures":[{"sig":"MEYCIQCrvlIlYpBSjkEuCa7CmSohyvenPywhQRW5lwe/9zGgJgIhAIq7B+NiS4QSSWFbl7lvbYSqSmdNLwsadzscZybwvBxV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":271898},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"2afec67be9429be8c1055fabe4a123343666b3f2","engines":{"bun":">=1.3.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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","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 .","lint:packaging":"bun run scripts/lint-packaging.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-WH247jQgNunQ2qW55rX3qn32UKUpbwLrj3Ey8EhhkaXYTdqKFKI8t04IE38hfh0A7YnUMCcAj62h5+i2dmmDJQ==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.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/noaa-marine-mcp-server_0.1.4_1781323811676_0.3533116658930202","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.1.5","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/noaa-marine-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.1.5","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"3275faf1f857b7716c31de7b44b15b246869d01a","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.1.5.tgz","fileCount":61,"integrity":"sha512-weais4snP9YNqNOXPVGAvIbJWsK1EUgq20rq1xQMazCfVT2AgS3QuxGvG4wTSeFe5U2lAB/d8mFu+iGNzKGAkA==","signatures":[{"sig":"MEUCIQDKJsGH6pMjmDz6CLShSxLGYGCWDlZwA7rwrJHFgrmImQIgLKfLoXaubDguSS7NvsAk7KHMLMI073wHZqP1yL7U9oI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":274312},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"3275faf1f857b7716c31de7b44b15b246869d01a","engines":{"bun":">=1.3.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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","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 .","lint:packaging":"bun run scripts/lint-packaging.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-weais4snP9YNqNOXPVGAvIbJWsK1EUgq20rq1xQMazCfVT2AgS3QuxGvG4wTSeFe5U2lAB/d8mFu+iGNzKGAkA==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@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/noaa-marine-mcp-server_0.1.5_1781957685073_0.09603125197958007","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.1.6","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/noaa-marine-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.1.6","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"8e1ea544bf5deed9b040e3ea0394ae247702e20e","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.1.6.tgz","fileCount":66,"integrity":"sha512-4a4mKIDSfRW8FyvAuJTK+ahbuPalf+ZzkOlArS0F0TgvlrP7KMgwBSxoFgn94PC4k3DufH0vkwcB9RkNrKskQA==","signatures":[{"sig":"MEUCIHsjPHzfOygW1iH5cow7Via/kQ5EBXwAdDe2BHfOljwpAiEAwC3rL5bOSt5gabr9ulgXJPd7NjVwF1E1ZaEMlfbQXto=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286434},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"8e1ea544bf5deed9b040e3ea0394ae247702e20e","engines":{"bun":">=1.3.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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","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 .","lint:packaging":"bun run scripts/lint-packaging.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-4a4mKIDSfRW8FyvAuJTK+ahbuPalf+ZzkOlArS0F0TgvlrP7KMgwBSxoFgn94PC4k3DufH0vkwcB9RkNrKskQA==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@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.1","@biomejs/biome":"^2.5.1"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.1.6_1782867425293_0.9185853598932612","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.1.7","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.1.7","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"f6c37cd1bb24ccfb217ead892750d0b6847d28c1","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.1.7.tgz","fileCount":67,"integrity":"sha512-rousOzJryQy7nNtIZzmzVH5FVYhrt6Hy/OXtAfNLtPjNQP4Nir54yJXBWhZkE/awf54vCH7DVIAqwlr5++O/gA==","signatures":[{"sig":"MEYCIQCgqPwx+IGAG2y7ctkBXAdi0Ggn9YrcFSN5uL7tFpjiWgIhAIYoVUIS1pib+MX0GHODrXQFoxPNTsKma4S7gb+JXVSt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292204},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"f6c37cd1bb24ccfb217ead892750d0b6847d28c1","engines":{"bun":">=1.3.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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","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 .","lint:packaging":"bun run scripts/lint-packaging.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-rousOzJryQy7nNtIZzmzVH5FVYhrt6Hy/OXtAfNLtPjNQP4Nir54yJXBWhZkE/awf54vCH7DVIAqwlr5++O/gA==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.10","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"^26.1.1","@biomejs/biome":"^2.5.1","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.1.7_1784181467379_0.33731363015789917","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.2.0","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.2.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"ea278c8f76727d252ad20c34596858b237284d62","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.2.0.tgz","fileCount":72,"integrity":"sha512-KkNIWaIWGVxiPlVUa5cEnHkqWw2xEGqrpxvQ4mGFiwgIuvtrut/4zPiU+0t3konES+m7WqdSVPaurXN8ERzIcA==","signatures":[{"sig":"MEUCIQCfUnOmGM79+kzjlvd7/R4kkAr4UDqJHqTmILiQ7SFO8wIgGoP/aKTbguGNmVTVfDEpwBkejOGoWd+bcsIOKXUIrTA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":325199},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"ea278c8f76727d252ad20c34596858b237284d62","engines":{"bun":">=1.3.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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","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 .","lint:packaging":"bun run scripts/lint-packaging.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-KkNIWaIWGVxiPlVUa5cEnHkqWw2xEGqrpxvQ4mGFiwgIuvtrut/4zPiU+0t3konES+m7WqdSVPaurXN8ERzIcA==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.10","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"^26.1.1","@biomejs/biome":"^2.5.1","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.2.0_1784196517086_0.9670195185723787","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.3.0","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":{"url":"https://caseyjhand.com","name":"Casey Hand","email":"casey@caseyjhand.com"},"license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.3.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"6782f861dca7371161b9018e2e63535e77221a21","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.3.0.tgz","fileCount":77,"integrity":"sha512-QrQJDuPcHaBAUBTx+YrktwzYPeXSSUonsLnwpckFRqltX5ojMHXoQl/VSTAoebXSQW535b5dGGQYhfN8KyiDpg==","signatures":[{"sig":"MEQCIE24o3euyt/gxjYogz1T1WUX3ubWjmzogsEnYZtKDCrfAiAbY1kKYV3WwrsBOk2HIyYXz7UkS4kQOh3lGaMrVp6oVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":359220},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"bun":">=1.3.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"}],"gitHead":"ed29b7b38f1ce0b2e7f571a0df98bc598ed1bfdc","mcpName":"io.github.cyanheads/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","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 .","lint:packaging":"bun run scripts/lint-packaging.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/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"11.16.0","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"26.3.1","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.10","depcheck":"^1.4.7","tsc-alias":"^1.9.1","typescript":"^6.0.3","@types/node":"^26.1.1","@biomejs/biome":"^2.5.1","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.3.0_1784228312525_0.5606030519464491","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.3.1","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.3.1","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"9f87686f29b3b00d800affeaee2f3324f1e9cb2e","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.3.1.tgz","fileCount":78,"integrity":"sha512-EY2ad5lqIjUA5FL7mKPy2UTAiMfQUjGKOyWZmpniRvFyo+7vHFbSORR3eCGH78t1kTBywCDXxICfm6SzSqcdVg==","signatures":[{"sig":"MEUCIQDFRcq6GwdKPA5D5OJrI3hTVM3rh/RtDE5sS2d+mMPe+gIgfuEF2TCpw6kTUZYHCI3lDZzrNXMBhVIf83wr93e0rn4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":366740},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"9f87686f29b3b00d800affeaee2f3324f1e9cb2e","engines":{"bun":">=1.3.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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","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 .","lint:packaging":"bun run scripts/lint-packaging.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-EY2ad5lqIjUA5FL7mKPy2UTAiMfQUjGKOyWZmpniRvFyo+7vHFbSORR3eCGH78t1kTBywCDXxICfm6SzSqcdVg==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@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/noaa-marine-mcp-server_0.3.1_1787625766579_0.8304210612806009","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.3.2","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.3.2","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"b39bc31cc24886fa48708a546d171fe3f3d4261a","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.3.2.tgz","fileCount":79,"integrity":"sha512-uMTUZEenFnWMwQ/9E1xuApZsvPiVLMESKU2IplQwESk+vlzNr42lDqdpCO9bMmNU10MLZk6m5p64eCXtKr9zDw==","signatures":[{"sig":"MEUCIAFK6sTF3+CfJF6IkLb9hbYufPisC2LUwRKb0KJGBBjBAiEAue9kOKvWh8xND10VeGh3o1Gi6iKQPn9LqE1wkeIZaEA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375952},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"b39bc31cc24886fa48708a546d171fe3f3d4261a","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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.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 .","lint:packaging":"bun run scripts/lint-packaging.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-uMTUZEenFnWMwQ/9E1xuApZsvPiVLMESKU2IplQwESk+vlzNr42lDqdpCO9bMmNU10MLZk6m5p64eCXtKr9zDw==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.4","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.13.2"},"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.2.0","@biomejs/biome":"^2.5.13","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.3.2_1789556411193_0.12894250378431016","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.4.0","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.4.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"6e4f3eccf282cf02cb4626de05b0841533b896e5","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.4.0.tgz","fileCount":80,"integrity":"sha512-Fhj6LMeYjhfgn2ZHebGgSJiQyzb+iUOTdfP3yFxxVXA/I7H29xCEqWK4B2oJBhNyvJQUeB2efH8/xwjIrrkmKw==","signatures":[{"sig":"MEUCIQCm/XwyoF62VP4em9DnwSH7bP3FgTmE0LJr2UF9T8GMEgIgPV1AoC1ADTdyQce1X+ZYSSTXYvnwADn34fGdyWH2YzQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":426011},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"6e4f3eccf282cf02cb4626de05b0841533b896e5","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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.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 .","lint:packaging":"bun run scripts/lint-packaging.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-Fhj6LMeYjhfgn2ZHebGgSJiQyzb+iUOTdfP3yFxxVXA/I7H29xCEqWK4B2oJBhNyvJQUeB2efH8/xwjIrrkmKw==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.13.3"},"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.2.0","@biomejs/biome":"^2.5.13","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.4.0_1789664723920_0.89895832114399","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.5.0","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.5.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"d58a3c0495ec7c5c052b7fe89dad23c7eb1f5954","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.5.0.tgz","fileCount":89,"integrity":"sha512-Zr3rEUjS81CbKovqsDbuP5A1cKEpULrQjt/2UkLAXZNLDk7bhYYVBKvX6YSyo997w+mdLkrZrNgUlLzEh8LXfA==","signatures":[{"sig":"MEUCIBASDkr5ynx4WDq0phWodotaccRnPkWrqJO3jKHMOtXGAiEA13Oy32AoTMG65pkY3CxV+2Jl8uPaZU5KrCliKJmj3cI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCvnzk+rbYEEpyc5lEZkQxlQ0ucJTwL3UNQZBwpcH1mIAIhAOFlzWNmBYqd6YC1RmvwzRlKOwkTVaWRlhuaDRfJBq80","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546786},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"d58a3c0495ec7c5c052b7fe89dad23c7eb1f5954","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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.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 .","lint:packaging":"bun run scripts/lint-packaging.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-Zr3rEUjS81CbKovqsDbuP5A1cKEpULrQjt/2UkLAXZNLDk7bhYYVBKvX6YSyo997w+mdLkrZrNgUlLzEh8LXfA==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.13.3"},"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.13","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.5.0_1789675377619_0.431924161774198","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.5.1","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.5.1","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"4767d30cd016f56a0fc597dd7503751a9a52c01c","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.5.1.tgz","fileCount":90,"integrity":"sha512-RzifIFrp6F1giR1Zk8aokQQEtdn8N5f5QljHbyRJeIoRIJvNBs2soO0ScrEdoDornytVOCf/H0ZTNFZPy7ITnw==","signatures":[{"sig":"MEUCIEtAVp8Uc2zw/ONnf4MiJHqtvKDgDcMC+qabTHOBlF0IAiEAza/dS8ZsrpXBLJc2v0Ire45GVfZNp1nlQBIUCxmJ+4Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCYG558eqvfc3qJftGX+/7WWNh/3ZBioYgjL8z0jazZGAIhAJCwaXdrMi9MUdFuJe+xc69CZnbYvpnnHfwydDUcMH/i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":563923},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"4767d30cd016f56a0fc597dd7503751a9a52c01c","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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.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 .","lint:packaging":"bun run scripts/lint-packaging.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-RzifIFrp6F1giR1Zk8aokQQEtdn8N5f5QljHbyRJeIoRIJvNBs2soO0ScrEdoDornytVOCf/H0ZTNFZPy7ITnw==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.9","vitest":"^5.0.1","depcheck":"^1.4.7","tsc-alias":"^1.9.5","typescript":"^7.0.2","@types/node":"^26.6.2","@biomejs/biome":"^2.5.14","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.5.1_1790117915318_0.06356738930289962","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@cyanheads/noaa-marine-mcp-server","version":"0.5.2","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/noaa-marine-mcp-server@0.5.2","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"bin":{"noaa-marine-mcp-server":"dist/index.js"},"dist":{"shasum":"e11f10b7650e867ca7713f4d0aec8ca238c99729","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.5.2.tgz","fileCount":99,"integrity":"sha512-qRqsZLoH03AvjNl2iUcafmWfqox/ynn6+14a5grRygET0AO5PCLYv9m+3X75P2xzL7GicVCN1XL5iQNv1AyTCw==","signatures":[{"sig":"MEQCIH2nrbEqmp+KSnkHh3wC5uNEeZGbGzSY2G0xE1VBFlN8AiA0ENeQ4Lx1MH8Ln+uD0rJeQa/QKP0ptInsbY2SWTS6Yg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICPj9ZWUlggmlr4sZqkIGA7EFq1YHS+1iEoDnjOzYfhPAiARUJ0LdflAebvWjuf4c2GhGVuGkqLZGVcTL5RYLQGIEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":583667},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"e11f10b7650e867ca7713f4d0aec8ca238c99729","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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.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 .","lint:packaging":"bun run scripts/lint-packaging.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-qRqsZLoH03AvjNl2iUcafmWfqox/ynn6+14a5grRygET0AO5PCLYv9m+3X75P2xzL7GicVCN1XL5iQNv1AyTCw==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.9","vitest":"^5.0.1","depcheck":"^1.4.7","tsc-alias":"^1.9.5","typescript":"^7.0.2","@types/node":"^26.6.2","@biomejs/biome":"^2.5.14","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/noaa-marine-mcp-server_0.5.2_1790121051807_0.48547573417246515","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"_id":"@cyanheads/noaa-marine-mcp-server@0.6.0","bin":{"noaa-marine-mcp-server":"dist/index.js"},"bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"dist":{"shasum":"ee6bae07b36e03288ce3e365c856592bb064bf2a","tarball":"https://registry.npmjs.org/@cyanheads/noaa-marine-mcp-server/-/noaa-marine-mcp-server-0.6.0.tgz","fileCount":104,"integrity":"sha512-BFzZbubgjo9XRWOnfsAMLIIGh8rqDaBOxPbco3JUUOK3litDvyRk/59uMQGCK3mS1RHKqdnyKwsA/H5UujDCGw==","signatures":[{"sig":"MEUCIQDKx60AMgoEN6F9YLvWHRziVmsWbWb4s4gpP72i+X/iEQIgXcAMkpPu4NYT8n5KqSg0ZWdfAncZa1H6DPnVQka1CFA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFsKixytwgUPjrVMc/tWqZNKTF0AVA8TU8V0/fYwkvofAiBHDXZwCBytqjOGqZyxhYh62uMupSX/v/xTRBpsXWC5pw=="}],"unpackedSize":630731},"main":"dist/index.js","name":"@cyanheads/noaa-marine-mcp-server","type":"module","types":"dist/index.d.ts","author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","shasum":"ee6bae07b36e03288ce3e365c856592bb064bf2a","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/noaa-marine-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/noaa-marine-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/noaa-marine-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","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.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 .","lint:packaging":"bun run scripts/lint-packaging.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.6.0","_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"_integrity":"sha512-BFzZbubgjo9XRWOnfsAMLIIGh8rqDaBOxPbco3JUUOK3litDvyRk/59uMQGCK3mS1RHKqdnyKwsA/H5UujDCGw==","repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","directories":{},"maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.9","vitest":"^5.0.1","depcheck":"^1.4.7","tsc-alias":"^1.9.5","typescript":"^7.0.2","@types/node":"^26.6.2","@biomejs/biome":"^2.5.14","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/noaa-marine-mcp-server_0.6.0_1790123337777_0.3045139532027339"}}},"time":{"created":"2026-06-05T12:25:43.582Z","modified":"2026-09-23T00:28:58.104Z","0.1.1":"2026-06-05T12:25:44.027Z","0.1.2":"2026-06-06T22:03:11.144Z","0.1.3":"2026-06-07T06:32:21.030Z","0.1.4":"2026-06-13T04:10:11.868Z","0.1.5":"2026-06-20T12:14:45.229Z","0.1.6":"2026-07-01T00:57:05.455Z","0.1.7":"2026-07-16T05:57:47.508Z","0.2.0":"2026-07-16T10:08:37.225Z","0.3.0":"2026-07-16T18:58:32.677Z","0.3.1":"2026-08-25T02:42:46.765Z","0.3.2":"2026-09-16T11:00:11.341Z","0.4.0":"2026-09-17T17:05:24.125Z","0.5.0":"2026-09-17T20:02:57.816Z","0.5.1":"2026-09-22T22:58:35.398Z","0.5.2":"2026-09-22T23:50:51.901Z","0.6.0":"2026-09-23T00:28:57.873Z"},"bugs":{"url":"https://github.com/cyanheads/noaa-marine-mcp-server/issues"},"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","homepage":"https://github.com/cyanheads/noaa-marine-mcp-server#readme","keywords":["noaa","marine","tides","ndbc","buoy","co-ops","water-level","currents","coastal","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"repository":{"url":"git+https://github.com/cyanheads/noaa-marine-mcp-server.git","type":"git"},"description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"readme":"<div align=\"center\">\n  <h1>@cyanheads/noaa-marine-mcp-server</h1>\n  <p><b>Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.</b>\n  <div>8 Tools • 1 Resource</div>\n  </p>\n</div>\n\n<div align=\"center\">\n\n[![Version](https://img.shields.io/badge/Version-0.6.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/noaa-marine-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.0.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/noaa-marine-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/noaa-marine-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.0-blueviolet.svg?style=flat-square)](https://bun.sh/)\n\n</div>\n\n<div align=\"center\">\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/noaa-marine-mcp-server/releases/latest/download/noaa-marine-mcp-server.mcpb) [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=noaa-marine-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvbm9hYS1tYXJpbmUtbWNwLXNlcnZlciJdfQ==) [![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%22noaa-marine-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fnoaa-marine-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://noaa-marine.caseyjhand.com/mcp](https://noaa-marine.caseyjhand.com/mcp)\n\n</div>\n\n---\n\n## Overview\n\nUS tide, current, and buoy data from NOAA CO-OPS and NDBC. Find tide, water-level, and current stations plus NDBC buoys, then fetch tide predictions, observed water levels, tidal currents, and live buoy conditions from any MCP client. 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| `noaa_marine_find_stations` | Find CO-OPS tide/water-level/current stations and NDBC buoys by location, name, state, or data capability. |\n| `noaa_marine_get_tide_predictions` | High/low tide predictions or a 6-minute curve for a CO-OPS tide station. |\n| `noaa_marine_get_water_level` | Observed water level at a 6-minute, hourly, high/low, or daily-mean cadence, paired with predictions and a storm-surge residual summary. |\n| `noaa_marine_get_monthly_means` | Verified monthly tidal datums and extremes for a CO-OPS water-level station — the record for sea-level and tidal-range trends. |\n| `noaa_marine_get_currents` | CO-OPS tidal current predictions — max flood/ebb/slack events or a 6-minute curve. |\n| `noaa_marine_get_conditions` | Live NDBC buoy conditions: waves, wind, sea-surface and air temperature, pressure. |\n| `noaa_marine_get_current_profile` | Observed ocean-current depth profile from an NDBC ADCP buoy. |\n| `noaa_marine_get_ocean_observations` | Sub-surface water-column observations (temperature, salinity, oxygen, and more) from an NDBC station. |\n\n### Resources\n\n| Resource | Description |\n|:---|:---|\n| `noaa-marine://station/{station_id}` | Metadata for a CO-OPS or NDBC station by ID: name, coordinates, source, data capabilities, and — for NDBC — physical platform class. |\n\nAll resource data is also reachable via tools — use `noaa_marine_find_stations` to discover station IDs before accessing the resource.\n\n## Capability reference\n\n### `noaa_marine_find_stations` <sub>tool</sub>\n\n- Filter by proximity (`latitude`/`longitude` + `radius_km`, default 100 km, max 1000 km), name/ID substring (matched against both sources; an exact ID match sorts first), US state/territory (CO-OPS only), source (`coops`/`ndbc`/`all`), or `types`: data capabilities (`tide`, `current`, `water_level`, `met`, `current_profile`, `water_quality`) or NDBC platform class (`buoy`)\n- A CO-OPS station whose catalog rows carry no state code — every current station, and some tide and water-level stations — reports and filters on the state of the nearest state-bearing tide or water-level station within 25 km, marked `state_derived: true`; that state can be wrong on waters shared across a state or national border. A station with no such neighbor shows its own non-code catalog value (e.g. `FM`) if it publishes one, which no state filter matches\n- Returns up to `limit` (default 20, max 200) unified stations with source, coordinates, distance, data capabilities, and — for NDBC — physical platform class (buoy, fixed, oilrig, dart, tao, usv, other)\n- CO-OPS prediction stations also carry `prediction_class`, a third axis beside capability and platform: a tide station is `reference` (serving `hilo` and the 6-minute curve) or `subordinate` (`hilo` only, with `reference_id` naming where its offsets come from), while a current station reports its class per depth bin in `bins[]` alongside each bin's number and catalog depth in feet — the bin numbers `noaa_marine_get_currents` takes as `bin`\n- `total_found` and `truncated` report the full match count before the limit is applied\n- Zero matches is a success with `total_found: 0`, carrying a notice derived from the filters that were applied and an echo of the applied search\n- A catalog that fails to load is reported as an unread source alongside the results; when every needed catalog fails, that is a typed `sources_unavailable` error rather than an empty search, whose recovery names the couple-of-minutes wait when the CO-OPS catalog was throttled\n- Station lists are cached in-memory with a 6-hour TTL — first call after startup may be slightly slower\n- Typed `incomplete_coordinates` error when only one of latitude/longitude is supplied\n\n---\n\n### `noaa_marine_get_tide_predictions` <sub>tool</sub>\n\n- `hilo` (default, high/low events) or `6min` continuous curve; up to 1 year per request, with `begin_date`/`end_date` as `YYYYMMDD` or `YYYY-MM-DD`\n- A range whose rows fit the response budget returns whole; a longer one returns the leading rows as a page, with `rows_matched`, `rows_returned`, `page_offset`, and `next_offset` on both consumption surfaces. Walk it with `offset`; `limit` lowers a page and never raises it past the byte bound, and an `offset` past the last row is an empty page rather than an error\n- `6min` is served by reference stations only — a subordinate station's high and low events are offsets from a reference station and it has no 6-minute curve, so the request is refused before the upstream call as a typed `subordinate_no_6min` naming `hilo` and that reference station\n- Ten datums, matching what the CO-OPS predictions product accepts: MLLW (default, US nautical chart), MHHW, MHW, MTL, MSL, MLW, DTL, NAVD (NAVD88, where the station has a tie), STND (the station's own datum), CRD (Columbia River only)\n- A datum the station does not carry is a typed `datum_unavailable` naming the planes it does, not a report that the station ID was wrong; a Great Lakes station, which publishes no prediction series at any datum, is `no_predictions` pointing at `noaa_marine_get_water_level`\n- Time zone (`lst_ldt` default, `gmt`, `lst`) and units (`english` default feet, `metric` meters)\n- Typed `date_range_exceeded`, `invalid_date_range`, `station_not_found`, `no_predictions`, `datum_unavailable`, `subordinate_no_6min`, and `upstream_throttled` errors — the last a retryable `RateLimited` for the HTTP 403 CO-OPS answers a burst of requests with, whose recovery says to wait a couple of minutes\n\n---\n\n### `noaa_marine_get_water_level` <sub>tool</sub>\n\n- `interval` selects the cadence: `6min` (default) the full curve, `hourly` hourly heights, `high_low` the observed high and low waters with their `H`/`HH`/`L`/`LL` classification, `daily_mean` the daily mean at Great Lakes stations only. The `interval` is echoed in the output\n- `begin_date`/`end_date` as `YYYYMMDD` or `YYYY-MM-DD`. Per-interval CO-OPS range ceilings, rejected locally before the call: 31 days for `6min`, 365 for `hourly` and `high_low`, 3,655 for `daily_mean`. A coarser cadence is not automatically a smaller response — a year of `hourly` rows outweighs a month of 6-minute ones — so the ceiling bounds the request and the response budget bounds the page\n- Quality flags (`p` preliminary, `v` verified) on `6min` only: CO-OPS sends no flag with the coarser products, and `quality` is omitted rather than defaulted to preliminary, which would label verified data unverified. Sensor `sigma` on `6min` and `hourly`\n- Thirteen datums, matching what the CO-OPS water-level product accepts: MLLW (default, US nautical chart), MHHW, MHW, MTL, MSL, MLW, NAVD (NAVD88, where the station has a tie), STND (the station's own datum), IGLD and LWD (Great Lakes only), CRD (Columbia River only), LWI and HWI (lunitidal intervals)\n- A datum the station does not carry is a typed `datum_unavailable` whose recovery names the planes that do read it — `STND`, `IGLD`, `LWD` at a Great Lakes station, `MLLW`/`STND` where an NAVD88 tie is missing — rather than sending the caller back to re-verify an ID `noaa_marine_find_stations` just returned\n- A sensor outage leaves slots with no reading; they are dropped and counted in `gaps_dropped`, so `rows_matched` always counts only the slots that carried a value and continuous coverage across the range is only implied when that count is absent\n- Paired tide predictions at the interval matching the observed cadence, fetched in parallel — the observed series returns either way, and `predictions_status` says whether an empty prediction series means CO-OPS has none or the fetch failed. Not fetched at all on `daily_mean`, which has no paired series\n- `residual_summary` (max surge, max drawdown) only when both series are present, computed from the finite observed/predicted pairs across the whole matched series rather than the returned page. Each side clamps at zero, so a window that stayed above prediction reports `max_drawdown: 0` and one that stayed below reports `max_surge: 0`. Reported on `6min` and `hourly` only — observed high and low waters do not occur at the predicted extreme times, so a `high_low` join would rest on a small fraction of the events, and `daily_mean` has no paired series at all; the notice says which applies\n- A range whose rows fit the response budget returns whole; a longer one returns the leading rows as a page, with `rows_matched`, `rows_returned`, `page_offset`, and `next_offset` on both consumption surfaces. Observations carry the `offset` and the paired predictions follow by time window, so a page's two series always describe one span even after gap rows shorten the observed one\n- `daily_mean` is requested in local standard time whatever `time_zone` was passed — CO-OPS serves that product in LST only and silently shifts any other zone by a day\n- Typed `date_range_exceeded`, `invalid_date_range`, `station_not_found`, `no_data`, `datum_unavailable`, `great_lakes_only` (`daily_mean` at a coastal station), `verified_data_lag`, and `upstream_throttled` errors — `verified_data_lag` for an `hourly`, `high_low`, or `daily_mean` window ending on or after the first day of the prior month, which CO-OPS may not have verified yet since it verifies the coarser products monthly for the prior month (an earlier window it answers the same way is `no_data`, since waiting cannot help it), and `upstream_throttled` for the HTTP 403 CO-OPS answers a burst of requests with (a 403 on the paired prediction fetch alone leaves `predictions_status: \"unavailable\"` instead, with a notice naming the wait)\n\n---\n\n### `noaa_marine_get_monthly_means` <sub>tool</sub>\n\n- One row per station-month of the CO-OPS `monthly_mean` product: the month's `highest` and `lowest` water, its tidal datums (`mhhw`, `mhw`, `msl`, `mtl`, `mlw`, `mllw`, `dtl`), ranges (`gt`, `mn`, `dhq`, `dlq`), lunitidal intervals in hours (`hwi`, `lwi`), and CO-OPS's `inferred` code passed through verbatim — a code (`0`, `1`, `11` observed), not a boolean\n- Heights are relative to the requested datum — eleven reference planes: MLLW (default), MHHW, MHW, MTL, MSL, MLW, NAVD, STND, IGLD and LWD (Great Lakes only), CRD (Columbia River only) — in `english` feet or `metric` meters. The ranges (`gt`, `mn`, `dhq`, `dlq`) are differences between two planes, so they read the same under every datum. A value CO-OPS publishes as an empty string is omitted, never zeroed — a Great Lakes station at `IGLD` carries only `highest`, `msl`, and `lowest`\n- `begin_date`/`end_date` as `YYYYMMDD` or `YYYY-MM-DD`, spanning up to 73,000 days (the ceiling CO-OPS names), rejected locally before the call. The months the two dates fall in are the first and last returned; CO-OPS answers one month past `end_date`, and that month is dropped\n- A range whose months fit the response budget returns whole; a longer one — decades of months — returns the leading months as a page with `rows_matched`, `rows_returned`, `page_offset`, and `next_offset`. Walk it with `offset`; an `offset` past the last month is an empty page rather than an error\n- Typed `invalid_date_range`, `date_range_exceeded`, `station_not_found`, `datum_unavailable`, `verified_data_lag`, `no_data`, and `upstream_throttled` errors. CO-OPS answers an unpublished window with one sentence whatever the cause, so a window ending on or after the first day of the prior month is `verified_data_lag` and any earlier one is `no_data`\n- Returns the monthly record, not a trend — fitting one is left to the caller\n\n---\n\n### `noaa_marine_get_currents` <sub>tool</sub>\n\n- `MAX_SLACK` (default): max flood, max ebb, and slack events only — the actionable view for passage planning\n- `6min`: continuous current curve, each row carrying its own `flood`/`ebb`/`slack` sense plus the station mean flood or ebb bearing that sense implies (a station constant, not an instantaneous heading)\n- Both intervals are bounded by response size: a range whose rows fit the response budget returns whole; a longer one returns the leading rows as a page, with `rows_matched`, `rows_returned`, `page_offset`, and `next_offset` on both surfaces. `offset` and `limit` walk whichever series the interval selects — the max/slack events or the 6-minute curve\n- Units `english` (knots for speed, feet for the echoed depth, default) or `metric` (cm/s for speed, meters for depth) — CO-OPS publishes metric current speed in cm/s, the unit `noaa_marine_get_current_profile` also reports\n- `bin` selects one of a station's depth bins; omit it for the CO-OPS default, the shallowest. The bin CO-OPS answered with and its depth are echoed on every response, and a bin the station does not publish is a typed `bin_unavailable` naming the bins it does\n- A station whose currents CO-OPS will not predict as discrete events returns an empty list plus CO-OPS's own wording in the notice, not an error\n- Current station IDs are alphanumeric (e.g. `ACT4176`), distinct from numeric tide/water-level IDs\n- Up to 1 year per request, with `begin_date`/`end_date` as `YYYYMMDD` or `YYYY-MM-DD`; typed `date_range_exceeded`, `invalid_date_range`, `station_not_found`, `no_predictions`, `predictions_unavailable`, `bin_unavailable`, and `upstream_throttled` (the HTTP 403 CO-OPS answers a burst of requests with) errors\n\n---\n\n### `noaa_marine_get_conditions` <sub>tool</sub>\n\n- Wave height/period/direction, wind speed/gust/direction, sea-surface and air temperature, dew point, barometric pressure\n- All values SI except `tide_ft` (feet) and `visibility_nmi` (nautical miles), both rarely populated at offshore buoys\n- Every sensor field is nullable — `null` when the buoy did not report, never a fabricated value. `latitude`/`longitude` are `null` for a station absent from the NDBC catalog, and `observed_at` is always a valid instant\n- NDBC writes each block of columns on its own cycle, so a block resolves from the most recent row within 90 minutes that carried it: waves report their own `waves_observed_at`, and any other block read from an earlier row is named with its measurement time in the response notice. Row cadence runs 5–60 minutes depending on the station\n- Typed `buoy_not_found` and `no_sensor_data` errors\n\n---\n\n### `noaa_marine_get_current_profile` <sub>tool</sub>\n\n- Depth (m), direction (degrees true, flow-toward), and speed (cm/s) per bin, shallowest first\n- Observed NDBC ADCP measurement — distinct from `noaa_marine_get_currents`, a CO-OPS tidal-current *prediction*\n- Most NDBC stations serve no ADCP profile; use `find_stations` with `types: [\"current_profile\"]` to discover ones that do\n- Direction or speed is `null` per bin when the sensor did not report that component; typed `profile_not_found` and `no_current_data` errors\n\n---\n\n### `noaa_marine_get_ocean_observations` <sub>tool</sub>\n\n- Water temperature, conductivity, salinity, dissolved oxygen (% and ppm), chlorophyll, turbidity, pH, and redox potential per depth\n- Water-column counterpart to `noaa_marine_get_conditions` (surface weather and sea state)\n- Sensor coverage is sparse — most stations report only temperature and salinity; unreported values are `null`, never a fabricated zero\n- Find candidates with `find_stations` using `source=\"ndbc\"` and `types: [\"water_quality\"]`, NDBC's own water-quality catalog flag — a strong hint, not a guarantee, so expect `observations_not_found` on a flagged station serving no `.ocean` file\n\n---\n\n### `noaa-marine://station/{station_id}` <sub>resource</sub>\n\n- Station record as `application/json` — name, coordinates, source, capabilities, state (with `state_derived`, resolved as on `noaa_marine_find_stations`), the CO-OPS `prediction_class` (with `reference_id` or per-bin `bins[]`, exactly as on `noaa_marine_find_stations`), and (NDBC) platform class\n- `station_id` comes from `noaa_marine_find_stations`\n- Typed `station_not_found` when both catalogs were read and neither carries the ID, and `source_unavailable` when a catalog could not be read — a station only the unread catalog carries is never reported as nonexistent. When the unread CO-OPS catalog was throttled (HTTP 403), the recovery names the couple-of-minutes wait\n- Cached with a 6-hour TTL (`cacheHint`)\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\nCO-OPS / NDBC-specific:\n\n- In-memory station cache (6-hour TTL) for CO-OPS and NDBC station lists — discovery is fast after first startup\n- CO-OPS and NDBC integrated in a unified station model — `find_stations` fans out across both sources in parallel\n- NDBC fixed-width text parser normalizes `MM` (missing sensor data) to `null`, never passes it through as a string\n- Paired water-level and prediction fetches for storm-surge residual computation\n- CO-OPS `application=` courtesy parameter sent on every request (configurable via `NOAA_APPLICATION_ID`)\n\nAgent-friendly output:\n\n- Datum echoed on every tide/water-level response so agents state units and reference correctly without assumptions\n- `total_found` on `find_stations` shows the count before the `limit` slice, so agents know whether to re-query\n- All NDBC sensor fields explicitly nullable — agents don't fabricate missing readings\n- Typed station `source` (`coops` | `ndbc`) plus a data-capability `type` and (NDBC only) a `platform` class — agents branch on data, not string parsing\n\n## Getting started\n\nNo API key required. Both NOAA CO-OPS and NDBC are open, keyless data sources.\n\n### Public Hosted Instance\n\nConnect directly via Streamable HTTP — no install, no API key:\n\n```json\n{\n  \"mcpServers\": {\n    \"noaa-marine\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://noaa-marine.caseyjhand.com/mcp\"\n    }\n  }\n}\n```\n\n### Self-Hosted / Local\n\nAdd the following to your MCP client configuration file:\n\n```json\n{\n  \"mcpServers\": {\n    \"noaa-marine\": {\n      \"type\": \"stdio\",\n      \"command\": \"bunx\",\n      \"args\": [\"@cyanheads/noaa-marine-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    \"noaa-marine\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cyanheads/noaa-marine-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    \"noaa-marine\": {\n      \"type\": \"stdio\",\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\", \"-i\", \"--rm\",\n        \"-e\", \"MCP_TRANSPORT_TYPE=stdio\",\n        \"ghcr.io/cyanheads/noaa-marine-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\n### Prerequisites\n\n- [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).\n- No external API keys needed — NOAA CO-OPS and NDBC are fully open.\n\n### Installation\n\n1. **Clone the repository:**\n\n```sh\ngit clone https://github.com/cyanheads/noaa-marine-mcp-server.git\n```\n\n2. **Navigate into the directory:**\n\n```sh\ncd noaa-marine-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 if needed (all vars optional)\n```\n\n## Configuration\n\n| Variable | Description | Default |\n|:---------|:------------|:--------|\n| `NOAA_APPLICATION_ID` | Courtesy identifier sent as `application=` on CO-OPS requests. | `noaa-marine-mcp-server` |\n| `MCP_TRANSPORT_TYPE` | Transport: `stdio` or `http`. | `stdio` |\n| `MCP_HTTP_PORT` | Port for HTTP server. | `3010` |\n| `MCP_AUTH_MODE` | Auth mode: `none`, `jwt`, or `oauth`. | `none` |\n| `MCP_SESSION_MODE` | HTTP session mode: `auto`, `stateful`, or `stateless`. The server declares `stateless` in `src/index.ts`; set this to override. | `stateless` |\n| `MCP_LOG_LEVEL` | Log level (RFC 5424). | `info` |\n| `LOGS_DIR` | Directory for log files (Node.js only). | `<project-root>/logs` |\n| `OTEL_ENABLED` | Enable [OpenTelemetry instrumentation](https://github.com/cyanheads/mcp-ts-core/tree/main/docs/telemetry). | `false` |\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  bun run rebuild\n\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 test suite\n  bun run lint:mcp   # Validate MCP definitions against spec\n  ```\n\n### Docker\n\n```sh\ndocker build -t noaa-marine-mcp-server .\ndocker run --rm -p 3010:3010 noaa-marine-mcp-server\n```\n\nThe Dockerfile defaults to HTTP transport, stateless session mode, and logs to `/var/log/noaa-marine-mcp-server`. OpenTelemetry peer dependencies are installed by default — build with `--build-arg OTEL_ENABLED=false` to omit them.\n\n## Project structure\n\n| Path | Purpose |\n|:-----|:--------|\n| `src/index.ts` | `createApp()` entry point — registers tools, resource, and initializes services. |\n| `src/config/` | `NOAA_APPLICATION_ID` env var parsing with Zod. |\n| `src/services/coops/` | CO-OPS Tides & Currents API client: station list cache, data fetch, error detection. |\n| `src/services/ndbc/` | NDBC buoy service: active stations XML parser, realtime text parser. |\n| `src/mcp-server/tools/` | Eight tool definitions (`*.tool.ts`). |\n| `src/mcp-server/resources/` | Station metadata resource (`noaa-marine-station.resource.ts`). |\n| `tests/` | Vitest tests mirroring `src/`. |\n| `docs/` | Design doc and directory tree. |\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\n- Register tools and resources in `src/index.ts` directly (no barrels for this server)\n- Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields\n- NDBC `MM` values must normalize to `null`, not be passed through as strings\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"}