{"_id":"github-pr-automation","_rev":"3-6ec7ee3c817b1eb9c22adfba1a342dc7","name":"github-pr-automation","dist-tags":{"latest":"0.5.2"},"versions":{"0.2.1":{"name":"github-pr-automation","version":"0.2.1","keywords":["mcp","mcp-server","model-context-protocol","github","pull-request","automation","ci","pr-management","code-review","workflow-optimization","claude","ai-tools","github-api","pull-request-automation"],"author":{"name":"GitHub PR Automation Contributors"},"license":"MIT","_id":"github-pr-automation@0.2.1","maintainers":[{"name":"jmalicki","email":"jmalicki@gmail.com"}],"homepage":"https://github.com/jmalicki/github-pr-automation-mcp#readme","bugs":{"url":"https://github.com/jmalicki/github-pr-automation-mcp/issues"},"bin":{"github-pr-automation":"dist/cli.js"},"mcp":{"tools":["get_failing_tests","find_unresolved_comments","manage_stacked_prs","detect_merge_conflicts","check_merge_readiness","get_review_suggestions","rebase_after_squash_merge","resolve_review_thread"],"server":"dist/index.js","version":"2025-10-22","protocol":"stdio","capabilities":{"tools":true,"prompts":false,"resources":false}},"dist":{"shasum":"f0ccb41005bf629c9a76d638977ec1fc3ac3c3ec","tarball":"https://registry.npmjs.org/github-pr-automation/-/github-pr-automation-0.2.1.tgz","fileCount":252,"integrity":"sha512-rvCrgdi0MQv465ISzcSDVNIxIoTmshobg0zGc2DvPUeuRDIO/y1hn8sLm0vmKRMc/wKO9Ze8rAxaBzex6e4unw==","signatures":[{"sig":"MEYCIQCtp7TEf8ppPdAQ3qmAIdiCz8aVsEZbnI0yQLBHLBLR5QIhAIw4GlAM6VXTbVmZnQiHHUq/v337qvIvbapA1HTttVYr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":993342},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1f25e3a170c6d69e8adb855e45843b8d723ab328","scripts":{"cli":"tsc && node dist/cli.js","dev":"tsc && node dist/index.js","lint":"eslint src","test":"ROLLUP_FORCE_JS=1 vitest run","audit":"npm run audit:ci","build":"node scripts/generate-version-info.js && tsc","watch":"tsc --watch","prepack":"npm run build","prepare":"husky install && npm run build","release":"node scripts/release.js","audit:ci":"audit-ci --config .audit-ci.json","lint:fix":"eslint src --fix","postpack":"echo 'Package ready for distribution'","security":"npm run audit:ci && npm run license-check","test:e2e":"ROLLUP_FORCE_JS=1 vitest run tests/e2e/","audit:fix":"npm audit fix","test:fast":"ROLLUP_FORCE_JS=1 vitest run --testNamePattern=\"\\[fast\\]\"","test:slow":"ROLLUP_FORCE_JS=1 vitest run --testNamePattern=\"\\[slow\\]\"","audit:high":"npm run audit:ci","test:watch":"vitest watch","type-check":"tsc --noEmit","install:cli":"node scripts/install-cli.cjs","postinstall":"husky install","license-check":"npx license-checker --config .license-checker.json","release:major":"node scripts/release.js major","release:minor":"node scripts/release.js minor","release:patch":"node scripts/release.js patch","test:coverage":"ROLLUP_FORCE_JS=1 vitest run --coverage","test:e2e:fast":"ROLLUP_FORCE_JS=1 vitest run tests/e2e/ --testNamePattern=\"\\[fast\\]\"","test:e2e:slow":"ROLLUP_FORCE_JS=1 vitest run tests/e2e/ --testNamePattern=\"\\[slow\\]\"","uninstall:local":"rm -f ~/.local/bin/github-pr-automation","test:integration":"ROLLUP_FORCE_JS=1 vitest run --config vitest.integration.config.ts","install:cli:local":"node scripts/install-cli.cjs local-bin","audit:ci:optimized":"audit-ci --config .audit-ci-optimized.json","install:cli:global":"node scripts/install-cli.cjs global","release:prerelease":"node scripts/release.js prerelease","security:optimized":"npm run audit:ci:optimized && npm run license-check:optimized","test:coverage:fast":"ROLLUP_FORCE_JS=1 vitest run --coverage --testNamePattern=\"\\[fast\\]\"","install:cli:npm-link":"node scripts/install-cli.cjs npm-link","license-check:optimized":"npx license-checker --json --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;GPL-2.0;GPL-3.0;LGPL-2.1;LGPL-3.0;Python-2.0;CC-BY-3.0;CC0-1.0;(MIT AND CC-BY-3.0)\" --excludePrivatePackages --production --development --optional --peer --direct --indirect --depth 0 --noColor --silent","test:integration:record":"RECORD_INTEGRATION_FIXTURES=true RUN_INTEGRATION_TESTS=true ROLLUP_FORCE_JS=1 vitest run --config vitest.integration.config.ts","test:integration:playback":"RUN_INTEGRATION_TESTS=true ROLLUP_FORCE_JS=1 vitest run --config vitest.integration.config.ts"},"_npmUser":{"name":"jmalicki","email":"jmalicki@gmail.com"},"repository":{"url":"git+https://github.com/jmalicki/github-pr-automation-mcp.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server and CLI for automated GitHub PR management, review resolution, and workflow optimization","directories":{},"resolutions":{"@rollup/rollup-darwin-x64":"rollup","@rollup/rollup-freebsd-x64":"rollup","@rollup/rollup-darwin-arm64":"rollup","@rollup/rollup-android-arm64":"rollup","@rollup/rollup-freebsd-arm64":"rollup","@rollup/rollup-linux-x64-gnu":"rollup","@rollup/rollup-win32-x64-gnu":"rollup","@rollup/rollup-linux-x64-musl":"rollup","@rollup/rollup-win32-x64-msvc":"rollup","@rollup/rollup-linux-arm64-gnu":"rollup","@rollup/rollup-linux-ppc64-gnu":"rollup","@rollup/rollup-linux-s390x-gnu":"rollup","@rollup/rollup-win32-ia32-msvc":"rollup","@rollup/rollup-android-arm-eabi":"rollup","@rollup/rollup-linux-arm64-musl":"rollup","@rollup/rollup-win32-arm64-msvc":"rollup","@rollup/rollup-linux-loong64-gnu":"rollup","@rollup/rollup-linux-riscv64-gnu":"rollup","@rollup/rollup-openharmony-arm64":"rollup","@rollup/rollup-linux-riscv64-musl":"rollup","@rollup/rollup-linux-arm-gnueabihf":"rollup","@rollup/rollup-linux-arm-musleabihf":"rollup"},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.1.12","commander":"^14.0.1","@octokit/rest":"^22.0.0","@octokit/auth-app":"^8.1.1","@modelcontextprotocol/sdk":"^1.20.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.38.0","vitest":"^4.0.1","audit-ci":"^7.1.0","typescript":"^5.3.3","@types/node":"^24.9.1","license-checker":"^25.0.1","@octokit/fixtures":"^23.1.1","@vitest/coverage-v8":"^4.0.1","@typescript-eslint/parser":"^8.46.2","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/github-pr-automation_0.2.1_1761583699302_0.08715309219297307","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"github-pr-automation","version":"0.5.1","keywords":["mcp","mcp-server","model-context-protocol","github","pull-request","automation","ci","pr-management","code-review","workflow-optimization","claude","ai-tools","github-api","pull-request-automation"],"author":{"name":"GitHub PR Automation Contributors"},"license":"MIT","_id":"github-pr-automation@0.5.1","maintainers":[{"name":"jmalicki","email":"jmalicki@gmail.com"}],"homepage":"https://github.com/jmalicki/github-pr-automation-mcp#readme","bugs":{"url":"https://github.com/jmalicki/github-pr-automation-mcp/issues"},"bin":{"github-pr-automation":"dist/cli.js"},"mcp":{"tools":["get_failing_tests","find_unresolved_comments","manage_stacked_prs","detect_merge_conflicts","check_merge_readiness","get_review_suggestions","rebase_after_squash_merge","resolve_review_thread"],"server":"dist/index.js","version":"2025-10-22","protocol":"stdio","capabilities":{"tools":true,"prompts":false,"resources":false}},"dist":{"shasum":"78ad914f73126a9ecc423cbec28567924d8ad617","tarball":"https://registry.npmjs.org/github-pr-automation/-/github-pr-automation-0.5.1.tgz","fileCount":291,"integrity":"sha512-Aku4YiFHyR+p1zdgDukBAsTkJPElIRz4O39w1Sry0i70QiGSs1OM1A8q9TEmJZRGyVArrM6nOTEF4o8l9knr/g==","signatures":[{"sig":"MEYCIQDCWqpGKHTorg0pitDakZB6QeBAGmPOAys0HJ0zPYr2BwIhAKy0bIdO7PX2U/VWFxqFOTSCbzM9T+tGsYzgDnEzOxw0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1342230},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e7db5e493c85ddd3bcd6ec39abc18a4a408a4a35","scripts":{"cli":"tsc && node dist/cli.js","dev":"tsc && node dist/index.js","lint":"eslint src","test":"ROLLUP_FORCE_JS=1 vitest run --exclude '**/integration/**'","audit":"npm run audit:ci","build":"node scripts/generate-version-info.js && tsc","watch":"tsc --watch","format":"prettier --write \"src/**/*.{ts,js,json}\" \"tests/**/*.{ts,js,json}\"","prepack":"npm run build","prepare":"husky","quality":"npm run lint && npm run format:check && npm run type-check","release":"node scripts/release.js","audit:ci":"audit-ci --config .audit-ci.json","lint:fix":"eslint src --fix","postpack":"echo 'Package ready for distribution'","security":"npm run audit:ci && npm run license-check","test:cli":"bash scripts/ensure-token.sh ROLLUP_FORCE_JS=1 vitest run --config vitest.integration.config.ts tests/integration/cli/","test:e2e":"ROLLUP_FORCE_JS=1 vitest run tests/e2e/","audit:fix":"npm audit fix","test:fast":"ROLLUP_FORCE_JS=1 vitest run --testNamePattern=\"\\[fast\\]\"","test:slow":"ROLLUP_FORCE_JS=1 vitest run --testNamePattern=\"\\[slow\\]\"","audit:high":"npm run audit:ci","test:watch":"vitest watch","type-check":"tsc --noEmit","install:cli":"node scripts/install-cli.cjs","postinstall":"husky install","format:check":"prettier --check \"src/**/*.{ts,js,json}\" \"tests/**/*.{ts,js,json}\"","license-check":"npx license-checker --config .license-checker.json","release:major":"node scripts/release.js major","release:minor":"node scripts/release.js minor","release:patch":"node scripts/release.js patch","test:coverage":"ROLLUP_FORCE_JS=1 vitest run --coverage","test:e2e:fast":"ROLLUP_FORCE_JS=1 vitest run tests/e2e/ --testNamePattern=\"\\[fast\\]\"","test:e2e:slow":"ROLLUP_FORCE_JS=1 vitest run tests/e2e/ --testNamePattern=\"\\[slow\\]\"","uninstall:local":"rm -f ~/.local/bin/github-pr-automation","test:integration":"bash scripts/ensure-token.sh ROLLUP_FORCE_JS=1 vitest run --config vitest.integration.config.ts","install:cli:local":"node scripts/install-cli.cjs local-bin","audit:ci:optimized":"audit-ci --config .audit-ci-optimized.json","install:cli:global":"node scripts/install-cli.cjs global","release:prerelease":"node scripts/release.js prerelease","security:optimized":"npm run audit:ci:optimized && npm run license-check:optimized","test:coverage:fast":"ROLLUP_FORCE_JS=1 vitest run --coverage --testNamePattern=\"\\[fast\\]\"","install:cli:npm-link":"node scripts/install-cli.cjs npm-link","license-check:optimized":"npx license-checker --json --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;GPL-2.0;GPL-3.0;LGPL-2.1;LGPL-3.0;Python-2.0;CC-BY-3.0;CC0-1.0;(MIT AND CC-BY-3.0)\" --excludePrivatePackages --production --development --optional --peer --direct --indirect --depth 0 --noColor --silent","test:integration:record":"bash scripts/ensure-token.sh RECORD_INTEGRATION_FIXTURES=true ROLLUP_FORCE_JS=1 vitest run --config vitest.integration.config.ts"},"_npmUser":{"name":"jmalicki","email":"jmalicki@gmail.com"},"repository":{"url":"git+https://github.com/jmalicki/github-pr-automation-mcp.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server and CLI for automated GitHub PR management, review resolution, and workflow optimization","directories":{},"resolutions":{"@rollup/rollup-darwin-x64":"rollup","@rollup/rollup-freebsd-x64":"rollup","@rollup/rollup-darwin-arm64":"rollup","@rollup/rollup-android-arm64":"rollup","@rollup/rollup-freebsd-arm64":"rollup","@rollup/rollup-linux-x64-gnu":"rollup","@rollup/rollup-win32-x64-gnu":"rollup","@rollup/rollup-linux-x64-musl":"rollup","@rollup/rollup-win32-x64-msvc":"rollup","@rollup/rollup-linux-arm64-gnu":"rollup","@rollup/rollup-linux-ppc64-gnu":"rollup","@rollup/rollup-linux-s390x-gnu":"rollup","@rollup/rollup-win32-ia32-msvc":"rollup","@rollup/rollup-android-arm-eabi":"rollup","@rollup/rollup-linux-arm64-musl":"rollup","@rollup/rollup-win32-arm64-msvc":"rollup","@rollup/rollup-linux-loong64-gnu":"rollup","@rollup/rollup-linux-riscv64-gnu":"rollup","@rollup/rollup-openharmony-arm64":"rollup","@rollup/rollup-linux-riscv64-musl":"rollup","@rollup/rollup-linux-arm-gnueabihf":"rollup","@rollup/rollup-linux-arm-musleabihf":"rollup"},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.1.12","commander":"^14.0.1","@octokit/rest":"^22.0.0","@octokit/auth-app":"^8.1.1","@modelcontextprotocol/sdk":"^1.20.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.38.0","vitest":"^4.0.1","audit-ci":"^7.1.0","prettier":"3.6.2","typescript":"^5.3.3","@types/node":"^24.9.1","license-checker":"^25.0.1","@octokit/fixtures":"^23.1.1","@vitest/coverage-v8":"^4.0.1","eslint-plugin-jsdoc":"^61.1.9","@typescript-eslint/parser":"^8.46.2","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/github-pr-automation_0.5.1_1761694931298_0.03575090998549979","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"github-pr-automation","version":"0.5.2","description":"MCP server and CLI for automated GitHub PR management, review resolution, and workflow optimization","type":"module","main":"dist/index.js","bin":{"github-pr-automation":"dist/cli.js"},"scripts":{"build":"node scripts/generate-version-info.js && tsc","watch":"tsc --watch","dev":"tsc && node dist/index.js","cli":"tsc && node dist/cli.js","test":"ROLLUP_FORCE_JS=1 vitest run --exclude '**/integration/**'","test:fast":"ROLLUP_FORCE_JS=1 vitest run --testNamePattern=\"\\[fast\\]\"","test:slow":"ROLLUP_FORCE_JS=1 vitest run --testNamePattern=\"\\[slow\\]\"","test:integration":"bash scripts/ensure-token.sh ROLLUP_FORCE_JS=1 vitest run --config vitest.integration.config.ts","test:integration:record":"bash scripts/ensure-token.sh RECORD_INTEGRATION_FIXTURES=true ROLLUP_FORCE_JS=1 vitest run --config vitest.integration.config.ts","test:cli":"bash scripts/ensure-token.sh ROLLUP_FORCE_JS=1 vitest run --config vitest.integration.config.ts tests/integration/cli/","test:e2e":"ROLLUP_FORCE_JS=1 vitest run tests/e2e/","test:e2e:fast":"ROLLUP_FORCE_JS=1 vitest run tests/e2e/ --testNamePattern=\"\\[fast\\]\"","test:e2e:slow":"ROLLUP_FORCE_JS=1 vitest run tests/e2e/ --testNamePattern=\"\\[slow\\]\"","test:watch":"vitest watch","test:coverage":"ROLLUP_FORCE_JS=1 vitest run --coverage","test:coverage:fast":"ROLLUP_FORCE_JS=1 vitest run --coverage --testNamePattern=\"\\[fast\\]\"","install:cli":"node scripts/install-cli.cjs","install:cli:npm-link":"node scripts/install-cli.cjs npm-link","install:cli:local":"node scripts/install-cli.cjs local-bin","install:cli:global":"node scripts/install-cli.cjs global","uninstall:local":"rm -f ~/.local/bin/github-pr-automation","lint":"eslint src","lint:fix":"eslint src --fix","format":"prettier --write \"src/**/*.{ts,js,json}\" \"tests/**/*.{ts,js,json}\"","format:check":"prettier --check \"src/**/*.{ts,js,json}\" \"tests/**/*.{ts,js,json}\"","quality":"npm run lint && npm run format:check && npm run type-check","type-check":"tsc --noEmit","prepare":"husky","postinstall":"husky install","release":"node scripts/release.js","release:patch":"node scripts/release.js patch","release:minor":"node scripts/release.js minor","release:major":"node scripts/release.js major","release:prerelease":"node scripts/release.js prerelease","prepack":"npm run build","postpack":"echo 'Package ready for distribution'","audit":"npm run audit:ci","audit:fix":"npm audit fix","audit:high":"npm run audit:ci","audit:ci":"audit-ci --config .audit-ci.json","audit:ci:optimized":"audit-ci --config .audit-ci-optimized.json","security":"npm run audit:ci && npm run license-check","security:optimized":"npm run audit:ci:optimized && npm run license-check:optimized","license-check":"npx license-checker --config .license-checker.json","license-check:optimized":"npx license-checker --json --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;GPL-2.0;GPL-3.0;LGPL-2.1;LGPL-3.0;Python-2.0;CC-BY-3.0;CC0-1.0;(MIT AND CC-BY-3.0)\" --excludePrivatePackages --production --development --optional --peer --direct --indirect --depth 0 --noColor --silent"},"keywords":["mcp","mcp-server","model-context-protocol","github","pull-request","automation","ci","pr-management","code-review","workflow-optimization","claude","ai-tools","github-api","pull-request-automation"],"author":{"name":"GitHub PR Automation Contributors"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/jmalicki/github-pr-automation-mcp.git"},"bugs":{"url":"https://github.com/jmalicki/github-pr-automation-mcp/issues"},"homepage":"https://github.com/jmalicki/github-pr-automation-mcp#readme","dependencies":{"@modelcontextprotocol/sdk":"^1.20.1","@octokit/auth-app":"^8.1.1","@octokit/rest":"^22.0.0","commander":"^14.0.1","zod":"^4.1.12"},"devDependencies":{"@octokit/fixtures":"^23.1.1","@types/node":"^24.9.1","@typescript-eslint/eslint-plugin":"^8.46.2","@typescript-eslint/parser":"^8.46.2","@vitest/coverage-v8":"^4.0.1","audit-ci":"^7.1.0","eslint":"^9.38.0","eslint-plugin-jsdoc":"^61.1.9","husky":"^9.1.7","license-checker":"^25.0.1","prettier":"3.6.2","typescript":"^5.3.3","vitest":"^4.0.1"},"engines":{"node":">=18.0.0"},"resolutions":{"@rollup/rollup-linux-x64-gnu":"rollup","@rollup/rollup-linux-x64-musl":"rollup","@rollup/rollup-linux-arm64-gnu":"rollup","@rollup/rollup-linux-arm64-musl":"rollup","@rollup/rollup-darwin-x64":"rollup","@rollup/rollup-darwin-arm64":"rollup","@rollup/rollup-win32-x64-msvc":"rollup","@rollup/rollup-win32-ia32-msvc":"rollup","@rollup/rollup-android-arm-eabi":"rollup","@rollup/rollup-android-arm64":"rollup","@rollup/rollup-freebsd-arm64":"rollup","@rollup/rollup-freebsd-x64":"rollup","@rollup/rollup-linux-arm-gnueabihf":"rollup","@rollup/rollup-linux-arm-musleabihf":"rollup","@rollup/rollup-linux-loong64-gnu":"rollup","@rollup/rollup-linux-ppc64-gnu":"rollup","@rollup/rollup-linux-riscv64-gnu":"rollup","@rollup/rollup-linux-riscv64-musl":"rollup","@rollup/rollup-linux-s390x-gnu":"rollup","@rollup/rollup-openharmony-arm64":"rollup","@rollup/rollup-win32-arm64-msvc":"rollup","@rollup/rollup-win32-x64-gnu":"rollup"},"mcp":{"version":"2025-10-22","protocol":"stdio","server":"dist/index.js","tools":["get_failing_tests","find_unresolved_comments","manage_stacked_prs","detect_merge_conflicts","check_merge_readiness","get_review_suggestions","rebase_after_squash_merge","resolve_review_thread"],"capabilities":{"tools":true,"resources":false,"prompts":false}},"_id":"github-pr-automation@0.5.2","gitHead":"8e415a56d7768d82cbc966adc0d4e6cceb955ce2","types":"./dist/index.d.ts","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-nGihosmArpWIEP307cmwaFzON9yQ/Q9rpQs0rTsNy0iYnvxKWMhHiHZsBjYxabIPZuI+h0q1q/9aI8lknVy1BQ==","shasum":"463e8bd020681ab471c48ebee4d5dc52dcbc5872","tarball":"https://registry.npmjs.org/github-pr-automation/-/github-pr-automation-0.5.2.tgz","fileCount":291,"unpackedSize":1342224,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHHjN9J3nUNQjVwhua6s5rqfOo4h3PH8VOTjDKh3hshoAiAS6N0ukp1xUXOhL3nQScwoFB2o+CWJ1jm+j8YWbohVUQ=="}]},"_npmUser":{"name":"jmalicki","email":"jmalicki@gmail.com"},"directories":{},"maintainers":[{"name":"jmalicki","email":"jmalicki@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/github-pr-automation_0.5.2_1761695710088_0.9425503340393986"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-27T16:48:19.301Z","modified":"2025-10-28T23:55:10.842Z","0.2.1":"2025-10-27T16:48:19.570Z","0.5.1":"2025-10-28T23:42:11.579Z","0.5.2":"2025-10-28T23:55:10.298Z"},"bugs":{"url":"https://github.com/jmalicki/github-pr-automation-mcp/issues"},"author":{"name":"GitHub PR Automation Contributors"},"license":"MIT","homepage":"https://github.com/jmalicki/github-pr-automation-mcp#readme","keywords":["mcp","mcp-server","model-context-protocol","github","pull-request","automation","ci","pr-management","code-review","workflow-optimization","claude","ai-tools","github-api","pull-request-automation"],"repository":{"type":"git","url":"git+https://github.com/jmalicki/github-pr-automation-mcp.git"},"description":"MCP server and CLI for automated GitHub PR management, review resolution, and workflow optimization","maintainers":[{"name":"jmalicki","email":"jmalicki@gmail.com"}],"readme":"# GitHub PR Automation\n\nAn MCP (Model Context Protocol) server and CLI that provides AI-assisted tools for automated GitHub Pull Request management, including test failure analysis, comment resolution, stacked PR management, and workflow optimization.\n\n## 🚀 Quick Start\n\n```bash\n# Install and use the CLI\ngit clone https://github.com/jmalicki/github-pr-automation-mcp.git\ncd github-pr-automation-mcp\nnpm install && npm run build\nnpm run install:cli:npm-link\n\n# Set your GitHub token\nexport GITHUB_TOKEN=\"your_token_here\"\n\n# Use the CLI\ngithub-pr-automation get-failing-tests --pr \"owner/repo#123\"\n```\n\n**Or use as an MCP server** with Claude Desktop for AI-assisted PR management.\n\n## Features\n\n### Core Tools\n\n1. **`get_failing_tests`** - Analyze PR CI failures and get targeted fix instructions\n   - Fetches failing test information from PR checks\n   - Options to wait for CI completion or return immediately\n   - Can bail on first failure for faster feedback\n   - Pagination support for large test suites\n   - Returns actionable fix instructions\n\n2. **`find_unresolved_comments`** - Find and manage unresolved PR comments\n   - Identifies unresolved review comments and conversations\n   - **NEW**: Parses review bodies to extract actionable suggestions from AI tools (CodeRabbit, etc.)\n   - Optional filtering for bot comments (e.g., @coderabbitai)\n   - Generates response commands for efficient resolution\n   - Summarizes comments requiring human judgment\n   - Pagination with configurable page size\n\n3. **`manage_stacked_prs`** - Automated stacked PR management\n   - Verifies dependency chains between PRs\n   - Detects when base PR changes need to be propagated\n   - Generates rebase instructions and automation commands\n   - Integrates with `get_failing_tests` for automated fix loops\n   - Batch command generation with pagination\n\n### Additional Tools\n\n4. **`detect_merge_conflicts`** - Proactive conflict detection\n   - Checks for merge conflicts before attempting merge\n   - Provides file-level conflict details\n   - Suggests conflict resolution strategies\n\n5. **`check_merge_readiness`** - Comprehensive PR health check\n   - Validates all merge requirements\n   - Checks CI status, approvals, branch protection rules\n   - Reports missing requirements with actionable steps\n\n\n6. **`rebase_after_squash_merge`** - Clean rebase after upstream squash-merge\n   - Handles scenario where upstream PR was squash-merged\n   - Uses `git rebase --onto` to skip upstream commits\n   - Only rebases YOUR commits, avoiding conflicts\n   - Auto-detects which commits to skip vs. rebase\n\n7. **`resolve_review_thread`** - Resolve specific review threads\n   - Resolves individual review threads or comments\n   - Supports both thread ID and comment ID targeting\n   - Immediate resolution without manual intervention\n\n## Requirements\n\n- **Node.js v20 or higher** - Minimum version required (v22 LTS recommended)\n- **GitHub Token** - Set `GITHUB_TOKEN` environment variable for API access\n- **Git** - Required for git operations in stacked PR management\n\n### Node.js Version Management\n\nThis project is configured to use Node.js v22 LTS by default:\n\n- **CI/CD** - All GitHub Actions workflows use Node.js v22\n- **`engines` field** - NPM will warn about version mismatches (minimum v20)\n\n## Installation\n\n### Quick Start\n\n```bash\n# Clone the repository\ngit clone https://github.com/jmalicki/github-pr-automation-mcp.git\ncd github-pr-automation-mcp\n\n# Install dependencies\nnpm install\n\n# Build the project\nnpm run build\n```\n\n### CLI Installation\n\nInstall the CLI for system-wide usage:\n\n```bash\n# Method 1: NPM Link (Recommended)\nnpm run install:cli:npm-link\n\n# Method 2: Global Installation\nnpm run install:cli:global\n\n# Method 3: Interactive Installer\nnpm run install:cli\n```\n\n**Verify Installation:**\n```bash\n# Test the CLI\ngithub-pr-automation --help\n\n# Test a specific command\ngithub-pr-automation get-failing-tests --help\n```\n\n**Uninstall:**\n```bash\n# NPM Link\nnpm unlink github-pr-automation\n\n# Global\nnpm uninstall -g github-pr-automation\n```\n\nFor detailed installation options, see [CLI Installation Guide](./docs/CLI_INSTALLATION.md).\n\n## How It Works\n\nThis is an **MCP (Model Context Protocol) server** that runs via **stdio** (not HTTP):\n\n- ✅ **No HTTP server** - communicates via stdin/stdout\n- ✅ **No daemon** - spawned on-demand by MCP client\n- ✅ **No ports** - no network exposure\n- ✅ **Secure** - isolated subprocess\n\nThe MCP client (like Claude Desktop) spawns this as a subprocess and communicates via JSON-RPC over stdio.\n\n## Configuration\n\nSet the following environment variable:\n\n```bash\nexport GITHUB_TOKEN=\"your_github_personal_access_token\"\n```\n\nThe token needs the following scopes:\n- `repo` (full control of private repositories)\n- `read:org` (read organization membership)\n\n## Usage\n\n### MCP Mode (Primary)\n\nAdd to your Claude Desktop MCP configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"github-pr-automation\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/github-pr-automation/dist/index.js\"],\n      \"env\": {\n        \"GITHUB_TOKEN\": \"your_github_token\"\n      }\n    }\n  }\n}\n```\n\n### CLI Mode (Direct Usage)\n\nUse the tools directly from the command line:\n\n```bash\n# Get failing tests for a PR\ngithub-pr-automation get-failing-tests --pr \"owner/repo#123\" --wait --bail-on-first\n\n# Find unresolved comments\ngithub-pr-automation find-unresolved-comments --pr \"owner/repo#456\" --include-bots\n\n# Manage stacked PRs\ngithub-pr-automation manage-stacked-prs --base-pr \"owner/repo#100\" --dependent-pr \"owner/repo#101\"\n\n# Resolve review thread\ngithub-pr-automation resolve-review-thread --pr \"owner/repo#123\" --thread-id \"thread_id\"\n\n# Output as JSON for scripting\ngithub-pr-automation get-failing-tests --pr \"owner/repo#123\" --json\n```\n\n**CLI Use Cases:**\n- 🚀 **Quick PR checks** - Get immediate feedback on PR status\n- 🤖 **Automation scripts** - Integrate into CI/CD pipelines\n- 🔧 **Development workflow** - Test tools during development\n- 📊 **Data extraction** - Get structured JSON output for analysis\n\n**Environment Setup:**\n```bash\n# Set your GitHub token\nexport GITHUB_TOKEN=\"your_github_personal_access_token\"\n\n# Or use a .env file\necho \"GITHUB_TOKEN=your_token_here\" > .env\n```\n\n## Tool Reference\n\n### get_failing_tests\n\n```typescript\n{\n  pr: \"owner/repo#123\",           // PR identifier\n  wait: false,                     // Wait for CI completion (default: false)\n  bail_on_first: true,            // 💾 Stop at first failure (default: true)\n  page: 1,                         // Page number (default: 1)\n  page_size: 10                    // 💾 Results per page (default: 10)\n}\n\n// 💾 = User preference hint - AI agents may learn and remember your preference\n```\n\n### find_unresolved_comments\n\n```typescript\n{\n  pr: \"owner/repo#123\",           // PR identifier\n  include_bots: true,             // 💾 Include bot comments (default: true)\n  page: 1,                         // Page number (default: 1)\n  page_size: 20,                   // 💾 Results per page (default: 20)\n  sort: \"chronological\"            // 💾 Sort order (default: chronological)\n}\n```\n\n### manage_stacked_prs\n\n```typescript\n{\n  base_pr: \"owner/repo#123\",      // Earlier PR in stack\n  dependent_pr: \"owner/repo#124\", // Later PR in stack\n  auto_fix: true,                  // Auto-fix test failures (default: true)\n  use_onto: true,                  // Use --onto rebase strategy (optional)\n  max_iterations: 3                // Max fix iterations (default: 3)\n}\n```\n\n### resolve_review_thread\n\n```typescript\n{\n  pr: \"owner/repo#123\",           // PR identifier\n  thread_id: \"thread_id\",         // Review thread GraphQL node ID (optional)\n  comment_id: \"comment_id\",       // Comment GraphQL node ID (optional)\n  prefer: \"thread\"                // Prefer \"thread\" or \"comment\" when both provided\n}\n```\n\n## Development\n\n```bash\n# Watch mode for development\nnpm run watch\n\n# Build for production\nnpm run build\n\n# Test MCP server (stdio mode)\nnpm run dev\n\n# Test CLI mode\nnpm run cli -- get-failing-tests --pr \"owner/repo#123\"\n\n# Run tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Lint code\nnpm run lint\n\n# Fix linting issues\nnpm run lint:fix\n```\n\n## Architecture\n\nThe server is built using:\n- **@modelcontextprotocol/sdk** - MCP protocol implementation\n- **@octokit/rest** - GitHub API client\n- **@octokit/auth-app** - GitHub App authentication\n- **Zod** - Runtime type validation for tool inputs\n- **Commander** - CLI framework\n- **Vitest** - Testing framework\n- **TypeScript** - Type safety and development experience\n\n## Documentation\n\nComprehensive documentation is available in the [`docs/`](./docs) directory:\n\n- **[Documentation Index](./docs/INDEX.md)** - Complete documentation overview\n- **[Design Decisions](./docs/DESIGN_DECISIONS.md)** - Rationale for key design choices\n- **[Architecture](./docs/ARCHITECTURE.md)** - System architecture and design\n- **[API Design](./docs/API_DESIGN.md)** - Complete API specifications\n- **[Data Models](./docs/DATA_MODELS.md)** - TypeScript type definitions\n- **[Implementation Plan](./docs/IMPLEMENTATION_PLAN.md)** - Development roadmap\n- **[GitHub Integration](./docs/GITHUB_INTEGRATION.md)** - GitHub API patterns\n- **[Testing Strategy](./docs/TESTING_STRATEGY.md)** - Testing approach\n- **[Usage Examples](./docs/USAGE_EXAMPLES.md)** - Real-world workflows\n\n### Quick Links\n\n- **New to the project?** Start with the [Documentation Index](./docs/INDEX.md)\n- **Want to implement?** See [Implementation Plan](./docs/IMPLEMENTATION_PLAN.md)\n- **Need examples?** Check [Usage Examples](./docs/USAGE_EXAMPLES.md)\n- **Understanding design?** Read [Design Decisions](./docs/DESIGN_DECISIONS.md)\n\n## License\n\nMIT\n\n## Repository\n\n- **GitHub**: https://github.com/jmalicki/github-pr-automation-mcp\n- **NPM**: https://www.npmjs.com/package/github-pr-automation\n- **Issues**: https://github.com/jmalicki/github-pr-automation-mcp/issues\n","readmeFilename":"README.md"}