npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@decyjphr/release-tracker

v1.0.4

Published

GitHub Product Features Release Tracker MCP Server

Readme

GitHub Product Features Release Tracker

A Model Context Protocol (MCP) server for tracking GitHub product feature releases and project boards. Built for GitHub team members to monitor releases, changelogs, and project status across multiple GitHub products.

Features

  • 📦 Release Tracking: Monitor releases across multiple GitHub repositories
  • 🎯 Projects V2 Integration: Track features and status in GitHub organization projects
  • 🔍 Full-Text Search: Search releases and features with SQLite FTS5
  • 💾 Local Caching: Reduce API calls with local SQLite database
  • 🔧 MCP Compatible: Works with any MCP-compatible client (like GitHub Copilot CLI)

Prerequisites

  • Node.js 20+ or compatible version
  • GitHub Personal Access Token (PAT) with required scopes

GitHub Token Setup

You need a GitHub Personal Access Token with the following scopes:

Creating a Classic Token (Recommended for Internal Use)

  1. Go to GitHub Settings → Developer settings → Personal access tokens → Tokens (classic)
  2. Select the following scopes:
    • repo - Full control of private repositories
    • read:org - Read org and team membership, read org projects
    • project - Full control of organization projects (required for Projects V2)
  3. Click "Generate token" and copy the token value

Token Permissions

For GitHub team members tracking internal projects, the token needs:

  • Access to the github organization
  • Read access to tracked project boards (2463, 23733, 13002, 20481, 22216, 22504)
  • Read access to tracked repositories

Installation

# Clone or navigate to the project directory
cd github-release-tracker

# Install dependencies
npm install

# Create environment configuration
cp .env.example .env

# Edit .env and add your GitHub token
nano .env  # or use your preferred editor

Environment Configuration

Edit .env file:

# Required: Your GitHub Personal Access Token
GITHUB_TOKEN=ghp_your_token_here

# Optional: Database location (default: ./data/releases.db)
DATABASE_PATH=./data/releases.db

# Optional: Log level (default: info)
LOG_LEVEL=info

# Optional: Organization name (default: github)
ORG_NAME=github

# Optional: Project numbers to track (comma-separated)
PROJECT_NUMBERS=2463,23733,13002,20481,22216,22504

Usage

Building the Project

npm run build

Running in Development Mode

npm run dev

Running the MCP Server

npm start

The server runs on stdio and communicates via the Model Context Protocol.

Validating the Server

After starting the server, you can send JSON-RPC messages to stdin to verify it's working.

List all available tools:

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/index.js

Call a tool (e.g., search releases):

echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_releases","arguments":{"query":"custom patterns API"}}}' | node dist/index.js

Call get_release_details for a specific issue:

echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_release_details","arguments":{"issue_number":12345}}}' | node dist/index.js

Note: MCP uses JSON-RPC over stdio, so all messages are JSON. MCP clients like GitHub Copilot CLI handle this automatically.

Initial Data Sync

After starting the server, run a sync to fetch data from GitHub:

{
  "tool": "sync_data",
  "arguments": {
    "source": "all"
  }
}

MCP Tools

1. search_releases

Search for product features and releases in github/releases using semantic search. Unlike keyword search, this understands the intent of your query and returns semantically relevant results.

Parameters:

  • query (string, required): Natural language query describing the feature or product (e.g., "custom patterns API", "Copilot pull request reviews")
  • limit (number, optional): Maximum results to return (default: 20)

Example:

{
  "tool": "search_releases",
  "arguments": {
    "query": "custom patterns API",
    "limit": 10
  }
}

How it works: Calls GET /search/issues with q="is:issue repo:github/releases <query>" and search_type=semantic, so results are ranked by meaning, not just keyword overlap.

2. get_release_details

Get full details for a product/feature issue from github/releases, including its status across all connected project boards — GA rollout status, private/public preview, release dates, blog posts, and any other project field values.

Parameters:

  • issue_number (number, required): The issue number from github/releases (e.g., from search_releases results)

Example:

{
  "tool": "get_release_details",
  "arguments": {
    "issue_number": 12345
  }
}

How it works: Uses a single GraphQL query to fetch the issue and walk its projectItems edge, returning every field value from every connected project board (status, dates, text fields, iterations, etc.).

Sample response shape:

{
  "issue": {
    "number": 12345,
    "title": "Custom patterns API",
    "state": "OPEN",
    "labels": ["feature", "code-scanning"],
    "url": "https://github.com/github/releases/issues/12345"
  },
  "ship_dates": {
    "initial_expected": "2026-01-15",
    "latest_expected": "2026-03-01",
    "date_has_changed": true,
    "change_history": [
      {
        "from": "2026-01-15",
        "to": "2026-03-01",
        "changed_at": "2026-02-10T14:30:00Z",
        "changed_by": "octocat",
        "source": "comment"
      }
    ]
  },
  "connected_projects": [
    {
      "project_number": 2463,
      "project_title": "Ship Board",
      "project_url": "https://github.com/orgs/github/projects/2463",
      "fields": {
        "Status": "GA",
        "Release Date": "2026-03-01",
        "Blog Post": "https://github.blog/..."
      }
    }
  ]
}

Ship date detection: The tool scans issue comments, the issue body, and cross-referenced issues for date change patterns (e.g., "ship date moved from 2026-01-15 to 2026-03-01"). It also reads date fields from connected project boards. Both the initially expected and latest expected dates are returned along with a full change history.

3. list_tracked_products

