taken
This MCP server lets coding agents query GitHub issues for contribution availability, using read-only calls through an authenticated gh login.
check_issue(owner, repo, issue_number, me?, graphql?, persistent_session?) — returns a GO / TAKEN / CAUTION verdict with reasons and full findings for one issue, including
friendly_labelsandwelcomingmarkers.scan_repo(owner, repo, limit?, label?, me?) — scans a repo's open issues, ordered GO → CAUTION → TAKEN, and returns
recommendations(GO targets), a verdictsummary, plus per-issue friendliness markers.discover_candidates(limit?, language?, label?, min_contributors?, me?, pr_idle_days?, claim_silence_days?, claim_silence_complex_days?) — searches GitHub for good-first-issue style issues across repos, verifies and ranks them, returning only GO candidates with friendliness/welcoming signals.
Filter and tune results via optional params: your login (
me) to ignore your own comments, issue labels, language, contributor count, scan size, and stale-claim decay thresholds.Error payloads carry a human-readable
errorpluserror_code(rate_limited,not_found,auth_failed,timeout,unknown) for programmatic handling.
Provides tools for checking GitHub issues to determine if they are already taken, including linked pull requests, assignees, claimant comments, AI contribution policies, and repository activity.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@takencheck if octocat/hello-world#42 is already taken"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
taken?
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-ghOr with pipx:
pipx install taken-ghThen:
taken owner/repo#123A full issue URL works too:
taken https://github.com/owner/repo/issues/123The 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/700An 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: dk5488A 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 activeUseful 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 activeA 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 10API 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 agoEach 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-mcpThree 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 --checkAI 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 toolscheck_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)
| Name | Required | Description | Default |
|---|---|---|---|
| me | No | ||
| repo | Yes | ||
| owner | Yes | ||
| graphql | No | Force the GraphQL path. Default: automatic from auth state. | |
| issue_number | Yes | ||
| pr_idle_days | No | Stale-claim decay: days of linked-PR inactivity before TAKEN weakens to CAUTION. Default: 90. | |
| claim_silence_days | No | Stale-claim decay: days one claim blocks as CAUTION on a simple issue; the clock resets on claimant activity. Default: 7. | |
| persistent_session | No | Force the persistent-session GraphQL path; token from `gh auth token` held in memory only. Default: automatic from auth state. | |
| claim_silence_complex_days | No | Stale-claim decay: days one claim blocks as CAUTION on a complex issue. Default: 14. |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| me | No | Your GitHub login; your own comments are ignored. Default: none. | |
| label | No | Issue label to search. Default: good first issue, good-first-issue, beginner friendly, and help wanted. | |
| limit | No | Max candidates to return. Default: 10. | |
| language | No | Only consider repositories in this language. Default: no language filter. | |
| pr_idle_days | No | Stale-claim decay: days of linked-PR inactivity before TAKEN weakens to CAUTION. Default: 90. | |
| min_contributors | No | Only consider repositories with at least this many contributors in the last 90 days. Default: 0. | |
| claim_silence_days | No | Stale-claim decay: days one claim blocks as CAUTION on a simple issue; the clock resets on claimant activity. Default: 7. | |
| claim_silence_complex_days | No | Stale-claim decay: days one claim blocks as CAUTION on a complex issue. Default: 14. |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| me | No | Your GitHub login; your own comments are ignored. Default: none. | |
| repo | Yes | ||
| label | No | Only consider open issues carrying this label. Default: no label filter. | |
| limit | No | Max open issues to check. Default: 20. | |
| owner | Yes | ||
| pr_idle_days | No | Stale-claim decay: days of linked-PR inactivity before TAKEN weakens to CAUTION. Default: 90. | |
| claim_silence_days | No | Stale-claim decay: days one claim blocks as CAUTION on a simple issue; the clock resets on claimant activity. Default: 7. | |
| claim_silence_complex_days | No | Stale-claim decay: days one claim blocks as CAUTION on a complex issue. Default: 14. |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.9.2- Changed
check_issue3 fields changed- added
Input schema / properties / claim_silence_complex_daysAdded 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" +} - added
Input schema / properties / claim_silence_daysAdded 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" +} - added
Input schema / properties / pr_idle_daysAdded 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" +}
- Changed
discover_candidates5 fields changed- changed
Input schema / properties / claim_silence_complex_days / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / claim_silence_days / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - added
Input schema / properties / limit / minimumAdded value: +0 - added
Input schema / properties / min_contributors / minimumAdded value: +0 - changed
Input schema / properties / pr_idle_days / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +]
- Changed
scan_repo4 fields changed- added
Input schema / properties / claim_silence_complex_daysAdded 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" +} - added
Input schema / properties / claim_silence_daysAdded 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" +} - added
Input schema / properties / limit / minimumAdded value: +0 - added
Input schema / properties / pr_idle_daysAdded 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" +}
1 tool update
v0.7.5- Changed
discover_candidates3 fields changed- added
Input schema / properties / claim_silence_complex_daysAdded 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" +} - added
Input schema / properties / claim_silence_daysAdded 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" +} - added
Input schema / properties / pr_idle_daysAdded 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" +}
1 tool update
v0.7.3- Changed
check_issue2 fields changed- changed
Input schema / properties / graphql / descriptionPrevious 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." - changed
Input schema / properties / persistent_session / descriptionPrevious 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."
3 tool updates
v0.7.2- Changed
check_issue2 fields changed- added
Input schema / properties / graphqlAdded value: +{ + "default": false, + "description": "Fetch via one GraphQL query (gh api graphql) instead of REST. Opt-in.", + "title": "Graphql", + "type": "boolean" +} - added
Input schema / properties / persistent_sessionAdded 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" +}
- Changed
discover_candidates6 fields changed- added
Input schema / properties / label / descriptionAdded value: +"Issue label to search. Default: good first issue, good-first-issue, beginner friendly, and help wanted." - added
Input schema / properties / language / descriptionAdded value: +"Only consider repositories in this language. Default: no language filter." - added
Input schema / properties / limit / descriptionAdded value: +"Max candidates to return. Default: 10." - added
Input schema / properties / me / descriptionAdded value: +"Your GitHub login; your own comments are ignored. Default: none." - added
Input schema / properties / min_contributorsAdded 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" +} - removed
Input schema / properties / min_starsRemoved value: -{ - "default": 0, - "title": "Min Stars", - "type": "integer" -}
- Changed
scan_repo3 fields changed- added
Input schema / properties / label / descriptionAdded value: +"Only consider open issues carrying this label. Default: no label filter." - added
Input schema / properties / limit / descriptionAdded value: +"Max open issues to check. Default: 20." - added
Input schema / properties / me / descriptionAdded value: +"Your GitHub login; your own comments are ignored. Default: none."
3 tool updates
v0.5.0- First observed
check_issue - First observed
discover_candidates - First observed
scan_repo
TDQS
Scored across 3 tools
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.
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.
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.
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
Related MCP Connectors
Check if a GitHub issue is ready before you or your coding agent start it. Read-only.
Git-native policy layer for AI agents: check_action verdicts against rules approved via PR.
Screens public GitHub repos and PRs to generate risk maps, findings, and merge-readiness signals.
Your coding agent asks the business logic of your repository and checks commits before they land
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables 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 npm2MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to scan for verified, uncontested GitHub bounty issues and audit specific issue URLs before writing code, filtering out honeypots and competition.-
- AlicenseNot gradedqualityAmaintenanceEnables 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 npmMIT