{"_id":"@gaffer-sh/mcp","_rev":"15-f01c982260bec0a4cde58ff304c30262","name":"@gaffer-sh/mcp","dist-tags":{"latest":"0.9.0"},"versions":{"0.1.0":{"name":"@gaffer-sh/mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.1.0","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/gaffer-v2/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"cf5f0366cd86a86a2460be1464cd32221c3ed106","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.1.0.tgz","fileCount":4,"integrity":"sha512-TcOyOq1BAH5cit+rrVN7zroSNK5rQTaNZlMJq5rVsz5hYecFH+wnXvPENVz5pj0eoZxZ99okycBSVKTbP3DzFw==","signatures":[{"sig":"MEQCIAUUoLedBt8nIaIuVv4ZCHny67j3Xc55pRmKXPr8YPCWAiB55LEodWDv3hv7cZ9hcfriJicLBIWvxgwRTJ+YALvCwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20361},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsup --watch","build":"tsup","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alex-gaffer","email":"alex@gaffer.sh"},"_resolved":"/private/var/folders/3z/mc9ybqwn36n4y6fj2nd23njm0000gp/T/d2563d73d192cab8bd62a03c70ead4fe/gaffer-sh-mcp-0.1.0.tgz","_integrity":"sha512-TcOyOq1BAH5cit+rrVN7zroSNK5rQTaNZlMJq5rVsz5hYecFH+wnXvPENVz5pj0eoZxZ99okycBSVKTbP3DzFw==","repository":{"url":"git+https://github.com/gaffer-sh/gaffer-v2.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"10.9.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","bumpp":"^10.1.0","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1766499825388_0.08402121217845782","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@gaffer-sh/mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.2.0","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/gaffer-v2/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"0342cd156627895f2a53a7216f2dae8972a82d48","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.2.0.tgz","fileCount":4,"integrity":"sha512-r+PdrXdjRNzYGceio2QZ4bJfzWvBZVK9bFbPsi2UJHGaeUVhxAr9govksrgEIAOvhLpl/EU3VCYKraYvz4zE2Q==","signatures":[{"sig":"MEQCIQCASsQWNXO+hkHySLXg26P//vyCVY/ytw+sVxg+XtW7+gIfaaSDfpJXL4YsAICkywn7E4mLW0uN7M0GJN0kFpLIJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37782},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsup --watch","build":"tsup","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:adb92478-7337-4da0-9b5a-eec2d2b778f1"}},"_resolved":"/tmp/b93131c18369775fdb0a5a49a14a1d7f/gaffer-sh-mcp-0.2.0.tgz","_integrity":"sha512-r+PdrXdjRNzYGceio2QZ4bJfzWvBZVK9bFbPsi2UJHGaeUVhxAr9govksrgEIAOvhLpl/EU3VCYKraYvz4zE2Q==","repository":{"url":"git+https://github.com/gaffer-sh/gaffer-v2.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.6.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","bumpp":"^10.1.0","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.2.0_1767196192064_0.5520682996042239","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@gaffer-sh/mcp","version":"0.2.1","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.2.1","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/gaffer-v2/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"6a54b7b8c6ebf95e650fe1ed8c544289dd9c2e27","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.2.1.tgz","fileCount":4,"integrity":"sha512-QDL0nTvkPdjGE/deUIKETl7+lnQmpHinrS42ob2F62J8I8vXbk6O7xjTmAHozYlEjRbVbY1KWhWgh4Ehgc7J5A==","signatures":[{"sig":"MEQCIAsV6t4BZe7YzBGrZt+37RSO/BWUTAMXC/H6B+1MHWJgAiA4EZZ6R/NzD6cVhM5v3eECSUYaM+GN+bBmIXIROFlv3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38001},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.2.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsup --watch","build":"tsup","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:adb92478-7337-4da0-9b5a-eec2d2b778f1"}},"_resolved":"/tmp/5d4bc5913f0f942736314f3d6fe30394/gaffer-sh-mcp-0.2.1.tgz","_integrity":"sha512-QDL0nTvkPdjGE/deUIKETl7+lnQmpHinrS42ob2F62J8I8vXbk6O7xjTmAHozYlEjRbVbY1KWhWgh4Ehgc7J5A==","repository":{"url":"git+https://github.com/gaffer-sh/gaffer-v2.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.6.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","bumpp":"^10.1.0","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.2.1_1767292349169_0.5922351565754662","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@gaffer-sh/mcp","version":"0.3.0","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.3.0","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/gaffer-v2/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"01e0a2fcc35f3e52aa3c3b6f0d8cebce693ede52","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.3.0.tgz","fileCount":4,"integrity":"sha512-FiLz0qgTH2AmG9QaPQpJR7CK3p7BNaPf3ZQGqZipgRV9oBuuDgPaj2Mxewxdm9V5SKidu0ua0gmpI9Nlsszvpg==","signatures":[{"sig":"MEYCIQDkiHE7y4rD2985AEmdq8wevF35vSXYyIBzJ1fUT+w+TwIhANpCzogzwLp0SBkZgk1KrtX25j/kBpZIQH+Say6/yDC6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51267},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsup --watch","build":"tsup","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:adb92478-7337-4da0-9b5a-eec2d2b778f1"}},"_resolved":"/tmp/2922dd1a9ed649c59d9aab898ab73fa7/gaffer-sh-mcp-0.3.0.tgz","_integrity":"sha512-FiLz0qgTH2AmG9QaPQpJR7CK3p7BNaPf3ZQGqZipgRV9oBuuDgPaj2Mxewxdm9V5SKidu0ua0gmpI9Nlsszvpg==","repository":{"url":"git+https://github.com/gaffer-sh/gaffer-v2.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.6.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","bumpp":"^10.1.0","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.3.0_1767376080040_0.1593200575496314","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@gaffer-sh/mcp","version":"0.4.0","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.4.0","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/gaffer-v2/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"3f143682f2bbc0b21b9ac99373350a464b20117e","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.4.0.tgz","fileCount":4,"integrity":"sha512-aVgMx01u/38BndsTec+VvfNKzT3WBPCVZJ1eezsjHJxJG8djKcvzVgJCMouE2AuSwjcIf/y2QFC4UMz6wqLRjQ==","signatures":[{"sig":"MEUCIQC+th3PNqRhTUU//biuwtta8noK84Jf/1DDzBMgf6jT4gIgbeloLGxR99HLevn3XNLDSpIuKqoRtHdmqigIigGI2GQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69018},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsup --watch","build":"tsup","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:adb92478-7337-4da0-9b5a-eec2d2b778f1"}},"_resolved":"/tmp/784e1a2be61e250a23a1973a12129d10/gaffer-sh-mcp-0.4.0.tgz","_integrity":"sha512-aVgMx01u/38BndsTec+VvfNKzT3WBPCVZJ1eezsjHJxJG8djKcvzVgJCMouE2AuSwjcIf/y2QFC4UMz6wqLRjQ==","repository":{"url":"git+https://github.com/gaffer-sh/gaffer-v2.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.6.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","bumpp":"^10.1.0","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.4.0_1769092234344_0.864135343299121","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@gaffer-sh/mcp","version":"0.4.1","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.4.1","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/gaffer-v2/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"45306f7e4c05a0d359d3b4fa06e1a173305e28c2","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.4.1.tgz","fileCount":4,"integrity":"sha512-mUKxsjCG2AXxqd+xALUuH8sVsq7YMyuX1CTk3GWtdUSDVepgN8cJE5AzVFucdUUXmPX+38ALcE83MOfKPZ+jBw==","signatures":[{"sig":"MEYCIQDVYaZyPdGxKluMfTkGDl2ex33wW7NN6mUIVJ9vzuLliwIhANxbEzqAXbop7bil+4QW/1esteG687Em/t/3SyVYfeu3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74142},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.4.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsup --watch","build":"tsup","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:adb92478-7337-4da0-9b5a-eec2d2b778f1"}},"_resolved":"/tmp/a0fe7fd77e15fea22332b3918f7dc3bd/gaffer-sh-mcp-0.4.1.tgz","_integrity":"sha512-mUKxsjCG2AXxqd+xALUuH8sVsq7YMyuX1CTk3GWtdUSDVepgN8cJE5AzVFucdUUXmPX+38ALcE83MOfKPZ+jBw==","repository":{"url":"git+https://github.com/gaffer-sh/gaffer-v2.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.6.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","bumpp":"^10.1.0","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.4.1_1769112333647_0.9724041112319404","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@gaffer-sh/mcp","version":"0.4.2","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.4.2","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/gaffer-v2/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"b00fc98a2e9a07ae3d56d309aa2f1061989beefa","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.4.2.tgz","fileCount":4,"integrity":"sha512-sGueca4VE0OIVa7AlKlXIQPTFkrrLw/FLwnD52+rUko9hsDukRhgV1vu9xy1WVlDftThOlRrvq/supTFbdCx4g==","signatures":[{"sig":"MEUCIGPkwmZEen0xsL/q4UefYOjTUqjpUH8ETP7WvuG95GOaAiEAoJ0r9wK2ctfErR/MSZ42WXssxoDBTbwO0fgJYcgtBew=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69818},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.4.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsup --watch","build":"tsup","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:adb92478-7337-4da0-9b5a-eec2d2b778f1"}},"_resolved":"/tmp/4935598e9b61e0903a315f16ec0520eb/gaffer-sh-mcp-0.4.2.tgz","_integrity":"sha512-sGueca4VE0OIVa7AlKlXIQPTFkrrLw/FLwnD52+rUko9hsDukRhgV1vu9xy1WVlDftThOlRrvq/supTFbdCx4g==","repository":{"url":"git+https://github.com/gaffer-sh/gaffer-v2.git","type":"git","directory":"packages/mcp-server"},"_npmVersion":"11.6.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","bumpp":"^10.1.0","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.4.2_1769389460029_0.5927224134158746","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@gaffer-sh/mcp","version":"0.5.0","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.5.0","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/mcp/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"dfc7af4d26d3646b816db3c63bba6e7895013e4b","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.5.0.tgz","fileCount":6,"integrity":"sha512-kLsSRh0swQG+5SzJXx951Hx99tzpfIxg9RUM7/JVEXfoke1Bcj5Lm93anu48whXRuxpxUF63iIaOJrUBOQ+0LQ==","signatures":[{"sig":"MEUCIQD8xcDAhFIj3Ofse1JBvZWnqIdS7M1Vtd+jjF5UuBg5SwIgYv340ePumJ4aiaAa8+Xm4LnigUwfC98pcH2w08rbHBM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gaffer-sh%2fmcp@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":203590},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.5.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsdown --watch","build":"tsdown","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f9d872a-7761-4c19-9ae1-af66005a7df0"}},"_resolved":"/tmp/4271b7581cfd4bb758c94ba9bb1964f7/gaffer-sh-mcp-0.5.0.tgz","_integrity":"sha512-kLsSRh0swQG+5SzJXx951Hx99tzpfIxg9RUM7/JVEXfoke1Bcj5Lm93anu48whXRuxpxUF63iIaOJrUBOQ+0LQ==","repository":{"url":"git+https://github.com/gaffer-sh/mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.1.0","tsdown":"^0.20.3","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.5.0_1770603990484_0.533276530440427","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@gaffer-sh/mcp","version":"0.6.0","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.6.0","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/mcp/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"a22a653610319a1be65d3714bf92b36801720689","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.6.0.tgz","fileCount":6,"integrity":"sha512-Oz6y05jBuv6JYmSy9l1Sb4XYkqGyOdxsXU6kdy6TmTXBTRejoDLZXHnEkLOp3lpX51ItKVw9veIvt7p4LLXniQ==","signatures":[{"sig":"MEQCIG8I4vKKqbidFCN7ulY+gt2IUvNfdpmfB5KzVk8sJy0CAiABeI3aHZvtXYChs1d7u3BH1etbF8R5JL+P9H4TMbXfWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gaffer-sh%2fmcp@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204140},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.6.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsdown --watch","sync":"bash scripts/sync-public-repo.sh","build":"tsdown","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f9d872a-7761-4c19-9ae1-af66005a7df0"}},"_resolved":"/tmp/95ad8c8b8a623b2c97480bf522cdb5ab/gaffer-sh-mcp-0.6.0.tgz","_integrity":"sha512-Oz6y05jBuv6JYmSy9l1Sb4XYkqGyOdxsXU6kdy6TmTXBTRejoDLZXHnEkLOp3lpX51ItKVw9veIvt7p4LLXniQ==","repository":{"url":"git+https://github.com/gaffer-sh/mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.1.0","tsdown":"^0.20.3","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.6.0_1771624797233_0.9019911532387141","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@gaffer-sh/mcp","version":"0.6.1","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.6.1","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/mcp/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"809f179f6fdb8e3190a2b13e1bc9bed60d7cd373","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.6.1.tgz","fileCount":6,"integrity":"sha512-D3BpStvpqstS7fUhCmhsJUSj69gnf54tMk2P44lYrMHXwmYWfeGxgHNHv9rlRd9kqcfKzAtu8QRmWJoZRH4gDQ==","signatures":[{"sig":"MEQCIBquNFpWOz/ip35GA+3ekSwOWTVVlbiNqvQpmGGDyixsAiBl5ABuDBuXgoz87o4lTQNPisjiU90xKLjfHhKOe76rZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gaffer-sh%2fmcp@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":201244},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.6.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsdown --watch","sync":"bash scripts/sync-public-repo.sh","build":"tsdown","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f9d872a-7761-4c19-9ae1-af66005a7df0"}},"_resolved":"/tmp/68468a3b2131cfd830c5be3ca70cfbd0/gaffer-sh-mcp-0.6.1.tgz","_integrity":"sha512-D3BpStvpqstS7fUhCmhsJUSj69gnf54tMk2P44lYrMHXwmYWfeGxgHNHv9rlRd9kqcfKzAtu8QRmWJoZRH4gDQ==","repository":{"url":"git+https://github.com/gaffer-sh/mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.1.0","tsdown":"^0.20.3","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.6.1_1771681494560_0.6512865630553029","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@gaffer-sh/mcp","version":"0.6.2","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.6.2","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/mcp/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"69abb506f97428a0183e0c5f1123ab1a025203c1","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.6.2.tgz","fileCount":6,"integrity":"sha512-wO5Bw8YrqCRiB/4v5MuKDE+rymQRz1VngizPAfXsaAmrnfxdIQwj3CB8mVo/VbhBF4rrYlAmuS1a5qnj6c4SmQ==","signatures":[{"sig":"MEYCIQDiNcG29c0Rqj5/frhf2L45R8WxoNnC3tIBT8HsWGpL8wIhAN2HHyF6YDmZcNo1CCxHQdNay52bEORCvJOuWOYz5L3b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gaffer-sh%2fmcp@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":188317},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.6.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsdown --watch","sync":"bash scripts/sync-public-repo.sh","build":"tsdown","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f9d872a-7761-4c19-9ae1-af66005a7df0"}},"_resolved":"/tmp/53baa5170f1539bfb19be0e5f91a4c16/gaffer-sh-mcp-0.6.2.tgz","_integrity":"sha512-wO5Bw8YrqCRiB/4v5MuKDE+rymQRz1VngizPAfXsaAmrnfxdIQwj3CB8mVo/VbhBF4rrYlAmuS1a5qnj6c4SmQ==","repository":{"url":"git+https://github.com/gaffer-sh/mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.1.0","tsdown":"^0.20.3","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.6.2_1771685115438_0.8811396212299787","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@gaffer-sh/mcp","version":"0.7.0","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.7.0","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/mcp/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"bed7215037bb3ed55965477091a34e60d90408c3","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.7.0.tgz","fileCount":6,"integrity":"sha512-sS30w3XsF4VNSJ4NiASxRcx8zF3qtsF3yIbklPZ5uoVPrehwMHpk7Fxyxe6sp0hOhubOvnjAStgYWkhfZCh6Mg==","signatures":[{"sig":"MEYCIQDH6XO2e7kGjjNIJ7hNXgPi8NlnAp3zmy1m/ge20lxQhAIhAO1JhHlCQdcFgMUikRV9wxZqjlSxFbsKQ4oD5qdDyUPh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gaffer-sh%2fmcp@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":232630},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.7.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsdown --watch","sync":"bash scripts/sync-public-repo.sh","test":"vitest run","build":"tsdown","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f9d872a-7761-4c19-9ae1-af66005a7df0"}},"_resolved":"/tmp/342369a9b1909ebd9f433963573179d4/gaffer-sh-mcp-0.7.0.tgz","_integrity":"sha512-sS30w3XsF4VNSJ4NiASxRcx8zF3qtsF3yIbklPZ5uoVPrehwMHpk7Fxyxe6sp0hOhubOvnjAStgYWkhfZCh6Mg==","repository":{"url":"git+https://github.com/gaffer-sh/mcp.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.13.1","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.1.0","tsdown":"^0.20.3","vitest":"^3.0.0","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.7.0_1772417865855_0.535409502118191","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@gaffer-sh/mcp","version":"0.8.0","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.8.0","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/mcp/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"2d979a4d6bf77c118aea29eee5f670882300b5eb","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.8.0.tgz","fileCount":6,"integrity":"sha512-gDKfsuOyjX059nrXdxbTUM7styFJ+aFrWcWXyzvZZNIi1qeY66B92MU/E3FfCyY2tDSyxTbJpHHqutjCid2fng==","signatures":[{"sig":"MEQCICtKPaaDsrt8tHO0dXOkjh1R6u3HwTtVa552MhFofIOUAiA8xhqN4bYh2QrTb4L0aSVLIJem6vPNR/2zo1ewMYSrMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gaffer-sh%2fmcp@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":234986},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.8.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"mcpName":"sh.gaffer/mcp","scripts":{"dev":"tsdown --watch","sync":"bash scripts/sync-public-repo.sh","test":"vitest run","build":"tsdown","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f9d872a-7761-4c19-9ae1-af66005a7df0"}},"_resolved":"/tmp/4e1303d1496dac84a14672cdb4c60b37/gaffer-sh-mcp-0.8.0.tgz","_integrity":"sha512-gDKfsuOyjX059nrXdxbTUM7styFJ+aFrWcWXyzvZZNIi1qeY66B92MU/E3FfCyY2tDSyxTbJpHHqutjCid2fng==","repository":{"url":"git+https://github.com/gaffer-sh/mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.1.0","tsdown":"^0.20.3","vitest":"^3.0.0","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.8.0_1786194932971_0.3900334964896903","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@gaffer-sh/mcp","version":"0.8.1","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","_id":"@gaffer-sh/mcp@0.8.1","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"homepage":"https://gaffer.sh","bugs":{"url":"https://github.com/gaffer-sh/mcp/issues"},"bin":{"gaffer-mcp":"dist/index.js"},"dist":{"shasum":"724a76594642c8db79037e3c7a077c40413de193","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.8.1.tgz","fileCount":6,"integrity":"sha512-iQRGVRGxSgnX0Nyi02KJdWDibXJ1Cq4ry7OeQPsGdQ2WcabGdph+lGcItmwUIvKXfm4BEaO3VdNbEiMzK4fj4A==","signatures":[{"sig":"MEUCIQDQEkyt4aVYGZRofg4YdQF7/PHLFUDmrZ1QlMttBN5I5gIgcAA1VfmvW9a04M9Ia5mu1ITzOeh011jIGoW4emvX44o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gaffer-sh%2fmcp@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":234986},"main":"./dist/index.js","type":"module","_from":"file:gaffer-sh-mcp-0.8.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"mcpName":"sh.gaffer/mcp","scripts":{"dev":"tsdown --watch","sync":"bash scripts/sync-public-repo.sh","test":"vitest run","build":"tsdown","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f9d872a-7761-4c19-9ae1-af66005a7df0"}},"_resolved":"/tmp/d2940c32fea2b9d7af89f51143f5fbaf/gaffer-sh-mcp-0.8.1.tgz","_integrity":"sha512-iQRGVRGxSgnX0Nyi02KJdWDibXJ1Cq4ry7OeQPsGdQ2WcabGdph+lGcItmwUIvKXfm4BEaO3VdNbEiMzK4fj4A==","repository":{"url":"git+https://github.com/gaffer-sh/mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.1.0","tsdown":"^0.20.3","vitest":"^3.0.0","typescript":"^5.7.2","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.8.1_1786197699587_0.280896771437243","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@gaffer-sh/mcp","type":"module","version":"0.9.0","mcpName":"sh.gaffer/mcp","description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","license":"MIT","author":{"name":"Gaffer","email":"hello@gaffer.sh"},"homepage":"https://gaffer.sh","repository":{"type":"git","url":"git+https://github.com/gaffer-sh/mcp.git"},"bugs":{"url":"https://github.com/gaffer-sh/mcp/issues"},"keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"gaffer-mcp":"dist/index.js"},"engines":{"node":">=18"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","zod":"^3.23.0"},"devDependencies":{"@types/node":"^22.0.0","bumpp":"^10.1.0","tsdown":"^0.20.3","typescript":"^5.7.2","vitest":"^3.0.0"},"scripts":{"build":"tsdown","postbuild":"chmod +x dist/index.js","dev":"tsdown --watch","typecheck":"tsc --noEmit","release":"bumpp --tag 'mcp-v%s' --commit 'chore(mcp): release v%s' && git push --follow-tags","sync":"bash scripts/sync-public-repo.sh","test":"vitest run"},"_id":"@gaffer-sh/mcp@0.9.0","_integrity":"sha512-UV3+5zxn7RxL3HZ1XOOVfYaRPxidHrxWmDvBZX54hwjBKO7OJ5QPUm60ymHEQutOg7GlQluzLgzJF+oFVeRZ8g==","_resolved":"/tmp/ab0920ac59800e54901c7b7a9e591db6/gaffer-sh-mcp-0.9.0.tgz","_from":"file:gaffer-sh-mcp-0.9.0.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-UV3+5zxn7RxL3HZ1XOOVfYaRPxidHrxWmDvBZX54hwjBKO7OJ5QPUm60ymHEQutOg7GlQluzLgzJF+oFVeRZ8g==","shasum":"37300eac2f7e14af07ef0c26ac4876bc7afe10af","tarball":"https://registry.npmjs.org/@gaffer-sh/mcp/-/mcp-0.9.0.tgz","fileCount":6,"unpackedSize":260017,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gaffer-sh%2fmcp@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEyWYjpvTExIUOo+Uis5P24eC3dkugN+ImVVUbz9TAUmAiA1q8aJRWnCEvvPXOnYpfKmKZQh9h5KK3KyyGh1msxe5g=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f9d872a-7761-4c19-9ae1-af66005a7df0"}},"directories":{},"maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.9.0_1786453273597_0.5969993784516203"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-23T14:23:45.262Z","modified":"2026-08-11T13:01:14.169Z","0.1.0":"2025-12-23T14:23:45.536Z","0.2.0":"2025-12-31T15:49:52.228Z","0.2.1":"2026-01-01T18:32:29.319Z","0.3.0":"2026-01-02T17:48:00.186Z","0.4.0":"2026-01-22T14:30:34.486Z","0.4.1":"2026-01-22T20:05:33.797Z","0.4.2":"2026-01-26T01:04:20.185Z","0.5.0":"2026-02-09T02:26:30.624Z","0.6.0":"2026-02-20T21:59:57.397Z","0.6.1":"2026-02-21T13:44:54.699Z","0.6.2":"2026-02-21T14:45:15.695Z","0.7.0":"2026-03-02T02:17:46.001Z","0.8.0":"2026-08-08T13:15:33.116Z","0.8.1":"2026-08-08T14:01:39.756Z","0.9.0":"2026-08-11T13:01:13.749Z"},"bugs":{"url":"https://github.com/gaffer-sh/mcp/issues"},"author":{"name":"Gaffer","email":"hello@gaffer.sh"},"license":"MIT","homepage":"https://gaffer.sh","keywords":["mcp","model-context-protocol","gaffer","test-results","claude","cursor","ai-assistant"],"repository":{"type":"git","url":"git+https://github.com/gaffer-sh/mcp.git"},"description":"MCP server for Gaffer test history - give your AI assistant memory of your tests","maintainers":[{"name":"alex-gaffer","email":"alex@gaffer.sh"}],"readme":"# @gaffer-sh/mcp\n\nMCP (Model Context Protocol) server for [Gaffer](https://gaffer.sh) - give your AI assistant memory of your tests.\n\n## What is this?\n\nThis MCP server connects AI coding assistants like Claude Code and Cursor to your Gaffer test history and coverage data. It runs in code mode: three MCP tools over a namespace of 17 functions — 16 read-only analytics functions plus `upload_test_results`. It allows AI to:\n\n- Check your project's test health (pass rate, flaky tests, trends)\n- Look up the history of specific tests to understand stability\n- Get context about test failures when debugging\n- Analyze code coverage and identify untested areas\n- Browse all your projects (with user API Keys)\n- Access test report files (HTML reports, coverage, etc.)\n\n## Prerequisites\n\n1. A [Gaffer](https://gaffer.sh) account with test results uploaded\n2. An API Key from Account Settings > API Keys\n\n## Setup\n\n### Claude Code (CLI)\n\nThe easiest way to add the Gaffer MCP server is via the Claude Code CLI:\n\n```bash\nclaude mcp add gaffer -e GAFFER_API_KEY=gaf_your_api_key_here -- npx -y @gaffer-sh/mcp\n```\n\n### Claude Code (Manual)\n\nAlternatively, add to your Claude Code settings (`~/.claude.json` or project `.claude/settings.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"gaffer\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@gaffer-sh/mcp\"],\n      \"env\": {\n        \"GAFFER_API_KEY\": \"gaf_your_api_key_here\"\n      }\n    }\n  }\n}\n```\n\n### Cursor\n\nAdd to `.cursor/mcp.json` in your project:\n\n```json\n{\n  \"mcpServers\": {\n    \"gaffer\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@gaffer-sh/mcp\"],\n      \"env\": {\n        \"GAFFER_API_KEY\": \"gaf_your_api_key_here\"\n      }\n    }\n  }\n}\n```\n\n## How this server works\n\nThis server uses **code mode**. Instead of exposing one MCP tool per API call, it exposes three tools plus a `codemode` namespace you call from JavaScript. Fewer tool definitions occupy the context window, and a single execution can chain several calls.\n\n| MCP tool | What it does |\n|------|-------------|\n| `execute_code` | Run JavaScript against `codemode.<function>()`. Max 20 API calls, 30s timeout. |\n| `search_tools` | Find available functions by keyword. An empty query lists all of them. |\n| `list_projects` | List projects. Registered only when the token is a user API Key (`gaf_`). |\n\n```javascript\nconst health = await codemode.get_project_health({ projectId: \"proj_abc\" });\nif (health.flakyTestCount > 0) {\n  const flaky = await codemode.get_flaky_tests({ projectId: \"proj_abc\" });\n  return { health, flaky };\n}\nreturn { health };\n```\n\n## Functions available via `execute_code`\n\n| Function | Category | Description |\n|------|------|-------------|\n| `get_project_health` | health | Health score, pass rate, flaky count, trend |\n| `get_test_history` | testing | Pass/fail history for a specific test |\n| `get_flaky_tests` | testing | Tests with high flip rates (pass↔fail) |\n| `list_test_runs` | testing | Recent test runs, filterable by commit/branch/status |\n| `get_test_run_details` | testing | Parsed individual results for one run |\n| `get_failure_clusters` | testing | Failed tests grouped by root cause |\n| `get_slowest_tests` | testing | Slowest tests by P95 duration |\n| `compare_test_metrics` | testing | Compare test performance between commits or runs |\n| `search_failures` | testing | Search failures by error or test-name pattern, or list all recent failures |\n| `get_coverage_summary` | coverage | Overall coverage metrics and trend |\n| `get_coverage_for_file` | coverage | Coverage for specific files or paths |\n| `get_untested_files` | coverage | Files below a coverage threshold |\n| `find_uncovered_failure_areas` | coverage | Files with low coverage AND test failures |\n| `get_report` | reports | Report file URLs for a test run |\n| `get_report_browser_url` | reports | Signed browser-navigable report URL (30 min) |\n| `get_upload_status` | uploads | Whether CI results are uploaded and processed |\n| `upload_test_results` | uploads | Upload test results (**write**) — rate-limited and audit-logged |\n\nEvery function except `upload_test_results` is read-only.\n\n## Function Reference\n\n### `list_projects`\n\nList all projects you have access to.\n\n- **Input:** `organizationId` (optional), `limit` (optional, default: 50)\n- **Returns:** List of projects with IDs, names, and organization info\n- **Example:** \"What projects do I have in Gaffer?\"\n\n### `get_project_health`\n\nGet the health metrics for a project.\n\n- **Input:** `projectId` (required), `days` (optional, default: 30)\n- **Returns:** Health score (0-100), pass rate, test run count, flaky test count, trend\n- **Example:** \"What's the health of my test suite?\"\n\n### `get_test_history`\n\nGet the pass/fail history for a specific test.\n\n- **Input:** `projectId` (required), `testName` or `filePath` (one required), `limit` (optional)\n- **Returns:** History of runs with status, duration, branch, commit, errors\n- **Example:** \"Is the login test flaky? Check its history\"\n\n### `get_flaky_tests`\n\nGet the list of flaky tests in a project.\n\n- **Input:** `projectId` (required), `threshold` (optional, default: 0.1), `days` (optional), `limit` (optional)\n- **Returns:** List of flaky tests with flip rates, transition counts, run counts\n- **Example:** \"Which tests are flaky in my project?\"\n\n### `list_test_runs`\n\nList recent test runs with optional filtering.\n\n- **Input:** `projectId` (required), `commitSha` (optional), `branch` (optional), `status` (optional), `limit` (optional)\n- **Returns:** List of test runs with pass/fail/skip counts, commit and branch info\n- **Example:** \"What tests failed in the last commit?\"\n\n### `get_test_run_details`\n\nGet parsed test results for a specific test run.\n\n- **Input:** `testRunId` (required), `projectId` (required), `status` (optional filter), `limit` (optional)\n- **Returns:** Individual test results with name, status, duration, file path, errors\n- **Example:** \"Show me all failed tests from this test run\"\n\n### `get_report`\n\nGet URLs for report files uploaded with a test run.\n\n- **Input:** `testRunId` (required)\n- **Returns:** List of files with filename, size, content type, download URL\n- **Example:** \"Get the Playwright report for the latest test run\"\n\n### `get_report_browser_url`\n\nGet a browser-navigable URL for viewing a test report.\n\n- **Input:** `projectId` (required), `testRunId` (required), `filename` (optional)\n- **Returns:** Signed URL valid for 30 minutes\n- **Example:** \"Give me a link to view the test report\"\n\n### `get_slowest_tests`\n\nGet the slowest tests in a project, sorted by P95 duration.\n\n- **Input:** `projectId` (required), `days` (optional), `limit` (optional), `framework` (optional), `branch` (optional)\n- **Returns:** List of tests with average and P95 duration, run count\n- **Example:** \"Which tests are slowing down my CI pipeline?\"\n\n### `compare_test_metrics`\n\nCompare test metrics between two commits or test runs.\n\n- **Input:** `projectId` (required), `testName` (required), `beforeCommit`/`afterCommit` OR `beforeRunId`/`afterRunId`\n- **Returns:** Before/after metrics with duration change and percentage\n- **Example:** \"Did my fix make this test faster?\"\n\n### `get_coverage_summary`\n\nGet the coverage metrics summary for a project.\n\n- **Input:** `projectId` (required), `days` (optional, default: 30)\n- **Returns:** Line/branch/function coverage percentages, trend, report count, lowest coverage files\n- **Example:** \"What's our test coverage?\"\n\n### `get_coverage_for_file`\n\nGet coverage metrics for specific files or paths.\n\n- **Input:** `projectId` (required), `filePath` (required - exact or partial match)\n- **Returns:** List of matching files with line/branch/function coverage\n- **Example:** \"What's the coverage for our API routes?\"\n\n### `get_untested_files`\n\nGet files with little or no test coverage.\n\n- **Input:** `projectId` (required), `maxCoverage` (optional, default: 10%), `limit` (optional)\n- **Returns:** List of files below threshold sorted by coverage (lowest first)\n- **Example:** \"Which files have no tests?\"\n\n### `find_uncovered_failure_areas`\n\nFind code areas with both low coverage AND test failures (high risk).\n\n- **Input:** `projectId` (required), `days` (optional), `coverageThreshold` (optional, default: 80%)\n- **Returns:** Risk areas ranked by score, with file path, coverage %, failure count\n- **Example:** \"Where should we focus our testing efforts?\"\n\n### `get_failure_clusters`\n\nGroup failed tests by root cause using error message similarity.\n\n- **Input:** `projectId` (required), `testRunId` (required)\n- **Returns:** Clusters of failed tests grouped by similar error messages, with representative error and test count\n- **Example:** \"Are these 15 failures from the same bug?\"\n\n### `search_failures`\n\nSearch past failures by error message, stack trace, or test name — or list every failure in the window.\n\n- **Input:** `query` (optional — omit to return all failures), `projectId` (required for `gaf_` keys), `searchIn` (optional: `errors`/`names`/`all`, default `all`), `days` (optional, default: 30), `branch` (optional), `limit` (optional, default: 20)\n- **Returns:** Matching failures with test name, error message, run and commit context, plus `truncated` when scan caps cut the list short\n- **Example:** \"Have we seen this connection-refused error before?\" / \"What failed in the last 7 days?\"\n\n### `get_upload_status`\n\nCheck if CI results have been uploaded and processed.\n\n- **Input:** `projectId` (required), `sessionId` (optional), `commitSha` (optional), `branch` (optional)\n- **Returns:** Upload session(s) with processing status, linked test runs and coverage reports\n- **Example:** \"Are my test results ready for commit abc123?\"\n\n### `upload_test_results`\n\nUpload structured test results. This is the only function that writes.\n\nUse it when you have results in hand — parsed from CI output or a runner's JSON\nreport — and no Gaffer CLI is available to upload them.\n\n- **Input:** `projectId` (required for `gaf_` keys), `framework` (required), `tests` (required), `branch`, `commitSha`, `ciProvider`, `startedAt`, `finishedAt`, `coverage`\n- **Returns:** `uploadSessionId`, the generated `runId`, and the derived pass/fail/skip summary\n- **Example:** \"Upload these 42 parsed pytest results so we can track them\"\n\n`runId`, the run timestamps and the summary are derived from `tests` — pass\n`startedAt`/`finishedAt` only if you know the real wall-clock window.\n\nTwo constraints worth knowing:\n\n- **Not idempotent.** Each call creates a new run, so a retry after an uncertain\n  failure produces a duplicate. Check `get_upload_status` instead of retrying.\n- **Rate-limited per project**, and every call is written to the project's audit\n  log with the id of the credential that made it.\n\nProcessing is asynchronous: results take a few seconds to become visible to the\nread functions.\n\n## Agentic CI Workflows\n\nThese workflows show how an AI agent diagnoses CI failures, waits for results, and finds coverage gaps. Each step is a `codemode` function, so a whole chain runs inside one `execute_code` call rather than one round-trip per step.\n\n### Workflow: Diagnose CI Failures\n\n```\nlist_test_runs(projectId, status=\"failed\")\n  → get_test_run_details(projectId, testRunId, status=\"failed\")\n  → get_failure_clusters(projectId, testRunId)\n  → get_test_history(projectId, testName=\"...\")\n  → compare_test_metrics(projectId, testName, beforeCommit, afterCommit)\n```\n\n1. Find the failed test run\n2. Get individual failure details with stack traces\n3. Group failures by root cause — often 15 failures are 2-3 bugs\n4. Check if each failure is new (regression) or recurring\n5. Verify fixes by comparing before/after\n\n### Workflow: Wait for Results\n\n```\nget_upload_status(projectId, commitSha=\"abc123\")\n  → poll until processingStatus=\"completed\"\n  → get_test_run_details(projectId, testRunId)\n```\n\n1. Check if results for a commit have been uploaded\n2. Wait for processing to complete\n3. Use linked test run IDs to get results\n\n### Workflow: Find Coverage Gaps\n\n```\nfind_uncovered_failure_areas(projectId)\n  → get_untested_files(projectId)\n  → get_coverage_for_file(projectId, filePath=\"src/critical/\")\n```\n\n1. Find files with both low coverage and test failures (highest risk)\n2. Find files with no coverage at all\n3. Drill into specific directories for targeted analysis\n\n### Function Quick Reference\n\n| Agent Question | Function |\n|---|---|\n| \"What failed?\" | `get_test_run_details` |\n| \"Same root cause?\" | `get_failure_clusters` |\n| \"Seen this error before?\" | `search_failures` |\n| \"Is it flaky?\" | `get_flaky_tests` |\n| \"Is this new?\" | `get_test_history` |\n| \"Did my fix work?\" | `compare_test_metrics` |\n| \"Are results ready?\" | `get_upload_status` |\n| \"What's untested?\" | `find_uncovered_failure_areas` |\n| \"What's slow?\" | `get_slowest_tests` |\n\n## Prioritizing Coverage Improvements\n\nWhen using coverage tools to improve your test suite, combine coverage data with codebase exploration for best results:\n\n### 1. Understand Code Utilization\n\nBefore targeting files purely by coverage percentage, explore which code is actually critical:\n\n- **Find entry points:** Look for route definitions, event handlers, exported functions - these reveal what code actually executes in production\n- **Find heavily-imported files:** Files imported by many others are high-value targets\n- **Identify critical business logic:** Look for files handling auth, payments, data mutations, or core domain logic\n\n### 2. Prioritize by Impact\n\nLow coverage alone doesn't indicate priority. Consider:\n\n- **High utilization + low coverage = highest priority** - Code that runs frequently but lacks tests\n- **Large files with 0% coverage** - More uncovered lines means bigger impact on overall coverage\n- **Files with both failures and low coverage** - Use `find_uncovered_failure_areas` for this\n\n### 3. Use Path-Based Queries\n\nThe `get_untested_files` tool may return many frontend components. For backend or specific areas:\n\n```\n# Query specific paths with get_coverage_for_file\nget_coverage_for_file(filePath=\"server/services\")\nget_coverage_for_file(filePath=\"src/api\")\nget_coverage_for_file(filePath=\"lib/core\")\n```\n\n### 4. Iterative Improvement\n\n1. Get baseline with `get_coverage_summary`\n2. Identify targets with `get_coverage_for_file` on critical paths\n3. Write tests for highest-impact files\n4. Re-check coverage after CI uploads new results\n5. Repeat\n\n## Authentication\n\n### User API Keys (Recommended)\n\nUser API Keys (`gaf_` prefix) provide read-only access to all projects across your organizations. Get your API Key from: **Account Settings > API Keys**\n\n### Project Tokens\n\nProject Tokens (`gfr_` prefix) are designed for uploading test results and only provide access to a single project. When you use one, omit `projectId` — it resolves automatically. User API Keys are preferred for the MCP server because they enable `list_projects` and read across projects.\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `GAFFER_API_KEY` | Yes | Your Gaffer API Key (starts with `gaf_`) |\n| `GAFFER_API_URL` | No | API base URL (default: `https://app.gaffer.sh`) |\n\n## Local Development\n\n```bash\npnpm install\npnpm build\n```\n\nTest locally with Claude Code (use absolute path to built file):\n\n```json\n{\n  \"mcpServers\": {\n    \"gaffer\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/dist/index.js\"],\n      \"env\": {\n        \"GAFFER_API_KEY\": \"gaf_...\"\n      }\n    }\n  }\n}\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}