{"_id":"notion-mcp-server","_rev":"24-0c2a7daeb81979922c8d2100a025603e","name":"notion-mcp-server","dist-tags":{"latest":"3.1.1"},"versions":{"0.0.1":{"name":"notion-mcp-server","version":"0.0.1","keywords":["notion","mcp","modelcontextprotocol","ai"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@0.0.1","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"9199df6a353c654a7bfd6bc773f5a7dbddf15754","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-0.0.1.tgz","fileCount":64,"integrity":"sha512-dqBxswPsjVfC/iBdG15bz05fuZmpo9F6sGRMPFNi5R/12Ou4yiHLE52hyUyOPbitXnVY/LFVdwxBGY7XLOdpgA==","signatures":[{"sig":"MEYCIQDM4sI9bynjlxY0PPIDrLJ/puflmuFzfihtFRLqGY6opAIhAJ0lBV+k0Jwluz6jhaxub144xG/XqSeVGFrxgtW5PXne","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170055},"type":"module","engines":{"node":">=18"},"gitHead":"be5dcf5c0e20b2e24baf0a5375c87d3f0765b978","scripts":{"build":"tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id"},"_npmUser":{"name":"awkoy","email":"y.boikodevelop@gmail.com"},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP for Notion","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.24.2","@notionhq/client":"^2.3.0","@modelcontextprotocol/sdk":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","typescript":"^5.8.2","@types/node":"^22.13.10"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_0.0.1_1742424480069_0.2846120707035371","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"notion-mcp-server","version":"0.0.2","keywords":["notion","mcp","modelcontextprotocol","ai"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@0.0.2","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"81ce7f7167c3fdee651cf74e27674782f1e09101","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-0.0.2.tgz","fileCount":72,"integrity":"sha512-2AR4F0hOqLTEMFsSMh8CKTrqeUsssKKuaovk3+l1ryLoO5409n0NcoGkHEuq/D8GwZADh2G6T/HCtNWX3A5gbw==","signatures":[{"sig":"MEUCIBRdKdxOwOwkgtun4a0wOnWiEE15znnOiMjOwImyhm/uAiEAxuqnE48OEjfdFLVxHOyaldzuqt/Z3uT3KX5sS8KtHyQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192674},"type":"module","engines":{"node":">=18"},"gitHead":"a8e6464c53d7abec3066b8dabe01558d9c3f81dc","scripts":{"build":"tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id"},"_npmUser":{"name":"awkoy","email":"y.boikodevelop@gmail.com"},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP for Notion","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.24.2","@notionhq/client":"^2.3.0","@modelcontextprotocol/sdk":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","typescript":"^5.8.2","@types/node":"^22.13.10"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_0.0.2_1742753770793_0.38024311358268914","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"notion-mcp-server","version":"1.0.0","keywords":["notion","mcp","modelcontextprotocol","ai"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@1.0.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"7bab1acbcb2fba25e8260af2f6afaa3e4ecde9c7","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-1.0.0.tgz","fileCount":78,"integrity":"sha512-VMBiqQz+uU7Z935giBB+CxbpndxjLUMiSaH2VrUb3iLn0NTyWpC6faPjoh1F7vVJlGu0r0A5sAUSKvN/MeKcNA==","signatures":[{"sig":"MEQCIC0IGrIWYgBSpPWPxvENyRSTHOutPNXz4fdvrGX4dn3zAiBFUT6BorA4o5pwDZj+mB86cCfMMozz3KkvmHdi9sMgHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200335},"type":"module","engines":{"node":">=18"},"gitHead":"38fe769b37f3d06552ecc9bc8b973020d663d69c","scripts":{"build":"tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id"},"_npmUser":{"name":"awkoy","email":"y.boikodevelop@gmail.com"},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP for Notion","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.24.2","@notionhq/client":"^2.3.0","@modelcontextprotocol/sdk":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","typescript":"^5.8.2","@types/node":"^22.13.10"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_1.0.0_1743441475109_0.5247208510195658","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"notion-mcp-server","version":"1.0.1","keywords":["notion","mcp","modelcontextprotocol","ai"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@1.0.1","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"0878ffe60d05ad6d7afe029958b38b7a3be9ce1f","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-1.0.1.tgz","fileCount":82,"integrity":"sha512-up/byykDnWQpsR/2vtHfzm5LcKPXbTILx2Y6Ho0FsVkvMHssSGnNGnW9hcffdzRzl7u4/oEOuyriwVVlLYXzRg==","signatures":[{"sig":"MEQCIFwRpepDeLLHoT1gyRw8gQv+GRijKbbjPbp8LxcPC4E+AiB3uHt5qHIpb1Q/BNtk8Uk9PyZTkku5MMcwgpPV+PCuVg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":211809},"type":"module","engines":{"node":">=18"},"gitHead":"94ccc3ef0eebfb2d2c6c5088bfc4028557397f56","scripts":{"build":"tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id"},"_npmUser":{"name":"awkoy","email":"y.boikodevelop@gmail.com"},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP for Notion","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.24.2","@notionhq/client":"^2.3.0","@modelcontextprotocol/sdk":"^1.9.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","typescript":"^5.8.2","@types/node":"^22.13.10"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_1.0.1_1744548611220_0.7010145712412048","host":"s3://npm-registry-packages-npm-production"}},"2.4.2":{"name":"notion-mcp-server","version":"2.4.2","keywords":["notion","mcp","modelcontextprotocol","ai"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.4.2","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"7dc1b562057f9df3219b4793c2163df7d5f2e4e4","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.4.2.tgz","fileCount":51,"integrity":"sha512-Ns1nKNxHgkOIXhtJGqytC23DgccDLMUV7hjfxmHLdbKviuEcrREIGk/IoCKip6Pznp3N/hhKJKEeNvCeiQyuTw==","signatures":[{"sig":"MEUCIQCbk0jubilMSNDh9Z4UKBy62jQQjsYsuNGkHIGEMjLjCAIgAky/uj7nj6wwCKDxx1dMKPaYfpt9X+97+nTxvqW3k3E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":245606},"type":"module","engines":{"node":">=20"},"gitHead":"2918bd19b613ccba11540503455101a8d813af2d","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"MCP for Notion","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","vitest":"^4.1.7","typescript":"^5.8.2","@types/node":"^22.13.10"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.4.2_1779887500223_0.6169927036894662","host":"s3://npm-registry-packages-npm-production"}},"2.4.3":{"name":"notion-mcp-server","version":"2.4.3","keywords":["notion","mcp","modelcontextprotocol","ai"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.4.3","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"f9d5e2c12254346b72c3d25924ac5b88ff81eafa","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.4.3.tgz","fileCount":51,"integrity":"sha512-rSYRKiYK+J+vcRBdq7zVryBiH9JXd78RxpUm/BYe7KpJw+NePZ/UCtGSICIbXMBGtGgHvDO0+pk2QQku/a9ruA==","signatures":[{"sig":"MEUCIQDgDASIv7yQrnKNT63OThRyt9VQPJ0tRt+ar1ry2HFLDgIgB7RHU+cawtYoILiF505zbUvAALTO/s9/FJWJyeyLHnY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":246051},"type":"module","engines":{"node":">=20"},"gitHead":"47fb07f4b04d6d45ffe7af3dd3506a5cc9362d6a","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"MCP for Notion","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","vitest":"^4.1.7","typescript":"^5.8.2","@types/node":"^22.13.10"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.4.3_1779887981010_0.2129136277959396","host":"s3://npm-registry-packages-npm-production"}},"2.4.4":{"name":"notion-mcp-server","version":"2.4.4","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.4.4","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"10e4efc43f8e91d1ea34bae92ec28daca319acfc","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.4.4.tgz","fileCount":51,"integrity":"sha512-EbymA4rhKl8BToFlcZQpKlzdm4VyLgWaJwhEGVMZkAHC+a978E5yhi9E1s1Uzz4qso8C66Or8RX3SjvpUFlidw==","signatures":[{"sig":"MEYCIQDRDriSGoykOBHk2QTOE/lzGmy+feE/AXhkRT3gUsv8RAIhAMNT60Df2Dba1j1/MqR8NHH8UH1D8zUuw3xZXkygUj9J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.4.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":246078},"type":"module","engines":{"node":">=20"},"gitHead":"1266d2b8608bafb3f34af8506ec0bafdcbd541e4","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","vitest":"^4.1.7","typescript":"^5.8.2","@types/node":"^22.13.10"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.4.4_1779888553824_0.3575876604362407","host":"s3://npm-registry-packages-npm-production"}},"2.4.6":{"name":"notion-mcp-server","version":"2.4.6","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.4.6","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"56d869bf19b9130c71c88ef99200fa06f92a35dd","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.4.6.tgz","fileCount":51,"integrity":"sha512-wIg/g9LLN/c8wZS8g8bHrHX89vTM7XNPvZ+Edwq3TlNrpmf7OrO8U1oAeO+xgCNYJT9lDIS+sq79o0FEhurW/g==","signatures":[{"sig":"MEUCIQDIUORtZjchOz4YM0AIIAX/ltKHSzVvopbkFni1z6mzRwIgEud/6f+nf/VG36+nGScSitXmlEWmz7dl987H0gxyULA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.4.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":246108},"type":"module","engines":{"node":">=20"},"gitHead":"a938f664620b7dff4c0e78de6ce06b7752f3c1cc","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","vitest":"^4.1.7","typescript":"^5.8.2","@types/node":"^22.13.10","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.4.6_1779889524300_0.6919630733426634","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"notion-mcp-server","version":"2.5.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.5.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"46a472b4f3d9602406964533d035492af7a26fc5","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.5.0.tgz","fileCount":52,"integrity":"sha512-rhDEM8Dvt1htPaKWfAeOI1+ho3BjzxuM0PKwn1FtTFBj2Cb0elcaMf1dbPW28p/vdyvOsoWouOGXytPGqgzU3g==","signatures":[{"sig":"MEUCIQCB9hTf6ulmN5xl9bKcqMbSdzY5uF7hXgrUYEF5OSNZrQIgauSSncC8AufmkrKTPMST4ljBjgPIzbroTd+2MzQvrIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":257867},"type":"module","engines":{"node":">=20"},"gitHead":"2fcf5fffee95cf0acd3fad32a985b98e34be8e4a","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","vitest":"^4.1.7","typescript":"^5.8.2","@types/node":"^22.13.10","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.5.0_1780689814491_0.17786506708757766","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"notion-mcp-server","version":"2.5.1","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.5.1","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"3ec16415fffc46f2b59665ef97f26f4bdc501716","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.5.1.tgz","fileCount":52,"integrity":"sha512-Q0gXnijz8GzlCm/87kiIJNFOMjSaRi6yseldJ4o6LDe5de5T7/C7Scj7rHVEsRm6V0Qa9VfLf19rMEZceggrBA==","signatures":[{"sig":"MEQCICR4VOmKr2pAGx8g1HLXYkOJSnJARIjgnFBc5FwbZ/6vAiAylwn/CPKaEr17fIX/y85EGcnvkkXJmIZkTZgVOArGrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":257867},"type":"module","engines":{"node":">=20"},"gitHead":"f5f1bdaf2456093a583722dab8422cf7b972636c","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","vitest":"^4.1.7","typescript":"^5.8.2","@types/node":"^22.13.10","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.5.1_1780691167912_0.6191155418092689","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"notion-mcp-server","version":"2.6.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.6.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"331e8d6446f7a8dc11842108a61fb8720d5a4e47","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.6.0.tgz","fileCount":53,"integrity":"sha512-7x+Ji0WYzUmwXTZKdqgeRmTR5WkIvKY01E41BL80qwuTzkQbc5FwA7ngdRb11DnS7HO/zcCSIYbmkpy1Ysx1dg==","signatures":[{"sig":"MEUCIAT0YvPToPUKHi7AGU4PRKNmyTuaJOApGq5SXtEEK/uHAiEAwbrTiRnwiJgx+nzMDR04/eWJQg8rjBZyVpoMRy31P2I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":262596},"type":"module","engines":{"node":">=20"},"gitHead":"fc44ae18a4722a14b50ca8b64f4f18610b693aa8","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","vitest":"^4.1.7","typescript":"^5.8.2","@types/node":"^22.13.10","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.6.0_1781705720319_0.017570326134060288","host":"s3://npm-registry-packages-npm-production"}},"2.6.1":{"name":"notion-mcp-server","version":"2.6.1","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.6.1","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"0a4f988a3fb3aa8b9175b688923d9e493a312607","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.6.1.tgz","fileCount":53,"integrity":"sha512-opfycmywvRnisGVyb9W5O9zSCf1frj2aYfTwGZITRAEmTQS8QqHH+Ji9/jPbsoUTlgxfAk34U30Ax6omf0KmCw==","signatures":[{"sig":"MEQCIGaQZhaN832dYJsL020glhhX5gWfH7CeTuIrRzoZZPugAiAK2JflIAcz6Z4TSTxlcRds4wSzMOLtek4R+tAL6aMCzQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":262596},"type":"module","engines":{"node":">=20"},"gitHead":"d8e41d3f5960424ae0c07cf1c81b8238cb4ce5f0","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.13.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","vitest":"^4.1.7","typescript":"^5.8.2","@types/node":"^22.13.10","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.6.1_1781706583323_0.8984573375714098","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"notion-mcp-server","version":"2.7.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.7.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"7a149c54bae3cb2c19d28ffcfdbe2f97bb4eb67b","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.7.0.tgz","fileCount":56,"integrity":"sha512-eQBPj+iZiNfCZYcWVGSY71TxRIHvIBTvBL1FIWzVczjO9il2gLumwTAlOyQp53ZASTFWKDz4JEzzqGgHnVhQiQ==","signatures":[{"sig":"MEYCIQC5he6pKTQWBa1jVViWayDY4ZkApei512q29bQhuf4qagIhAIa+nLuT7MdSMFU0Ytn2SLKDP19EWEXVgNfyLdo6oh0h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":277104},"type":"module","engines":{"node":">=20"},"gitHead":"361a9ce967b6f7ddce4a5866be7e56b904019511","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.17.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","vitest":"^4.1.7","typescript":"^5.8.2","@types/node":"^22.13.10","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.7.0_1781712134661_0.31865412773357615","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"notion-mcp-server","version":"2.8.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.8.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"97ee5e270d96b37c75a9a1e6031c9a7f17138d86","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.8.0.tgz","fileCount":57,"integrity":"sha512-QD/QQLflIzJBS9GSHG7C6y87GdWCwrRZb1lxX5aVossnY0VDSvU6Zh3veMa8/9QR5hzBCG4fDyAVzkzIDFYBgw==","signatures":[{"sig":"MEQCICqyU095tyKE8bKAYcCpTjfHW10tNB0wHTeWRvHvube4AiBerX7iHw6C29GkM9y/OmkAragM1T2ixC4J4F8S1fqIJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":299529},"type":"module","engines":{"node":">=20"},"gitHead":"7198d13e5923f8fb968d558e5816a9355f78a069","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.17.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","vitest":"^4.1.7","typescript":"^5.8.2","@types/node":"^22.13.10","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.8.0_1782075574134_0.6332012282811472","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"notion-mcp-server","version":"2.9.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.9.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"d29947ab3bb31c18e6cdb464d3d15a256c12e063","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.9.0.tgz","fileCount":57,"integrity":"sha512-36ofRANJxVjkhMhsLW/d20CAtANoklwoA/l1ZHMrSMzFEo9ZpjPF8jq9lIq3dRUW0LBdoxcX+L/rhTwfCmb5nw==","signatures":[{"sig":"MEQCIC9ob4pNm5q7nXzbCSMdwPUhaXV6J5UhXGVJRirNBALaAiBaPq0NX+HN9TnRySV8WZbMX2gyyaFzMe8TqYrG02fCVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":300325},"type":"module","engines":{"node":">=20"},"gitHead":"9c9cf8f1f1763ef4ff052aefcaf13ad86b2742c5","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.17.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","node-fetch":"3.3.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","https-proxy-agent":"9.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^25.9.3","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.9.0_1782079182268_0.578509017783809","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"notion-mcp-server","version":"2.10.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.10.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"b61d20f9d56c9ccd32e6ae85c4ade11c6aebf164","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.10.0.tgz","fileCount":57,"integrity":"sha512-F+9L7Ari6ibzQ15LccL1hrz8PupBVTL/p2u+6h5Wol1Gf85duhElKcOZKuj2Po8YjauTMPUHMJymwcMLlYM25Q==","signatures":[{"sig":"MEUCIDkJzL6H9TZ6dJyltD8CeUlReQvXATWoN3OtNxx6VXUjAiEA+jZJvzMnJSVotsdDSCshrKdqajCZORXaM4/+BqU8+Hw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":302913},"type":"module","engines":{"node":">=20"},"gitHead":"4abacf41c163ecc35cf1c3f0ade67056cef428bc","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.18.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","node-fetch":"3.3.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","https-proxy-agent":"9.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^25.9.3","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.10.0_1783002556589_0.4008880278185629","host":"s3://npm-registry-packages-npm-production"}},"2.10.1":{"name":"notion-mcp-server","version":"2.10.1","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.10.1","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"49e5b415681850c0ee987f0275934b4c60157a6b","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.10.1.tgz","fileCount":57,"integrity":"sha512-2uXOAmG4zy/3ClemvndQq3EeE0sM1w/dE5ytyi6VtBl4dc2ZzqPqeZedHwWBPpgjulu+AfrqY3yjQnNY/ZHFsQ==","signatures":[{"sig":"MEQCIDeyFNKo0wKEWQnMdbdC9By3b3cGDv8GI7X4EWuGZ8JYAiAxHM2R0djtanqicxO9GxJAZqtlgo6r6Qxp2EcXJVgOyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":296259},"type":"module","engines":{"node":">=20"},"gitHead":"e88bb9d92922842b68eda326b1111270df37d103","mcpName":"io.github.awkoy/notion-mcp-server","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.18.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","node-fetch":"3.3.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","https-proxy-agent":"9.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^26.0.0","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.10.1_1783071441384_0.7274617478348944","host":"s3://npm-registry-packages-npm-production"}},"2.11.0":{"name":"notion-mcp-server","version":"2.11.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.11.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"41c28d967eaf95510a74ce9654959f25619f84d5","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.11.0.tgz","fileCount":57,"integrity":"sha512-40soBN4+oOpg+XMJdYXbmoITvJDbFeqpGPPSJwlW8lsx46K2G23qEdMr4Kx8Py7b5SC/fDN1WLC4CdGFcXw0/g==","signatures":[{"sig":"MEUCIQCWCuW0VN4mS/OfPDq2DtlbK6+aBfjXRXtVwtw3ZShsGAIgEH1lwPpCnxedJ27m7R/lSZlLYtLLJTrI7dCoU3fT89Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":296496},"type":"module","engines":{"node":">=20"},"gitHead":"fa870759311f89bb40727bf317c8ee9900a7282c","mcpName":"io.github.awkoy/notion-mcp-server","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"11.18.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","node-fetch":"3.3.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","https-proxy-agent":"9.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^26.0.0","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.11.0_1783089322557_0.9985009560551288","host":"s3://npm-registry-packages-npm-production"}},"2.12.0":{"name":"notion-mcp-server","version":"2.12.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.12.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"89b0f225c338f018d79ee8e91bc46eaa108a7c0e","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.12.0.tgz","fileCount":57,"integrity":"sha512-F/4PWXndURKQiS44bcjEy9C/RaO4/l3HkV6ro9fK13F/6RYpWGZJ7mwyfDS+f9KVC4fBddU0WSCyC5E1UQKqeA==","signatures":[{"sig":"MEQCIBnRhTCkG+G20wjSPbC8K57eMI/4aJ2kQQbeqJoNBOe/AiBU/TDlrGbMXCSE3HI6zdjiJMknaxfTS6jQIHUjERGEgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":299241},"type":"module","engines":{"node":">=20"},"gitHead":"7bec42cdec837933d1dc3342ee8532cd08765833","mcpName":"io.github.awkoy/notion-mcp-server","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"12.0.1","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","node-fetch":"3.3.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","https-proxy-agent":"9.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^26.0.0","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.12.0_1783715790378_0.1970853496925904","host":"s3://npm-registry-packages-npm-production"}},"2.13.0":{"name":"notion-mcp-server","version":"2.13.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@2.13.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"e5aefab0709a276c0009933c48c4945af5d2138f","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-2.13.0.tgz","fileCount":57,"integrity":"sha512-+gIJpPu3HwENi1l6eEt6E79J0trZ4lDHkPl47eifoPDFiv4HnJV4nsHXXWiR/fTHl5Er0pu+pgPN6T18FqHhmA==","signatures":[{"sig":"MEQCIHcuKVm3IW0/2pMMqwGfjM4hDGZMVEzpUC89zOjK06HGAiAJv6gYdUTV0Yk7t1OAGmBZexSpRSB7wUy+lM1PJ29f9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@2.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":303234},"type":"module","engines":{"node":">=20"},"gitHead":"6895717d9a2388e5acf4d7eaa195970d71b2cdc1","mcpName":"io.github.awkoy/notion-mcp-server","scripts":{"test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"12.0.2","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","node-fetch":"3.3.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","https-proxy-agent":"9.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^26.0.0","@types/mdast":"^4.0.4"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_2.13.0_1785673964937_0.00787753384208112","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"notion-mcp-server","version":"3.0.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@3.0.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"8d1b0bc3d40e4a14764b5afda547cf982ab49d11","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-3.0.0.tgz","fileCount":64,"integrity":"sha512-ChjK8uXXTGJG1/WUGix6PuhcGVZffVl1dVdvh5h68BsqH69bia3BRacKtUOz6xWo+ACVPAjE/JKm5yoETB0DjQ==","signatures":[{"sig":"MEUCIQDfky6okfPUNM7VWIzfr1TKbhGG0iHolVmSfCFuD2ItkQIgPtPLH5Sf8RzofhI4CeOH0ZyhrHilDjSDyuPBO9xYBwI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":406817},"type":"module","engines":{"node":">=20"},"gitHead":"14fd63962dd77d800b669a480018d75064690cda","mcpName":"io.github.awkoy/notion-mcp-server","scripts":{"e2e":"node --env-file=.env scripts/e2e.mjs","test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"12.0.2","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","node-fetch":"3.3.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","https-proxy-agent":"9.1.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.7","typescript":"^7.0.2","@types/node":"^26.0.0","@types/mdast":"^4.0.4","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_3.0.0_1788344356180_0.039286942675370584","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"notion-mcp-server","version":"3.0.1","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@3.0.1","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"c44b77fc93914ce70ffd7952bac983234a760e0e","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-3.0.1.tgz","fileCount":64,"integrity":"sha512-XrWXLlp6UCuQa3rMZg+8Otuq1dCIdoP2Td2B2OgiRC3RCdTSnU+9PYaoq34EFLWGFQTZidL0JrrP12TYIVzVZw==","signatures":[{"sig":"MEYCIQCp3m58v2tQOCVsehqYpTwylDc9RviUUI1+23p9UzVCtgIhAI/Od9n/lA3jcb9ZaqG3M0hzbvQQ3QntsdDq2++6QO8L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBeoLe9+qs9XFCULH69wEBTKSh0b59KBanZx2FrlvWhfAiEArAa1Vp9pDJIgSN7QTeHUDxWLRgZpS9iGmwjmo2IMjgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":408931},"type":"module","engines":{"node":">=20"},"gitHead":"2e9042eee99d69c2250f8f2d334ed747db55e85c","mcpName":"io.github.awkoy/notion-mcp-server","scripts":{"e2e":"node --env-file=.env scripts/e2e.mjs","test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"12.0.2","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","node-fetch":"3.3.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","https-proxy-agent":"9.1.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.7","typescript":"^7.0.2","@types/node":"^26.0.0","@types/mdast":"^4.0.4","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_3.0.1_1789507253622_0.41718437478897763","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"notion-mcp-server","version":"3.1.0","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"author":{"name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","_id":"notion-mcp-server@3.1.0","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"homepage":"https://github.com/awkoy/notion-mcp-server","bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"bin":{"notion-mcp-server":"build/index.js"},"dist":{"shasum":"6d92d2fb5c72d176e677410fe71668802c24ac24","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-3.1.0.tgz","fileCount":67,"integrity":"sha512-/SK3LL9VEJFnvOosOlQzxY4awCtPMzgibzPjQsa/vZMAyXmOoKiJhVYC/x0F0ssqoFRWkKutdQgRIm48rz+EtQ==","signatures":[{"sig":"MEUCIQDLFhT4lkd2fBKXiWec2f9Kb7zk8NzTWUFWp36IYcC4PQIgTaSCbQAjWp6xquRV1tJ/VUxRVJvgTLBq0cFeviWkNwA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGW4DePkACuYbULj7OnXKOj9DIsj1+CBjMUPrumfbL+BAiEA+CQa61AfJVUx2ZOV8DzP1KqDikCG6EfsWHD+G7UxttY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":428826},"type":"module","engines":{"node":">=20"},"gitHead":"52dbd30c6e6768207fb7dd770b6b9b2a894414e6","mcpName":"io.github.awkoy/notion-mcp-server","scripts":{"e2e":"node --env-file=.env scripts/e2e.mjs","test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"12.0.2","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","node-fetch":"3.3.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","https-proxy-agent":"9.1.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^4.1.7","typescript":"^7.0.2","@types/node":"^26.0.0","@types/mdast":"^4.0.4","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/notion-mcp-server_3.1.0_1789592983506_0.19148220521840287","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"_id":"notion-mcp-server@3.1.1","bin":{"notion-mcp-server":"build/index.js"},"bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"dist":{"shasum":"2d999a689d6511e556fa5ab38e45a6ec3b2d825c","tarball":"https://registry.npmjs.org/notion-mcp-server/-/notion-mcp-server-3.1.1.tgz","fileCount":67,"integrity":"sha512-xLIjNU28ToC6nWAciTqLe9e2BZPdWmfVpEOYi2/EICV/WVk179v7dCGuaZ6eBBooGTPmoa7uShBKtEA1wiYztg==","signatures":[{"sig":"MEUCIDxeQx8CICaAwjZUN4HFdUgGWJgXzMcE5yQhkgr0A4JtAiEAlgG4Z+SDOqVnCNUodDBHMZa4dG1Tivb6pITGbsu0TAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAcUy96DIA/eifkcVUftBCtSLh1OIigJoV+wY1raBLtbAiA8Uh8DMGXxGiwaXb2dDRwXbwSCGRCPvycLjVBW+kNlGg=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/notion-mcp-server@3.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":419486},"name":"notion-mcp-server","type":"module","author":{"url":"https://yaroslavboiko.com","name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"engines":{"node":">=20"},"gitHead":"f430ad22fe5cddeae8a8cdf1d76faf3d58a0ed06","license":"MIT","mcpName":"io.github.awkoy/notion-mcp-server","scripts":{"e2e":"node --env-file=.env scripts/e2e.mjs","test":"vitest run","build":"shx rm -rf build && tsc && shx chmod +x build/*.js","watch":"tsc --watch","prepare":"npm run build","inspector":"npx @modelcontextprotocol/inspector build/index.js -e NOTION_TOKEN=your_notion_token -e NOTION_PAGE_ID=your_notion_page_id","test:watch":"vitest"},"version":"3.1.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"05b65761-a8fd-4fd7-a532-da2f0dd9dc1d"}},"homepage":"https://github.com/awkoy/notion-mcp-server","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"_npmVersion":"12.2.0","description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","directories":{},"maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","unified":"^11.0.5","node-fetch":"3.3.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@notionhq/client":"^5.22.0","https-proxy-agent":"9.1.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","vitest":"^5.0.0","typescript":"^7.0.2","@types/node":"^26.0.0","@types/mdast":"^4.0.4","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/notion-mcp-server_3.1.1_1790890154842_0.8601574620707937"}}},"time":{"created":"2025-03-19T22:47:59.953Z","modified":"2026-10-01T21:29:15.265Z","0.0.1":"2025-03-19T22:48:00.257Z","0.0.2":"2025-03-23T18:16:11.013Z","1.0.0":"2025-03-31T17:17:55.325Z","1.0.1":"2025-04-13T12:50:11.394Z","2.4.2":"2026-05-27T13:11:40.399Z","2.4.3":"2026-05-27T13:19:41.185Z","2.4.4":"2026-05-27T13:29:14.000Z","2.4.6":"2026-05-27T13:45:24.452Z","2.5.0":"2026-06-05T20:03:34.638Z","2.5.1":"2026-06-05T20:26:08.051Z","2.6.0":"2026-06-17T14:15:20.470Z","2.6.1":"2026-06-17T14:29:43.501Z","2.7.0":"2026-06-17T16:02:14.810Z","2.8.0":"2026-06-21T20:59:34.271Z","2.9.0":"2026-06-21T21:59:42.403Z","2.10.0":"2026-07-02T14:29:16.726Z","2.10.1":"2026-07-03T09:37:21.504Z","2.11.0":"2026-07-03T14:35:22.709Z","2.12.0":"2026-07-10T20:36:30.533Z","2.13.0":"2026-08-02T12:32:45.097Z","3.0.0":"2026-09-02T10:19:16.333Z","3.0.1":"2026-09-15T21:20:53.766Z","3.1.0":"2026-09-16T21:09:43.584Z","3.1.1":"2026-10-01T21:29:14.933Z"},"bugs":{"url":"https://github.com/awkoy/notion-mcp-server/issues"},"author":{"url":"https://yaroslavboiko.com","name":"Yaroslav Boiko","email":"y.boikodeveloper@gmail.com"},"license":"MIT","homepage":"https://github.com/awkoy/notion-mcp-server","keywords":["notion","notion-mcp","notion-mcp-server","notion-api","notion-integration","mcp","mcp-server","modelcontextprotocol","model-context-protocol","claude","claude-desktop","cursor","chatgpt","anthropic","ai","ai-agent","agent","llm"],"repository":{"url":"git+https://github.com/awkoy/notion-mcp-server.git","type":"git"},"description":"Notion MCP server for Claude, Cursor, ChatGPT, and Claude Desktop — connect AI agents to Notion via the Model Context Protocol. Create pages, query databases, append blocks, upload files, and more in natural language.","maintainers":[{"name":"awkoy","email":"y.boikodevelop@gmail.com"}],"readme":"# Notion MCP Server — Connect Claude, Cursor & VS Code to Notion\n\n[![npm version](https://img.shields.io/npm/v/notion-mcp-server)](https://www.npmjs.com/package/notion-mcp-server)\n![NPM Downloads](https://img.shields.io/npm/dw/notion-mcp-server)\n![License](https://img.shields.io/badge/license-MIT-green)\n![Model Context Protocol](https://img.shields.io/badge/MCP-Streamable_HTTP_+_stdio-purple)\n![Stars](https://img.shields.io/github/stars/awkoy/notion-mcp-server)\n\nGive your AI read/write access to Notion with one token and one command. Claude Code, Claude Desktop, Cursor, VS Code, Cline, Zed, anything that speaks MCP: it can create pages, query databases, append blocks, apply templates, comment and upload files, in plain language.\n\nNotion ships its own MCP server. Where this one differs:\n\n- **It authenticates with a token, so it runs headless.** Notion's hosted MCP is OAuth-only and someone has to click \"Authorize\". This one works in CI, cron jobs, background agents and self-hosted deployments.\n- **It doesn't spend your context on tool schemas.** The official open-source server loads 24 endpoint schemas into the model's context at connection: 17,163 tokens, re-sent with every request for the rest of the session. This one loads three tools, 1,005 tokens — 94% less, 17× smaller — and fetches an operation's schema only when a task actually touches it.\n- **It doesn't spend your context on answers either.** Reading the same pages through both servers, pulling a page's content costs **82% less** (26,071 → 4,568 tokens on an 88-block page), a 25-row database query **81% less**, a page object **68% less**. Notion's raw JSON is mostly `id`/`type` wrappers, `annotations`, and `created_by`/`parent`/`icon` blocks, and none of it reaches the model. That is the half that compounds, because a tool surface is paid once and responses are paid on every call. [Measured against a reproducible fixture, with the caveats stated →](./benchmarks#part-2--the-responses)\n\nNothing is lost to get there: a database query returns flat name → value rows instead of Notion's raw `properties` bags (5.3× lighter in the benchmark), and `verbose: true` gives you the untouched SDK shape whenever you want it — within 4 tokens of what the official server returns, which is how the benchmark proves both are reading the same thing. Batched mutations with atomic rollback, idempotency keys, retry on rate limits and self-healing validation errors are built in, and the [comparison below](#which-notion-mcp-should-you-use) has the rest.\n\n<a href=\"https://glama.ai/mcp/servers/zrh07hteaa\">\n  <img width=\"380\" height=\"200\" src=\"https://glama.ai/mcp/servers/zrh07hteaa/badge\" alt=\"Notion MCP Server on Glama\" />\n</a>\n\n## Quick start\n\n**1. Get a Notion token.** Open **[app.notion.com/developers/tokens](https://app.notion.com/developers/tokens)** → **+ New token** → name it, pick your workspace → **Create token** → copy the `ntn_…` value. A Personal Access Token sees everything *you* can see, with no per-page sharing. (Page missing or empty? Your admin disabled PATs — see [auth alternatives](#token-pat-or-internal-integration).)\n\n<img src=\"https://raw.githubusercontent.com/awkoy/notion-mcp-server/main/assets/notion-pat-page.png\" width=\"640\" alt=\"Notion developer portal — the Personal access tokens page with the + New token button in the top right\">\n\n**2. Install it.**\n\n```bash\nnpx add-mcp notion-mcp-server --env NOTION_TOKEN=ntn_paste_your_token_here\n```\n\n[`add-mcp`](https://github.com/neon-solutions/add-mcp) finds the MCP clients on your machine and writes the config for the ones you pick: Claude Code, Claude Desktop, Cursor, VS Code, Codex, Gemini CLI, Cline, Windsurf, Zed and a dozen others. Add `-g` to install at user level instead of the current project, `-a claude-code` to skip the picker, `--all` to write every client at once.\n\n> Keep the `--env` flag. Without it the entry is written without a token, and the server starts and then fails every call with an auth error.\n\n<details>\n<summary><b>Or install it by hand: JSON config, Claude Code, Cursor, VS Code, Gemini CLI, Claude Desktop, Docker</b></summary>\n\n**Any client that reads an `mcpServers` block** (Cursor's `~/.cursor/mcp.json`, Claude Desktop's `claude_desktop_config.json`, Cline's settings, Zed, Continue…):\n\n```json\n{\n  \"mcpServers\": {\n    \"notion\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"notion-mcp-server\"],\n      \"env\": { \"NOTION_TOKEN\": \"ntn_paste_your_token_here\" }\n    }\n  }\n}\n```\n\n**Claude Code:**\n\n```bash\nclaude mcp add notion -s user \\\n  -e NOTION_TOKEN=ntn_paste_your_token_here \\\n  -- npx -y notion-mcp-server\n```\n\nClaude Code speaks the 2025-era protocol over stdio unless told otherwise. Set `MCP_PROTOCOL_NEGOTIATION=auto` in its environment and it probes for MCP 2026-07-28 (stateless requests, cache hints on every list). The server serves both.\n\n**Cursor:** [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=notion&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm5vdGlvbi1tY3Atc2VydmVyIl0sImVudiI6eyJOT1RJT05fVE9LRU4iOiJZT1VSX05PVElPTl9UT0tFTiJ9fQ==) — click, then replace `YOUR_NOTION_TOKEN` in the generated entry.\n\n**VS Code (Copilot agent mode):** [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_Notion_MCP-0098FF?logo=githubcopilot)](https://insiders.vscode.dev/redirect/mcp/install?name=notion&inputs=%5B%7B%22id%22%3A%22notion_token%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Notion%20Personal%20Access%20Token%20(ntn_...)%22%2C%22password%22%3Atrue%7D%5D&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22notion-mcp-server%22%5D%2C%22env%22%3A%7B%22NOTION_TOKEN%22%3A%22%24%7Binput%3Anotion_token%7D%22%7D%7D) — VS Code prompts for the token and stores it as a secret input.\n\n**Gemini CLI:**\n\n```bash\ngemini extensions install https://github.com/awkoy/notion-mcp-server\n```\n\nThe repo ships a `gemini-extension.json`, so this installs as an extension: it asks for the token once, keeps it in your system keychain, and starts the server with `npx`.\n\n**Claude Desktop, without Node.js:** download [`notion-mcp-server.mcpb` from the latest release](https://github.com/awkoy/notion-mcp-server/releases/latest/download/notion-mcp-server.mcpb) and double-click it (or drag it into Settings → Extensions), then paste your token when prompted. Never edited a config file before? The [step-by-step walkthrough](./docs/claude-desktop-walkthrough.md) assumes nothing.\n\n**Docker / Podman / OrbStack:**\n\n```bash\nclaude mcp add notion -s user \\\n  -e NOTION_TOKEN=ntn_paste_your_token_here \\\n  -- docker run --rm -i -e NOTION_TOKEN ghcr.io/awkoy/notion-mcp-server:latest\n```\n\nThe `-i` flag is required for stdio. The image is OCI-compliant, so Podman, OrbStack, colima, Rancher Desktop, Finch and nerdctl take the same flags. For a long-running HTTP container see [Remote / HTTP transport](#remote--http-transport).\n\n</details>\n\n**3. Try it.** In a new chat:\n\n> *\"Use Notion to make a page called 'Hello from my agent' and add a checklist of three things to try today.\"*\n\nYour AI calls `notion_write` and replies with a live page link.\n\n## What your AI can do with it\n\n- *\"Find every row in my Tasks database where Status is 'Doing' and tell me which are overdue.\"* — typed `where` filters, flattened rows\n- *\"Rename these 50 pages to the new convention.\"* — one batched call, 10-way parallel, idempotent retry\n- *\"Create a page from my 'Weekly review' template and fill in this summary.\"*\n- *\"Rewrite that spec page: fix the headings and add a code sample.\"* — markdown round-trip via `get_page_markdown` → edit → `update_page_markdown`\n- *\"Comment on yesterday's meeting notes with a one-paragraph summary.\"*\n- *\"Upload this diagram to the design page.\"* — single- and multi-part uploads\n- *\"Look at the screenshot on that bug report and tell me what's wrong.\"* — `get_image` hands the model the picture itself\n\nThe full catalog is the [operations menu](#operations-menu-47-ops-plus-one-alias): 47 operations behind three tools.\n\n## Which Notion MCP should you use?\n\n| | Best for | Auth | Headless / CI | Notes |\n| --- | --- | --- | --- | --- |\n| **[Notion hosted MCP](https://developers.notion.com/guides/mcp/get-started-with-mcp)** (`mcp.notion.com`) | Interactive chat in claude.ai, ChatGPT, Cursor | OAuth (a human must click; Notion says non-interactive auth is in the works) | ❌ | First-party, ~34 markdown tools (11 of them Custom Agent session tools that need Notion AI), some plan-gated |\n| **[Official open-source server](https://github.com/makenotion/notion-mcp-server)** | — | Token | ✅ | Notion calls it deprecated and \"no longer actively maintained\"; the repo says it \"may sunset\" it and that issues and PRs are not actively monitored |\n| **This server** | Agents, automation, CI, self-hosting, token-sensitive workloads | Token (PAT) | ✅ | Actively maintained, agent-first design |\n\nTo chat with your Notion in claude.ai's web UI, use Notion's hosted connector: it's one click. Use this server when the agent runs unattended, when context cost matters, or when you want batch and idempotent semantics and your own host.\n\n<details>\n<summary><b>Detailed comparison vs. the official open-source server</b></summary>\n\n| Capability | Official Notion MCP (open source) | **This server** |\n| --- | --- | --- |\n| **Tool surface** | 24 tools (one per endpoint), 17,163 tokens loaded into context | **3 tools**, 1,005 tokens — [94% less schema at connection](./benchmarks) |\n| **Response size** | Full Notion envelope on every read | [**82% less** reading a page's blocks](./benchmarks#part-2--the-responses), 81% on a 25-row database query, 68% on a page object, 71% on a search — same objects, both servers, matched pairs |\n| **Operations covered** | ~24 endpoints | **47 operations** (plus a `trash_page` alias) across pages, blocks, databases, data sources, views, templates, comments, users, files |\n| **Batch mutations** | Not documented | ✅ Universal `{ items: [...] }` envelope; up to **10 in parallel** |\n| **Atomic batches + rollback** | Not documented | ✅ `atomic: true` aborts on first failure, best-effort archives entities created earlier |\n| **Idempotency** | Not documented | ✅ `idempotency_key` — same key + op returns the cached result for 5 minutes |\n| **Rate-limit handling** | 429s bubble up | ✅ Token-bucket limiter (3 req/s default) + exponential backoff, honors `Retry-After` |\n| **Response shapes** | Raw Notion SDK JSON | **Slim shapers** drop noise by default; `verbose: true` opts out and returns the raw shape |\n| **Database queries** | Raw `properties` bag per row | **Flattened** name → primitive map (all 20+ property types) — 16,629 → 3,143 tokens on the benchmark's 25-row query |\n| **Writing properties** | Full Notion property JSON | Plain values: `{ Status: \"Done\", Due: \"2026-10-01\", Tags: [\"a\"] }`, typed from the data source schema (cached 5 min); wrong names and options rejected with the valid ones |\n| **Filters** | Raw Notion filter JSON | Typed `where` shorthand — `{ Status: \"Done\", Priority: { in: [...] }, OR: [...] }` and `sorts: [\"-Due Date\"]`; raw filters still accepted |\n| **Unknown fields** | Rejected | Ignored with a `warnings` entry naming the field and the accepted ones, so the call still runs |\n| **Pagination** | Manual cursors | Opt-in `paginate: true` walks `next_cursor` (cap ≈ 1000 items) |\n| **Wire format** | Default SDK serialization | **Compact JSON** — ~30% smaller payloads |\n| **Markdown** | Page-level markdown tools | ✅ Accepted by `create_page` / `append_blocks` / `update_block` / comments, plus full round-trip (`get_page_markdown` / `update_page_markdown`), full GFM |\n| **Templates** | — | ✅ `create_page` from a Notion template + `list_data_source_templates` discovery |\n| **Database views** | — | ✅ list / get / query / create / update / delete; `query_view` runs a view's stored filters and sorts and returns hydrated rows |\n| **File uploads** | Not in the documented tool surface | ✅ Single- and multi-part (5 MB chunks), MIME inferred |\n| **Validation errors** | Plain error string | **Self-healing**: `{ code, message, path, issues, schema, example, fix }` — corrected in one round-trip |\n| **Notion API version** | — | Pinned `2026-03-11` (data sources, views, templates) |\n\nWhat that buys you in practice: renaming 50 pages is one `notion_write` call with `{ items: [...], concurrency: 10 }` rather than 50 trips through the agent's reasoning loop, and the prompt-token savings are the bigger half of the win. The [benchmark](./benchmarks) has the method, the tokenizer, the control that validates it, an honest worst case, and the limits of its own sample.\n\n</details>\n\n## Configuration\n\n### Token: PAT or internal integration\n\nBoth go in the same `NOTION_TOKEN` env var; only where you get them differs.\n\n| | **Personal Access Token** (recommended) | **Internal Integration** (scoped) |\n| --- | --- | --- |\n| Where | [app.notion.com/developers/tokens](https://app.notion.com/developers/tokens) → **+ New token** | [app.notion.com/developers/connections](https://app.notion.com/developers/connections) → **+ New connection** |\n| Scope | Everything **you** can see | Only pages where you clicked **• • • → Connect → \\<integration\\>** |\n| Friction | None | A Connect step per page or database |\n| Use when | Default: personal and team workspaces, prototyping | An admin requires explicit per-resource scoping, or for shared production bots |\n\n> 💡 Most `object_not_found` errors are the wrong auth choice rather than a bug: an Internal Integration token that was never Connected to the page. Switch to a PAT.\n\n<details>\n<summary><b>PAT details: capabilities, expiry, revocation, admin-disabled fallback</b></summary>\n\n**Can:** read every page you have access to; create and update pages and databases where you have edit rights; comment as you; upload files.\n**Can't:** reach pages you can't see, bypass workspace permissions, act as another user, or change admin settings. A PAT's scope is your account, so if you lose access to a page, so does the PAT. Issue separate tokens per teammate.\n\n**Expiry:** PATs expire **1 year after creation** ([Notion docs](https://developers.notion.com/guides/get-started/personal-access-tokens)). Set a reminder for month 11.\n\n**Revoking:** [app.notion.com/developers/tokens](https://app.notion.com/developers/tokens) → **Revoke** next to the token, effective immediately. Workspace admins can revoke anyone's from **Settings & members → Connections → All personal access tokens**.\n\n**Admin disabled PATs?** Ask them to enable it, or create an Internal Integration at [app.notion.com/developers/connections](https://app.notion.com/developers/connections) (**+ New connection**) and **• • • → Connect** it to every page the agent should touch. Same `NOTION_TOKEN` env var.\n\nOfficial reference: [PAT guide](https://developers.notion.com/guides/get-started/personal-access-tokens) · [Authorization overview](https://developers.notion.com/docs/authorization).\n\n</details>\n\n### Environment variables\n\n| Env var | Required | Default | Meaning |\n| --- | --- | --- | --- |\n| `NOTION_TOKEN` | ✅ | — | PAT (`ntn_…`, recommended) or Internal Integration secret (`secret_…` / `ntn_…`) |\n| `NOTION_PAGE_ID` | — | — | Default parent for `create_page` / `create_database` when no `parent` is passed (page → Share → Copy link; the whole URL or the bare 32-char id both work) |\n| `NOTION_RATE_LIMIT` | — | `3` | Requests/second for the shared limiter (Notion's documented per-integration limit) |\n| `NOTION_READ_ONLY` | — | — | `true`/`1`/`yes` disables every write operation in one switch |\n| `NOTION_ALLOWED_OPERATIONS` | — | all | Comma-separated allowlist of operations or group presets — see [Restricting operations](#restricting-operations) |\n| `NOTION_BLOCKED_OPERATIONS` | — | — | Comma-separated blocklist (same vocabulary); wins over the allowlist |\n| `NOTION_CONFIRM_DESTRUCTIVE` | — | — | `true`/`1` keeps destructive operations enabled but asks you first — see [Restricting operations](#restricting-operations) |\n| `NOTION_UPLOAD_ROOT` | — | — | Confine `upload_file`'s `path` source to one directory — see [Files](#files) |\n| `NOTION_FILE_URLS` | — | `full` | `ref` replaces Notion's signed file URLs (~1,650 chars, valid for an hour) in slim responses with short `notion-file:` refs — see [Files](#files) |\n| `HTTPS_PROXY` / `HTTP_PROXY` | — | — | Route all outbound traffic — Notion API calls and the downloads in `get_image` and `upload_file`'s `url` source — through an HTTP(S) proxy (standard env vars, lowercase also accepted) |\n| `NOTION_DAILY_LOG_PAGE_ID` | — | — | Only used by the daily-log MCP prompt |\n\nHTTP-transport variables (`MCP_TRANSPORT`, `PORT`, `HOST`, `MCP_AUTH_TOKEN`, …) are in [Remote / HTTP transport](#remote--http-transport).\n\n> **Upgrading from v1.x or v2.x?** Every env var still works unchanged. The break is the tool surface: v1's five tools, then v2's `notion_execute`, became `notion_read` + `notion_write`, and `notion_describe` is as it was. Modern clients rediscover tools automatically. Details in [MIGRATION.md](./MIGRATION.md).\n\n### Restricting operations\n\n`NOTION_ALLOWED_OPERATIONS` (allowlist) and `NOTION_BLOCKED_OPERATIONS` (blocklist) each take a comma-separated list of **group presets** or exact **operation names**.\n\n| Preset | Expands to |\n| --- | --- |\n| `read` | every non-mutating operation |\n| `write` | every mutating operation |\n| `destructive` | operations whose purpose is removal (`archive_page`/`trash_page`, `delete_block`, `batch_mixed_blocks`, `delete_comment`, `delete_view`) |\n| `pages` `blocks` `databases` `data_sources` `views` `comments` `users` `files` | every operation in that family, read **and** write |\n\n```jsonc\n{ \"env\": { \"NOTION_ALLOWED_OPERATIONS\": \"read\" } }                       // read-only, the common case\n{ \"env\": { \"NOTION_BLOCKED_OPERATIONS\": \"destructive\" } }                // everything except removals\n{ \"env\": { \"NOTION_ALLOWED_OPERATIONS\": \"read,append_blocks,add_page_comment\" } }\n```\n\nNames are case-insensitive, unknown tokens are ignored with a warning, the blocklist wins, and an allowlist that resolves to zero operations disables everything (fail-closed). Disabled operations vanish from the tools' `operation` enums, from `notion_describe` and from the `notion://operations` menu, so naming one fails validation before it runs; when no write operation is enabled, `notion_write` is not advertised at all. One line on stderr at startup says what resolved. Check it first when the config doesn't behave:\n\n```text\nOperation access: 22/48 enabled (allow=read; block=(none))\n```\n\n**Confirm instead of block.** `NOTION_CONFIRM_DESTRUCTIVE=true` keeps destructive operations available and makes `notion_write` ask you before running one, through [MCP elicitation](https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation): an `elicitation/create` request on 2025-era clients, an `input_required` round trip on MCP 2026-07-28 clients, where the retry carries a sealed `requestState` that only matches the call it was minted for. You get a yes/no dialog naming the operation and its target (the page, database, data source or block title when one retrieve can fetch it within 5 s, otherwise the id; for a batch, how many items).\n\nRestores (`restore_page`, `delete_database` / `delete_data_source` with `in_trash: false`) and a `batch_mixed_blocks` call with no `delete` entry never prompt, and a blocked operation is still rejected with `operation_not_allowed` before anyone is asked. Decline, cancel or answer no and the call returns `confirmation_declined`; the server instructions tell the model not to retry and to ask you instead. A client that hasn't declared the elicitation capability gets `confirmation_unavailable` rather than a silent run. Use a client that supports elicitation, unset the variable, or block destructive operations outright.\n\n<details>\n<summary><b>Per-operation reference & limitations</b></summary>\n\n| Domain | Read | Write |\n| --- | --- | --- |\n| `pages` | `search_pages` `get_page` `get_page_markdown` | `create_page` `set_page_title` `set_page_property` `set_page_properties` `update_page_markdown` `move_page` `restore_page` `archive_page`† `trash_page`† |\n| `blocks` | `get_block` `get_block_children` | `append_blocks` `update_block` `delete_block`† `batch_mixed_blocks`† |\n| `databases` | `query_database` | `create_database` `update_database` `delete_database`† |\n| `data_sources` | `list_data_sources` `get_data_source` `list_data_source_templates` | `update_data_source` `delete_data_source`† |\n| `views` | `list_views` `get_view` `query_view` | `create_view` `update_view` `delete_view`† |\n| `comments` | `list_comments` `get_comment` | `add_page_comment` `add_discussion_comment` `update_comment` `delete_comment`† |\n| `users` | `list_users` `get_user` `get_bot_user` `get_self` | — |\n| `files` | `list_file_uploads` `get_file_upload` `get_file_url` `get_image` | `upload_file` |\n\n† = also in the `destructive` group.\n\n**Limitations.** Control is per-operation, not per-parameter: `update_page_markdown` is a *write* op that can replace a page body, and blocking `destructive` does not disable it. For a guaranteed no-mutation deployment use `NOTION_ALLOWED_OPERATIONS=read` or `NOTION_READ_ONLY=true`. MCP *prompts* may still mention disabled operations, but execution is rejected.\n\n</details>\n\n### Files\n\n**Uploads.** `upload_file` takes its bytes as `base64`, a public `url`, or a local `path` the server reads directly. A `path` source can read any file the server process can, so when a model composes the path, set `NOTION_UPLOAD_ROOT` to confine it: relative paths resolve inside the root, and symlinks are resolved before the check so they cannot point out of it.\n\n**File URLs.** Notion mints a fresh signed S3 URL for every hosted file on every read: about 1,650 characters (~500 tokens), valid for an hour, different each time, and easy for a small model to mangle. `NOTION_FILE_URLS=ref` replaces them in slim responses (`get_page`, `search_pages`, `query_database`, `query_view`, `get_block`, `get_block_children`, …) with short, stable refs.\n\n| Ref | Names | Resolved by |\n| --- | --- | --- |\n| `notion-file:block/<block-id>` | The file in an image block | `get_file_url` → `{ ref, url }`, a fresh signed URL good for about an hour |\n| `notion-file:page/<page-id>/<property>/<index>` | One entry of a page's `files` property (property name URL-encoded) | `get_image` → the image as MCP image content, so the model can look at it (`image/*` only, up to 5 MB) |\n\nBoth resolvers re-read the object through the Notion API, so a ref stays valid as long as the file does. `get_image` fetches only the URL Notion returned for a Notion-hosted file, never one supplied by the caller, so it cannot be steered at a LAN host, a cloud metadata endpoint or an exfil target. External URLs (linked images, `external` files) are short and stable already: they pass through untouched in either mode, and `get_image` returns them as text rather than fetching them. `get_page_markdown` is Notion's own rendered markdown and is not rewritten. The default, `full`, leaves every response as it was.\n\n## Remote / HTTP transport\n\nThe server speaks **stdio** by default. Set `MCP_TRANSPORT=http` to run it as a remote endpoint instead, for web clients, networked agents and shared deployments:\n\n```bash\nMCP_TRANSPORT=http PORT=3000 NOTION_TOKEN=ntn_xxx npx -y notion-mcp-server\n# -> notion-mcp-server vX.Y.Z running on http://127.0.0.1:3000/mcp\n```\n\nIt serves MCP **Streamable HTTP** on `/mcp` for both current protocol generations, picked per request from what the client sends. **MCP 2026-07-28** clients get the stateless path, where every `POST` stands alone: no session, `server/discover`, cache hints on every list. **2024-11-05 … 2025-11-25** clients get sessions via the `mcp-session-id` header plus the `GET` stream and `DELETE`, and a `GET`/`DELETE` without a session id is answered 405. There is also an unauthenticated `GET /health`. The process is **single-tenant**: every request acts as the one `NOTION_TOKEN` it started with.\n\n| env | default | meaning |\n| --- | --- | --- |\n| `MCP_TRANSPORT` | `stdio` | set to `http` to enable HTTP |\n| `PORT` | `3000` | listen port (`0` = OS-assigned) |\n| `HOST` | `127.0.0.1` | bind address; set `0.0.0.0` to expose externally (**only with `MCP_AUTH_TOKEN`**) |\n| `MCP_AUTH_TOKEN` | — | when set, every `/mcp` request must send `Authorization: Bearer <token>` |\n| `MCP_ALLOWED_HOSTS` | localhost + bound host | comma-list for DNS-rebinding `Host` allowlist |\n| `MCP_ALLOWED_ORIGINS` | localhost origins | comma-list for browser `Origin` allowlist |\n\n> ⚠️ **Whoever reaches `/mcp` acts as your `NOTION_TOKEN`.** On loopback, the default, that means local processes only. Before binding a non-loopback `HOST`, set `MCP_AUTH_TOKEN` (the server warns if you don't) and put an authenticating reverse proxy in front of it.\n\nConnecting from a client that supports headers (Claude Code, Cursor, VS Code), and checking it locally:\n\n```bash\nclaude mcp add --transport http notion https://your-host/mcp \\\n  --header \"Authorization: Bearer <MCP_AUTH_TOKEN>\"\n\ncurl http://127.0.0.1:3000/health\n# -> {\"status\":\"healthy\",\"transport\":\"http\",\"port\":3000}\nnpx @modelcontextprotocol/inspector --transport http --server-url http://127.0.0.1:3000/mcp\n```\n\nIn Docker, `HOST=0.0.0.0` is what makes the published port reachable, since inside the container `127.0.0.1` is the container's own loopback. A non-loopback bind is exactly where `MCP_AUTH_TOKEN` earns its keep:\n\n```bash\ndocker run --rm -e NOTION_TOKEN=ntn_xxx -e MCP_TRANSPORT=http -e HOST=0.0.0.0 -e MCP_AUTH_TOKEN=change-me \\\n  -p 3000:3000 ghcr.io/awkoy/notion-mcp-server\n```\n\n> Claude Desktop builds affected by [anthropics/claude-code#93290](https://github.com/anthropics/claude-code/issues/93290) send a 2026-07-28 body under a `MCP-Protocol-Version: 2025-11-25` header. The server realigns that one known mismatch so those builds work; every other header/body disagreement gets the rejection the spec prescribes (`-32020`).\n\n<details>\n<summary><b>Health checks for an HTTP container</b></summary>\n\nThe image ships without a `HEALTHCHECK` because it starts in stdio mode, where nothing listens and a built-in probe of `/health` would mark every stdio container unhealthy. Add one yourself for an HTTP deployment. The same command sits commented out in the `Dockerfile`, and works as `--health-cmd` on `docker run` too:\n\n```yaml\nservices:\n  notion-mcp-server:\n    image: ghcr.io/awkoy/notion-mcp-server:latest\n    environment:\n      NOTION_TOKEN: ${NOTION_TOKEN:?NOTION_TOKEN is required}\n      MCP_TRANSPORT: http\n      HOST: 0.0.0.0\n      MCP_AUTH_TOKEN: ${MCP_AUTH_TOKEN:?MCP_AUTH_TOKEN is required}\n    ports: [\"3000:3000\"]\n    healthcheck:\n      test: [\"CMD\", \"node\", \"-e\", \"fetch('http://127.0.0.1:'+(process.env.PORT||3000)+'/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"]\n      interval: 30s\n      timeout: 3s\n      start_period: 5s\n      retries: 3\n```\n\n</details>\n\n## MCP tools\n\nThree tools, whichever of the 47 operations you end up calling. `notion_read` runs the reads, `notion_write` the writes, and `notion_describe` returns one operation's JSON Schema plus a working example, which is worth a round-trip before a complex call: filter expressions, mixed block batches, database property definitions. Each tool's `operation` field is an enum of exactly what this server has enabled, so the menu ships with the tool list, a client can validate a call before sending it, and a name sent to the wrong tool fails in one round-trip with a message naming the right one.\n\nWhy the server exposes a few tools instead of one per endpoint: [MCP Tool Design for AI Agents, Not API Endpoints](https://yaroslavboiko.com/blog/mcp-tool-surface/).\n\nEvery id field (`page_id`, `block_id`, `database_id`, `view_id`, …) also accepts a Notion URL, so paste what **Share → Copy link** gives you. A block link's `#fragment` is used for `block_id` fields and a database link's `?v=` for `view_id` fields.\n\n```jsonc\n// notion_read\n{ \"operation\": \"search_pages\", \"payload\": { \"query\": \"Q3 plan\" } }\n{ \"operation\": \"get_page_markdown\", \"payload\": { \"page_id\": \"https://www.notion.so/Q3-plan-1f3c…\" } }\n\n// notion_write, single call\n{ \"operation\": \"set_page_title\", \"payload\": { \"page_id\": \"<page-id>\", \"title\": \"Q3 plan\" } }\n\n// notion_write, batch: every mutating op takes { items: [...], atomic?, concurrency?, idempotency_key? }\n{\n  \"operation\": \"set_page_title\",\n  \"payload\": {\n    \"items\": [{ \"page_id\": \"<p1>\", \"title\": \"First\" }, { \"page_id\": \"<p2>\", \"title\": \"Second\" }],\n    \"concurrency\": 3,\n    \"idempotency_key\": \"rename-pass-2026-07-02\"\n  }\n}\n\n// markdown shortcut (create_page, append_blocks, update_block, update_page_markdown)\n{\n  \"operation\": \"create_page\",\n  \"payload\": {\n    \"parent\": { \"type\": \"page_id\", \"page_id\": \"<parent>\" },\n    \"title\": \"Notes\",\n    \"markdown\": \"# Heading\\n\\n- [ ] todo\\n- [x] done\\n\\n```ts\\nconst x = 1;\\n```\"\n  }\n}\n\n// a database row: plain property values, typed from the data source's schema\n{\n  \"operation\": \"create_page\",\n  \"payload\": {\n    \"parent\": { \"type\": \"data_source_id\", \"data_source_id\": \"<data-source-id>\" },\n    \"title\": \"Write the report\",\n    \"properties\": { \"Status\": \"In Progress\", \"Due Date\": \"2026-10-01\", \"Tags\": [\"q3\", \"docs\"] }\n  }\n}\n\n// upload a file and place it on a page in one call\n{\n  \"operation\": \"upload_file\",\n  \"payload\": {\n    \"source\": { \"type\": \"path\", \"path\": \"~/Desktop/chart.png\" },\n    \"attach_to\": { \"block_id\": \"<page-or-block-id>\", \"caption\": \"Q3 revenue\" }\n  }\n}\n```\n\nA payload that doesn't validate comes back with the operation's full JSON Schema, a working example and a `fix` hint, so the next call can be corrected without a `notion_describe` round-trip.\n\n### Per-tool permissions\n\nMCP clients grant permission by tool name, so the read/write split lets you approve reads once and keep writes behind a prompt. In Claude Code (`~/.claude/settings.json` or the project's `.claude/settings.json`, where `notion` is whatever you named the server):\n\n```json\n{\n  \"permissions\": {\n    \"allow\": [\"mcp__notion__notion_read\", \"mcp__notion__notion_describe\"]\n  }\n}\n```\n\nCursor's MCP settings offer the same per-tool allowlist. `notion_read` is annotated `readOnlyHint: true` and `notion_write` `destructiveHint: true`, for clients that read annotations.\n\n### Operations menu (47 ops, plus one alias)\n\nReads (`get_*`, `list_*`, `search_pages`, `query_database`, `query_view`) go through `notion_read`, everything else through `notion_write`.\n\n| Area | Operations |\n| --- | --- |\n| **Pages** | `create_page`, `get_page`, `set_page_title`, `set_page_property`, `set_page_properties`, `archive_page` (alias: `trash_page`), `restore_page`, `search_pages`, `move_page`, `get_page_markdown`, `update_page_markdown` |\n| **Blocks** | `append_blocks`, `get_block`, `get_block_children`, `update_block`, `delete_block`, `batch_mixed_blocks` |\n| **Databases** | `create_database`, `query_database`, `update_database`, `delete_database` |\n| **Data sources** | `list_data_sources`, `get_data_source`, `update_data_source`, `delete_data_source`, `list_data_source_templates` |\n| **Views** | `list_views`, `get_view`, `query_view`, `create_view`, `update_view`, `delete_view` |\n| **Comments** | `list_comments`, `add_page_comment`, `add_discussion_comment`, `get_comment`, `update_comment`, `delete_comment` |\n| **Users** | `list_users`, `get_user`, `get_bot_user`, `get_self` |\n| **Files** | `upload_file`, `list_file_uploads`, `get_file_upload`, `get_file_url`, `get_image` |\n\nThe authoritative list, with batchability and the tool that runs each op, is served as an MCP resource at `notion://operations`.\n\n### MCP resources\n\nClients that support resource attachment (`@`-mention) can pull Notion content into context without a tool call. Dynamic resources route through the same auth, rate limiting and access gating as tool calls.\n\n| Resource URI | Returns |\n| --- | --- |\n| `notion://operations` | Markdown cheat sheet of every enabled operation |\n| `notion://page/<page_id>` | Page body as markdown |\n| `notion://database/<data_source_id>` | Data source schema as JSON |\n\n## Troubleshooting\n\n- **`object_not_found` / \"Could not find …\"** — an Internal Integration token only sees pages explicitly Connected to it. Switch to a PAT to skip per-page sharing.\n- **\"Notion auth failed\" on every call** — token missing, revoked or expired (PATs last a year). Check `NOTION_TOKEN` in your client config, then that the token is still Active at [app.notion.com/developers/tokens](https://app.notion.com/developers/tokens). Installed with `add-mcp` and skipped `--env`? The entry has no token; re-run with it.\n- **\"No parent page configured\"** — pass `parent` in the call, or set `NOTION_PAGE_ID`.\n- **`multi_source_database` from `query_database` or `create_page`** — the database has several data sources. Call `list_data_sources`, then pass `data_source_id` (or a `data_source_id` parent) instead of `database_id`.\n- **A successful result carries `warnings`** — the call ran; each entry names a field that was ignored (misspelt or misplaced) or a property name that was corrected. Fix the payload next time, nothing to retry.\n- **Tools don't appear in Claude Desktop** — token typo (it must stay inside the quotes) or the app wasn't fully quit (`Cmd+Q`, not window close) before reopening.\n- **Startup logs \"Notion auth check failed\" but tools work** — the startup check is best-effort; ignore it if calls succeed.\n- **Docker exits immediately / \"Connection closed\"** — the `-i` flag is required: `docker run --rm -i …`.\n- **Docker: \"NOTION_TOKEN is not set\" despite `-e`** — write `-e NOTION_TOKEN` (forwards from the parent env) or `-e NOTION_TOKEN=ntn_xxx`, not `-e NOTION_TOKEN ntn_xxx`.\n\nStill stuck? [GitHub Issues](https://github.com/awkoy/notion-mcp-server/issues) · [FAQ](./docs/faq.md) · [Notion API reference](https://developers.notion.com/reference/intro) · [MCP spec](https://modelcontextprotocol.io)\n\n## Privacy\n\nThe server runs on your machine or your own host and talks only to `api.notion.com`, over HTTPS, with the token you configure. No telemetry, no analytics, no server of ours in the path: nothing you read or write in Notion goes anywhere else. The token stays where your MCP client keeps it, in its config file or in a keychain for clients that have one. With `HTTPS_PROXY` set, traffic goes through your proxy instead. `get_image` fetches only the signed URLs Notion returns for files it hosts, never a URL supplied by the model, and `upload_file` reads a local file only when asked to, inside `NOTION_UPLOAD_ROOT` when that is set. Notion's own handling of your data is covered by [Notion's privacy policy](https://www.notion.com/privacy).\n\n## Development\n\n```bash\ngit clone https://github.com/awkoy/notion-mcp-server.git\ncd notion-mcp-server\nnpm install\necho \"NOTION_TOKEN=ntn_xxx\" > .env\n\nnpm run build       # tsc -> build/\nnpm test            # vitest suite\nnpm run inspector   # MCP inspector against the built binary\n```\n\nPoint a client at the local build instead of npx:\n\n```bash\nclaude mcp add notion -s user -e NOTION_TOKEN=ntn_xxx -- node \"$(pwd)/build/index.js\"\n```\n\nLogs go to stderr and are also sent to the client as MCP `notifications/message` entries (logger `notion-mcp-server`), so they show up in the client's own log view — VS Code's output channel, MCP Inspector, Claude Desktop's logs — where stderr is usually hidden. 2025-era clients pick the level with `logging/setLevel` (default `info`); MCP 2026-07-28 clients have no such call and ask per request with the `io.modelcontextprotocol/logLevel` envelope key, so a request without it gets no log notifications. Stderr is unaffected either way. At `debug` you also get one line per `notion_read` / `notion_write` call: operation, batch size, duration, ok or error, never the payload or page content.\n\n<details>\n<summary><b>Technical details: how it's built</b></summary>\n\n- TypeScript + MCP TypeScript SDK v2 (`@modelcontextprotocol/server` + `@modelcontextprotocol/node` 2.0.0); stdio + Streamable HTTP transports; protocol revisions 2024-11-05 through 2026-07-28 (`serveStdio` / `createMcpHandler` for the stateless 2026-07-28 path, the sessionful transport for the rest)\n- Notion SDK `@notionhq/client@^5.22.0`, pinned `Notion-Version: 2026-03-11`\n- Zod 4 payload validation; emits draft-7 JSON Schema with `$defs` deduplication for error envelopes\n- Markdown → Notion blocks via `remark` / `remark-gfm`\n- Bounded-concurrency batch worker (default 3, max 10); shared token-bucket rate limiter; `withRetry` with exponential backoff around every dispatched call\n- In-memory idempotency cache (5-minute TTL, 512 entries)\n- Slim shapers per entity type with `verbose: true` opt-out\n- Vitest suite covering the markdown parser, shapers, schema emitter, dispatcher, batch semantics (partial success / atomic rollback / idempotency), access control, and HTTP transport\n\n</details>\n\n<details>\n<summary><b>End-to-end smoke test against a real workspace</b></summary>\n\n`npm test` runs against a mocked Notion client. `scripts/e2e.mjs` drives the built server over stdio against a real workspace: every read operation, the resources and prompts, `notion_describe` for every operation, and, with `--write`, every write operation inside one throwaway page.\n\n```bash\nnpm run build\nprintf 'NOTION_TOKEN=ntn_...\\nNOTION_PAGE_ID=<page the token can write under>\\n' > .env   # gitignored\nnpm run e2e                      # read-only pass\nnpm run e2e -- --write           # full pass; creates one page under NOTION_PAGE_ID and trashes it at the end\nnpm run e2e -- --write --keep    # keep the test page for inspection\nnpm run e2e -- --modern          # any of the above as an MCP 2026-07-28 client (stateless envelope, input_required confirmations)\n```\n\nIt prints a PASS/FAIL table per check, lists any operation the run did not reach, and exits non-zero on failure. It is not part of CI.\n\n</details>\n\n## Contributing\n\nPRs welcome. Fork → branch → commit → push → PR. Run `npm test` before submitting.\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n\n---\n\nmcp-name: io.github.awkoy/notion-mcp-server\n","readmeFilename":"README.md"}