{"_id":"@akashrajpurohit/gsc-mcp","_rev":"11-fd1d51bebdb77ff436d06161f77b0ab9","name":"@akashrajpurohit/gsc-mcp","dist-tags":{"latest":"1.0.1"},"versions":{"0.2.0":{"name":"@akashrajpurohit/gsc-mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"author":{"name":"Akash Rajpurohit"},"license":"MIT","_id":"@akashrajpurohit/gsc-mcp@0.2.0","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"dist":{"shasum":"5aefb87df4f38536fc362be2e4eb188cb1aa5b2f","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-0.2.0.tgz","fileCount":8,"integrity":"sha512-cMGH+o9IABTut7+iGzFxhxIjw9Fe86qgmA9ihDbt86oNbjuwhS8EtA78VwB9Ad/o8x+MByy3+MyegQ8kX4y6gw==","signatures":[{"sig":"MEYCIQCSTiphLqyNvySzNyxmuac9xV2n2ZJVB1g5x9nk6Op7HAIhAJ1VkUF4nwjVDhv27k8qa78zo56d5/E+So2tiTHPBzWd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36181},"type":"module","engines":{"node":">=22.5"},"gitHead":"4b127ba1c35fc23112d6df237c04039177b7bf54","scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","prepublishOnly":"npm test"},"_npmUser":{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"},"repository":{"url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gsc-mcp_0.2.0_1784530298248_0.4221618915430161","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@akashrajpurohit/gsc-mcp","version":"0.3.0","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"author":{"name":"Akash Rajpurohit"},"license":"MIT","_id":"@akashrajpurohit/gsc-mcp@0.3.0","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"dist":{"shasum":"4558aacf13e699118a52f39516388b484081782f","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-0.3.0.tgz","fileCount":8,"integrity":"sha512-E6N9iUg0PpgB3BsZhXsSqBimjTFRc+twg2WF5cWOyjCb8lArxDxn9Yl5WgIo6S/VVnqnx2oT17sAEhKpk55vKg==","signatures":[{"sig":"MEUCIQCOFQHZ5gmhpcg6BwI8xh9uJQFwhkpQlVdUdLXEkL/CbgIgJaQjJ1h9S2uCaJsGGDtAFY4EKOGn7MHUj/9A7dM/1Bk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashrajpurohit%2fgsc-mcp@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44407},"type":"module","engines":{"node":">=22.5"},"gitHead":"50e14677577f1a21c5b7605dbe88655f5151cb30","scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","prepublishOnly":"npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c0f8fc3-6fd6-446b-a5aa-269544edf697"}},"repository":{"url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gsc-mcp_0.3.0_1784531339518_0.8981020553459478","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@akashrajpurohit/gsc-mcp","version":"0.4.0","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"author":{"name":"Akash Rajpurohit"},"license":"MIT","_id":"@akashrajpurohit/gsc-mcp@0.4.0","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"dist":{"shasum":"b565d5e1b78ee1b36af131413273cb7d7086ad6d","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-0.4.0.tgz","fileCount":8,"integrity":"sha512-KHbP9frMdhL+EjlrWlmLfeGNK26flCxv3D3WFHPEt4UWN4eNe+rmZ3ME6oqBMxvo+B7g4uSOfM/8NJNwYn6ZwQ==","signatures":[{"sig":"MEQCIFLHRtyDklj8qjszJv77dGLIvURXiqb11vQxp/ghOLrCAiBBMd+MaRTGr3gXrNyMDHX4yH40LEaUCKsVkgRKwiNO2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashrajpurohit%2fgsc-mcp@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":50880},"type":"module","engines":{"node":">=22.5"},"gitHead":"89edd48978ab0345787b255e67f684af88574dec","scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","prepublishOnly":"npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c0f8fc3-6fd6-446b-a5aa-269544edf697"}},"repository":{"url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gsc-mcp_0.4.0_1784532969100_0.2489772968905597","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@akashrajpurohit/gsc-mcp","version":"0.4.1","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"author":{"name":"Akash Rajpurohit"},"license":"MIT","_id":"@akashrajpurohit/gsc-mcp@0.4.1","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"dist":{"shasum":"1c6456cf7a98d4c82301ed61ead936d582c63d48","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-0.4.1.tgz","fileCount":8,"integrity":"sha512-7e4QM2MWOBNTcVjG1ewDuuleutVMyXuQO5q23E1aXmChm+qioJD+B5qhHO8vMz4M1AY0RfLdh9WP07WMvexp7g==","signatures":[{"sig":"MEQCIFjlnWnrJyH5apxUMUEeD+qTsrAZAq7H4jf57iXH0XPVAiAnJSMg7jMdUeBE9S65tzSiVwcIxrNufYkG2gVWwi6FHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashrajpurohit%2fgsc-mcp@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51503},"type":"module","engines":{"node":">=22.5"},"gitHead":"6059becd3bcb615bcb1aea32c7e6699854229280","scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","prepublishOnly":"npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c0f8fc3-6fd6-446b-a5aa-269544edf697"}},"repository":{"url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gsc-mcp_0.4.1_1784533501955_0.5347244979935606","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@akashrajpurohit/gsc-mcp","version":"0.5.0","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"author":{"name":"Akash Rajpurohit"},"license":"MIT","_id":"@akashrajpurohit/gsc-mcp@0.5.0","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"dist":{"shasum":"074b5200124cb725521a9b16aef6d8ecf6ec8f16","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-0.5.0.tgz","fileCount":8,"integrity":"sha512-XwG1NYxFMFluTQpQ2zN5m/939XEkzW8mOY7cWeq0ZZmUTOEMO9wQFSuly4iutFLm3cri2dG9OaK38q25xrVK3g==","signatures":[{"sig":"MEYCIQC5zyhFZs6QvDB3V2wxxLeCe/gH2cGRwicpoy/zxsiTLgIhALjMT8htArkZkWfwx8cgljFOlwMNyEM2Ojgt9vgRCgdP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashrajpurohit%2fgsc-mcp@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53461},"type":"module","engines":{"node":">=22.5"},"gitHead":"ea9a1e9b9d5f8813e9544e5024748c8d91b3ecd6","scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","prepublishOnly":"npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c0f8fc3-6fd6-446b-a5aa-269544edf697"}},"repository":{"url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gsc-mcp_0.5.0_1784544446108_0.4475883511965273","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@akashrajpurohit/gsc-mcp","version":"0.6.0","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"author":{"name":"Akash Rajpurohit"},"license":"MIT","_id":"@akashrajpurohit/gsc-mcp@0.6.0","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"dist":{"shasum":"84255e1bc31d14ab3c8384c11979f5821b4db6e4","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-0.6.0.tgz","fileCount":15,"integrity":"sha512-Pjz+NiXxMh0aJm088n+pilGSakCf3+0Y9CV1ueHvza832nb1omGWyjkKg6nslCZalEdx7zMLuztEs3etTMUbDA==","signatures":[{"sig":"MEUCIQDpmHLC8ujLxJuixbcpAHlu1es+Vmv72U8HNCF8Xf7VngIgUxex8kCEuDia3S05zuwSdbckfUXa+/3vGe9fyKINjZk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashrajpurohit%2fgsc-mcp@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57860},"type":"module","engines":{"node":">=22.5"},"gitHead":"868eeea7e59cd7208ab9fd3159d360a6108896cd","scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","version":"node --input-type=commonjs -e \"const fs=require('fs');const v=require('./package.json').version;if(!fs.readFileSync('CHANGELOG.md','utf8').includes('## ['+v+']')){console.error('CHANGELOG.md has no ## ['+v+'] section. Add it and commit before running npm version.');process.exit(1)}\"","prepublishOnly":"npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c0f8fc3-6fd6-446b-a5aa-269544edf697"}},"repository":{"url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gsc-mcp_0.6.0_1784550394795_0.6141682215728075","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@akashrajpurohit/gsc-mcp","version":"0.7.0","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"author":{"name":"Akash Rajpurohit"},"license":"MIT","_id":"@akashrajpurohit/gsc-mcp@0.7.0","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"dist":{"shasum":"1ab8d6c3cfd7c6a5e3940818d3a155c0c5aa61eb","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-0.7.0.tgz","fileCount":16,"integrity":"sha512-zOOZ+e/hS3OdD4bsLZzak2ze5CBYIX314/so9HuF3BCkLwo6/jSzfTTHzy+asx6/kSt1M+ekRjxyjWmaPlApxQ==","signatures":[{"sig":"MEYCIQCmdD+hxfFManbASGdJGNplC2OJY7rny/dYes3RkWU8EQIhAIOLd9A2t7f3gAi6OWww2MlZcPwoeRHmI2w4yOOMSg/D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashrajpurohit%2fgsc-mcp@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":67476},"type":"module","engines":{"node":">=22.5"},"gitHead":"76b7475317ff8b53ed8d21b1cdbc87415fcda5c3","scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","version":"node --input-type=commonjs -e \"const fs=require('fs');const v=require('./package.json').version;if(!fs.readFileSync('CHANGELOG.md','utf8').includes('## ['+v+']')){console.error('CHANGELOG.md has no ## ['+v+'] section. Add it and commit before running npm version.');process.exit(1)}\"","prepublishOnly":"npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c0f8fc3-6fd6-446b-a5aa-269544edf697"}},"repository":{"url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gsc-mcp_0.7.0_1784551635890_0.553082584026807","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@akashrajpurohit/gsc-mcp","version":"0.8.0","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"author":{"name":"Akash Rajpurohit"},"license":"MIT","_id":"@akashrajpurohit/gsc-mcp@0.8.0","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"dist":{"shasum":"db213128e90fb603442393ce6fa6a18e10fb1567","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-0.8.0.tgz","fileCount":17,"integrity":"sha512-XD3C+Ut+GWUFrgOYqI4ruegyWbyqdYWY8K8c8Q3EZc+byDjvHpT7ZOMmL/UjlvWBK5KrL0v3FtZo9sg7sIrFhA==","signatures":[{"sig":"MEYCIQCtaatAJHz5RUUlspLOhP6l2ZR9Rk0e5t5rK5yywU/TpAIhANPan3ENuQHr3Eiw7sLkw87BsbK9qKeGkpoHwBj5KB37","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashrajpurohit%2fgsc-mcp@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":70289},"type":"module","engines":{"node":">=22.5"},"gitHead":"af5149ef093525d31a28441a375210431374b13c","scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","version":"node --input-type=commonjs -e \"const fs=require('fs');const v=require('./package.json').version;if(!fs.readFileSync('CHANGELOG.md','utf8').includes('## ['+v+']')){console.error('CHANGELOG.md has no ## ['+v+'] section. Add it and commit before running npm version.');process.exit(1)}\"","prepublishOnly":"npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c0f8fc3-6fd6-446b-a5aa-269544edf697"}},"repository":{"url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gsc-mcp_0.8.0_1784552086971_0.39018617451052817","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@akashrajpurohit/gsc-mcp","version":"0.9.0","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"author":{"name":"Akash Rajpurohit"},"license":"MIT","_id":"@akashrajpurohit/gsc-mcp@0.9.0","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"dist":{"shasum":"a5b16b4875079986e8a6997d592040049f35d1c9","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-0.9.0.tgz","fileCount":18,"integrity":"sha512-ZzS/fqNe/m1rBjv/ckkueau5p3+RwD2w3xJ8NNPuaFmX9ml6FxKSGNY29dwD5w5vjogYQnMprWnzkEkbV/A+6A==","signatures":[{"sig":"MEUCIQDX0n5DGjtAoNNKJGnX0dEJuI07aaBOfqvSSbl9oLlCigIgd+QlAxoAv1hXyJQM/2UmzgKU5U6ORZCJbqracIehoT8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashrajpurohit%2fgsc-mcp@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":74543},"type":"module","engines":{"node":">=22.5"},"gitHead":"00fadafd3becb35a763decd7ce29eace816c9f46","scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","version":"node --input-type=commonjs -e \"const fs=require('fs');const v=require('./package.json').version;if(!fs.readFileSync('CHANGELOG.md','utf8').includes('## ['+v+']')){console.error('CHANGELOG.md has no ## ['+v+'] section. Add it and commit before running npm version.');process.exit(1)}\"","prepublishOnly":"npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c0f8fc3-6fd6-446b-a5aa-269544edf697"}},"repository":{"url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gsc-mcp_0.9.0_1784552428323_0.6091074245226933","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@akashrajpurohit/gsc-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"author":{"name":"Akash Rajpurohit"},"license":"MIT","_id":"@akashrajpurohit/gsc-mcp@1.0.0","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"dist":{"shasum":"de2bce067e44fdaf5c8d30f498bca526f9c559bb","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-1.0.0.tgz","fileCount":18,"integrity":"sha512-d4l5w3NaGTOyTPTykPEBO7F6tOuR23ywcKMxRmNIYUziMscmKyUhqlhAzdj0lIzvoom1phk6cuKxv2HCrfy6wQ==","signatures":[{"sig":"MEYCIQC5/g1BtKhZWKhx2NJaN7EQsatdmKPgphkasxSy0t+N3AIhAKdLgggi4hMKfQ5TE6SddnK4N/Tyt8WnLeaeliGP5put","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashrajpurohit%2fgsc-mcp@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":75279},"type":"module","engines":{"node":">=22.5"},"gitHead":"127d80641c2ac234349e014911b3d9760921d87d","scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","version":"node --input-type=commonjs -e \"const fs=require('fs');const v=require('./package.json').version;if(!fs.readFileSync('CHANGELOG.md','utf8').includes('## ['+v+']')){console.error('CHANGELOG.md has no ## ['+v+'] section. Add it and commit before running npm version.');process.exit(1)}\"","prepublishOnly":"npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c0f8fc3-6fd6-446b-a5aa-269544edf697"}},"repository":{"url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git","type":"git"},"_npmVersion":"12.0.1","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gsc-mcp_1.0.0_1784552794732_0.5413183921067088","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@akashrajpurohit/gsc-mcp","version":"1.0.1","description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","type":"module","license":"MIT","author":{"name":"Akash Rajpurohit"},"homepage":"https://github.com/AkashRajpurohit/gsc-mcp","repository":{"type":"git","url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git"},"bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"engines":{"node":">=22.5"},"bin":{"gsc-mcp":"bin/gsc-mcp.mjs"},"scripts":{"test":"node --test","doctor":"node ./bin/gsc-mcp.mjs doctor","prepublishOnly":"npm test","version":"node --input-type=commonjs -e \"const fs=require('fs');const v=require('./package.json').version;if(!fs.readFileSync('CHANGELOG.md','utf8').includes('## ['+v+']')){console.error('CHANGELOG.md has no ## ['+v+'] section. Add it and commit before running npm version.');process.exit(1)}\""},"publishConfig":{"access":"public","provenance":true},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","googleapis":"^144.0.0"},"gitHead":"b14f0e53a0d8c9fd927ff8c519b6105371432cc4","_id":"@akashrajpurohit/gsc-mcp@1.0.1","_nodeVersion":"24.18.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-8ExhrWupHxU3d3pHpQpTLX9No0aJCE3IIOwSHR21zu0PoMiUP9wJYBqaGr7m2gLcNfwMtwsHt+I+J/Auk9OGww==","shasum":"5bc9971cd3c78bd754b3392f707c5733cf5b2a32","tarball":"https://registry.npmjs.org/@akashrajpurohit/gsc-mcp/-/gsc-mcp-1.0.1.tgz","fileCount":18,"unpackedSize":77306,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashrajpurohit%2fgsc-mcp@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDil5tlvpXaJUGFq62hyyD/4CgnEwxeH5tmPdXNN9dV6QIgYRHYpS9s7QRzPf0lGibCZukZoDRYh8fHnecM9N2mCnA="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c0f8fc3-6fd6-446b-a5aa-269544edf697"}},"directories":{},"maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gsc-mcp_1.0.1_1785037355104_0.31537187097055197"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-20T06:51:38.144Z","modified":"2026-07-26T03:42:35.583Z","0.2.0":"2026-07-20T06:51:38.396Z","0.3.0":"2026-07-20T07:08:59.661Z","0.4.0":"2026-07-20T07:36:09.250Z","0.4.1":"2026-07-20T07:45:02.079Z","0.5.0":"2026-07-20T10:47:26.251Z","0.6.0":"2026-07-20T12:26:34.945Z","0.7.0":"2026-07-20T12:47:16.055Z","0.8.0":"2026-07-20T12:54:47.183Z","0.9.0":"2026-07-20T13:00:28.461Z","1.0.0":"2026-07-20T13:06:34.879Z","1.0.1":"2026-07-26T03:42:35.295Z"},"bugs":{"url":"https://github.com/AkashRajpurohit/gsc-mcp/issues"},"author":{"name":"Akash Rajpurohit"},"license":"MIT","homepage":"https://github.com/AkashRajpurohit/gsc-mcp","keywords":["mcp","model-context-protocol","google-search-console","gsc","seo","claude","ai"],"repository":{"type":"git","url":"git+https://github.com/AkashRajpurohit/gsc-mcp.git"},"description":"A safe, local, read-only MCP server that gives your AI assistant access to your Google Search Console data.","maintainers":[{"name":"akashrajpurohit","email":"akashrajpurohit.009@gmail.com"}],"readme":"<div align=\"center\" width=\"100%\">\n  <h2>🔍 gsc-mcp</h2>\n  <p>An MCP server that gives your AI assistant read-only access to your <a href=\"https://search.google.com/search-console\">Google Search Console</a> data.</p>\n  <a target=\"_blank\" href=\"https://github.com/AkashRajpurohit/gsc-mcp/stargazers\"><img src=\"https://img.shields.io/github/stars/AkashRajpurohit/gsc-mcp\" /></a>\n  <a target=\"_blank\" href=\"https://www.npmjs.com/package/@akashrajpurohit/gsc-mcp\"><img src=\"https://img.shields.io/npm/v/@akashrajpurohit/gsc-mcp?logo=npm\" /></a>\n  <a target=\"_blank\" href=\"https://github.com/AkashRajpurohit/gsc-mcp/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/AkashRajpurohit/gsc-mcp\" /></a>\n  <img alt=\"Node version\" src=\"https://img.shields.io/badge/node-%3E%3D22.5-339933?logo=nodedotjs&logoColor=white\" />\n  <img alt=\"MCP server\" src=\"https://img.shields.io/badge/MCP-server-1f1f1f\" />\n  <img alt=\"Visitors\" src=\"https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fvc.akashrajpurohit.com%2Fc%2Fakash~gh~gsc-mcp&query=count&style=flat&logo=github&label=Visitors&color=066da5\" />\n  <a target=\"_blank\" href=\"https://ko-fi.com/akashrajpurohit\"><img src=\"https://img.shields.io/badge/Ko--fi-F16061?style=flat-square&logo=ko-fi&logoColor=white\" /></a>\n  <a target=\"_blank\" href=\"https://akashrajpurohit.com/sponsors/?ref=gsc-mcp\"><img src=\"https://img.shields.io/badge/Sponsor-AkashRajpurohit-F16061?style=flat-square&logoColor=white\" /></a>\n  <a target=\"_blank\" href=\"https://twitter.com/akashwhocodes\"><img alt=\"follow on twitter\" src=\"https://img.shields.io/twitter/follow/akashwhocodes.svg?style=social&label=@akashwhocodes\" /></a>\n  <br />\n  <br />\n  <p align=\"center\">\n    <a href=\"https://github.com/AkashRajpurohit/gsc-mcp/issues/new?template=bug_report.yml\">Bug report</a>\n    ·\n    <a href=\"https://github.com/AkashRajpurohit/gsc-mcp/issues/new?template=feature_request.yml\">Feature request</a>\n    ·\n    <a href=\"https://github.com/AkashRajpurohit?tab=repositories\">More projects</a>\n  </p>\n</div>\n<hr />\n\nAsk your assistant things like _\"what are my top queries this month?\"_ or _\"is this page indexed yet?\"_, and it pulls the numbers straight from the Search Console API. No opening the dashboard, no fiddling with date ranges.\n\nThe server runs on your own machine and only ever reads. It uses Google's read-only scope, so your assistant can see your data but cannot change anything in your account. One service-account key covers every property you own.\n\n<div align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/AkashRajpurohit/gsc-mcp/main/assets/demo.gif\" alt=\"gsc-mcp in action\" width=\"100%\" />\n</div>\n\n## What you can ask\n\n- \"List all my Search Console properties.\"\n- \"What are my top 20 queries for example.com in the last 28 days?\"\n- \"Which queries get lots of impressions but a low CTR?\"\n- \"Show me the top pages for example.com on mobile.\"\n- \"Which pages lost the most clicks this month compared to last month?\"\n- \"Is `https://example.com/blog/my-post/` indexed by Google?\"\n- \"How many URLs did my sitemap submit versus get indexed?\"\n\n## Setup\n\nYou need [Node.js](https://nodejs.org/) 22.5 or newer and a Google service-account key that can read your properties. Three steps: create a key, grant it access, add the server to your client.\n\n### 1. Create a service-account key\n\nCreate a service account in any Google Cloud project, save its JSON key to `~/.config/gsc-mcp/key.json`, and enable the Search Console API. The Cloud project you pick does not matter; the key works for any property you grant it on.\n\n<details>\n<summary>Commands (gcloud)</summary>\n\n```bash\ngcloud config set project YOUR_PROJECT_ID\ngcloud services enable searchconsole.googleapis.com\ngcloud iam service-accounts create gsc-reader --display-name=\"GSC Reader\"\n\nmkdir -p ~/.config/gsc-mcp\ngcloud iam service-accounts keys create ~/.config/gsc-mcp/key.json \\\n  --iam-account=gsc-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com\n```\n\nThe key is a credential, not config, so keep it private. This repo's `.gitignore` blocks `*key*.json` so you cannot commit it by accident.\n\n</details>\n\n### 2. Grant it access to each property\n\nIn [Search Console](https://search.google.com/search-console), open each property, go to **Settings → Users and permissions → Add user**, and add the service account's email (`gsc-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com`) with the **Restricted** (read) role. Adding a new site later is just one more grant here.\n\n### 3. Add gsc-mcp to your client\n\n**Claude Code:**\n\n```bash\nclaude mcp add gsc --scope user -- npx -y @akashrajpurohit/gsc-mcp\n```\n\n<details>\n<summary>Claude Desktop, Cursor, Windsurf, VS Code, and others</summary>\n\n**Claude Desktop:** open **Settings → Developer → Edit Config** and add:\n\n```json\n{\n  \"mcpServers\": {\n    \"gsc\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@akashrajpurohit/gsc-mcp\"]\n    }\n  }\n}\n```\n\n**Cursor** (`~/.cursor/mcp.json`) and **Windsurf** (`~/.codeium/windsurf/mcp_config.json`): add the same `gsc` entry under `mcpServers`.\n\n**VS Code (GitHub Copilot)** (`.vscode/mcp.json`): use the same entry under `servers` instead of `mcpServers`.\n\n**Any other client:** register a stdio server whose command is `npx -y @akashrajpurohit/gsc-mcp`.\n\n**Running from source instead of npm?** Clone the repo, run `npm install`, and use `node /absolute/path/to/gsc-mcp/bin/gsc-mcp.mjs` as the command.\n\n</details>\n\nIf your key is not at the default path, add `\"env\": { \"GSC_KEY_PATH\": \"/path/to/key.json\" }` to the entry (or set it in your shell for the CLI).\n\n### 4. Check it works\n\n```bash\nnpx @akashrajpurohit/gsc-mcp doctor\n```\n\nThis checks your Node version, credentials, Google authentication, and how many properties you can read. If everything is green, start a new session in your client and ask it to list your Search Console sites.\n\n## Tools\n\n| Tool                   | What it does                                                                                                                                                |\n| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `gsc_list_sites`       | Lists the properties you can read and their exact `siteUrl` values.                                                                                         |\n| `gsc_search_analytics` | Clicks, impressions, CTR, and position, grouped by query, page, date, country, device, or search appearance. Supports filters, date ranges, and pagination. |\n| `compare_search_performance` | Compares two date periods and reports the change in clicks, impressions, CTR, and position. Can group by page, query, country, or device to find the biggest movers. |\n| `find_seo_opportunities` | Finds quick wins: striking-distance queries (ranking just off page 1) or page-1 queries and pages with low CTR. Computed in code and ranked by impressions. |\n| `gsc_inspect_url` | Index status of a single URL (indexed or not, last crawl, canonical, coverage). |\n| `gsc_inspect_urls` | Batch index-status check for many URLs at once, with bounded concurrency. |\n| `gsc_list_sitemaps` | Submitted versus indexed counts per sitemap, with any errors. |\n\nData comes straight from Search Console, so you see the same window Google shows everyone (about 16 months of history, with its usual sampling).\n\n<details>\n<summary>gsc_search_analytics request and response</summary>\n\nYou give it a clean request and get back the rows plus metadata about the query. You never write Google's raw API format.\n\nRequest:\n\n```json\n{\n  \"siteUrl\": \"sc-domain:example.com\",\n  \"startDate\": \"2026-06-01\",\n  \"endDate\": \"2026-06-30\",\n  \"dimensions\": [\"query\", \"page\"],\n  \"filters\": [\n    { \"dimension\": \"country\", \"operator\": \"equals\", \"expression\": \"ind\" }\n  ],\n  \"searchType\": \"web\",\n  \"rowLimit\": 5000\n}\n```\n\nResponse:\n\n```json\n{\n  \"siteUrl\": \"sc-domain:example.com\",\n  \"period\": { \"startDate\": \"2026-06-01\", \"endDate\": \"2026-06-30\" },\n  \"dimensions\": [\"query\", \"page\"],\n  \"rowCount\": 842,\n  \"hasMore\": false,\n  \"rows\": [],\n  \"warnings\": []\n}\n```\n\nIt also supports `dataState` (`final` or `all`), `aggregationType` (`auto`, `byProperty`, `byPage`), and automatic pagination past the API's 25,000-rows-per-request limit, capped by `maxRows`. Filter operators are `equals`, `notEquals`, `contains`, `notContains`, `includingRegex`, and `excludingRegex`, and multiple filters are combined with AND. `site` and `siteUrl` both work.\n\nFor a quick date range you can pass `datePreset` instead of computing dates: `last_7_days`, `last_28_days`, `last_3_months`, `last_6_months`, `last_12_months`, or `last_16_months` (each a rolling window ending yesterday). It works the same on `compare_search_performance`.\n\n</details>\n\n<details>\n<summary>compare_search_performance response</summary>\n\nGive it a current period (or `days`), and optionally a previous one. Without a previous period it uses the equal-length window right before the current one. The change is worked out in code, so the numbers are always consistent.\n\n```json\n{\n  \"current\": { \"startDate\": \"2026-06-01\", \"endDate\": \"2026-06-30\" },\n  \"previous\": { \"startDate\": \"2026-05-02\", \"endDate\": \"2026-05-31\" },\n  \"summary\": {\n    \"clicks\": { \"current\": 1840, \"previous\": 2160, \"change\": -320, \"changePercent\": -14.81 }\n  },\n  \"groupBy\": \"page\",\n  \"largestDeclines\": [\n    {\n      \"page\": \"https://example.com/docs\",\n      \"currentClicks\": 210,\n      \"previousClicks\": 390,\n      \"change\": -180,\n      \"changePercent\": -46.15\n    }\n  ],\n  \"largestGains\": []\n}\n```\n\n`summary` also covers impressions, CTR, and position. With `groupBy` (page, query, country, or device) you get `largestDeclines` and `largestGains`, ranked by clicks change. For position, lower is better, so a positive change means the average rank got worse.\n\n</details>\n\n<details>\n<summary>find_seo_opportunities response</summary>\n\nThe default `striking_distance` type surfaces queries (or pages) ranking just off page 1, where a small ranking gain could win clicks. Set `type` to `low_ctr` to instead find page-1 queries and pages that get few clicks for their impressions.\n\nRequest:\n\n```json\n{\n  \"siteUrl\": \"sc-domain:example.com\",\n  \"type\": \"striking_distance\",\n  \"datePreset\": \"last_28_days\",\n  \"minImpressions\": 200,\n  \"limit\": 5\n}\n```\n\nResponse:\n\n```json\n{\n  \"type\": \"striking_distance\",\n  \"dimension\": \"query\",\n  \"criteria\": { \"minPosition\": 11, \"maxPosition\": 20, \"minImpressions\": 200 },\n  \"count\": 4,\n  \"opportunities\": [\n    { \"query\": \"immich photo alternative\", \"clicks\": 0, \"impressions\": 1620, \"ctr\": 0, \"position\": 17.7 }\n  ]\n}\n```\n\nTune it with `minImpressions`, `minPosition` / `maxPosition` (striking-distance), `maxCtr` (low-CTR), `dimension` (`query` or `page`), and `limit`. Everything is computed in code and ranked by impressions.\n\n</details>\n\n## Command line\n\nThe `gsc-mcp` command works on its own too, handy for a quick check without a client:\n\n```bash\nnpx @akashrajpurohit/gsc-mcp sites\nnpx @akashrajpurohit/gsc-mcp queries \"sc-domain:example.com\"\nnpx @akashrajpurohit/gsc-mcp inspect \"sc-domain:example.com\" \"https://example.com/blog/my-post/\"\n```\n\nRun `gsc-mcp --help` for the full list. Domain properties look like `sc-domain:example.com`; URL-prefix properties look like `https://example.com/`.\n\n## Configuration\n\n| Variable | Default | Description |\n| --- | --- | --- |\n| `GSC_KEY_PATH` | `~/.config/gsc-mcp/key.json` | Path to the service-account JSON key. |\n| `GSC_TIMEOUT_MS` | `30000` | Per-request timeout in milliseconds. `0` disables it. |\n| `GSC_MAX_RETRIES` | `3` | How many times to retry transient failures (429, 5xx, dropped connections). `0` disables retries. |\n| `GSC_RETRY_BASE_MS` | `500` | Base delay for the exponential backoff between retries. |\n\n## Stability\n\nAs of 1.0.0 the tool names and their input and output shapes are stable and follow [semantic versioning](https://semver.org/). Breaking changes to a tool's inputs or outputs will only land in a future major release. New optional inputs and additive fields may arrive in minor releases. The server stays read-only.\n\n## Security & privacy\n\nThe server is read-only, runs locally, and collects no telemetry. Your key is read from disk and sent only to Google, never anywhere else, and errors are sanitized so key material never lands in logs or transcripts. Full details and how to report a vulnerability are in [SECURITY.md](SECURITY.md).\n\n## Troubleshooting\n\nRun `npx @akashrajpurohit/gsc-mcp doctor` first, since it catches most problems. When a tool call fails, the error also carries a short hint on how to fix it. Common ones:\n\n- **`sites` returns an empty list:** the service account is not granted on any property yet. The email you added in Search Console must match the key's `client_email` exactly.\n- **Auth or \"file not found\" errors:** the key is not where the server expects it. Check the path or set `GSC_KEY_PATH`.\n- **One property returns 403:** that property has not been shared with the service account. Add it under Users and permissions.\n- **\"Search Console API is disabled\":** enable it with `gcloud services enable searchconsole.googleapis.com`.\n\n## Contributing\n\nContributions are welcome. The project is small and has no build step. See [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide and [ROADMAP.md](ROADMAP.md) for what is and is not planned.\n\n```bash\ngit clone https://github.com/AkashRajpurohit/gsc-mcp.git\ncd gsc-mcp\nnpm install\nnpm test\n```\n\nTests use Node's built-in runner and are fully offline: no network and no real credentials needed. CI runs them on every push and pull request.\n\n<details>\n<summary>Project layout and release process</summary>\n\n| Path              | Responsibility                                                                           |\n| ----------------- | ---------------------------------------------------------------------------------------- |\n| `bin/gsc-mcp.mjs` | Executable entry point (server plus `doctor`, `--help`, `--version`, and read commands). |\n| `lib/server.mjs` | MCP server bootstrap. |\n| `lib/tools.mjs` | Tool definitions and the request dispatcher. |\n| `lib/analytics.mjs` | Search Analytics query logic. |\n| `lib/compare.mjs` | Period-over-period comparison logic. |\n| `lib/gsc.mjs` | Google API client: credential loading and read-only Search Console calls. |\n| `lib/doctor.mjs` | The `gsc-mcp doctor` diagnostic. |\n| `lib/util/` | Shared helpers: constants, date math, input validation, and error handling. |\n| `test/` | Offline test suite. |\n\nReleases are cut by pushing a `v*` tag, which runs the publish workflow (`.github/workflows/release.yml`). Publishing uses npm trusted publishing (OIDC), so no npm token is stored and provenance is attached automatically. Changes are tracked in [CHANGELOG.md](CHANGELOG.md).\n\n</details>\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n\nThis project is not affiliated with, endorsed by, or associated with Google. It is an independent tool that talks to Google's public Search Console API using credentials you create and control. \"Google Search Console\" is a trademark of Google LLC, used here only to describe what the tool works with. The tool is provided as-is, with no warranty.\n","readmeFilename":"README.md"}