{"_id":"fastify-mcp-server","_rev":"12-840a568093de648beccc3221f39a6b69","name":"fastify-mcp-server","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"fastify-mcp-server","version":"0.1.0","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"_id":"fastify-mcp-server@0.1.0","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"dfa74359898f362f46fa4a0fbffe88cebfdf9ce8","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.1.0.tgz","fileCount":21,"integrity":"sha512-zqXGU7e0f5nUdEclxk65wbqP19eO7rV5LZnGy0QWRzidWpcWZ2dbSap4X8B5z5crUo2aIzfHZsLil+18Y2fJHA==","signatures":[{"sig":"MEUCIQCTZqFbsSf4rvXIyixzKLzyKuxWWx7tWgYkzxGx3r2o6AIgaSdCj7jpP3/KBlf5Zax5Uej2oHOllzLr+XIXi4WZgG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37908},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 23.10.0"},"exports":{".":"./dist/index.js"},"gitHead":"af051d07986c3705a925278fe39bc2ae22e493f0","scripts":{"dev":"node --no-warnings --watch examples/demo.ts","lint":"eslint","test":"c8 --100 node --no-warnings --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","major":"npm run release -- --release-as major","minor":"npm run release -- --release-as minor","patch":"npm run release -- --release-as patch","prepare":"husky","release":"standard-version","lint:fix":"npm run lint -- --fix","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --no-warnings --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"flaviodelgrosso","actor":{"name":"flaviodelgrosso","type":"user","email":"flaviodelgrosso@live.it"},"email":"flaviodelgrosso@live.it"},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"A Fastify plugin for Model Context Protocol (MCP) streamable HTTP support","directories":{},"lint-staged":{"*.ts":"npm run lint"},"_nodeVersion":"23.11.1","dependencies":{"fastify-plugin":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.29.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.1","lint-staged":"^16.1.1","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@commitlint/cli":"^19.8.1","close-with-grace":"^2.2.0","standard-version":"^9.5.0","@commitlint/config-conventional":"^19.8.1"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.1.0_1750252907707_0.9362052739883602","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"fastify-mcp-server","version":"0.2.0","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"_id":"fastify-mcp-server@0.2.0","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"9da731cf07376aa8ef7036eac6e617c88255840c","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.2.0.tgz","fileCount":24,"integrity":"sha512-bnPPPFjskbFuUGjsPHg1F1/zfVIsFed5HO5Ohi865rntYJw9afOd8KRx/Z4DiSrMWURjWb1NFJpl8AmsaPLdfQ==","signatures":[{"sig":"MEYCIQCQic6oE7vCygBHsDgBxGIW4sM8EjcHrvyvMuLHC2ALfAIhANuybRAUGPNjJ4wDVGStny+8BmP8oItjuzdL2dtz6nNP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47141},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 23.10.0"},"exports":{".":"./dist/index.js"},"gitHead":"e178f5f6f1d5c1cecf3c98a1c49483150a9944fb","scripts":{"dev":"node --no-warnings --watch demo/server.ts","lint":"eslint","test":"c8 --100 node --no-warnings --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","major":"npm run release -- --release-as major","minor":"npm run release -- --release-as minor","patch":"npm run release -- --release-as patch","prepare":"husky","release":"standard-version","lint:fix":"npm run lint -- --fix","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --no-warnings --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"flaviodelgrosso","actor":{"name":"flaviodelgrosso","type":"user","email":"flaviodelgrosso@live.it"},"email":"flaviodelgrosso@live.it"},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"A Fastify plugin for Model Context Protocol (MCP) streamable HTTP support","directories":{},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"_nodeVersion":"23.11.1","dependencies":{"fastify-plugin":"^5.0.1","@fastify/middie":"^9.0.3"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.29.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.1","lint-staged":"^16.1.1","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@fastify/cors":"^11.0.1","@commitlint/cli":"^19.8.1","close-with-grace":"^2.2.0","standard-version":"^9.5.0","@fastify/autoload":"^6.3.1","@commitlint/config-conventional":"^19.8.1"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.2.0_1750263468854_0.7705309358816663","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"fastify-mcp-server","version":"0.2.1","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"_id":"fastify-mcp-server@0.2.1","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"ea41376418ad60d11ab9c6d77e1ed264bb56abe9","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.2.1.tgz","fileCount":24,"integrity":"sha512-y2tYEr3E4s3J9Z1/8WKyBlcDn9gg18NHBKhF3kYyRoCHrh5OpB6OL1EaMKwYUL1dceRbfeftZh/u9V5krclYbA==","signatures":[{"sig":"MEUCIBzZNdGS1PSSL3jmEqei8UQp+uusY65RSi8e9ugSxBUSAiEAo8VWWLBcYDbk+J5pN9aPwLGViK4liYBxoUKfUB4FGUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47108},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 23.10.0"},"exports":{".":"./dist/index.js"},"gitHead":"bfd19b0d2be905bc1f837f4d2bda6158890eff22","scripts":{"dev":"node --no-warnings --watch demo/server.ts","lint":"eslint","test":"c8 --100 node --no-warnings --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","major":"npm run release -- --release-as major","minor":"npm run release -- --release-as minor","patch":"npm run release -- --release-as patch","prepare":"husky","release":"standard-version","lint:fix":"npm run lint -- --fix","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --no-warnings --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"flaviodelgrosso","actor":{"name":"flaviodelgrosso","type":"user","email":"flaviodelgrosso@live.it"},"email":"flaviodelgrosso@live.it"},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"A Fastify plugin for Model Context Protocol (MCP) streamable HTTP support","directories":{},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"_nodeVersion":"23.11.1","dependencies":{"fastify-plugin":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.29.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.1","lint-staged":"^16.1.1","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@fastify/cors":"^11.0.1","@commitlint/cli":"^19.8.1","close-with-grace":"^2.2.0","standard-version":"^9.5.0","@fastify/autoload":"^6.3.1","@commitlint/config-conventional":"^19.8.1"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.2.1_1750263896502_0.08076443982801473","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"fastify-mcp-server","version":"0.3.0","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"license":"ISC","_id":"fastify-mcp-server@0.3.0","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"29035950ef42ab2230f4b88297908fe4ab8ff914","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.3.0.tgz","fileCount":21,"integrity":"sha512-XjsSSwxL8JvOCc1Ozy/r9bv+eyuWyA7uovl0XLTYbcSkdrSvGo3OdWeLXszJqB1YXhbv+EDCgtcuKBLc0VXHzg==","signatures":[{"sig":"MEUCIHOAXOXzH9vRKptQDwKx/0LMhSlTiOwZM/zErqA3h5lSAiEAg9bbVgkj0vJFbhbeTcP2Q9MGm5LAzr6jaCPkuYjjN9s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47405},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 23.10.0"},"exports":{".":"./dist/index.js"},"gitHead":"7323cb3fd948fa882f0b0f830cbd292987ee121d","scripts":{"dev":"node --no-warnings --watch demo/server.ts","lint":"eslint","test":"c8 --100 node --no-warnings --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","clean":"rimraf node_modules dist coverage","major":"npm run release -- --release-as major","minor":"npm run release -- --release-as minor","patch":"npm run release -- --release-as patch","prepare":"husky","release":"standard-version","lint:fix":"npm run lint -- --fix","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --no-warnings --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"flaviodelgrosso","actor":{"name":"flaviodelgrosso","type":"user","email":"flaviodelgrosso@live.it"},"email":"flaviodelgrosso@live.it"},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Easily spin up Model Context Protocol (MCP) servers using Fastify","directories":{},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"_nodeVersion":"23.11.1","dependencies":{"fastify-plugin":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.29.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.1","lint-staged":"^16.1.1","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@fastify/cors":"^11.0.1","@commitlint/cli":"^19.8.1","close-with-grace":"^2.2.0","standard-version":"^9.5.0","@fastify/autoload":"^6.3.1","@commitlint/config-conventional":"^19.8.1"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.3.0_1750379396812_0.6222810305647615","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"fastify-mcp-server","version":"0.4.0","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"license":"ISC","_id":"fastify-mcp-server@0.4.0","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"31c606316459fabb8e0683e2863a83c90e2ce81f","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.4.0.tgz","fileCount":24,"integrity":"sha512-LQ4nS8OJpnnE5+NXitKqDBZbfYx4WFZ+pD8fVuNyLj8j276oSSP4yUtjc8+EktFfXjR5f7D8zWGsPamhaHvWYg==","signatures":[{"sig":"MEUCIQCUytmSLh4kItDDraun4KZuTjE+mJCyoCOie3od7mHIvwIgGQSrNYfOwCaNPRvXrS5ysQfkOBb9nEB/QA0Ihpm6Wr4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51495},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 23.10.0"},"exports":{".":"./dist/index.js"},"gitHead":"ed73529f2fb6d0adc9dbe532425acd3c7daee950","scripts":{"dev":"node --no-warnings --watch demo/server.ts","lint":"eslint","test":"c8 --100 node --no-warnings --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","clean":"rimraf node_modules dist coverage","major":"npm run release -- --release-as major","minor":"npm run release -- --release-as minor","patch":"npm run release -- --release-as patch","prepare":"husky","release":"standard-version","lint:fix":"npm run lint -- --fix","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --no-warnings --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"flaviodelgrosso","actor":{"name":"flaviodelgrosso","type":"user","email":"flaviodelgrosso@live.it"},"email":"flaviodelgrosso@live.it"},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Easily spin up Model Context Protocol (MCP) servers using Fastify","directories":{},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"_nodeVersion":"23.11.1","dependencies":{"fastify-plugin":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.29.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.1","lint-staged":"^16.1.1","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@fastify/cors":"^11.0.1","@commitlint/cli":"^19.8.1","close-with-grace":"^2.2.0","standard-version":"^9.5.0","@fastify/autoload":"^6.3.1","@commitlint/config-conventional":"^19.8.1"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.4.0_1750440868293_0.8356749063422344","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"fastify-mcp-server","version":"0.4.1","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"license":"ISC","_id":"fastify-mcp-server@0.4.1","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"06d8119c6f6327d7ac2c91ebe0df545942cb9d58","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.4.1.tgz","fileCount":24,"integrity":"sha512-2OiIE5h4CQs5N0YxPOR3NeuBk/gmIMaVksIx4ePKsGFb14TmTvFUYWM+NMZ/b5FZA/zMSZPSAVqTaac8Hvb/fA==","signatures":[{"sig":"MEUCICf878lGl4A6KRI2q26i9p+eY7H5Q0iJQanTGvdMlTq5AiEAl+CyIxvNdq9jbSOrRgJgmyTxIZ8uaKiAa7aO0Q01jp8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":52018},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 23.10.0"},"exports":{".":"./dist/index.js"},"gitHead":"9188070ef70c11e18c489dba21664b2845784971","scripts":{"dev":"node --watch demo/server.ts","lint":"eslint","test":"c8 --100 node --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","clean":"rimraf node_modules dist coverage","major":"npm run release -- --release-as major","minor":"npm run release -- --release-as minor","patch":"npm run release -- --release-as patch","prepare":"husky","release":"standard-version","lint:fix":"npm run lint -- --fix","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Easily spin up Model Context Protocol (MCP) servers using Fastify","directories":{},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"_nodeVersion":"23.11.1","dependencies":{"fastify-plugin":"^5.0.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.29.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.1","lint-staged":"^16.1.1","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@fastify/cors":"^11.0.1","@commitlint/cli":"^19.8.1","close-with-grace":"^2.2.0","standard-version":"^9.5.0","@fastify/autoload":"^6.3.1","@commitlint/config-conventional":"^19.8.1"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.4.1_1754243091509_0.5096116505271879","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"fastify-mcp-server","version":"0.5.0","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"license":"ISC","_id":"fastify-mcp-server@0.5.0","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"bbc72ed9d0487341465842132cbe92d391baaf47","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.5.0.tgz","fileCount":30,"integrity":"sha512-guNlRtLNUzwlaS3Y1WgHK+VAgMKoRAvGh4/JaZ2EIAtWEgEpNQAsPPtz18DEh5I5gFMUMxDVWZGrgOOrLtvbTg==","signatures":[{"sig":"MEUCIQDk6knqlE5bOSN1AK1juG2JVl+3u0sRNkqLxwVLkFCd0gIgDjpAwgs+BzaVP0KisvKpuDz1cD5SIkaxudYKekNK9KU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":54430},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 23.10.0"},"exports":{".":"./dist/index.js"},"gitHead":"26a2e60baf43014f736fe042a9bd2a7bc0b2941e","scripts":{"dev":"node --watch demo/server.ts","lint":"eslint","test":"c8 --100 node --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","clean":"rimraf node_modules dist coverage","prepare":"husky","lint:fix":"npm run lint -- --fix","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Easily spin up Model Context Protocol (MCP) servers using Fastify","directories":{},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"_nodeVersion":"23.11.1","dependencies":{"fastify-plugin":"^5.1.0","zod-to-json-schema":"^3.24.6"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.37.0","rimraf":"^6.0.1","fastify":"^5.6.1","typescript":"^5.9.3","@types/node":"^24.7.1","lint-staged":"^16.2.3","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@fastify/cors":"^11.0.1","@commitlint/cli":"^20.1.0","close-with-grace":"^2.3.0","@fastify/autoload":"^6.3.1","@modelcontextprotocol/sdk":"^1.19.1","@commitlint/config-conventional":"^20.0.0"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.5.0_1760043087529_0.31049600201999605","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"fastify-mcp-server","version":"0.6.0","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"license":"ISC","_id":"fastify-mcp-server@0.6.0","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"426afee4998ef37f27cb1e09002efe0f97ccb176","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.6.0.tgz","fileCount":33,"integrity":"sha512-Cr+stZkFtHcwbbHXDIeFJx3mKT9SGS4N3CoDhbKIzxysRcY5uaqEa0y1AfgmXlL3Dz46ou/9uQ5Gr3x26CwpmA==","signatures":[{"sig":"MEQCIE0Cz1fYkT2Nb4BrZfekQDcn2MheYaH+Q6SbLnQjukMpAiA9nz5h/U8H9vACL76fGaIipwS356A4bi5ueMvDL/zFTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63094},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 22"},"exports":{".":"./dist/index.js"},"gitHead":"41321ce32af16f25c936b6aa2c1e4ec017e78bec","scripts":{"dev":"node --watch demo/server.ts","lint":"eslint","test":"c8 --100 node --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","clean":"rimraf node_modules dist coverage","format":"prettier --write .","prepare":"husky","release":"changeset tag","version":"changeset version","lint:fix":"npm run lint -- --fix","dev:redis":"node --watch demo/server.ts -- --redis","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:38df8c80-7e6b-46cd-8869-89d63f3fe2c5"}},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"Easily spin up Model Context Protocol (MCP) servers using Fastify","directories":{},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"_nodeVersion":"24.12.0","dependencies":{"ioredis":"^5.8.2","fastify-plugin":"^5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.39.2","rimraf":"^6.0.1","fastify":"^5.6.2","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.4","lint-staged":"^16.2.7","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@fastify/cors":"^11.2.0","@changesets/cli":"^2.29.8","@commitlint/cli":"^20.2.0","close-with-grace":"^2.3.0","@fastify/autoload":"^6.3.1","@modelcontextprotocol/sdk":"^1.25.1","@commitlint/config-conventional":"^20.2.0","prettier-plugin-space-before-function-paren":"^0.0.10"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.6.0_1766441690413_0.6979600488999107","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"fastify-mcp-server","version":"0.7.0","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"license":"ISC","_id":"fastify-mcp-server@0.7.0","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"fd6b2bc2708bd7838bffd695013c3c3b508ebc2a","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.7.0.tgz","fileCount":33,"integrity":"sha512-gD5fHEVF6yw+2nmoutHOnxrDCL0Z7nDpgk0HYHBDrhQ2bLgAfWyQeO29qftOqJc+9QYc33YWtXuABBx6X2osJw==","signatures":[{"sig":"MEQCIBOwljG3bb6nH3u8qJDUhhhibVCgMoxEDA0HISgv1e5KAiAT09vVp2sJKVJSAuU4h3ivPBSD5bJ6s75mQHRKaGcKAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64740},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 22"},"exports":{".":"./dist/index.js"},"gitHead":"30faa0ff31dd1e1a89808bba4fcdcc62fdacbd00","scripts":{"dev":"node --watch demo/server.ts","lint":"eslint","test":"c8 --100 node --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","clean":"rimraf node_modules dist coverage","format":"prettier --write .","prepare":"husky","release":"changeset tag","version":"changeset version","lint:fix":"npm run lint -- --fix","dev:redis":"node --watch demo/server.ts -- --redis","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:38df8c80-7e6b-46cd-8869-89d63f3fe2c5"}},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"Easily spin up Model Context Protocol (MCP) servers using Fastify","directories":{},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"_nodeVersion":"24.12.0","dependencies":{"ioredis":"^5.8.2","fastify-plugin":"^5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.39.2","rimraf":"^6.0.1","fastify":"^5.6.2","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.4","lint-staged":"^16.2.7","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@fastify/cors":"^11.2.0","@changesets/cli":"^2.29.8","@commitlint/cli":"^20.2.0","close-with-grace":"^2.3.0","@fastify/autoload":"^6.3.1","@modelcontextprotocol/sdk":"^1.25.1","@commitlint/config-conventional":"^20.2.0","prettier-plugin-space-before-function-paren":"^0.0.10"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.7.0_1766859867377_0.9762941477296925","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"fastify-mcp-server","version":"0.7.1","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"license":"ISC","_id":"fastify-mcp-server@0.7.1","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"8bf6448448649ad6395a289555b6b2c536daf199","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.7.1.tgz","fileCount":33,"integrity":"sha512-rjBkiTujlvEnOs8ePFbldd6Jl9eLeRyItXwY/WlmMldwd/QTIpZJw0sUhCdq7N8y/0V0t9zV6cXbuqo2vIWiOg==","signatures":[{"sig":"MEQCIDs9UkKJyN9Q9AHo9x+Zjqqumw72ntHT8a7NcFDPamqrAiAGvAXRk/i3nMqELohvGa06hIXUtjkGeYNBlYbJV/QmnQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64855},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 22"},"exports":{".":"./dist/index.js"},"gitHead":"bec75663e02a8a87c095563a537fd505e66cb15d","scripts":{"dev":"node --watch demo/server.ts","lint":"eslint","test":"c8 --100 node --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","clean":"rimraf node_modules dist coverage","format":"prettier --write .","prepare":"husky","release":"changeset tag","version":"changeset version","lint:fix":"npm run lint -- --fix","dev:redis":"node --watch demo/server.ts -- --redis","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:38df8c80-7e6b-46cd-8869-89d63f3fe2c5"}},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"Easily spin up Model Context Protocol (MCP) servers using Fastify","directories":{},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"_nodeVersion":"24.12.0","dependencies":{"ioredis":"^5.8.2","fastify-plugin":"^5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.39.2","rimraf":"^6.0.1","fastify":"^5.6.2","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.4","lint-staged":"^16.2.7","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@fastify/cors":"^11.2.0","@changesets/cli":"^2.29.8","@commitlint/cli":"^20.2.0","close-with-grace":"^2.3.0","@fastify/autoload":"^6.3.1","@fastify/formbody":"^8.0.2","@modelcontextprotocol/sdk":"^1.25.1","@commitlint/config-conventional":"^20.2.0","prettier-plugin-space-before-function-paren":"^0.0.10"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.7.1_1766951279751_0.33032485169295","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"fastify-mcp-server","version":"0.7.2","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"license":"ISC","_id":"fastify-mcp-server@0.7.2","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"dist":{"shasum":"0b67d4345f66bca39b06191e3fa54ec347b83a74","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-0.7.2.tgz","fileCount":33,"integrity":"sha512-wtEDLAMN1ht2f984XaQ3Lt27Kjlxz7cmjCEFIiyVPWJNARlNRgBX5stWy8eau0o0xWFPXbsMo4TWIYWViEaV/A==","signatures":[{"sig":"MEQCIFamTVL/GwypiqF+M7OiiDnGKrJMnYkCFDbvKXy0H0NaAiA9fh3WAuDPZsuBJAnrXtiBKxt36n2y0yNzsIzH1FcEgg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64487},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">= 22"},"exports":{".":"./dist/index.js"},"gitHead":"1ce334607f697c694a11fffc72ebaa8e5eebaa31","scripts":{"dev":"node --watch demo/server.ts","lint":"eslint","test":"c8 --100 node --test test/**/*.test.ts","build":"rimraf dist && tsc -p tsconfig.build.json","clean":"rimraf node_modules dist coverage","format":"prettier --write .","prepare":"husky","release":"changeset tag","version":"changeset version","lint:fix":"npm run lint -- --fix","dev:redis":"node --watch demo/server.ts -- --redis","inspector":"npx @modelcontextprotocol/inspector","test:lcov":"c8 --100 --reporter=lcov node --test test/**/*.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:38df8c80-7e6b-46cd-8869-89d63f3fe2c5"}},"repository":{"url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"Easily spin up Model Context Protocol (MCP) servers using Fastify","directories":{},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"_nodeVersion":"24.12.0","dependencies":{"ioredis":"^5.8.2","fastify-plugin":"^5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","husky":"^9.1.7","eslint":"^9.39.2","rimraf":"^6.0.1","fastify":"^5.6.2","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.4","lint-staged":"^16.2.7","neostandard":"^0.12.1","pino-pretty":"^13.0.0","@fastify/cors":"^11.2.0","@changesets/cli":"^2.29.8","@commitlint/cli":"^20.2.0","close-with-grace":"^2.3.0","@fastify/autoload":"^6.3.1","@fastify/formbody":"^8.0.2","@modelcontextprotocol/sdk":"^1.25.1","@commitlint/config-conventional":"^20.2.0","prettier-plugin-space-before-function-paren":"^0.0.10"},"peerDependencies":{"fastify":"^5.x","@modelcontextprotocol/sdk":"^1.x"},"_npmOperationalInternal":{"tmp":"tmp/fastify-mcp-server_0.7.2_1766962636696_0.6183862240107036","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"fastify-mcp-server","description":"Easily spin up Model Context Protocol (MCP) servers using Fastify","version":"1.0.0","type":"module","license":"ISC","main":"dist/index.js","exports":{".":"./dist/index.js"},"engines":{"node":">= 22"},"keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","repository":{"type":"git","url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git"},"scripts":{"dev":"node --watch demo/server.ts","build":"rimraf dist && tsc -p tsconfig.build.json","prepublishOnly":"npm run build","prepare":"husky","test":"c8 --100 node --test test/**/*.test.ts","test:lcov":"c8 --100 --reporter=lcov node --test test/**/*.test.ts","lint":"eslint","lint:fix":"npm run lint -- --fix","format":"prettier --write .","inspector":"npx @modelcontextprotocol/inspector","clean":"rimraf node_modules dist coverage"},"peerDependencies":{"@modelcontextprotocol/server":"^2.0.0","fastify":"^5.x"},"dependencies":{"@modelcontextprotocol/node":"^2.0.0","fastify-plugin":"^5.1.0"},"devDependencies":{"@commitlint/cli":"^20.2.0","@commitlint/config-conventional":"^20.2.0","@fastify/autoload":"^6.3.1","@fastify/cors":"^11.2.0","@fastify/formbody":"^8.0.2","@modelcontextprotocol/client":"^2.0.0","@modelcontextprotocol/server":"^2.0.0","@types/node":"^24.10.4","c8":"^10.1.3","close-with-grace":"^2.3.0","eslint":"^9.39.2","eslint-plugin-import-x":"^4.17.1","fastify":"^5.6.2","husky":"^9.1.7","lint-staged":"^16.2.7","neostandard":"^0.13.0","pino-pretty":"^13.0.0","prettier":"^3.6.2","prettier-plugin-space-before-function-paren":"^0.1.0","rimraf":"^6.0.1","typescript":"^5.9.3"},"lint-staged":{"*.ts":"eslint --max-warnings 0"},"gitHead":"38e8537f267b67987918db90e081ad7a02bb3cee","types":"./dist/index.d.ts","_id":"fastify-mcp-server@1.0.0","bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-HMIzBbP+3DwV4E6MjGtbQ5Yg6L8t2tscUhT67I/wdM0jcA5Lt8BgEikGjzp9fe/ciw9snEqI5yFlrX0JL+YVQw==","shasum":"677c4c60ff18e3730e4bab37b1300d203d3d0c97","tarball":"https://registry.npmjs.org/fastify-mcp-server/-/fastify-mcp-server-1.0.0.tgz","fileCount":21,"unpackedSize":43386,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/fastify-mcp-server@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDhzzHlE3lp01RLqv1t6xqaBss9Wv2Eut/EnRWOfufiSQIhAPgDc0LbCp6nOp/OrHt0Uh9VO+AEnCIwLBAJugt9q9Lo"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:38df8c80-7e6b-46cd-8869-89d63f3fe2c5"}},"directories":{},"maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fastify-mcp-server_1.0.0_1787331781980_0.2865343251344876"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-18T13:21:47.610Z","modified":"2026-08-21T17:03:02.491Z","0.1.0":"2025-06-18T13:21:47.879Z","0.2.0":"2025-06-18T16:17:49.043Z","0.2.1":"2025-06-18T16:24:56.693Z","0.3.0":"2025-06-20T00:29:57.005Z","0.4.0":"2025-06-20T17:34:28.523Z","0.4.1":"2025-08-03T17:44:51.679Z","0.5.0":"2025-10-09T20:51:27.715Z","0.6.0":"2025-12-22T22:14:50.588Z","0.7.0":"2025-12-27T18:24:27.518Z","0.7.1":"2025-12-28T19:47:59.900Z","0.7.2":"2025-12-28T22:57:16.830Z","1.0.0":"2026-08-21T17:03:02.140Z"},"bugs":{"url":"https://github.com/flaviodelgrosso/fastify-mcp-server/issues"},"license":"ISC","homepage":"https://github.com/flaviodelgrosso/fastify-mcp-server#readme","keywords":["fastify","mcp","plugin","streamable","http","modelcontextprotocol","server"],"repository":{"type":"git","url":"git+https://github.com/flaviodelgrosso/fastify-mcp-server.git"},"description":"Easily spin up Model Context Protocol (MCP) servers using Fastify","maintainers":[{"name":"flaviodelgrosso","email":"flaviodelgrosso@live.it"}],"readme":"# Fastify MCP Server Plugin\n\nA Fastify plugin for building Model Context Protocol (MCP) HTTP servers aligned with the `2026-07-28` specification.\n\nThe plugin provides a thin Fastify-native integration around the MCP TypeScript SDK v2 HTTP handler. MCP requests are processed independently: there is no `initialize` handshake, no `Mcp-Session-Id`, no protocol session store, and no transport affinity between requests.\n\n[![NPM version](https://img.shields.io/npm/v/fastify-mcp-server.svg?style=flat)](https://www.npmjs.com/package/fastify-mcp-server)\n[![NPM downloads](https://img.shields.io/npm/dm/fastify-mcp-server.svg?style=flat)](https://www.npmjs.com/package/fastify-mcp-server)\n[![CI](https://github.com/flaviodelgrosso/fastify-mcp-server/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/flaviodelgrosso/fastify-mcp-server/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/flaviodelgrosso/fastify-mcp-server/graph/badge.svg?token=4ZGUR6VXTJ)](https://codecov.io/gh/flaviodelgrosso/fastify-mcp-server)\n\n## Table of Contents\n\n- [Fastify MCP Server Plugin](#fastify-mcp-server-plugin)\n  - [Table of Contents](#table-of-contents)\n  - [Overview](#overview)\n  - [Features](#features)\n    - [Core Functionality](#core-functionality)\n    - [Advanced Features](#advanced-features)\n  - [Installation](#installation)\n  - [Quick Demo](#quick-demo)\n  - [Quick Start](#quick-start)\n  - [API Reference](#api-reference)\n    - [Plugin Options](#plugin-options)\n    - [MCP Decorator](#mcp-decorator)\n  - [HTTP Protocol](#http-protocol)\n    - [Stateless Request Model](#stateless-request-model)\n    - [Protocol Discovery](#protocol-discovery)\n    - [Routing Headers](#routing-headers)\n    - [Streaming and Cancellation](#streaming-and-cancellation)\n  - [Advanced Usage](#advanced-usage)\n    - [Request-Scoped Context](#request-scoped-context)\n    - [Application State](#application-state)\n    - [Multi-Round-Trip Requests](#multi-round-trip-requests)\n    - [Subscriptions and Notifications](#subscriptions-and-notifications)\n    - [Horizontal Scaling](#horizontal-scaling)\n  - [Authentication: Bearer Token Support](#authentication-bearer-token-support)\n    - [Enabling Bearer Token Authentication](#enabling-bearer-token-authentication)\n    - [How It Works](#how-it-works)\n    - [Accessing Authentication Information](#accessing-authentication-information)\n    - [Example Error Response](#example-error-response)\n    - [Example using PAT in Visual Studio Code](#example-using-pat-in-visual-studio-code)\n  - [Well-Known OAuth Metadata Routes](#well-known-oauth-metadata-routes)\n    - [Registering Well-Known Routes](#registering-well-known-routes)\n    - [Endpoints](#endpoints)\n  - [Protocol Compatibility](#protocol-compatibility)\n  - [Development](#development)\n    - [Setup](#setup)\n    - [Scripts](#scripts)\n    - [Testing](#testing)\n  - [Contributing](#contributing)\n  - [License](#license)\n  - [Related Projects](#related-projects)\n\n## Overview\n\nThe Model Context Protocol (MCP) is an open standard that enables AI applications to connect to tools, resources, and external systems through a common protocol.\n\n`fastify-mcp-server` integrates MCP with Fastify while keeping the protocol layer stateless by construction. Each HTTP request is processed from its own request envelope and can be handled by any healthy Fastify instance.\n\nThis means the plugin does not require:\n\n- protocol sessions;\n- `Mcp-Session-Id` headers;\n- sticky load balancing;\n- shared protocol state in Redis or another session store;\n- an `initialize` / `initialized` handshake before normal MCP operations.\n\nApplication state is still fully supported, but it belongs to your application and should be represented by explicit domain identifiers, authenticated principals, databases, caches, or other application-owned dependencies.\n\n## Features\n\n### Core Functionality\n\n- ✅ **MCP 2026-07-28**: Built for the modern MCP protocol revision\n- ✅ **Stateless HTTP**: Every request is independently processable\n- ✅ **SDK v2 Integration**: Built around `@modelcontextprotocol/server`\n- ✅ **Fastify Integration**: Works with normal Fastify hooks, plugins, logging, and lifecycle management\n- ✅ **Tools, Resources, and Prompts**: Use the standard MCP SDK v2 server APIs\n- ✅ **Protocol Discovery**: Supports the modern `server/discover` flow\n- ✅ **Modern Routing Headers**: Supports MCP protocol, method, name, and parameter headers\n- ✅ **Authentication**: Optional Bearer token validation on every request\n- ✅ **Type Safety**: Full TypeScript support\n\n### Advanced Features\n\n- ✅ **Horizontal Scaling**: No sticky sessions or shared MCP protocol store required\n- ✅ **Request-Scoped Metadata**: Client capabilities, protocol metadata, auth, and tracing are evaluated per request\n- ✅ **Multi-Round-Trip Requests**: Supports the 2026 `input_required` model\n- ✅ **Request-State Continuations**: Explicit continuation state can be carried through `requestState`\n- ✅ **Streaming Responses**: Uses modern per-request HTTP/SSE behavior when required\n- ✅ **Request Cancellation**: Client disconnects cancel the corresponding request stream\n- ✅ **Configurable Endpoint**: Mount MCP on a custom Fastify route\n- ✅ **OAuth Metadata**: Optional Protected Resource and Authorization Server metadata endpoints\n\n## Installation\n\n```bash\nnpm install fastify-mcp-server @modelcontextprotocol/server\n```\n\nThe MCP TypeScript SDK v2 is the supported SDK line for this major version.\n\n## Quick Demo\n\nRun the demo server:\n\n```bash\nnpm run dev\n```\n\nStart the MCP Inspector in another terminal:\n\n```bash\nnpm run inspector\n```\n\nThe demo exposes a stateless MCP HTTP endpoint at `/mcp`.\n\n## Quick Start\n\n```typescript\nimport Fastify from 'fastify';\nimport { McpServer } from '@modelcontextprotocol/server';\nimport * as z from 'zod/v4';\nimport FastifyMcpServer from 'fastify-mcp-server';\n\nconst app = Fastify({ logger: true });\n\nfunction createMcpServer () {\n  const mcp = new McpServer({\n    name: 'my-mcp-server',\n    version: '1.0.0'\n  });\n\n  mcp.registerTool(\n    'hello-world',\n    {\n      description: 'Return a greeting',\n      inputSchema: z.object({\n        name: z.string().optional()\n      })\n    },\n    async ({ name }) => ({\n      content: [\n        {\n          type: 'text',\n          text: `Hello ${name ?? 'world'}!`\n        }\n      ]\n    })\n  );\n\n  return mcp;\n}\n\nawait app.register(FastifyMcpServer, {\n  createMcpServer,\n  endpoint: '/mcp'\n});\n\nawait app.listen({ host: '127.0.0.1', port: 3000 });\n```\n\nEach MCP request is handled independently. A `tools/list` or `tools/call` request may be the first request received by a fresh server instance.\n\n## API Reference\n\n### Plugin Options\n\n```typescript\nimport type {\n  AuthMetadataOptions,\n  BearerAuthOptions,\n  CreateMcpHandlerOptions,\n  McpServerFactory\n} from '@modelcontextprotocol/server';\n\ntype FastifyMcpServerOptions = {\n  createMcpServer: McpServerFactory;\n  endpoint?: string;\n  allowedOrigins?: string[];\n  allowedHosts?: string[];\n  authorization?: {\n    bearer?: BearerAuthOptions;\n    metadata?: AuthMetadataOptions;\n  };\n  handlerOptions?: Omit<CreateMcpHandlerOptions, 'legacy'>;\n  onRequestComplete?: (event: McpRequestEvent) => void;\n};\n```\n\n`handlerOptions` forwards the SDK's modern HTTP-handler options, including `bus`, `maxSubscriptions`, `keepAliveMs`, `responseMode`, and `onerror`. `legacy` is deliberately excluded from the public type. The plugin applies `legacy: 'reject'` after the forwarded options, so runtime object construction cannot override the modern-only policy.\n\nThere are intentionally no MCP session-store, session-ID, or per-session transport options.\n\n### MCP Decorator\n\nThe decorator exposes request statistics and the SDK's typed notification publisher without exposing the complete HTTP handler or transport state:\n\n```typescript\nimport { getMcpDecorator } from 'fastify-mcp-server';\n\nconst mcp = getMcpDecorator(app);\nconsole.log(mcp.getStats());\n\nmcp.notify.toolsChanged();\nmcp.notify.resourceUpdated('config://app');\n```\n\n`getStats()` returns `requestsTotal`, `inFlightRequests`, `errorsTotal`, and the configured `endpoint`. The `notify` facade also provides `promptsChanged()` and `resourcesChanged()`.\n\n## HTTP Protocol\n\nThe plugin exposes a modern MCP Streamable HTTP endpoint, `/mcp` by default.\n\n### Stateless Request Model\n\nMCP `2026-07-28` does not use the old initialization/session lifecycle.\n\nEvery request contains the protocol information required to process that operation. The plugin creates the required MCP request context, dispatches the operation, returns the result, and does not retain protocol state for a future request.\n\nAs a result:\n\n- `initialize` is not required or supported as a lifecycle handshake;\n- `Mcp-Session-Id` is not generated, returned, or accepted as a routing mechanism;\n- a request does not need to reach the same Fastify process as a previous request;\n- restarting a process between requests does not invalidate an MCP protocol relationship.\n\n### Protocol Discovery\n\nModern clients can call `server/discover` to discover supported protocol versions and server capabilities.\n\nDiscovery is optional. Normal MCP operations do not require a previous discovery request.\n\nClients should pin or negotiate the `2026-07-28` protocol revision when connecting to this server.\n\n### Routing Headers\n\nMCP `2026-07-28` Streamable HTTP uses standard routing headers that can also be consumed by Fastify hooks, gateways, authorization middleware, metrics, and rate limiting.\n\nRelevant headers include:\n\n- `MCP-Protocol-Version`\n- `Mcp-Method`\n- `Mcp-Name` for named operations such as tool calls\n- `Mcp-Param-*` for schema fields declared with `x-mcp-header`\n\nThe MCP SDK validates these headers against the JSON-RPC request. Header/body mismatches are rejected rather than silently accepted.\n\n### Streaming and Cancellation\n\nMost MCP calls can complete with a normal JSON response. When an operation emits related messages or requires a subscription stream, the response may use Server-Sent Events (SSE).\n\nStreaming is scoped to the current request; it is not a persistent protocol session.\n\nFor modern Streamable HTTP, cancellation is performed by closing the relevant response stream. Cancelling one request does not affect any other request from the same client.\n\n## Advanced Usage\n\n### Request-Scoped Context\n\nThe MCP 2026 request envelope carries request-scoped information such as protocol version, client information, capabilities, extension metadata, and logging preferences.\n\nRead that information from the current handler context instead of caching it globally or assuming it was established by an earlier request.\n\n```typescript\nmcp.registerTool(\n  'request-info',\n  {\n    description: 'Inspect request-scoped MCP metadata'\n  },\n  async (ctx) => {\n    const envelope = ctx.mcpReq.envelope;\n\n    return {\n      content: [\n        {\n          type: 'text',\n          text: JSON.stringify({\n            protocolVersion: envelope?.protocolVersion,\n            clientInfo: envelope?.clientInfo\n          })\n        }\n      ]\n    };\n  }\n);\n```\n\nTreat client identity metadata as informational. Security decisions should be based on authenticated application identity and authorization policy.\n\n### Application State\n\nStateless MCP does not mean your application must be stateless.\n\nPersist business state using explicit application identifiers rather than an MCP session ID. For example:\n\n```text\ncart/create\n  -> { cartId: \"cart_123\" }\n\ncart/add-item\n  <- { cartId: \"cart_123\", productId: \"sku_42\" }\n```\n\n`cart/create` and `cart/add-item` may execute on different Fastify instances because the application state is addressed explicitly by `cartId`.\n\nUse your normal database, Redis instance, cache, durable object, or other storage when application-level persistence is required.\n\n### Multi-Round-Trip Requests\n\nMCP `2026-07-28` replaces server-to-client JSON-RPC requests with the `input_required` result model.\n\nA handler that needs more client input returns `inputRequired(...)`. The client fulfills the embedded request and retries the original operation with the resulting `inputResponses`.\n\n```typescript\nimport { acceptedContent, inputRequired } from '@modelcontextprotocol/server';\nimport * as z from 'zod/v4';\n\nconst confirmationSchema = z.object({\n  confirmed: z.boolean()\n});\n\nmcp.registerTool(\n  'dangerous-operation',\n  {\n    description: 'Example operation requiring confirmation'\n  },\n  async (ctx) => {\n    const confirmation = acceptedContent(ctx.mcpReq.inputResponses, 'confirmation', confirmationSchema);\n\n    if (!confirmation) {\n      return inputRequired({\n        inputRequests: {\n          confirmation: inputRequired.elicit({\n            message: 'Confirm this operation',\n            requestedSchema: confirmationSchema\n          })\n        }\n      });\n    }\n\n    if (!confirmation.confirmed) {\n      return {\n        content: [{ type: 'text', text: 'Operation cancelled' }]\n      };\n    }\n\n    return {\n      content: [{ type: 'text', text: 'Operation completed' }]\n    };\n  }\n);\n```\n\nFor multi-step flows, use `requestState` to carry an opaque continuation between rounds. Treat it as untrusted client input and integrity-protect it before relying on its contents.\n\nDo not use an in-memory transport or protocol session to hold continuation state.\n\n### Subscriptions and Notifications\n\nMCP `2026-07-28` clients receive server change notifications through an explicit `subscriptions/listen` stream. Application code publishes supported notifications through the decorator's SDK-typed facade:\n\n```typescript\nconst mcp = getMcpDecorator(app);\n\nmcp.notify.toolsChanged();\nmcp.notify.promptsChanged();\nmcp.notify.resourcesChanged();\nmcp.notify.resourceUpdated('config://app');\n```\n\nConfigure subscription behavior through `handlerOptions`:\n\n```typescript\nimport type { ServerEventBus } from '@modelcontextprotocol/server';\n\ndeclare const distributedBus: ServerEventBus;\n\nawait app.register(FastifyMcpServer, {\n  createMcpServer,\n  handlerOptions: {\n    bus: distributedBus,\n    keepAliveMs: 15_000,\n    maxSubscriptions: 1_024\n  }\n});\n```\n\nThe SDK default is an in-process event bus. In a multi-instance deployment, supply an SDK-compatible shared/distributed `ServerEventBus` when notifications published on one process must reach listeners connected to another. The plugin does not provide Redis or another bus implementation.\n\nAn open `subscriptions/listen` request is a long-lived explicit subscription stream, not a protocol session. Closing it cancels only that subscription. Ordinary tools, resources, prompts, and MRTR requests remain independently routable and require neither sticky sessions nor shared protocol state.\n\n### Horizontal Scaling\n\nNo MCP-specific coordination is required to run multiple Fastify instances behind a load balancer.\n\n```text\n              +-------------------+\nClient -----> | Load Balancer     |\n              +---------+---------+\n                        |\n             +----------+----------+\n             |                     |\n             v                     v\n       +-----------+         +-----------+\n       | Fastify A |         | Fastify B |\n       +-----------+         +-----------+\n```\n\nRequest 1 may be handled by instance A and request 2 by instance B. There is no protocol session that needs to be copied, restored, or routed consistently.\n\nIf your tools need application state, both instances should access the same application-owned persistence using explicit domain identifiers.\n\n## Authentication: Bearer Token Support\n\nYou can secure the MCP endpoint using Bearer token authentication. Authentication is evaluated independently for every HTTP request.\n\nNo authentication result is stored in an MCP protocol session.\n\n### Enabling Bearer Token Authentication\n\nConfigure `authorization.bearer` with the SDK's `BearerAuthOptions`:\n\n```typescript\nimport type { OAuthTokenVerifier } from '@modelcontextprotocol/server';\n\nconst verifier: OAuthTokenVerifier = {\n  async verifyAccessToken (token) {\n    return verifyMyAccessToken(token);\n  }\n};\n\nawait app.register(FastifyMcpServer, {\n  createMcpServer,\n  authorization: {\n    bearer: {\n      verifier,\n      requiredScopes: ['mcp:read', 'mcp:write'],\n      resourceMetadataUrl: 'https://example.com/.well-known/oauth-protected-resource'\n    }\n  }\n});\n```\n\n- **verifier**: Validates the Bearer token and returns MCP `AuthInfo`.\n- **requiredScopes**: Optional scopes required for the request.\n- **resourceMetadataUrl**: Optional Protected Resource Metadata URL advertised through `WWW-Authenticate` responses.\n\n### How It Works\n\nFor each MCP HTTP request, the plugin:\n\n1. extracts the Bearer token from the `Authorization` header;\n2. validates it through the configured verifier;\n3. validates expiration and required scopes;\n4. attaches the validated `AuthInfo` to the current MCP request context;\n5. returns the appropriate OAuth error and `WWW-Authenticate` challenge when authentication fails.\n\nAuthentication is request-scoped, so different requests from the same client are independently verified.\n\n### Accessing Authentication Information\n\nValidated authentication information is available through the MCP request context:\n\n```typescript\nmcp.registerTool(\n  'who-am-i',\n  {\n    description: 'Return the authenticated client identifier'\n  },\n  async (ctx) => ({\n    content: [\n      {\n        type: 'text',\n        text: `Authenticated client: ${ctx.http?.authInfo?.clientId ?? 'anonymous'}`\n      }\n    ]\n  })\n);\n```\n\nDo not expose access tokens or other sensitive authentication material in MCP responses.\n\n### Example Error Response\n\nIf authentication fails, the response includes a standards-compliant `WWW-Authenticate` header:\n\n```txt\nHTTP/1.1 401 Unauthorized\nWWW-Authenticate: Bearer error=\"invalid_token\", error_description=\"Token has expired\", resource_metadata=\"https://example.com/.well-known/oauth-protected-resource\"\nContent-Type: application/json\n```\n\n### Example using PAT in Visual Studio Code\n\n```json\n{\n  \"inputs\": [\n    {\n      \"type\": \"promptString\",\n      \"id\": \"bearer_token\",\n      \"description\": \"Enter your MCP Bearer Token\",\n      \"password\": true\n    }\n  ],\n  \"servers\": {\n    \"my-mcp-server\": {\n      \"url\": \"http://localhost:9080/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${input:bearer_token}\"\n      }\n    }\n  }\n}\n```\n\n## Well-Known OAuth Metadata Routes\n\nThe plugin can register standard OAuth metadata endpoints under `.well-known` for OAuth interoperability and MCP Protected Resource discovery.\n\n### Registering Well-Known Routes\n\nProvide the relevant metadata when registering the plugin:\n\n```typescript\nimport Fastify from 'fastify';\nimport { McpServer } from '@modelcontextprotocol/server';\nimport FastifyMcpServer from 'fastify-mcp-server';\n\nconst app = Fastify();\n\nfunction createMcpServer () {\n  return new McpServer({\n    name: 'my-mcp-server',\n    version: '1.0.0'\n  });\n}\n\nconst oauthMetadata = {\n  issuer: 'https://auth.example.com',\n  authorization_endpoint: 'https://auth.example.com/oauth/authorize',\n  response_types_supported: ['code'],\n  token_endpoint: 'https://auth.example.com/oauth/token'\n};\n\nawait app.register(FastifyMcpServer, {\n  createMcpServer,\n  authorization: {\n    metadata: {\n      oauthMetadata,\n      resourceServerUrl: new URL('https://api.example.com/mcp'),\n      scopesSupported: ['mcp:read', 'mcp:write']\n    }\n  }\n});\n```\n\n### Endpoints\n\n- `GET /.well-known/oauth-authorization-server` — OAuth Authorization Server metadata\n- `GET /.well-known/oauth-protected-resource/mcp` — OAuth Protected Resource Metadata for the default `/mcp` endpoint\n\nOnly configured metadata endpoints are registered.\n\nFor MCP 2026 clients, prefer the current authorization model and Client ID Metadata Documents (CIMD) rather than building new integrations around deprecated Dynamic Client Registration flows.\n\n## Protocol Compatibility\n\nThis major version supports MCP `2026-07-28` only.\n\nPre-2026 MCP clients and protocol behaviors are intentionally unsupported. The plugin mounts the SDK v2 HTTP handler in strict modern mode (`legacy: 'reject'`) and does not provide a compatibility mode, fallback handler, legacy endpoint, or migration shim.\n\nIn particular, the following legacy concepts are not supported:\n\n- `initialize` / `initialized` as the MCP lifecycle handshake;\n- `Mcp-Session-Id`;\n- per-session `StreamableHTTPServerTransport` instances;\n- session GET/SSE channels;\n- DELETE-based MCP session termination;\n- MCP session stores;\n- sticky routing based on MCP session identity.\n\nClients should explicitly use or pin protocol revision `2026-07-28`.\n\n## Development\n\n### Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/flaviodelgrosso/fastify-mcp-server.git\ncd fastify-mcp-server\n\n# Install dependencies\nnpm install\n\n# Run the development server\nnpm run dev\n```\n\n### Scripts\n\n- `npm run dev` - Run the development server\n- `npm run build` - Build TypeScript to JavaScript\n- `npm test` - Run the test suite with 100% coverage\n- `npm run test:lcov` - Generate LCOV coverage report\n- `npm run inspector` - Launch the MCP Inspector\n- `npm run lint` - Run ESLint\n- `npm run format` - Format the repository with Prettier\n\n### Testing\n\nThe test suite focuses on modern protocol invariants, including:\n\n- normal MCP operations without initialization;\n- no dependency on `Mcp-Session-Id`;\n- request isolation;\n- routing-header validation;\n- request-scoped authentication;\n- multi-round-trip requests;\n- cancellation;\n- horizontal scaling without protocol affinity;\n- rejection of pre-2026 protocol traffic.\n\nRun the suite with:\n\n```bash\nnpm test\n```\n\n## Contributing\n\nContributions are welcome. Please ensure:\n\n1. tests pass with 100% coverage;\n2. code follows the established ESLint and Prettier configuration;\n3. commits follow conventional commit format;\n4. changes remain aligned with MCP `2026-07-28` and do not reintroduce protocol-session state;\n5. user-facing changes are documented.\n\n## License\n\nISC © [Flavio Del Grosso](https://github.com/flaviodelgrosso)\n\n## Related Projects\n\n- [Model Context Protocol](https://modelcontextprotocol.io/) - Official MCP specification and documentation\n- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk) - Official TypeScript SDK for MCP\n- [Fastify](https://github.com/fastify/fastify) - Fast and low-overhead web framework\n","readmeFilename":"README.md"}