Skip to main content
Glama

Know if a GitHub issue is really free before you start.

Claims, linked pull requests, maintainer reply times and project activity — right on GitHub.

Chrome Web Store CI Release License: MIT Good first issues

Add to Chrome · Website · Features · For AI agents (MCP) · How the numbers work · Contributing

Why CONTRI?

Ever spent a weekend on a “good first issue”, only to find someone claimed it in the comments a month ago? Starting in open source is mostly guesswork: is the project still maintained, will anyone review my PR, and is someone already working on this? CONTRI answers those three questions on the page you're already on, using public evidence it links to — no backend, no analytics, public repositories only.

Related MCP server: contrib-radar

What it does

Where

What you see

Issue page

A badge beside the title: Looks free, Claimed by @sam, Claim went quiet, Maintainer @ana is on it, Open PR #12 or Assigned. Click for the evidence.

Issue list

The same verdict next to every title, so you can scan a page for the free ones. Signed in only: the whole page is one request.

Repository page

A badge in the About box with merges in the last 90 days and the team's typical reply time.

Overview

Exact PRs merged in 90 days (common bots excluded), human authors, commits, weekly chart, median time to merge, latest release.

Team

Median and average first team reply for outside PRs and issues, who is still waiting, and the maintainer roster — found from GitHub team badges, who labels/assigns/merges, CODEOWNERS and the owner.

Issues

Beginner presets, “Looks free” filter, claim detection, linked-PR checks (a whole page at once when signed in).

On-device AI

“Summarize the thread” and “How do I start?” using Chrome's built-in Gemini Nano. Runs locally; nothing is uploaded. Browsers without a built-in model show the latest comments instead, no AI involved.

Discover

Projects matched to the languages you use, ranked by recent human merges and open good-first-issues.

Saved & watched

A private shortlist with notes, side-by-side comparison, and watched issues that notify you when an issue is unassigned, gets a PR, goes quiet or closes.

Contribution brief

A source-linked prompt to paste into any AI chat when on-device AI is unavailable.

AI coding agents

The same checks as an MCP server, so Claude Code, Cursor and other agents ask “is this issue free?” before they start work. See below.

CONTRI follows GitHub's light or dark appearance with the same teal glass look.

Beyond the extension

Free right now

Good first issues that are verified unclaimed, in projects where maintainers answer newcomers. Rebuilt daily.

Who answers newcomers?

Projects ranked by the team's median first reply to outside contributors, with a first reply to contributors README badge for each. Maintainers add their project with one line.

GitHub Action

For maintainers: tells a new pull request when its issue is already claimed, assigned or has another open pull request, and asks about claims that went quiet.

Open Source Wrapped

A shareable card of your year in pull requests, made in your browser from public data.

MCP server

The same checks for AI coding agents, so they ask “is this issue taken?” before they start.

All of it runs on public GitHub data with no CONTRI server: the lists are static files built by a scheduled workflow.

Install

Add CONTRI to Chrome — one click, updates automatically. The same listing works in Edge (allow extensions from other stores when asked) and Brave.

From a release

For Firefox (experimental) or a manual install:

  1. Download contri-v<version>.zip (not “Source code”) from the latest release and unzip it.

  2. Open chrome://extensions (or edge://extensions, brave://extensions) and turn on Developer mode.

  3. Click Load unpacked and choose the unzipped folder.

  4. A welcome page opens. Sign in with GitHub (or skip and use anonymous mode).

From source

Requires Node.js 22.12 or newer (CI and releases use 24, see .nvmrc).

npm ci
npm run build        # outputs dist/

Then Load unpacked → dist. After pulling changes, rebuild, click Reload on the extension card and reload your GitHub tab.

Firefox (experimental): npm run package:firefox creates contri-v<version>-firefox.zip for about:debugging → Load Temporary Add-on. Firefox treats the github.com permission as optional: after loading, open the add-on's Permissions tab and allow it, or nothing appears on GitHub. On-device AI is Chrome-only.

For AI coding agents (MCP)

AI agents increasingly open pull requests on issues someone already claimed. contri-mcp gives them CONTRI's checks as an MCP server, with the same reports and verdicts as the extension: check_issue, check_issues, repo_health, team_responsiveness, find_issues, discover_projects and contribution_brief. It runs locally over stdio, is read-only, talks only to api.github.com, and returns compact results (a verdict is about 40 tokens) so agents spend requests and tokens on the issue, not on scraping GitHub pages.

In Claude Code, install it as a plugin, which adds the server and two skills, /contri:can-i-take-this and /contri:find-first-issue:

/plugin install contri --marketplace alphasafal/contri

Or add the server alone:

claude mcp add --transport stdio contri -- npx -y contri-mcp

No token to paste: when CONTRI isn't signed in, the agent offers Sign in with GitHub, shows a short code, and you approve it on github.com, the same device flow as the extension. Setup for Cursor, Claude Desktop and other clients is in mcp/README.md; the plugin is in plugin/.

Signing in

Anonymous mode works within GitHub's limit of 60 requests per hour. Signing in raises it to 5,000 and switches CONTRI to GitHub's GraphQL API, so most checks take one request instead of dozens.

  • Sign in with GitHub uses the OAuth device flow with the CONTRI OAuth App: you get a short code, approve it on github.com, done. No password ever passes through CONTRI, and no scopes are requested (public, read-only access).

  • Personal access token: Settings walks you through creating a fine-grained, read-only token for public repositories.

The sign-in is kept in memory until the browser closes unless you choose “Stay signed in”, which stores it encrypted (AES-GCM). Either way it lives where GitHub pages cannot read it and is only ever sent to api.github.com. If GitHub rejects it (expired or revoked), Settings asks you to reconnect.

“Sign in with GitHub” in your own build

Every build uses the CONTRI OAuth App (client ID in src/shared/config.ts; client IDs are public and the device flow has no secret). A fork that wants its own app:

  1. On GitHub: Settings → Developer settings → OAuth Apps → New OAuth App. Use your homepage as the callback URL (it is not used), tick Enable Device Flow, and leave Expire user access tokens off.

  2. Copy the Client ID and build with VITE_GITHUB_CLIENT_ID=<your client id> npm run build (or put it in .env).

VITE_GITHUB_CLIENT_ID=none builds a version that offers only the token option.

Request budget

Action

Anonymous

Signed in

Overview

~7 requests

2

Team analysis

up to ~35

2–3

Issue check

~3 requests

1

Page of 30 issues + PRs

2 + 3 per issue

2

Reports are cached (team: 6 hours, overview: 30 minutes, issue checks: 10 minutes). Partial reports are cached for a third of that so large repositories don't burn requests on every visit.

Development

npm run dev          # layout preview of the widget (no live data)
npm test             # unit tests (fixtures, no network)
npm run test:e2e     # installs dist/ into Chromium, drives it on a mock GitHub, runs axe accessibility checks
npm run lint         # ESLint
npm run format       # Prettier
npm run check        # format check + lint + unit tests + build
npm run package      # dist → contri-v<version>.zip (+ sha256)
npm run verify:package
CONTRI_CONTRAST=1 npx playwright test contrast   # WCAG AA text contrast over the glass
CONTRI_PERF=1 npx playwright test perf           # content-script cost on GitHub pages

For test:e2e, run npm run build first and install the browser once with npx playwright install chromium.

The code is organized so contributors can work on one layer at a time:

src/core/        pure logic: metrics, maintainer roster, claim detection, verdicts (unit-tested)
src/background/  service worker: sign-in, request queue, caching, GitHub REST + GraphQL reports
src/content/     what runs on github.com: launcher, widget UI, badges, on-device AI
src/settings/    the Settings / welcome page
src/shared/      types and helpers shared by both sides
mcp/             the MCP server for AI agents: reuses src/core and the reports
action/          the GitHub Action for maintainers: same reports, bundle committed in action/dist
feed/            builds the daily data for the website's issue list, leaderboard and badges
website/dist/    the static website, including the data pages and Open Source Wrapped
tests/unit/      Vitest
tests/e2e/       Playwright + mock GitHub

More detail in docs/ARCHITECTURE.md.

New to the codebase? DeepWiki has a browsable walkthrough of every part of CONTRI — the service worker, claim detection and verdicts, metrics and the maintainer roster, the widget, tests and release pipeline — and you can ask it questions about the code. It is generated automatically from this repository, so if it disagrees with the code or docs/, the code and docs/ win.

Honest numbers

Every number links to its evidence. Unavailable data is shown as “—”, never as zero. Samples say how much they cover, and ≥ marks a lower bound. A missing linked PR does not prove nobody is working on an issue, and CONTRI says so. Full definitions: docs/METRICS.md.

