{"name":"sh.gaffer/mcp","slug":"gaffer-mcp","title":"Gaffer","description":"Test analytics for AI agents: test history, flaky tests, failure clusters, coverage.","url":"https://mcp.market/server/gaffer-mcp","rating":null,"grade":"B","score":71,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":25,"stars":1,"forks":0,"downloads_week":82,"last_push_at":"2026-08-11T13:00:49.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/gaffer-sh/mcp","website":"https://gaffer.sh/docs/mcp/","version":"0.9.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@gaffer-sh/mcp","version":"0.9.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"API key from Account Settings > API Keys. gaf_ user key or gfr_ project token.","isRequired":true,"format":"string","isSecret":true,"name":"GAFFER_API_KEY"},{"description":"Override the Gaffer API base URL. Defaults to https://app.gaffer.sh","format":"string","name":"GAFFER_API_URL"}]}],"tools":[{"name":"execute_code","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"search_tools","description":"Search for available Gaffer API functions by keyword. Returns matching functions with their TypeScript declarations so you can use them with execute_code. Examples: - \"coverage\" → coverage-related functions - \"flaky\" → flaky test detection - \"\" (empty) → list all available functions","write_action":false,"price_micros":0,"input_schema":null},{"name":"upload_test_results","description":"Upload structured test results to Gaffer. Use this when you have test results in hand — parsed from CI output, a test runner's JSON report, or your own run — and no Gaffer CLI is available to upload them. Once uploaded, the results feed history, flaky detection, and health scores, so the read functions can see them on subsequent calls. Provide the tests; runId, the run timestamps and the pass/fail","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":71,"grade":"B","scanned_at":"2026-11-04T06:35:03.479Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-04T06:35:03.402Z","components":{"code":{"score":20,"max":25,"notes":["3 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":12,"max":15,"notes":["last push 85 days ago"]},"identity":{"score":8,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/index.js: … \"require(\", \"import \", \"import(\", \"eval(\", \"new Function\", \"Function(\", \"Buff…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@gaffer-sh/mcp","version":"0.9.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-08-11T13:01:13.749Z","repositoryUrl":"git+https://github.com/gaffer-sh/mcp.git","weeklyDownloads":82}],"repo":{"found":true,"owner":"gaffer-sh","repo":"mcp","archived":false,"pushedAt":"2026-08-11T13:00:49Z","stars":1,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/167988823?v=4","ownerCreatedAt":"2024-04-24T12:12:12Z","license":"MIT"},"icon":{"url":"https://gaffer.sh/favicon.ico","source":"registry","width":48,"height":48},"presence":{"stars":1,"forks":0,"downloadsWeek":82,"license":"MIT","lastPushAt":"2026-08-11T13:00:49.000Z","score":25}}}},"grade_history":[],"reviews":[]}