{"_id":"@cyanheads/wsdot-mcp-server","_rev":"24-12333788d4ba62c0e306104f4d7dc210","name":"@cyanheads/wsdot-mcp-server","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.1":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.1","keywords":["mcp","mcp-server","model-context-protocol","ai","llm","bun","stdio","streamable-http","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.1","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"77945e28e9271207ef2849a21592a92a4dc59545","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.1.tgz","fileCount":85,"integrity":"sha512-+tydrunpdNlUM52U9zGoBlSG7br8TiWWFTSILUeX3++409uC5yQRi5ldHDjpscshzlbkIsJJWpeS3lGGUW8MUQ==","signatures":[{"sig":"MEUCIHbai688EFXIAXP14MrNEfwJOgvjVH+vfdyDrLP5IpZkAiEAn6VVSw3DBvQbvVHxgl6N6Cpu5VL1uI70vZs0pvhazCY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":287823},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"77945e28e9271207ef2849a21592a92a4dc59545","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/wsdot-mcp-server","scripts":{"test":"vitest run","tree":"tsx scripts/tree.ts","build":"tsx scripts/build.ts","clean":"tsx scripts/clean.ts","start":"node dist/index.js","bundle":"npm run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb","format":"biome check --write --unsafe .","rebuild":"tsx scripts/clean.ts && tsx scripts/build.ts","devcheck":"tsx scripts/devcheck.ts","lint:mcp":"tsx scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"tsx scripts/list-skills.ts","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","lint:packaging":"tsx scripts/lint-packaging.ts","changelog:build":"tsx scripts/build-changelog.ts","changelog:check":"tsx scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-+tydrunpdNlUM52U9zGoBlSG7br8TiWWFTSILUeX3++409uC5yQRi5ldHDjpscshzlbkIsJJWpeS3lGGUW8MUQ==","repository":{"url":"https://github.com/cyanheads/wsdot-mcp-server","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","ignore":"^7.0.5","vitest":"^4.1.0","depcheck":"^1.4.7","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.6.0","@biomejs/biome":"^2.4.7"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.1.1_1779589324448_0.08721546792134371","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.2","keywords":["mcp","mcp-server","model-context-protocol","ai","llm","bun","stdio","streamable-http","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/wsdot-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.2","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"626b3d19a93ad93759609c9820b0e0c314d3dc72","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.2.tgz","fileCount":86,"integrity":"sha512-PGKtJh4Un8dw0dnEAWg+wmDT1fURS9BQT9f7S8FUoh6AVbV+QpjB0qlzj8nVPKmGCBefc8QHsLy9Kr6kDqVAMA==","signatures":[{"sig":"MEYCIQCu9vR3NuW4IOgx8FLcursorjYOUSyyppUndvSsDKq5mgIhAInlEkf0jyr6zxLoLvNoMhPXKDMVAyw/p/WfUV1O/koX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":283629},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"626b3d19a93ad93759609c9820b0e0c314d3dc72","engines":{"bun":">=1.3.2","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb","format":"biome check --write --unsafe","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","lint:packaging":"bun run scripts/lint-packaging.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-PGKtJh4Un8dw0dnEAWg+wmDT1fURS9BQT9f7S8FUoh6AVbV+QpjB0qlzj8nVPKmGCBefc8QHsLy9Kr6kDqVAMA==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.2","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.0","depcheck":"^1.4.7","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.6.0","@biomejs/biome":"^2.4.7"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.1.2_1779592430420_0.8923206908427002","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.3","keywords":["mcp","mcp-server","model-context-protocol","ai","llm","bun","stdio","streamable-http","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/wsdot-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.3","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"16bc3758deb2e31314a06123a524fa2e6821a422","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.3.tgz","fileCount":87,"integrity":"sha512-Jan+g8INcjSYtgApz7KfbETWmToOaFio5xR2kq/ux0pSZQD6YZr4XuU6NAXlpEpEafbJYwNzrxbo8g+f31sp4w==","signatures":[{"sig":"MEUCIH6Npw0OW8o58OdObR9ZQ5+9+RiL9VOFVhQ3iJfZgXh8AiEA9a/jashErk1eEGTYIBMgv/E5Og50f/o/lJ4OcvD2XaU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":284265},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"16bc3758deb2e31314a06123a524fa2e6821a422","engines":{"bun":">=1.3.2","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb","format":"biome check --write --unsafe","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","lint:packaging":"bun run scripts/lint-packaging.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-Jan+g8INcjSYtgApz7KfbETWmToOaFio5xR2kq/ux0pSZQD6YZr4XuU6NAXlpEpEafbJYwNzrxbo8g+f31sp4w==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.2","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.0","depcheck":"^1.4.7","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.6.0","@biomejs/biome":"^2.4.7"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.1.3_1779598847063_0.9937694631326965","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.4","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/wsdot-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.4","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"59b743e4cf4a2d7d1abcab9019d3e86dc4f4c9fd","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.4.tgz","fileCount":88,"integrity":"sha512-wBzsB3JdsyPHJaI7i4sBK7qJ25hDy9vUzaMndWlZ5mx5suqFBPN0h9j5/cYoLAYz6+Dd1p8ICPeBD+yoKxRxnw==","signatures":[{"sig":"MEUCIQC42VtHy3q+JKWFNDVz9JODeK61dD8IUi2h17vpA/m3JwIgS6ibLEesKHYCCpJR+PkToYusDq1aV4ZKnYChd+pEzTs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":285319},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"59b743e4cf4a2d7d1abcab9019d3e86dc4f4c9fd","engines":{"bun":">=1.3.2","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb","format":"biome check --write --unsafe","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","lint:packaging":"bun run scripts/lint-packaging.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-wBzsB3JdsyPHJaI7i4sBK7qJ25hDy9vUzaMndWlZ5mx5suqFBPN0h9j5/cYoLAYz6+Dd1p8ICPeBD+yoKxRxnw==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.2","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.7","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/wsdot-mcp-server_0.1.4_1780033785883_0.6878810385658143","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.5","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/wsdot-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.5","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"71d2355c891898fe154071d3614d3aa7472b3442","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.5.tgz","fileCount":89,"integrity":"sha512-lcYt8pxKbeMNVQ8k5v09kO1CLSrsu/v3e5GZogpUZSgwKF4dyLhDrXWlbbEe6JMXAj9OdLCquIf+oiV1BU3XVQ==","signatures":[{"sig":"MEUCIFM46zocKYOtAZoyFIbqJc0/W80H42Cl8tKg/hSoNPMiAiEAzpm8m/jlfSgWp3DWH8V88x9GF4MfZhHM2LiARpxkeiY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":303481},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"71d2355c891898fe154071d3614d3aa7472b3442","engines":{"bun":">=1.3.2","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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","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-lcYt8pxKbeMNVQ8k5v09kO1CLSrsu/v3e5GZogpUZSgwKF4dyLhDrXWlbbEe6JMXAj9OdLCquIf+oiV1BU3XVQ==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.2","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.7","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/wsdot-mcp-server_0.1.5_1780135962544_0.7435061358835346","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.6","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/wsdot-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.6","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"068c789f0b4ead6274d07268287fe5266e7e22c0","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.6.tgz","fileCount":90,"integrity":"sha512-rTlv0Uko2kljR7eUDdxkTzaTBRvOdcXPtn36fpLqi6sx8htTwEkvWU/8OxNGtUtWJFPIRxd0+NXfZzamYugQvQ==","signatures":[{"sig":"MEUCIQDzayXq7c9P+ioGD8InIeFvfA/THm7kznYVIDbbH1EdvAIgC27jly52U3ayk47MTlVY/Fi8clMm8AQlpF1VqiD3lNc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304607},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"068c789f0b4ead6274d07268287fe5266e7e22c0","engines":{"bun":">=1.3.2","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-rTlv0Uko2kljR7eUDdxkTzaTBRvOdcXPtn36fpLqi6sx8htTwEkvWU/8OxNGtUtWJFPIRxd0+NXfZzamYugQvQ==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.2","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/wsdot-mcp-server_0.1.6_1780413125526_0.8456553913618701","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.7","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/wsdot-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.7","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"d10ba9db1d22f6259d97a26af83104bdf6d7cf06","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.7.tgz","fileCount":91,"integrity":"sha512-6RLRh+u4WvqKXj0wm7SQZRCzJIAs9q8aU0V2ZRLQvHrislItGDRs+8yjxUX14xRhY+x3w00/E2HVv2Qzi63Dug==","signatures":[{"sig":"MEYCIQDFC3+e754Yn+konW8/3wrWps3zl4uX9NHK6CMWwKqkIwIhAO8j/A8ZnpIec3aHg0kbe1f7Ij+5T9DoqLrYXQNT5bai","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307401},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"d10ba9db1d22f6259d97a26af83104bdf6d7cf06","engines":{"bun":">=1.3.2","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-6RLRh+u4WvqKXj0wm7SQZRCzJIAs9q8aU0V2ZRLQvHrislItGDRs+8yjxUX14xRhY+x3w00/E2HVv2Qzi63Dug==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.2","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/wsdot-mcp-server_0.1.7_1780561285751_0.3861079737921409","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.8","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/wsdot-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.8","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"14038773bd03cb2b51ad5aa419fe733ce40350a6","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.8.tgz","fileCount":92,"integrity":"sha512-i0mWT7KAq9lXK+TqUDm6UClJLYb4DY9mlnZ1584za8AHfKWcQ9bncUiRub62QUZR8o+q2o8Mjp54yNRfsGbamg==","signatures":[{"sig":"MEUCIF5CKdTF8Aij2CIw8Tku+8eHINaO/sz67thGczmFvZfHAiEAw1kfoiSmvFcBz2UtEem5S4xeyiPP3KC6BksvYgFImlg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312911},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"14038773bd03cb2b51ad5aa419fe733ce40350a6","engines":{"bun":">=1.3.2","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-i0mWT7KAq9lXK+TqUDm6UClJLYb4DY9mlnZ1584za8AHfKWcQ9bncUiRub62QUZR8o+q2o8Mjp54yNRfsGbamg==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.2","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/wsdot-mcp-server_0.1.8_1780921687035_0.22811743775787918","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.9","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/wsdot-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.9","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"1b105ef59a6bcff33c831709bb133bdb9ca80161","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.9.tgz","fileCount":97,"integrity":"sha512-cxEICrypayeB8vhIEESFoGOUjAbI2QpCaEF261DK2FQHwfLTYe5KftuA/VD4Docr6XK5jWfoTtfTRxrLlLkBlw==","signatures":[{"sig":"MEQCICdsijtGDEGegkF40idsbboZ6yGt8jirmd/2clrv429ZAiAbtydJT5vykYvtBMcrS2vPIPjNH7yTz8U8BN6LNELGQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":325400},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"1b105ef59a6bcff33c831709bb133bdb9ca80161","engines":{"bun":">=1.3.2","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-cxEICrypayeB8vhIEESFoGOUjAbI2QpCaEF261DK2FQHwfLTYe5KftuA/VD4Docr6XK5jWfoTtfTRxrLlLkBlw==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.2","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/wsdot-mcp-server_0.1.9_1780964542174_0.781357445537368","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.10","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/wsdot-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.10","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"f4abbf9721f96c47be2f5a31b4df6ccf0442d17e","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.10.tgz","fileCount":98,"integrity":"sha512-bCrQP+xeDr4Ydo5bX1XPyS+bR+LhdTb9EbaEz2a0ivxb9/Ngi3Bmm8f92oEtzcyTMPKmcIa9X9jVlvbnPn/6uw==","signatures":[{"sig":"MEUCIBoQnHAF/f6DuOqXe8P4JYgg6R9NPpCmoyzt4sBXnykoAiEA92s+85w1NebQMlaKG39gL4nYk/BpgA01wjotvh8GD/o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":327893},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"f4abbf9721f96c47be2f5a31b4df6ccf0442d17e","engines":{"bun":">=1.3.2","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-bCrQP+xeDr4Ydo5bX1XPyS+bR+LhdTb9EbaEz2a0ivxb9/Ngi3Bmm8f92oEtzcyTMPKmcIa9X9jVlvbnPn/6uw==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.2","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/wsdot-mcp-server_0.1.10_1781325302728_0.9727522166351925","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.11","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/wsdot-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.11","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"c1b257242b15707865dc53c0d6c8e420c599322b","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.11.tgz","fileCount":99,"integrity":"sha512-o4JPam5PBte5p/i8so6rqg6jp8z7NU7Sdap9o9Adp0p5FxBRNLLGBjiIsJSvSNRK3hwy/4MhIXI4SjNc9745xA==","signatures":[{"sig":"MEQCIEeHTFgX1bQiim+sIs17Pl45kKxqhtPmZltpwNr5xDfaAiBXn2kjGQL2dNUlfD+hzdQ4AHP7TIej7X8RnhnExbqOOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329079},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"c1b257242b15707865dc53c0d6c8e420c599322b","engines":{"bun":">=1.3.2","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-o4JPam5PBte5p/i8so6rqg6jp8z7NU7Sdap9o9Adp0p5FxBRNLLGBjiIsJSvSNRK3hwy/4MhIXI4SjNc9745xA==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.2","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/wsdot-mcp-server_0.1.11_1781981210543_0.28341074614089967","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.12","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.12","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"aa879afd5c319120a4c1974515e8132732b03b42","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.12.tgz","fileCount":101,"integrity":"sha512-hFaePJOE2rUlutrOsbT1eQT300FGrl2SXFob5BeefnYVNpxahN0b10g4oqvITwuC7jf6obzQOcZLpLSFLuV83w==","signatures":[{"sig":"MEQCIHqO9/79NscHNyhwbp4ca4E3j0taaC7uGu7ap9pVYsnMAiA4mNrH1iS/ITNbF965iP6Ysk8CtU+c6UzXpzVny5+Y7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":355042},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"aa879afd5c319120a4c1974515e8132732b03b42","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-hFaePJOE2rUlutrOsbT1eQT300FGrl2SXFob5BeefnYVNpxahN0b10g4oqvITwuC7jf6obzQOcZLpLSFLuV83w==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"^26.1.1","@biomejs/biome":"^2.5.0","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.1.12_1783822802281_0.16190817604109387","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.13","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.13","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"1d0c5c482f8c1c2d425902cce483034ae3ad3c8c","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.13.tgz","fileCount":102,"integrity":"sha512-m3XQjR3C25Bh6TWDay/ZC05mQXDEebXCDOV4tv5Ag0OgTwJ5yaqAq3X9WUdbwls2pM2qvPah356bnRkAUd79wg==","signatures":[{"sig":"MEUCIQC1D+B41tUxkDm/EKZFuwlmKZxYlNTv0yCoMqTOQmL9DAIgLi3aAba7SeH5j8MpEz9r3FgjkkRHRpsViTs/lA18cPw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357539},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"1d0c5c482f8c1c2d425902cce483034ae3ad3c8c","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-m3XQjR3C25Bh6TWDay/ZC05mQXDEebXCDOV4tv5Ag0OgTwJ5yaqAq3X9WUdbwls2pM2qvPah356bnRkAUd79wg==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"^26.1.1","@biomejs/biome":"^2.5.0","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.1.13_1783824937331_0.549459139340966","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.14","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.14","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"305ba4deece928c91e34b8ce18a6cfc8ec08fe2b","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.14.tgz","fileCount":107,"integrity":"sha512-JPuD3rbTXfvBmC12VDFyr4D6tSyNbLFOQKAgtIjrfjKOxxa8x6nr/Ro57JUb+jGMxI7Dt3c6UBnG1/nZ7a0Rgg==","signatures":[{"sig":"MEYCIQCUB+gvB1ukpXrn+1X9bBqqCrSASUk3QywYxp1NzEHAQwIhAP1f2hCCRW0f/smhBtmI8PuIhzD8gCgvau5erdZaYpZj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":389000},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"305ba4deece928c91e34b8ce18a6cfc8ec08fe2b","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-JPuD3rbTXfvBmC12VDFyr4D6tSyNbLFOQKAgtIjrfjKOxxa8x6nr/Ro57JUb+jGMxI7Dt3c6UBnG1/nZ7a0Rgg==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.11.0"},"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":"^7.0.2","@types/node":"^26.1.2","@biomejs/biome":"^2.5.5","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.1.14_1785452121443_0.9375604448096997","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@cyanheads/wsdot-mcp-server","version":"0.1.15","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.1.15","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"a4ca18492fb6853b6abdb51d81c3ba5183dba8e7","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.1.15.tgz","fileCount":112,"integrity":"sha512-gXZ1MRKFKlyH+6oGn6TpWCTl8BUQTa8Tvq0D7dV4w6Aw2IY1p1GaY3J7ODsBW4Fpr5tAxrEaXfRehrujQi1Syw==","signatures":[{"sig":"MEQCIFBJe/2S5FHjLEim2Ab7xNFN45LByNkz9hQxFz6wJCptAiAIlshQxTQ6NpbNDYNi7bqarYevRnedCX+mfspLrVrczw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":400255},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"a4ca18492fb6853b6abdb51d81c3ba5183dba8e7","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-gXZ1MRKFKlyH+6oGn6TpWCTl8BUQTa8Tvq0D7dV4w6Aw2IY1p1GaY3J7ODsBW4Fpr5tAxrEaXfRehrujQi1Syw==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.11.0"},"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":"^7.0.2","@types/node":"^26.1.2","@biomejs/biome":"^2.5.5","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.1.15_1785454857935_0.753316790585429","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cyanheads/wsdot-mcp-server","version":"0.2.0","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.2.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"b233171de4e3489d915dfe69dc600f595f8c6caa","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.2.0.tgz","fileCount":113,"integrity":"sha512-WhbUxuAuBHboqLsHvDkj+5NR+Zd6FxEmptuZ+xDz6VKX+AiFgDvSk1rwVDfSZNWAr59fchJRlo63b0E2guWLCQ==","signatures":[{"sig":"MEUCIExw9J6J/jELhs6d6eTWoy9RlSkCA0rEHXPMJghdo+2bAiEA7ptGEjO7kCiHC8jTelcipIsdMZt0H740Pi0WNuJkpds=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":409119},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"b233171de4e3489d915dfe69dc600f595f8c6caa","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-WhbUxuAuBHboqLsHvDkj+5NR+Zd6FxEmptuZ+xDz6VKX+AiFgDvSk1rwVDfSZNWAr59fchJRlo63b0E2guWLCQ==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.11.0"},"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":"^7.0.2","@types/node":"^26.1.2","@biomejs/biome":"^2.5.5","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.2.0_1785456879321_0.259233885859931","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@cyanheads/wsdot-mcp-server","version":"0.2.1","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.2.1","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"d3271cd67a45dda239f3c6031030006882c52e4f","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.2.1.tgz","fileCount":118,"integrity":"sha512-Zm2m17KkUs5UFWGPXoNbr/guZVLxEyf0PRmFiqGtRAfJeuth6P28dFZE43ZvcqGQccb85MUeTyhhx/5PVYHeGA==","signatures":[{"sig":"MEYCIQDUbngtyDdtev7FY6RQdJLhZ3n8Ms2tEOR4IX7uT0dMzAIhAJMQ687A59bfnyuZhSDJYpsObtAzze4Wa/6AylRZkaYt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440487},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"d3271cd67a45dda239f3c6031030006882c52e4f","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-Zm2m17KkUs5UFWGPXoNbr/guZVLxEyf0PRmFiqGtRAfJeuth6P28dFZE43ZvcqGQccb85MUeTyhhx/5PVYHeGA==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.11.0"},"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":"^7.0.2","@types/node":"^26.1.2","@biomejs/biome":"^2.5.5","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.2.1_1785460338907_0.22925531279256806","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@cyanheads/wsdot-mcp-server","version":"0.2.2","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.2.2","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"c2dc5cd1069c5b3519283ed577a927cd594ad3ff","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.2.2.tgz","fileCount":123,"integrity":"sha512-oOVJOs5fmuFs++BkCApNU91AvTeF+W0f6i9LbxESosGwCQMgaez5KH0gilvi/5pO1U3Z4fSqWD8Phxb4q+6Ydg==","signatures":[{"sig":"MEUCIDDZ8PxN7NeWCOQJBW/foquecc8cxal1IKOiHOj+2IgkAiEAodpV6b9kn0XrQGJ7+9gJKJABnOeKxM8AtthnzitNnRI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":462830},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"c2dc5cd1069c5b3519283ed577a927cd594ad3ff","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-oOVJOs5fmuFs++BkCApNU91AvTeF+W0f6i9LbxESosGwCQMgaez5KH0gilvi/5pO1U3Z4fSqWD8Phxb4q+6Ydg==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.11.0"},"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":"^7.0.2","@types/node":"^26.1.2","@biomejs/biome":"^2.5.5","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.2.2_1785463796041_0.4088042822174449","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@cyanheads/wsdot-mcp-server","version":"0.2.3","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.2.3","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"09a9dfc119ae62ad28cf6b0d53bc517bedc48944","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.2.3.tgz","fileCount":128,"integrity":"sha512-i/sAL5Oj2I0HIScefSE4npJ2Exc7RUZPA/go0cTBJzYs/hUGOb7uhKabpQMRswo7TtPHOAZYJcNc5OCcQ4dtBw==","signatures":[{"sig":"MEYCIQCIxSMPSxf3zcnKjRNGXyUIYzFR3gfDDdiHxf9PvAl9aAIhALzCQjpHeErUXW52gMFW3/c3aGm5xbLE2YvPXAhr70Hr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":479214},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"09a9dfc119ae62ad28cf6b0d53bc517bedc48944","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-i/sAL5Oj2I0HIScefSE4npJ2Exc7RUZPA/go0cTBJzYs/hUGOb7uhKabpQMRswo7TtPHOAZYJcNc5OCcQ4dtBw==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.11.0"},"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":"^7.0.2","@types/node":"^26.1.2","@biomejs/biome":"^2.5.5","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.2.3_1785468613941_0.10323703333369294","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@cyanheads/wsdot-mcp-server","version":"0.2.4","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.2.4","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"d45e7656881e387d9e491d4cc2deddea6803d72c","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.2.4.tgz","fileCount":129,"integrity":"sha512-pdrRPyYJEbyce48Hw4uRKa3ehu+q36rJj80ni6mluRZkYTozRxoFijKAj4DRepBvUj3HN3nVBO59wuDK6v/W9g==","signatures":[{"sig":"MEQCIGE6vAgqaXQbF9vlb8KgULJN6yVNeA9af0YCyxN9PxP/AiBymFrJwXGUGDA/luqertFk26gxDanzPkq8lLjjZSb6WQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":487450},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"d45e7656881e387d9e491d4cc2deddea6803d72c","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-pdrRPyYJEbyce48Hw4uRKa3ehu+q36rJj80ni6mluRZkYTozRxoFijKAj4DRepBvUj3HN3nVBO59wuDK6v/W9g==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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/wsdot-mcp-server_0.2.4_1787641845329_0.32977081084953697","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@cyanheads/wsdot-mcp-server","version":"0.2.5","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.2.5","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"c27a68ae7bbd206cfa7a17abb9c0272600a5173b","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.2.5.tgz","fileCount":130,"integrity":"sha512-n8buZQ+2ga5Ez2ZJy+KohDWiylw/wromzYnFPJUJsOimPxA4xVSpPCDiddx/bN3CMp+WGgjBEmDZHwcknHrnjQ==","signatures":[{"sig":"MEQCIGTKNYdH1UuQW2aMu3/ugfC2gM1515huSxOLK0DLJQVlAiAoksaqwrWFRLjKFnqx4JYfFqlDox+zjl0MAPkmQNNa4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488146},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"c27a68ae7bbd206cfa7a17abb9c0272600a5173b","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http bun ./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 bun ./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-n8buZQ+2ga5Ez2ZJy+KohDWiylw/wromzYnFPJUJsOimPxA4xVSpPCDiddx/bN3CMp+WGgjBEmDZHwcknHrnjQ==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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/wsdot-mcp-server_0.2.5_1787642232358_0.9756644228744078","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@cyanheads/wsdot-mcp-server","version":"0.2.6","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.2.6","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"487288b8e11b29e415aa7a8c9f969ca1c5acd8f4","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.2.6.tgz","fileCount":131,"integrity":"sha512-EsBYiGChhasVwGjZiUpJQ+/8Gpzj+DZFxgIuXMx0/4Vz6ujfdeN8wjn2oWz9IfRDeT+JKOJ05xrbnxVHGZbitA==","signatures":[{"sig":"MEYCIQDD1fdWByYXtujVqPgpw/CAuhKPd1GZJomW+KW5MsqneQIhAN+cRYbzVpiBKkj4Di6iH8YGV8YDfPEp15EP5q22K+4q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCPQhckTLI+F0CO75ph/2p6bKzB7BOsFMM+jVhVWT3F0QIgXp2fydASEE7HTjYVsL4doMzWO4MFT/5ltw36NpDDPy4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":501638},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"487288b8e11b29e415aa7a8c9f969ca1c5acd8f4","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","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 bun ./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 bun ./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-EsBYiGChhasVwGjZiUpJQ+/8Gpzj+DZFxgIuXMx0/4Vz6ujfdeN8wjn2oWz9IfRDeT+JKOJ05xrbnxVHGZbitA==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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.1","@biomejs/biome":"^2.5.14","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/wsdot-mcp-server_0.2.6_1789933815610_0.3061641270475617","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cyanheads/wsdot-mcp-server","version":"0.3.0","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/wsdot-mcp-server@0.3.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"bin":{"wsdot-mcp-server":"dist/index.js"},"dist":{"shasum":"35416e34475a0f9d9d5e8ef364518ed7ed940d62","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.3.0.tgz","fileCount":136,"integrity":"sha512-LzJJFfC0cQSBvy6f/OC+A41EsmNnV9O+zL3vzJBs7tyCGqYsw+godOUVOCyjTnEh6T4WMloWlDBKjuWK+O1y9Q==","signatures":[{"sig":"MEUCIQCQBgNVTd7oVwrqi3a+n6vvIQgGTjonnd5zOQ9hMgjsJQIgLkfsudES149u6fO+96/FqLPHlbyqWdlh9p90lbZQkFE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC1/NZFlRJOm/hQzZY9rmUtyhaEmX2wMrKiOE+pIPkTngIhAM+Vjh+OzZpAKl47GRzZxaXi1UNYUhZoJSMy34w2jcrt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":530627},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"35416e34475a0f9d9d5e8ef364518ed7ed940d62","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","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 bun ./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 bun ./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-LzJJFfC0cQSBvy6f/OC+A41EsmNnV9O+zL3vzJBs7tyCGqYsw+godOUVOCyjTnEh6T4WMloWlDBKjuWK+O1y9Q==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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/wsdot-mcp-server_0.3.0_1790284252377_0.7436413184368276","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"_id":"@cyanheads/wsdot-mcp-server@0.4.0","bin":{"wsdot-mcp-server":"dist/index.js"},"bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"dist":{"shasum":"809bfe3ab8f55ce782ee94ec53875f58b4d4f014","tarball":"https://registry.npmjs.org/@cyanheads/wsdot-mcp-server/-/wsdot-mcp-server-0.4.0.tgz","fileCount":141,"integrity":"sha512-Uoq0LJjfAiMyTXoI1FZo+l1NNKz5OUIhL1lztH/1USHcdD5kaqROopr66sYj65VV1C4WUs9WVe6uu+MhCVZDnA==","signatures":[{"sig":"MEQCIEcB53paRPsfHIuD+9JL+mjcyOuecZTc/atCC25Qj048AiA5xp+wkMOj9o/E0uS981Qf2g3qioI2rfqMKV3Mp9Z3Eg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCzU23dZlAGEcJJ+uh4qVkc3dkOT/1lZO/zjrshVHWV4gIhAIvj1fDnHZSinLuKUIrAOXAqBHdQgk0fXSbYHIlBlcmj"}],"unpackedSize":567018},"main":"dist/index.js","name":"@cyanheads/wsdot-mcp-server","type":"module","types":"dist/index.d.ts","author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","shasum":"809bfe3ab8f55ce782ee94ec53875f58b4d4f014","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/wsdot-mcp-server","scripts":{"test":"bunx vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/wsdot-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/wsdot-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run build","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 bun ./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 bun ./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.4.0","_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"_integrity":"sha512-Uoq0LJjfAiMyTXoI1FZo+l1NNKz5OUIhL1lztH/1USHcdD5kaqROopr66sYj65VV1C4WUs9WVe6uu+MhCVZDnA==","repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts 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/wsdot-mcp-server_0.4.0_1790289767667_0.9303353684016626"}}},"time":{"created":"2026-05-24T02:22:04.246Z","modified":"2026-09-24T22:42:48.013Z","0.1.1":"2026-05-24T02:22:04.612Z","0.1.2":"2026-05-24T03:13:50.577Z","0.1.3":"2026-05-24T05:00:47.231Z","0.1.4":"2026-05-29T05:49:46.025Z","0.1.5":"2026-05-30T10:12:42.681Z","0.1.6":"2026-06-02T15:12:05.671Z","0.1.7":"2026-06-04T08:21:25.901Z","0.1.8":"2026-06-08T12:28:07.176Z","0.1.9":"2026-06-09T00:22:22.332Z","0.1.10":"2026-06-13T04:35:02.884Z","0.1.11":"2026-06-20T18:46:50.678Z","0.1.12":"2026-07-12T02:20:02.481Z","0.1.13":"2026-07-12T02:55:37.459Z","0.1.14":"2026-07-30T22:55:21.589Z","0.1.15":"2026-07-30T23:40:58.089Z","0.2.0":"2026-07-31T00:14:39.479Z","0.2.1":"2026-07-31T01:12:19.104Z","0.2.2":"2026-07-31T02:09:56.184Z","0.2.3":"2026-07-31T03:30:14.099Z","0.2.4":"2026-08-25T07:10:45.500Z","0.2.5":"2026-08-25T07:17:12.503Z","0.2.6":"2026-09-20T19:50:15.712Z","0.3.0":"2026-09-24T21:10:52.489Z","0.4.0":"2026-09-24T22:42:47.857Z"},"bugs":{"url":"https://github.com/cyanheads/wsdot-mcp-server/issues"},"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","homepage":"https://github.com/cyanheads/wsdot-mcp-server#readme","keywords":["mcp","mcp-server","model-context-protocol","ai","bun","wsdot","traffic","ferries","washington","washington-state","typescript"],"repository":{"url":"git+https://github.com/cyanheads/wsdot-mcp-server.git","type":"git"},"description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts via MCP. STDIO or Streamable HTTP.","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"readme":"<div align=\"center\">\n  <h1>@cyanheads/wsdot-mcp-server</h1>\n  <p><b>Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts via MCP. STDIO or Streamable HTTP.</b>\n  <div>12 Tools</div>\n  </p>\n</div>\n\n<div align=\"center\">\n\n[![Version](https://img.shields.io/badge/Version-0.4.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/wsdot-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/wsdot-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/wsdot-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%2B-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/wsdot-mcp-server/releases/latest/download/wsdot-mcp-server.mcpb) [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=wsdot-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvd3Nkb3QtbWNwLXNlcnZlciJdLCJlbnYiOnsiV1NET1RfQUNDRVNTX0NPREUiOiJ5b3VyLWFjY2Vzcy1jb2RlIn19) [![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%22wsdot-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fwsdot-mcp-server%22%5D%2C%22env%22%3A%7B%22WSDOT_ACCESS_CODE%22%3A%22your-access-code%22%7D%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**Public Hosted Server:** [https://wsdot.caseyjhand.com/mcp](https://wsdot.caseyjhand.com/mcp)\n\n</div>\n\n---\n\n## Overview\n\nWashington State transportation data from the WSDOT Traveler API and the WSF Ferry API. Query mountain pass and highway conditions, search alerts and cameras, and track ferry schedules, vessel locations, and terminal space 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| `wsdot_get_mountain_passes` | Current conditions for all WA mountain passes: status, road condition, traction laws, temperature, elevation. |\n| `wsdot_search_alerts` | Active highway alerts — incidents, construction, closures — filterable by state route, WSDOT region, and milepost range. |\n| `wsdot_get_travel_times` | Current vs. average travel times for named WA highway corridors (I-5, I-90, SR 520, etc.) with congestion delay. |\n| `wsdot_get_toll_rates` | Dynamic toll rates for WA express lanes and tolled facilities — SR 99, SR 167 HOT, I-405 Express, SR 509, SR 520 — filterable by route. |\n| `wsdot_get_border_waits` | Current vehicle wait times at all WA/Canada land border crossings. |\n| `wsdot_search_cameras` | Highway camera metadata and image URLs, filterable by state route, region, milepost range, and title words. |\n| `wsdot_get_ferry_terminals` | All WSF ferry terminals with numeric IDs needed for schedule and space lookups, plus coordinates. |\n| `wsdot_get_ferry_routes` | WSF routes operating on a given date — route ID, abbreviation, description, and the terminal pairs each serves, for route discovery, schedule lookups, and ferry-alert cross-reference. |\n| `wsdot_get_ferry_schedule` | Departure times for a specific WSF route — today-remaining or full-day future mode — with each sailing's vessel, loading rule, and notes. |\n| `wsdot_get_vessel_locations` | Real-time AIS positions, speed, heading, ETA, and dock status for all active WSF vessels. |\n| `wsdot_get_terminal_space` | Drive-up and reservable vehicle space available at WSF terminals for upcoming sailings. |\n| `wsdot_get_ferry_alerts` | Active WSF service disruptions and bulletins with impacted route IDs. |\n\n## Capability reference\n\n### `wsdot_get_mountain_passes` <sub>tool</sub>\n\n- No input parameters — returns current conditions for all 16 WA mountain passes (Snoqualmie, Stevens, White, Blewett, Cayuse, and others) in one call\n- Fields include road condition, weather, temperature, elevation, and up to two directional traction/travel restrictions\n- Use for \"is the pass open?\", traction-law checks, or winter driving planning\n\n---\n\n### `wsdot_search_alerts` <sub>tool</sub>\n\n- Filter by state route — natural forms all work: `\"I-90\"`, `\"90\"`, `\"090\"`, or `\"SR 520\"` / `\"520\"`\n- Filter by WSDOT region name: Northwest, Olympic, Southwest, South Central, North Central, Eastern (case-insensitive; any other value is rejected with `invalid_region`)\n- Filter by milepost range to scope to a corridor — an alert matches when its extent overlaps the range, so a closure that spans the boundary is returned. Either bound may be given alone; a start above the end is rejected with `invalid_milepost_range`\n- Omit all filters to return all current statewide alerts; `stateRoute` and `region` accept at most 200 characters\n- Descriptions are normalized to plain text; a link renders inline as `link text (url)`\n- Results ordered by `alertId` and paged (default 20, max 500) — pass `offset`/`limit`; a page also ends early at a 24,000-byte response budget, and the notice reports the next offset\n\n---\n\n### `wsdot_get_travel_times` <sub>tool</sub>\n\n- Covers I-5, I-90, SR 520, SR 99, I-405, SR 167, and others\n- Filter by route (`\"I-5\"`, `\"5\"`, `\"SR 520\"`) to get every corridor measured on it, or by any text to match corridor names (`\"Everett\"`); `route` accepts at most 200 characters\n- When current time exceeds average, the corridor is congested; the delta is the delay\n- Reversible express-lane corridors report no travel time while closed in the queried direction — those figures are omitted rather than reported as zero minutes\n- Results are paged (default 50, max 500) — pass `offset`/`limit`; a page also ends early at a 24,000-byte response budget, and the notice reports the next offset\n\n---\n\n### `wsdot_get_toll_rates` <sub>tool</sub>\n\n- Covers SR 99 (WSDOT Tunnel), SR 167 HOT Lanes, I-405 Express Lanes, the SR 509 tolled segment, and the SR 520 Bridge\n- Rates are time-banded and change dynamically based on traffic conditions\n- Filter to one facility with `stateRoute` — `\"SR 520\"`, `\"520\"`, `\"0520\"`, `\"I-405\"`, and `\"405\"` all work, matched against the posted designation, so `\"SR 405\"` matches nothing. A route with no tolled facility returns an empty page whose notice names the tolled routes; the filter (at most 200 characters) is applied before paging and echoed in `appliedFilters`\n- Each row's `stateRoute` is the bare, zero-padded route number the feed carries (`\"099\"`, `\"405\"`) with no route type; the rendered text resolves the posted designation, so I-405 reads as `I-405` rather than `SR 405`\n- `travelDirection` is the feed's code, not the direction of travel: SR 99, SR 509, and SR 520 carry one fixed code per facility although trips run both ways — read direction from the segment's start and end\n- Each entry leads with its readable `startLocationName → endLocationName` segment; the opaque upstream trip key stays available as `tripName`\n- Results are paged (default 50, max 500) — pass `offset`/`limit`; a page also ends early at a 24,000-byte response budget, and the notice reports the next offset\n\n---\n\n### `wsdot_get_border_waits` <sub>tool</sub>\n\n- No input parameters — covers I-5 (Peace Arch, Blaine), SR 543 (Pacific Highway, Blaine), SR 539 (Lynden), and SR 9 (Sumas)\n- Each crossing reports a general-purpose lane and a Nexus lane; SR 539 adds a truck lane and SR 543 adds truck and FAST truck lanes — eleven entries in `crossings[]`, one per lane\n- `crossingName` is a route code (e.g. `I5`, `SR543Trucks`); `location.description` holds the readable name\n- Wait times in minutes; `updateTime` is ISO 8601. A crossing reporting no current data is still returned — only `waitTimeInMinutes` is omitted, and the rendered text reads `Not available`\n\n---\n\n### `wsdot_search_cameras` <sub>tool</sub>\n\n- Filter by state route (`\"I-90\"`, `\"90\"`, `\"SR 520\"`, or `\"520\"` all work), WSDOT region code, milepost range, or words in the camera title; `stateRoute`, `region`, and `titleContains` accept at most 200 characters\n- Camera road names carry a route-type prefix, so `\"SR 26\"` excludes US 26 and `\"US 97\"` excludes US 97A; a bare `\"26\"` returns both\n- Region codes: `NW`, `SW`, `OL`, `ER`, `SC`, `NC`, `OS` (Oregon — the TripCheck cameras around Portland), and `WA` (airport cameras plus a few ferry-terminal cameras — most ferry-terminal cameras sit in `NW` and `OL`). Case-insensitive; any other value is rejected with `invalid_region`\n- `titleContains` matches the title as WSDOT wrote it — case-insensitive, every word must appear in any order — so `\"Snoqualmie\"` returns Snoqualmie Summit and East Snoqualmie Summit but not Hyak. Titles lead with route and milepost, so filter a route with `stateRoute`\n- Either milepost bound may be given alone; a start above the end is rejected with `invalid_milepost_range`\n- Returns metadata and image URLs — camera images are copyright WSDOT, not fetched as bytes\n- Results are ordered by `cameraId` and paged (default 50, max 500) — pass `offset`/`limit`; a page also ends early at a 24,000-byte response budget, and the notice reports the next offset\n\n---\n\n### `wsdot_get_ferry_terminals` <sub>tool</sub>\n\n- No input parameters — returns all 20 WSF ferry terminals; the list rarely changes\n- Call this first to resolve human-readable names (e.g. \"Bainbridge Island\", \"Seattle\", \"Kingston\") to the numeric IDs required by `wsdot_get_ferry_schedule` and `wsdot_get_terminal_space`\n- Each terminal also carries its abbreviation and latitude/longitude\n\n---\n\n### `wsdot_get_ferry_routes` <sub>tool</sub>\n\n- Optional `tripDate` (ISO 8601 `YYYY-MM-DD`); defaults to today\n- Returns each route's ID, abbreviation, and description, plus `terminalPairs`: the directed departing → arriving terminal pairs (IDs and names) the route serves that day. These are exactly the pairs `wsdot_get_ferry_schedule` accepts for that date; a route serving none carries an empty list\n- Route IDs correspond to `impactedRouteIds` in `wsdot_get_ferry_alerts` — use this tool to resolve alert route IDs to route names\n- A date outside the range WSF has published (before today, or past the posted schedule) returns a typed `invalid_date` error stating WSF's range. A date inside that range with no sailings loaded yet returns an empty list and a notice\n- The pairs cost one lookup per route, cached per date until WSF signals a schedule change; if any lookup fails, the whole call fails\n\n---\n\n### `wsdot_get_ferry_schedule` <sub>tool</sub>\n\n- Requires `departingTerminalId` and `arrivingTerminalId`, both positive integers — use `wsdot_get_ferry_terminals` first, or pick a pair from `terminalPairs` on `wsdot_get_ferry_routes`\n- Optional `tripDate` (defaults to today) and `remainingOnly: true` (only future departures for today; ignored for any other date, and the response then reports `remainingOnly: false`)\n- Each sailing carries `vesselId` (the ID `wsdot_get_vessel_locations` reports), `loadingRule`, `vesselHandicapAccessible`, and `annotationIndexes` into the pair's `annotations`, notes such as \"No interisland vehicles. Foot passenger and bikes okay.\" The rendered text lists each sailing's notes under it. WSF does not document `loadingRule`: 3 appears on nearly every sailing and 1 only on vehicle-restricted ones, so read the notes for the restriction itself\n- `annotations` and the pair-wide `sailingNotes` arrive from WSF as HTML and are returned as plain text, with links kept as `link text (url)`\n- `departureTime` and `arrivalTime` are ISO 8601 **UTC**, while `tripDate` is the Pacific service day — an evening sailing therefore carries the following UTC calendar date and will not match `tripDate`. Convert to `America/Los_Angeles` before quoting a clock time\n- `arrivalTime` is populated on some routes and absent on others\n- No cancellation status — WSF drops a cancelled sailing from the schedule rather than flagging it, so a listed sailing is not confirmation it will run; check `wsdot_get_ferry_alerts`, which reports disruptions at route level\n- An invalid or non-through terminal pair returns a typed `invalid_terminal_pair` error rather than an empty schedule; its recovery hint points at `terminalPairs` on `wsdot_get_ferry_routes` for the same date\n- A date WSF has no schedule for returns `invalid_date` instead — whether it falls outside WSF's published range or inside it with no routes loaded\n\n---\n\n### `wsdot_get_vessel_locations` <sub>tool</sub>\n\n- No input parameters — fields include position, speed, heading, ETA, and dock status for every active WSF vessel\n- Use for \"where is the ferry now?\" or checking if a specific vessel is in service\n- Position data may lag 30–60 seconds; many fields are null for vessels not currently operating\n- Coordinates render at full upstream AIS precision — no rounding, so both response surfaces report the same position\n- A vessel between assignments reports an empty `opRouteAbbrev`, rendered as `none reported` rather than omitted\n\n---\n\n### `wsdot_get_terminal_space` <sub>tool</sub>\n\n- Filter to a specific terminal by ID (from `wsdot_get_ferry_terminals`); omit for all terminals\n- `driveUpSpaceCount` is the key field — zero means the drive-up lane is full. Oversubscribed sailings report a negative count upstream; it is floored to zero so the value never reads as available space\n- `arrivingTerminalIds` lists the terminals a sailing serves and chains straight into `wsdot_get_ferry_schedule`; `itineraryLabel` is a display string that may name several stops, not a single destination\n- Results are paged by terminal (default 5, max 20) — `offset`/`limit` select whole terminals and `totalCount` counts matching terminals, not sailings; every sailing of a returned terminal is included, so page size varies with how many departures each terminal carries\n\n---\n\n### `wsdot_get_ferry_alerts` <sub>tool</sub>\n\n- No input parameters — active WSF ferry service disruptions, delays, and bulletins\n- Each alert carries the bulletin's `alertTitle`, its one-line `alertDescription`, and the full `bulletinText` — detail such as a replacement sailing appears only in the body\n- `bulletinText` is plain text: upstream authors it as HTML, and a link is rendered inline as `link text (url)`\n- Each alert includes `impactedRouteIds` — cross-reference with `wsdot_get_ferry_routes` to map route IDs to names\n- `affectsAllRoutes: true` marks a fleet-wide alert, which need not enumerate routes — an empty `impactedRouteIds` then means every route rather than none\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\nWSDOT-specific:\n\n- Dual API integration — WSDOT Traffic API and WSF Ferry API share a single `WSDOT_ACCESS_CODE`\n- Cross-tool linking built into tool descriptions — ferry tools point to `wsdot_get_ferry_terminals` / `wsdot_get_ferry_routes` for ID resolution before a lookup\n- Normalized response shapes across both APIs — sparse upstream fields surface as optional rather than omitted or defaulted\n- Stable pagination — the alert and camera feeds return the same set in more than one row order upstream, so results are sorted by ID to keep a given offset reproducible\n\nAgent-friendly output:\n\n- Typed failure — `invalid_access_code` and `api_unavailable` errors carry an explicit recovery hint distinguishing configuration faults from transient upstream ones\n- `driveUpSpaceCount: 0` and congestion delta fields (`delayInMinutes`) give agents actionable signal without string parsing\n- Partial data preserved — sparse upstream payloads surface `null`/`undefined` rather than synthetic defaults (e.g. an omitted `waitTimeInMinutes`, an absent `arrivalTime`)\n- `content[]` and `structuredContent` carry the same values, not just the same fields — a `false` flag, an empty list, and one populated half of a coordinate pair all render rather than dropping out of the markdown surface that some clients read; a blank or whitespace-only upstream string is absent from both, and a populated one arrives trimmed\n\n## Getting started\n\n### Public Hosted Instance\n\nA public instance is available at `https://wsdot.caseyjhand.com/mcp` — no installation required. Point any MCP client at it via Streamable HTTP:\n\n```json\n{\n  \"mcpServers\": {\n    \"wsdot-mcp-server\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://wsdot.caseyjhand.com/mcp\"\n    }\n  }\n}\n```\n\n### Self-Hosted / Local\n\nAdd the following to your MCP client configuration file. You'll need a WSDOT Traveler API access code — register at [wsdot.wa.gov/Traffic/api/](https://wsdot.wa.gov/Traffic/api/).\n\n```json\n{\n  \"mcpServers\": {\n    \"wsdot-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"bunx\",\n      \"args\": [\"@cyanheads/wsdot-mcp-server@latest\"],\n      \"env\": {\n        \"MCP_TRANSPORT_TYPE\": \"stdio\",\n        \"MCP_LOG_LEVEL\": \"info\",\n        \"WSDOT_ACCESS_CODE\": \"your-access-code\"\n      }\n    }\n  }\n}\n```\n\nOr with npx (no Bun required):\n\n```json\n{\n  \"mcpServers\": {\n    \"wsdot-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cyanheads/wsdot-mcp-server@latest\"],\n      \"env\": {\n        \"MCP_TRANSPORT_TYPE\": \"stdio\",\n        \"MCP_LOG_LEVEL\": \"info\",\n        \"WSDOT_ACCESS_CODE\": \"your-access-code\"\n      }\n    }\n  }\n}\n```\n\nOr with Docker:\n\n```json\n{\n  \"mcpServers\": {\n    \"wsdot-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\", \"-i\", \"--rm\",\n        \"-e\", \"MCP_TRANSPORT_TYPE=stdio\",\n        \"-e\", \"WSDOT_ACCESS_CODE=your-access-code\",\n        \"ghcr.io/cyanheads/wsdot-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 WSDOT_ACCESS_CODE=your-access-code 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- A WSDOT Traveler API access code. Register at [wsdot.wa.gov/Traffic/api/](https://wsdot.wa.gov/Traffic/api/) — registration is free.\n\n### Installation\n\n1. **Clone the repository:**\n\n```sh\ngit clone https://github.com/cyanheads/wsdot-mcp-server.git\n```\n\n2. **Navigate into the directory:**\n\n```sh\ncd wsdot-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 and set WSDOT_ACCESS_CODE\n```\n\n## Configuration\n\nAll configuration is validated at startup via Zod schemas in `src/config/server-config.ts`. Key environment variables:\n\n| Variable | Description | Default |\n|:---|:---|:---|\n| `WSDOT_ACCESS_CODE` | **Required.** WSDOT Traveler API access code. Register at [wsdot.wa.gov/Traffic/api/](https://wsdot.wa.gov/Traffic/api/). | — |\n| `MCP_TRANSPORT_TYPE` | Transport: `stdio` or `http`. | `stdio` |\n| `MCP_HTTP_PORT` | HTTP server port. | `3010` |\n| `MCP_HTTP_HOST` | HTTP server hostname. | `127.0.0.1` |\n| `MCP_HTTP_ENDPOINT_PATH` | HTTP endpoint path. | `/mcp` |\n| `MCP_PUBLIC_URL` | Public origin for TLS-terminating reverse-proxy deployments. | — |\n| `MCP_SESSION_MODE` | Session handling: `auto`, `stateful`, or `stateless`. The schema default `auto` resolves to stateful; this server sets `stateless` explicitly. | `stateless` |\n| `MCP_AUTH_MODE` | Authentication: `none`, `jwt`, or `oauth`. | `none` |\n| `MCP_LOG_LEVEL` | Log level (`debug`, `info`, `notice`, `warning`, `error`). | `info` |\n| `LOGS_DIR` | Directory for log files (Node.js only). | `<project-root>/logs` |\n| `STORAGE_PROVIDER_TYPE` | Storage backend: `in-memory`, `filesystem`, `supabase`, `cloudflare-kv/r2/d1`. | `in-memory` |\n| `OTEL_ENABLED` | Enable OpenTelemetry instrumentation (spans, metrics, completion logs). | `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  # 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 test suite\n  bun run lint:mcp   # Validate MCP definitions against spec\n  ```\n\n### Docker\n\n```sh\ndocker build -t wsdot-mcp-server .\ndocker run --rm -e WSDOT_ACCESS_CODE=your-access-code -p 3010:3010 wsdot-mcp-server\n```\n\nThe Dockerfile defaults to HTTP transport, stateless session mode, and logs to `/var/log/wsdot-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| Directory | Purpose |\n|:---|:---|\n| `src/index.ts` | `createApp()` entry point — registers all 12 tools and initializes services. |\n| `src/config` | Server-specific environment variable parsing and validation with Zod. |\n| `src/mcp-server/tools` | Tool definitions (`*.tool.ts`) — 6 traffic tools, 6 ferry tools. |\n| `src/services/traffic` | WSDOT Traffic API service (mountain passes, alerts, travel times, toll rates, border waits, cameras). |\n| `src/services/ferry` | WSF Ferry API service (terminals, routes, schedule, vessel locations, space, alerts). |\n| `tests/` | Unit and integration tests, mirroring the `src/` structure. |\n\n## Development guide\n\nSee [`CLAUDE.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()` arrays in `src/index.ts`\n- Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields\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"}