Known limitations

  • Public evidence only. CONTRI sees what GitHub's public API shows. Work nobody linked or mentioned is invisible, so “Looks free” is a strong hint, not a guarantee.

  • Samples on big projects. Charts, author counts and team reply times use the most recent items (up to 100 merged PRs, 20 PRs and issues per kind, the latest 100–300 comments of an issue). Every sampled number says so, and lower bounds are marked ≥.

  • Claim detection is a heuristic over English text: a first-person offer (“I'd like to”, “can I”, “I'll”), an action (“work on”, “take”, “fix”) and a target (“this”, “the issue”, “a PR”), plus /assign-style commands. Other languages and unusual wording may be missed; report a wrong verdict and it becomes a test.

  • Issue list badges need sign-in. One page of issues is one GraphQL request when signed in, but about 75 REST requests anonymously, more than GitHub's hourly limit. They read the latest 20 comments per issue; the issue page reads up to 100.

  • Maintainer detection uses GitHub's team badges, triage and merge activity, CODEOWNERS and the owner. Maintainers who never triage or merge in the sampled window may be missed.

  • GitHub layout changes can move or hide the inline badges until CONTRI is updated. The panel keeps working.

  • On-device AI is Chrome-only for now. Summaries need a desktop Chrome with the built-in model (Gemini Nano). Everything else — badges, verdicts, team reply times, discovery — uses no AI and works in every supported browser. Without a built-in model CONTRI shows the latest comments and offers the copy-paste brief.

  • Anonymous mode shares GitHub's limit of 60 requests per hour with anything else on your network.

Troubleshooting

Symptom

What to do

No launcher or badge after installing or updating

Reload the GitHub tab. Tabs opened before an install or update don't have the new content script yet.

“GitHub request limit reached”

Wait until the time shown, or sign in (5,000 requests per hour).

“Your GitHub sign-in expired or was revoked”

Settings → Sign out, then sign in again or paste a new token.

“Not found on GitHub”

The repository is private, renamed or deleted. CONTRI only reads public repositories.

A badge is missing on an issue page

GitHub may have changed its layout. The panel still works; please open an issue.

No badges on the issue list

They need sign-in (Settings → Sign in with GitHub) and the badge setting on “automatically”.

A verdict is wrong

Report it with the issue URL. Wrong verdicts become test cases.

Numbers look stale

Use ↻ in the panel to refresh, or Settings → Clear cached reports.

“Sign in with GitHub” is missing

The build was made with VITE_GITHUB_CLIENT_ID=none. Use a token, or the official release.

Contributing