List all GitHub repositories being tracked.

Example:

{
  "tool": "list_tracked_products",
  "arguments": {}
}

4. list_tracked_projects

List all GitHub Projects V2 being tracked.

Example:

{
  "tool": "list_tracked_projects",
  "arguments": {}
}

5. sync_data

Synchronize data from GitHub (fetch latest releases and project items).

Parameters:

  • source (string, optional): What to sync - "releases", "projects", or "all" (default: "all")

Example:

{
  "tool": "sync_data",
  "arguments": {
    "source": "all"
  }
}

Tracked Data Sources

GitHub Repositories (Releases)

  • github/roadmap - GitHub public roadmap
  • github/feedback - GitHub feedback discussions
  • actions/runner - GitHub Actions Runner
  • actions/toolkit - GitHub Actions Toolkit
  • cli/cli - GitHub CLI

GitHub Projects V2 (Organization)

  • Project 2463: github/projects/2463
  • Project 23733: github/projects/23733
  • Project 13002: github/projects/13002
  • Project 20481: github/projects/20481
  • Project 22216: github/projects/22216
  • Project 22504: github/projects/22504

Integration with GitHub Copilot CLI

The package is published to npm, so no local clone is required. Add it to your MCP configuration using npx:

VS Code (mcp.json or settings.json)

VS Code supports input variables that prompt for a value the first time the server starts each session. This avoids storing the token in plaintext.

{
  "servers": {
    "release-tracker": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@decyjphr/release-tracker"],
      "env": {
        "GITHUB_TOKEN": "${input:github_token}"
      }
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "github_token",
      "description": "GitHub Personal Access Token",
      "password": true
    }
  ]
}

VS Code will show a password prompt once per session when the server is first used.

Claude Desktop (claude_desktop_config.json)

Claude Desktop does not support input variables — set the token directly or export GITHUB_TOKEN in your shell profile and use ${env:GITHUB_TOKEN}:

{
  "mcpServers": {
    "release-tracker": {
      "command": "npx",
      "args": ["-y", "@decyjphr/release-tracker"],
      "env": {
        "GITHUB_TOKEN": "ghp_your_token_here"
      }
    }
  }
}

Then you can use the tools in your Copilot CLI sessions:

  • "Search for custom patterns API releases" → search_releases
  • "Get details for release issue 12345" → get_release_details (shows GA status, release dates, blog posts across all boards)

Publishing

npm run build
npm login
npm publish

To publish a new version, update version in package.json first, then re-run npm publish.

Once published, users can run the server directly with:

npx -y @decyjphr/release-tracker

Architecture

┌─────────────────────────────────────────┐
│         GitHub Copilot CLI              │
│         (MCP Client)                    │
└──────────────┬──────────────────────────┘
               │ Model Context Protocol
               │
┌──────────────▼──────────────────────────┐
│     MCP Server (stdio transport)        │
│  ┌───────────────────────────────────┐  │
│  │ Tools: search_releases,           │  │
│  │        get_product_updates,       │  │
│  │        get_project_status, etc.   │  │
│  └───────────┬───────────────────────┘  │
└──────────────┼──────────────────────────┘
               │
┌──────────────▼──────────────────────────┐
│      Data Repository Layer              │
│  ┌────────────┐      ┌───────────────┐  │
│  │   SQLite   │      │ GitHub API    │  │
│  │  Database  │◄────►│ Client        │  │
│  │  (Cache)   │      │ (REST+GraphQL)│  │
│  └────────────┘      └───────────────┘  │
└──────────────┬──────────────────────────┘
               │
┌──────────────▼──────────────────────────┐
│           GitHub                        │
│  ┌──────────────┐  ┌────────────────┐   │
│  │ Repositories │  │ Projects V2    │   │
│  │  (Releases)  │  │ (Org Projects) │   │
│  └──────────────┘  └────────────────┘   │
└─────────────────────────────────────────┘

Database Schema

The local SQLite database includes:

  • products: Tracked GitHub repositories
  • releases: Release data with full-text search
  • features: Parsed features from releases (future)
  • projects: GitHub Projects V2 metadata
  • project_items: Project board items (issues, PRs, drafts)
  • sync_history: Synchronization tracking

Development

Project Structure

github-release-tracker/
├── src/
│   ├── index.ts           # Entry point
│   ├── config.ts          # Configuration management
│   ├── database.ts        # Database schema and initialization
│   ├── github-client.ts   # GitHub API client (REST + GraphQL)
│   ├── repository.ts      # Data repository layer
│   └── mcp-server.ts      # MCP server implementation
├── config/                # Configuration files
├── tests/                 # Test files (future)
├── .env.example           # Environment template
├── package.json           # Dependencies and scripts
└── tsconfig.json          # TypeScript configuration

Available Scripts

  • npm run build - Compile TypeScript to JavaScript
  • npm run dev - Run in development mode with auto-reload
  • npm start - Run the compiled server
  • npm run typecheck - Type-check without compiling

Troubleshooting

Token Validation Errors

If you see warnings about missing scopes:

⚠ Warning: Token may not have required "project" scope for Projects V2

Recreate your token with all required scopes (repo, read:org, project).

Rate Limiting

The GitHub API has rate limits (5000 requests/hour for authenticated users). The client logs rate limit status. If you hit limits, wait for the reset time or reduce sync frequency.

Database Lock Errors

If you see database lock errors, ensure only one instance of the server is running at a time.

License

MIT

Contributing

This is an internal tool for GitHub team members. For issues or feature requests, please contact the team.