Skip to main content
Glama

taken?

PyPI npm CI OpenSSF Scorecard OpenSSF Best Practices SonarCloud Quality Gate License: MIT Python MCP Registry

taken? answers one question before you volunteer for a GitHub issue: is it already taken?

In plain terms, it checks an issue before you start work: is it still open to contributions, is anyone already on it, and is the repo responsive enough that your PR will get reviewed.

Try it without installing anything: the live console runs the real checks in your browser.

The catch it was built for: GitHub shows "linked a pull request" events in the issue timeline, but never in the comments. You can read every comment on an issue and still miss that someone already opened a PR for it. taken? checks the timeline, scans comments for people claiming the work, looks at assignees, reads CONTRIBUTING.md for AI contribution policies, and checks whether the repo is still active. Then it gives a verdict, GO, TAKEN, or CAUTION, with the evidence cited.

Requirements

  • Python 3.10 or newer

  • The GitHub CLI (gh), authenticated

taken? only makes read-only API calls through your own gh login. It never sees or stores tokens, and it never writes anything to GitHub.

Related MCP server: contrib-radar

Install

uv tool install taken-gh

Or with pipx:

pipx install taken-gh

Then:

taken owner/repo#123

A full issue URL works too:

taken https://github.com/owner/repo/issues/123

The verdict

TAKEN wins over CAUTION, which wins over GO.

  • TAKEN: the issue is closed, an open PR links to it, or someone is assigned.

  • CAUTION: a comment says someone wants it (soft claim, they may have moved on), a linked PR was merged but the issue is still open, the repo has an AI policy to respect, the repo looks inactive, or a beginner-friendly label sits alongside a long discussion thread or a design-level label (worth skimming before you start).

  • GO: none of the above.

The claimant scan is a heuristic over comment text, not proof. The verdict always prints its evidence so you can judge for yourself.

Exit codes: 0 means GO, 1 means TAKEN, 2 means CAUTION, 3 means something broke (bad target, no gh, API error).

Examples

An issue with a PR already fixing it:

$ taken Exodus-Privacy/exodus#300
taken? Exodus-Privacy/exodus#300
verdict: TAKEN
  ...
  why:
    - open PR #700 already covers this: https://github.com/Exodus-Privacy/exodus/pull/700

An issue someone is already assigned to:

$ taken chahe-dridi/vscode-agent-bell#200
taken? chahe-dridi/vscode-agent-bell#200
verdict: TAKEN
  ...
  why:
    - assigned to: dk5488

A clean issue, with your own volunteering comment filtered out:

$ taken snowflakedb/snowflake-cli#3145 --me RogueAlg0
taken? snowflakedb/snowflake-cli#3145
verdict: GO
  ...
  why:
    - no linked PRs, no assignees, no claimants, repo is active

Useful flags

  • --json: print the full findings as JSON instead of the human summary

  • --me LOGIN: ignore your own comments when scanning for claimants

  • --no-cache: bypass the one-hour API response cache

  • --rest: force the REST fetch path (the default is GraphQL for logged-in users)

  • --health: maintainer report for one repo instead of a contributor verdict

taken --help lists everything.

Batch mode and repo scans

Give taken several targets and it prints one verdict line per target:

taken owner/repo#123 owner/repo#124 --me mylogin
TAKEN   owner/repo#123  assigned to: dk5488
GO      owner/repo#124  no linked PRs, no assignees, no claimants, repo is active

A bare owner/repo scans the repo automatically: its open issues (most recently updated first, PRs excluded) are each checked:

taken django/django --label "good first issue" --limit 10

API responses are cached for one hour in ~/.cache/taken (override with TAKEN_CACHE_DIR), so repeated scans stay cheap.

The opt-in REST transport (TAKEN_TRANSPORT=httpx) preserves both JSON objects and arrays, including empty listings. Response ETags are cached alongside either shape: after expiry, a 304 Not Modified reuses the cached body and refreshes its TTL. The default subprocess transport is unchanged.

Discover mode

taken --discover finds contribution candidates across GitHub: it takes raw candidates from GitHub's issue search, runs taken's full verification on each one, and ranks the survivors. Only GO verdicts make the list, scored on the signal no aggregator filters on: maintainer responsiveness.

taken --discover --language python --min-contributors 3 --limit 10
  6  octocat/hello-world#42  maintainer replied; updated 1d ago; repo pushed 0d ago
  4  octocat/other-repo#7    updated 3d ago; repo pushed 2d ago

Each line explains its own score. Candidates are verified in parallel (8 workers by default; --jobs N tunes it).

MCP server

taken also ships as an MCP server, so coding agents can check issues with a tool call instead of shelling out to the CLI. Same setup: gh installed and authenticated, read-only API calls through your own login.

uvx --from "taken-gh[mcp]" taken-mcp

Three tools: check_issue, scan_repo, discover_candidates. Published in the official MCP Registry as io.github.RogueAlg0/taken.

Development

uv sync          # install dev tools (ruff, pytest)
uv run pytest
uv run ruff check
uv run ruff format --check

AI assistance

This project is built with AI assistance, and says so openly. Every contribution is reviewed and understood by its author before it lands.

Security

See SECURITY.md for the supported versions and how to report a vulnerability. Please use private vulnerability reporting, not a public issue.

Available Tools

3 tools
check_issueA

Check whether a GitHub issue is already taken.

Verdicts: GO (free to volunteer), TAKEN (spoken for: closed, open PR, or assignee), CAUTION (soft signal: someone expressed interest, the repo bans AI contributions, or the repo looks stale).

The payload also carries friendly_labels (first-time-contributor labels on the issue) and welcoming (repo-level signs contributions are welcome), the same markers scan_repo returns.

Error payloads carry error plus error_code: RateLimitError -> rate_limited, NotFoundError -> not_found, HTTP 401/CLI authentication failures -> auth_failed, subprocess timeouts -> timeout, other TakenError failures -> unknown.

Args: owner: repository owner login repo: repository name issue_number: issue number to check me: your GitHub login; your own comments are ignored in the claimant scan graphql: force the GraphQL fetch path instead of the automatic choice persistent_session: force the persistent-session GraphQL path instead of the automatic one pr_idle_days: stale-claim decay threshold for idle linked PRs (default 90) claim_silence_days: stale-claim decay threshold for simple issues (default 7) claim_silence_complex_days: stale-claim decay threshold for complex issues (default 14)

ParametersJSON Schema
NameRequiredDescriptionDefault
meNo
repoYes
ownerYes
graphqlNoForce the GraphQL path. Default: automatic from auth state.
issue_numberYes
pr_idle_daysNoStale-claim decay: days of linked-PR inactivity before TAKEN weakens to CAUTION. Default: 90.
claim_silence_daysNoStale-claim decay: days one claim blocks as CAUTION on a simple issue; the clock resets on claimant activity. Default: 7.
persistent_sessionNoForce the persistent-session GraphQL path; token from `gh auth token` held in memory only. Default: automatic from auth state.
claim_silence_complex_daysNoStale-claim decay: days one claim blocks as CAUTION on a complex issue. Default: 14.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the whole burden and does so well: it enumerates the decision thresholds, the stale-claim decay defaults, the two extra payload markers, and a full error-to-code mapping (rate_limited, not_found, auth_failed, timeout, unknown). It never explicitly states the operation is read-only/no-side-effect or names auth requirements beyond the `gh auth token` hint, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in one line, followed by logically grouped verdict, payload, error, and args sections; the error-code mapping is dense and useful rather than padding. Length is justified by the tool's complexity, though the arg list partially restates schema entries.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with no output schema and no annotations, the description is notably complete: it describes the return verdict semantics, auxiliary payload fields, and error payload structure alongside every parameter. Missing pieces are rate-limit behavior and an explicit statement of read-only safety, which are minor gaps at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 56%, so the description must compensate, and it largely does: it lists all nine args and adds genuine meaning for `me` ('your own comments are ignored') and for the three decay thresholds, which are otherwise opaque. The owner/repo/issue_number entries are trivial restatements, but the non-obvious parameters are explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Check whether a GitHub issue is already taken') plus a three-value verdict taxonomy (GO/TAKEN/CAUTION) that pins down exactly what the tool answers. The remark that it returns the same markers as `scan_repo` implicitly frames it as the per-issue counterpart to the repo-level sibling, so an agent can separate them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: a GO verdict maps naturally to 'free to volunteer', which hints at the pre-contribution workflow, but the description never states when to call this versus `scan_repo` or `discover_candidates`, nor any prerequisites or exclusions. The sibling names appear only as a reference for shared output markers, not as routing alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_candidatesB

Discover top open-source contribution candidates.

Searches GitHub for good-first-issue style issues, runs taken's full verification on each, and returns the ranked candidates. Each result carries friendly_labels (first-time-contributor labels on the issue) and welcoming (repo-level signs contributions are welcome).

Error payloads carry error plus error_code: RateLimitError -> rate_limited, NotFoundError -> not_found, HTTP 401/CLI authentication failures -> auth_failed, subprocess timeouts -> timeout, other TakenError failures -> unknown.

Args: limit: max candidates to return (default 10) language: only consider repos in this language label: issue label to search (defaults to good-first-issue style labels) min_contributors: only consider repos with at least this many contributors in the last 90 days me: your GitHub login; your own comments are ignored in the claimant scan pr_idle_days: stale-claim decay threshold for idle linked PRs (default 90) claim_silence_days: stale-claim decay threshold for simple issues (default 7) claim_silence_complex_days: stale-claim decay threshold for complex issues (default 14)

ParametersJSON Schema
NameRequiredDescriptionDefault
meNoYour GitHub login; your own comments are ignored. Default: none.
labelNoIssue label to search. Default: good first issue, good-first-issue, beginner friendly, and help wanted.
limitNoMax candidates to return. Default: 10.
languageNoOnly consider repositories in this language. Default: no language filter.
pr_idle_daysNoStale-claim decay: days of linked-PR inactivity before TAKEN weakens to CAUTION. Default: 90.
min_contributorsNoOnly consider repositories with at least this many contributors in the last 90 days. Default: 0.
claim_silence_daysNoStale-claim decay: days one claim blocks as CAUTION on a simple issue; the clock resets on claimant activity. Default: 7.
claim_silence_complex_daysNoStale-claim decay: days one claim blocks as CAUTION on a complex issue. Default: 14.

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does substantial work: it enumerates error codes (rate_limited, not_found, auth_failed, timeout, unknown) with the underlying failure types, and explains the stale-claim decay semantics. It stops short of stating that this is a read-only operation with no side effects on GitHub, which would round out the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the error-code mapping is usefully compact, but the Args section duplicates parameter documentation that already exists verbatim in the schema at 100% coverage, adding length without new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must explain return values, and it does: results carry friendly_labels and welcoming, and error payloads carry error plus error_code. It leaves the ranking methodology and the meaning of the TAKEN/CAUTION verdicts somewhat implicit, but the essential call-and-response contract is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all eight parameters including defaults, and the baseline is 3. The Args block largely restates the schema, adding only marginal value (e.g. clarifying that the user's own comments are ignored in the claimant scan), so it does not exceed the schema's contribution.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Discover top open-source contribution candidates') and details the mechanism (GitHub search plus taken's full verification, returning ranked candidates). It is clear on what the tool does, but never distinguishes itself from its siblings check_issue and scan_repo, leaving the agent to infer which tool to reach for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no prerequisites, and no mention of the sibling tools check_issue or scan_repo as alternatives. The description explains what happens internally but gives the agent no criteria for selecting this tool over the others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_repoA

Scan a repository's open issues and recommend the GO ones.

Results are ordered GO first, then CAUTION, then TAKEN, so the best candidates to volunteer for come first. recommendations lists just the GO targets; summary counts each verdict. Each result carries friendly_labels (first-time-contributor labels on the issue) and welcoming (repo-level signs contributions are welcome), so an agent can prefer the safest issues to adopt.

Error payloads carry error plus error_code: RateLimitError -> rate_limited, NotFoundError -> not_found, HTTP 401/CLI authentication failures -> auth_failed, subprocess timeouts -> timeout, other TakenError failures -> unknown.

Args: owner: repository owner login repo: repository name limit: max open issues to check (default 20) label: only consider open issues carrying this label me: your GitHub login; your own comments are ignored in the claimant scan pr_idle_days: stale-claim decay threshold for idle linked PRs (default 90) claim_silence_days: stale-claim decay threshold for simple issues (default 7) claim_silence_complex_days: stale-claim decay threshold for complex issues (default 14)

ParametersJSON Schema
NameRequiredDescriptionDefault
meNoYour GitHub login; your own comments are ignored. Default: none.
repoYes
labelNoOnly consider open issues carrying this label. Default: no label filter.
limitNoMax open issues to check. Default: 20.
ownerYes
pr_idle_daysNoStale-claim decay: days of linked-PR inactivity before TAKEN weakens to CAUTION. Default: 90.
claim_silence_daysNoStale-claim decay: days one claim blocks as CAUTION on a simple issue; the clock resets on claimant activity. Default: 7.
claim_silence_complex_daysNoStale-claim decay: days one claim blocks as CAUTION on a complex issue. Default: 14.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well: it documents result ordering (GO/CAUTION/TAKEN), the meaning of `recommendations` and `summary`, the semantics of `friendly_labels` and `welcoming`, and a full error-code mapping (rate_limited, not_found, auth_failed, timeout, unknown). The auth_failed mapping implicitly signals authentication requirements, though permissions and rate-limit behavior themselves are not spelled out.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded, and the results and error sections are high-value content. The trailing Args block duplicates the schema descriptions with only slight added nuance, which is the one bit of low-yield text, but the description is otherwise tight and well-ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must describe the return shape — and it does, covering ordering, `recommendations`, `summary`, `friendly_labels`, `welcoming`, and the error payload contract. For an 8-parameter, no-annotation tool it is close to complete; only explicit auth/permission prerequisites are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the description documents all eight arguments, adding meaning beyond the schema in places (e.g. `me` scopes the claimant scan, `pr_idle_days` and the two silence thresholds are framed as stale-claim decay knobs). The Args block largely restates the schema, so the added value is modest but real.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource ('Scan a repository's open issues') plus the outcome ('recommend the GO ones'), so the agent knows exactly what the tool produces. It does not, however, contrast itself with the siblings check_issue and discover_candidates, so routing between them is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'the best candidates to volunteer for come first' and 'prefer the safest issues to adopt', which signals the contribute-to-a-repo scenario. But there is no explicit when-to-use statement, no when-not-to-use, and no mention of the sibling tools, so an agent must guess how this differs from check_issue or discover_candidates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 3 tool updatesv0.9.2
    • Changedcheck_issue3 fields changed
      • addedInput schema / properties / claim_silence_complex_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Stale-claim decay: days one claim blocks as CAUTION on a complex issue. Default: 14.",
        +  "title": "Claim Silence Complex Days"
        +}
      • addedInput schema / properties / claim_silence_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Stale-claim decay: days one claim blocks as CAUTION on a simple issue; the clock resets on claimant activity. Default: 7.",
        +  "title": "Claim Silence Days"
        +}
      • addedInput schema / properties / pr_idle_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Stale-claim decay: days of linked-PR inactivity before TAKEN weakens to CAUTION. Default: 90.",
        +  "title": "Pr Idle Days"
        +}
    • Changeddiscover_candidates5 fields changed
      • changedInput schema / properties / claim_silence_complex_days / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / claim_silence_days / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / limit / minimum
        Added value: +0
      • addedInput schema / properties / min_contributors / minimum
        Added value: +0
      • changedInput schema / properties / pr_idle_days / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedscan_repo4 fields changed
      • addedInput schema / properties / claim_silence_complex_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Stale-claim decay: days one claim blocks as CAUTION on a complex issue. Default: 14.",
        +  "title": "Claim Silence Complex Days"
        +}
      • addedInput schema / properties / claim_silence_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Stale-claim decay: days one claim blocks as CAUTION on a simple issue; the clock resets on claimant activity. Default: 7.",
        +  "title": "Claim Silence Days"
        +}
      • addedInput schema / properties / limit / minimum
        Added value: +0
      • addedInput schema / properties / pr_idle_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Stale-claim decay: days of linked-PR inactivity before TAKEN weakens to CAUTION. Default: 90.",
        +  "title": "Pr Idle Days"
        +}
  2. 1 tool updatev0.7.5
    • Changeddiscover_candidates3 fields changed
      • addedInput schema / properties / claim_silence_complex_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Stale-claim decay: days one claim blocks as CAUTION on a complex issue. Default: 14.",
        +  "title": "Claim Silence Complex Days"
        +}
      • addedInput schema / properties / claim_silence_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Stale-claim decay: days one claim blocks as CAUTION on a simple issue; the clock resets on claimant activity. Default: 7.",
        +  "title": "Claim Silence Days"
        +}
      • addedInput schema / properties / pr_idle_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Stale-claim decay: days of linked-PR inactivity before TAKEN weakens to CAUTION. Default: 90.",
        +  "title": "Pr Idle Days"
        +}
  3. 1 tool updatev0.7.3
    • Changedcheck_issue2 fields changed
      • changedInput schema / properties / graphql / description
        Previous value: -"Fetch via one GraphQL query (gh api graphql) instead of REST. Opt-in."New value: +"Force the GraphQL path. Default: automatic from auth state."
      • changedInput schema / properties / persistent_session / description
        Previous value: -"GraphQL over one persistent HTTPS connection; token from `gh auth token` held in memory only. Opt-in."New value: +"Force the persistent-session GraphQL path; token from `gh auth token` held in memory only. Default: automatic from auth state."
  4. 3 tool updatesv0.7.2
    • Changedcheck_issue2 fields changed
      • addedInput schema / properties / graphql
        Added value: +{
        +  "default": false,
        +  "description": "Fetch via one GraphQL query (gh api graphql) instead of REST. Opt-in.",
        +  "title": "Graphql",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / persistent_session
        Added value: +{
        +  "default": false,
        +  "description": "GraphQL over one persistent HTTPS connection; token from `gh auth token` held in memory only. Opt-in.",
        +  "title": "Persistent Session",
        +  "type": "boolean"
        +}
    • Changeddiscover_candidates6 fields changed
      • addedInput schema / properties / label / description
        Added value: +"Issue label to search. Default: good first issue, good-first-issue, beginner friendly, and help wanted."
      • addedInput schema / properties / language / description
        Added value: +"Only consider repositories in this language. Default: no language filter."
      • addedInput schema / properties / limit / description
        Added value: +"Max candidates to return. Default: 10."
      • addedInput schema / properties / me / description
        Added value: +"Your GitHub login; your own comments are ignored. Default: none."
      • addedInput schema / properties / min_contributors
        Added value: +{
        +  "default": 0,
        +  "description": "Only consider repositories with at least this many contributors in the last 90 days. Default: 0.",
        +  "title": "Min Contributors",
        +  "type": "integer"
        +}
      • removedInput schema / properties / min_stars
        Removed value: -{
        -  "default": 0,
        -  "title": "Min Stars",
        -  "type": "integer"
        -}
    • Changedscan_repo3 fields changed
      • addedInput schema / properties / label / description
        Added value: +"Only consider open issues carrying this label. Default: no label filter."
      • addedInput schema / properties / limit / description
        Added value: +"Max open issues to check. Default: 20."
      • addedInput schema / properties / me / description
        Added value: +"Your GitHub login; your own comments are ignored. Default: none."
  5. 3 tool updatesv0.5.0
    • First observedcheck_issue
    • First observeddiscover_candidates
    • First observedscan_repo

TDQS

A3.9/5.0

Scored across 3 tools

Disambiguation5/5

The three tools operate at clearly distinct scopes: check_issue inspects a single issue, scan_repo scans one repository's open issues, and discover_candidates searches GitHub globally. An agent can trivially select the right tool based on whether it has an issue number, a repo, or neither.

Naming Consistency5/5

All three names follow a clean verb_noun snake_case pattern (check_issue, scan_repo, discover_candidates). The verbs are also semantically meaningful and distinct, reinforcing the scope separation.

Tool Count4/5

Three tools is on the thin side but each maps to a genuinely different granularity (single issue, single repo, global discovery), so none is redundant. The focused domain justifies the small surface.

Completeness4/5

The single→repo→global progression covers the core workflow of finding and vetting contribution targets, with consistent error and metadata handling across tools. Minor gaps exist (e.g. no batch check of an explicit issue list or PR-level inspection), but agents can work around them via scan_repo.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables coding agents to scout, rank, and preflight software work before implementation, returning evidence-backed ACT, VERIFY, or SKIP decisions for issues and pull requests.
    38 npm
    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
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to scan for verified, uncontested GitHub bounty issues and audit specific issue URLs before writing code, filtering out honeypots and competition.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables agents to vet a GitHub issue before committing time to it, returning a landability verdict (GO, RISKY, TAKEN, GATED, STALE) plus repo friction scores, gate evidence, and ranked scans of a repository's starter issues. Also exposes contribution automation tools that draft claim comments, prep a fork and branch with a repo-specific checklist, and open a pull request once basics like DCO sign-off pass, with all writes dry-run by default.
    2,061 npm
    MIT