pr-digest-mcp
by urahmank
README.md
# pr-digest-mcp
An MCP server that syncs your GitHub pull request and review activity in the
background and exposes it as tools Claude can call directly — so instead of
checking multiple repos by hand, you can ask "what's blocking me on GitHub
right now" or "summarize PR activity since Monday" and get a real answer.
## Why it's built this way
The server does **not** try to summarize anything itself. It syncs GitHub
state (PRs, review requests, submitted reviews, check status) into a local
SQLite database on a poll interval, and exposes that as structured MCP
tools. Claude — the MCP client — is the one that turns the structured data
into a natural-language answer. That keeps the backend's job to what a
backend is actually good at: integration, polling, normalizing, and state,
not reimplementing an LLM.
See [`pr-digest-mcp-plan.md`](../../claude/pr-digest-mcp-plan.md) (project
docs) for the full architecture and milestone plan.
## Tools exposed
| Tool | What it does |
| --- | --- |
| `list_pending_reviews` | Open PRs across tracked repos where a review is requested from you and not yet submitted. |
| `whats_blocking_me` | Open PRs you authored that have changes requested or failing checks. |
| `summarize_pr_activity(since)` | Structured PR/review/check activity updated after a given timestamp, freshly synced. |
## Setup
1. **Create a GitHub token.** A classic PAT with `repo` scope (or a
fine-grained token with PR + metadata read access to the repos you want
to track) at <https://github.com/settings/tokens>.
2. **Install dependencies and generate the Prisma client:**
```bash
npm install
npm run prisma:generate
npm run prisma:migrate -- --name init
```
3. **Configure environment variables.** Copy `.env.example` to `.env` and
fill in:
- `GITHUB_TOKEN` — the token from step 1
- `GITHUB_USERNAME` — your GitHub username (used to filter "requested
from me" / "authored by me")
- `TRACKED_REPOS` — comma-separated `owner/repo` list, e.g.
`myorg/api,myorg/web`
- `POLL_INTERVAL_MS` — how often to re-sync (default 2 minutes)
4. **Build:**
```bash
npm run build
```
## Registering it with Claude
Add it to your MCP client config (Claude Desktop's `claude_desktop_config.json`,
or Claude Code's MCP settings) as a stdio server:
```json
{
"mcpServers": {
"pr-digest": {
"command": "node",
"args": ["/absolute/path/to/pr-digest-mcp/dist/main.js"],
"env": {
"GITHUB_TOKEN": "...",
"GITHUB_USERNAME": "...",
"TRACKED_REPOS": "owner/repo1,owner/repo2"
}
}
}
}
```
Restart the client, then try asking: *"what's blocking me on GitHub right
now?"*
## Development
```bash
npm run start:dev # watch mode
npm run lint
npm test
```
## Roadmap
Out of scope for v1, deliberately — see the project plan for the full list:
webhook-based real-time sync (needs a public endpoint), multi-user support,
richer per-event activity timelines (commits/comments, not just review
state), and a second transport (SSE/HTTP) alongside stdio.
## License
MIT
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues