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.

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 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.3

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.3
File Size Uploaded
releaseradar-2026.3.tar.gz 110.0 kB Details

Built distribution (wheel)

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

Total release size: 130.3 kB

Release files / releaseradar-2026.3.tar.gz

Download URL releaseradar-2026.3.tar.gz
Size 110.0 kB
Tags Source
SHA-256 checksum
How to use checksums
825d91c3f7438347142ab780c65f76f1b6685d35cc75aa19d02d5906e55c31af
BLAKE2b-256 checksum
How to use checksums
3125d0580067da83040e1b25fdd7c04ea1f6ca5672f341d776de33eda93ed3bd
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.3-py3-none-any.whl

Download URL releaseradar-2026.3-py3-none-any.whl
Size 20.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a3bbdda6fdedd760dbd32778cfc7ce19bfcc001a2d765d5e19224e99fd2601e4
BLAKE2b-256 checksum
How to use checksums
b8dc92f76a65257c76997b756d68b6d6428e34c87039acf76a6c7d741aa611e7
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

2026.5

2 release files

2026.4

2 release files

This release

2026.3 This release

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