Issues and pull requests are welcome — especially for accessibility, metric accuracy, GitHub layout changes that break badges, and translations. Start with CONTRIBUTING.md. Good first issues are labeled good first issue (CONTRI will tell you whether they're free).

FAQ

Only to GitHub's API, to read public repository data. There is no CONTRI server and no analytics. On-device AI runs inside Chrome. See PRIVACY.md.

No. It means CONTRI found no assignee, no recent claim and no linked open pull request. Someone may be working without saying so — always comment before you start.

Timings need at least three answered items in the sample. Small or quiet projects often don't have that many recent outside contributions, and CONTRI won't guess.

No, by design. CONTRI is for joining public open-source projects.

Chrome, Edge, Brave and other Chromium browsers (version 124+). Firefox 128+ is experimental. On-device AI needs a Chrome build with built-in AI.

No. Verdicts, claims, linked pull requests, reply times and activity are plain rules over public GitHub data, documented in docs/METRICS.md, and work the same in every supported browser. AI is only used for two optional buttons (“Summarize the thread”, “How do I start?”), and only the model built into your browser, on your device. Where the browser has none, CONTRI shows the latest comments as written.

Roadmap

  • Issue availability badges with claim detection

  • Maintainer roster beyond GitHub's team badge

  • Sign in with GitHub (device flow) and GraphQL reports

  • On-device AI summaries

  • Watched issues with notifications

  • Chrome Web Store listing

  • MCP server, so AI coding agents check an issue is free before they start

  • Badges on a repository's issue list (signed in)

  • Maintainer “I'm on it” statements as their own verdict

  • GitHub Action for maintainers: duplicate-work check and quiet-claim nudges

  • “Free right now” issue list, reply-time leaderboard and README badges

  • Open Source Wrapped

  • Badges on GitHub's global issue search results

  • Translations

  • Maintainer view: who is waiting longest for a reply

Have an idea? Open a feature request. Thanks to everyone who has contributed.

If CONTRI helped you find your first contribution, a ⭐ helps other newcomers find it too.

License

Built and maintained by Safal Gupta (@alphasafal).

MIT © Safal Gupta. See LICENSE and THIRD_PARTY_NOTICES.md.

Available Tools

9 tools
check_issueCan I take this issue?A
Read-onlyIdempotent

Is this issue free to take? One verdict (Looks free, Claimed by @x, Claim went quiet, Open PR #n, Assigned, Closed, Partly checked) from assignees, claim comments and referencing PRs, with evidence links. 1–2 requests signed in, ~4 anonymous.

Inputs: issue (required), force, detail, includeThread.

check_issuesCan I take any of these issues?B
Read-onlyIdempotent

check_issue for up to 10 issues in one call, verdicts only by default. Same cost per issue.

Inputs: issues (required), force, detail.

contribution_briefContribution briefB
Read-onlyIdempotent

A source-linked brief for one issue plus links to the project's README, contributing guide, code of conduct and templates. One request more than check_issue.

Inputs: issue (required), task, force.

discover_projectsDiscover projectsA
Read-onlyIdempotent

Active public projects ranked by recent human merges and open good-first-issues, by language or topic. 1 request per language signed in, ~7 anonymous.

Inputs: force, query, language, personalize.

find_issuesFind issues to takeA
Read-onlyIdempotent

Open issues in one repository, newest activity first; defaults to beginner labels without an assignee. Comment claims are not checked: confirm with check_issue(s). 3 requests signed in, 2 anonymous.

Inputs: repo (required), page, sort, force, +4 more.

repo_healthIs this project alive?A
Read-onlyIdempotent

Is the project alive? PRs merged in 90 days (bots excluded), human authors, commits, weekly merges, median time to merge, open counts, latest release. 2 requests signed in, ~7 anonymous.

Inputs: repo (required), force.

sign_inSign in with GitHubA
Idempotent

GitHub device-flow sign-in (60 → 5,000 requests an hour, public read-only, no scopes). Ask the user first. Show the returned code and link exactly; CONTRI notices the approval by itself. Call again to check.

Inputs: remember.

sign_outSign out of GitHubA
DestructiveIdempotent

Forgets the sign_in credential, including the saved copy. A GITHUB_TOKEN in the MCP config must be removed there.

Inputs: no named parameters.

team_responsivenessWill a maintainer reply?A
Read-onlyIdempotent

Will a maintainer reply? Median first team reply to outside PRs and issues, who is still waiting, and the maintainer roster. Call once per repository before check_issue: it improves claim detection. 2–3 requests signed in, up to ~35 anonymous.

Inputs: repo (required), force.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 9 tools

    Disambiguation4/5

    Each tool targets a distinct step in the contribution workflow: auth, project discovery, issue listing, issue vetting, project health, maintainer responsiveness, and briefing. The only closely overlapping pair is check_issue/check_issues, but the batch-vs-single relationship is explicit and clearly signposted. contribution_brief also sits near check_issue, though the descriptions establish that one is a verdict and the other a source-linked writeup.

    Naming Consistency4/5

    All names are snake_case and readable, with a dominant verb_noun pattern (sign_in, check_issue, find_issues, discover_projects). The deviations are the noun-phrase names repo_health, team_responsiveness, and contribution_brief, which break the verb-first convention but remain unambiguous. Singular/plural pairing on check_issue(s) with no find_issue counterpart is a small inconsistency.

    Tool Count5/5

    Nine tools is well within the ideal range and each earns its place across a coherent workflow (auth → discover → find → verify → brief). No tool looks like filler or a redundant wrapper beyond the intentional batch variant.

    Completeness4/5

    The surface covers the full arc of the stated purpose: authentication, project discovery, issue discovery, claim verification, project vitality, maintainer responsiveness, and a contribution brief. Minor gaps exist around outcomes—no way to save/track a shortlisted issue, mark intent, or check PR-side contribution opportunities—but core workflows reach a usable endpoint.

    Maintenance

    ActivityMaintained
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Guides AI agents through open-source contribution workflows, from finding issues to submitting PRs, while keeping decision-making and coding with the human contributor.
      2
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to evaluate real OSS contribution opportunities by scoring issues on availability, competing PRs, staleness, and maintainer sentiment, including live feasibility checks for any repository.
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables developers to discover and evaluate contribution opportunities in public GitHub repositories through structured analysis of issues, code, and repository metadata.
      MIT
    • A
      license
      A
      quality
      A
      maintenance
      Enables coding agents to check whether a GitHub issue is already taken before volunteering, by analyzing linked PRs, assignees, claimant comments, AI contribution policies, and repo health to return GO, TAKEN, or CAUTION verdicts.
      3
      76 PyPI
      2
      MIT