Skip to main content

ReleaseRadar

Track GitHub repo lifecycles — from issue open to release published.

ReleaseRadar polls GitHub's REST API for the repositories you care about and records every transition it sees — issue closed, PR merged, release published — in a local SQLite database. Run it on a schedule, read it from the CLI, pipe its new events wherever they should go, or call it as an MCP server from Claude.

Part of the Radar suite: MailRadar · PatchRadar · ApkRadar · CookieRadar · ExeRadar · ReleaseRadar


Installation

pip install releaseradar          # the CLI
pip install "releaseradar[mcp]"   # the CLI and the MCP server

Or with Docker, where the MCP server is always included:

docker run --rm -v ~/.releaseradar:/home/releaseradar/.releaseradar \
  -e GITHUB_TOKEN=ghp_… \
  maksimtech/releaseradar track torvalds/linux

Quick start

# Start tracking a repo (verifies it exists on GitHub first)
releaseradar track torvalds/linux
releaseradar track psf/requests

# Fetch the current state. The first sync of a repo seeds the database and
# reports nothing: history is not news. From then on, only transitions are.
releaseradar sync

# See what happened
releaseradar events --limit 30

# Check a single repo
releaseradar status torvalds/linux

# List all tracked repos with open counts, latest release and last sync
releaseradar list

# Print the events nobody was told about yet, then mark them notified
releaseradar notify --json | your-delivery-script

Authentication and cost

Public repos work without a token. GitHub allows 60 requests an hour to an anonymous client and 5 000 to a token, and a sync walks pages of 100. The first sync of a repository asks only for what is open now (for psf/requests a handful of requests; for python/cpython, with 9 700 open issues and pull requests, about a hundred, which does not fit in the anonymous quota); later syncs ask only for what changed since the last one, closed included.

export GITHUB_TOKEN=ghp_your_token_here

When the quota runs out, sync says so, says when it resets, and exits 1; nothing is written for a repository whose sync was refused.

Dashboard

releaseradar web                 # http://127.0.0.1:8765/, syncs every 15 minutes
releaseradar web --every 5       # every 5 minutes
releaseradar web --port 9000 --no-browser

One local page: the tracked repositories with their open counts and latest release, the feed of what changed (new entries highlighted as they arrive), the last and next sync, a Sync now button, and the poller's warnings and errors. It runs the same sync as the CLI, on a timer, with the same database and the same GITHUB_TOKEN. Standard library only, bound to 127.0.0.1, no login: it is for the machine it runs on.

Configuration

Variable Default Purpose
GITHUB_TOKEN (none) GitHub personal access token
RELEASERADAR_DB ~/.releaseradar/state.db SQLite database path

MCP server

ReleaseRadar ships an MCP server so Claude can query and update the tracker directly. It runs over stdio, opens no port, and uses the same database and the same GITHUB_TOKEN as the CLI.

With Claude Code, one command registers it:

pip install "releaseradar[mcp]"
claude mcp add --scope user releaseradar -- releaseradar mcp

Or, checked into a project for everyone who opens it, .mcp.json:

{
  "mcpServers": {
    "releaseradar": {
      "command": "releaseradar",
      "args": ["mcp"],
      "env": { "GITHUB_TOKEN": "ghp_…" }
    }
  }
}

From the Docker image, the same server with -i:

{
  "mcpServers": {
    "releaseradar": {
      "command": "docker",
      "args": ["run", "-i", "--rm",
               "-v", "/home/you/.releaseradar:/home/releaseradar/.releaseradar",
               "-e", "GITHUB_TOKEN",
               "maksimtech/releaseradar", "mcp"]
    }
  }
}

Tools exposed: track_repo, untrack_repo, list_repos, sync_repo, sync_all, repo_status, recent_events. A repository GitHub refuses comes back as a tool error with the reason — not found, rate limit with its reset time, bad token — never as a traceback.

CLI reference

releaseradar track <owner/repo>     Start tracking a repository
releaseradar untrack <owner/repo>   Stop tracking and remove all its data
releaseradar list                   List tracked repos with summary
releaseradar sync [owner/repo]      Fetch what changed since the last sync
releaseradar status <owner/repo>    Open issues/PRs, latest release, last sync
releaseradar events [--limit N]     Show the event log, newest first
releaseradar events --pending       Show unnotified events only
releaseradar notify [--json]        Print unnotified events, then mark them notified
releaseradar notify --dry-run       Print without marking
releaseradar web [--every N]        Local dashboard, syncing every N minutes (default 15)
releaseradar mcp                    Run the MCP server on stdio

What counts as an event

Kind When
issue_opened an issue the tracker had not seen, open
issue_closed an issue it had seen open is now closed
pr_opened a pull request it had not seen, open
pr_merged / pr_closed a pull request it had seen open is now merged / closed
release_published a release it had not seen (drafts are not releases)

A comment, a label or an edit changes nothing above and produces no event. The first sync of a repository seeds its state and produces none either.

License

MIT — see LICENSE.

Metadata

Release files for releaseradar 2026.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for releaseradar 2026.5
File Size Uploaded
releaseradar-2026.5.tar.gz 121.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for releaseradar 2026.5
File Interpreter ABI Platform
releaseradar-2026.5-py3-none-any.whl Python 3 none any Details

Total release size: 149.2 kB

Release files / releaseradar-2026.5.tar.gz

Download URL releaseradar-2026.5.tar.gz
Size 121.1 kB
Tags Source
SHA-256 checksum
How to use checksums
c8073fb7a85642258f7fbe91e29408d34f4d195c4b359770e7a444b694ec2f5f
BLAKE2b-256 checksum
How to use checksums
352ed8e43f4a58a0bbd99709aa35a760658bbd7a211f57e24acc55a27ebb8d29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release files / releaseradar-2026.5-py3-none-any.whl

Download URL releaseradar-2026.5-py3-none-any.whl
Size 28.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2c50edcc911609489bc45d52d4cf6a57b3bc18a52ef7a426f6a8d0fa4da7b188
BLAKE2b-256 checksum
How to use checksums
611e6aaa38660735cf0606ea6e531f230ba4ef8bf70d13356251005807b39d11
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2026.5 This release

2 release files

2026.4

2 release files

2026.3

2 release files

2026.2

2 release files

2026.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page