taken について
`taken`は、GitHubのIssueに着手する前に参加可能かを調べる、読み取り専用のコマンドラインツール兼MCPサーバーです。Issueのタイムラインやコメント、担当者、リポジトリの活動状況と貢献ポリシーを確認し、根拠付きの判定を返します。
主な機能
- 01関連するプルリクエストと担当者を確認
- 02コメントから作業の申し出を検索
- 03貢献ポリシーとリポジトリの活動状況を確認
- 04根拠付きでGO、TAKEN、CAUTIONを返す
- 05リポジトリをスキャンして候補を発見
活用シーン
- 01着手前にIssueへの参加可否を確認
- 02貢献できる未解決Issueを探す
- 03対象Issueのリポジトリ状況を確認
MCP 対応
MCPサーバーは`check_issue`、`scan_repo`、`discover_candidates`ツールを公開します。認証済みのGitHub CLI(`gh`)を使って読み取り専用のAPI呼び出しを行います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| me | any | いいえ | |
| repo | string | はい | |
| owner | string | はい | |
| graphql | boolean | いいえ | GraphQL パスを強制します。デフォルト:認証状態に基づいて自動選択。 |
| issue_number | integer | はい | |
| pr_idle_days | any | いいえ | 古い claim の減衰:リンクされた PR が何日間活動しないと TAKEN が CAUTION に弱まるかを指定します。デフォルト:90。 |
| claim_silence_days | any | いいえ | 古い担当表明の減衰:単純な issue で、1 件の担当表明が CAUTION としてブロックする日数です。担当者が活動するとカウントがリセットされます。デフォルト:7。 |
| persistent_session | boolean | いいえ | 永続セッションの GraphQL パスを強制します。`gh auth token` のトークンはメモリ内にのみ保持されます。デフォルト:認証状態に基づいて自動選択。 |
| claim_silence_complex_days | any | いいえ | 古い担当表明の減衰:複雑な issue で、1 件の担当表明が CAUTION としてブロックする日数です。デフォルト:14。 |
詳細
taken?
taken? は、GitHub の issue に取り組むと申し出る前に、ひとつの疑問に答えます。すでに誰かが取り組んでいるでしょうか?
簡単に言うと、作業を始める前に issue を確認します。まだコントリビューションを受け付けているか、すでに誰かが担当しているか、そしてリポジトリに十分な活動があり、あなたの PR がレビューされるかを調べます。
インストールせずに試すには、ライブコンソールをご利用ください。ブラウザー上で実際のチェックを実行します。
このツールが解決するのは、GitHub では「プルリクエストをリンクしました」というイベントが issue のタイムラインに表示される一方、コメントには表示されないという問題です。issue のコメントをすべて読んでも、すでに誰かが PR を作成していることを見落とす可能性があります。taken? はタイムラインを確認し、作業を引き受ける意思を示すコメントを調べ、担当者を確認し、CONTRIBUTING.md を読んで AI コントリビューションポリシーを確認し、リポジトリがまだ活発かどうかを調べます。そのうえで、根拠を示しながら GO、TAKEN、CAUTION の判定を返します。
必要条件
- Python 3.10 以降
- 認証済みの GitHub CLI(
gh)
taken? は、あなた自身の gh ログインを通じて読み取り専用の API 呼び出しのみを行います。トークンを参照したり保存したりすることはなく、GitHub に書き込みを行うこともありません。
インストール
uv tool install taken-gh
または pipx を使う場合:
pipx install taken-gh
続いて:
taken owner/repo#123
issue の完全な URL も使えます:
taken https://github.com/owner/repo/issues/123
判定
優先順位は TAKEN、CAUTION、GO の順です。
- TAKEN:issue がクローズされている、オープン中の PR がその issue にリンクされている、または誰かが担当者に設定されています。
- CAUTION:誰かが取り組みたいというコメントがある(仮の意思表示であり、すでに状況が変わっている可能性があります)、リンクされた PR はマージ済みだが issue はまだオープンである、リポジトリに尊重すべき AI ポリシーがある、リポジトリの活動が停止しているように見える、または初心者向けラベルが長い議論スレッドや設計レベルのラベルと併記されている(作業を始める前にざっと目を通す価値があります)。
- GO:上記のいずれにも該当しません。
取り組みたい人の検出はコメント文面に基づくヒューリスティックであり、確証ではありません。判定には常に根拠が表示されるので、ご自身で判断できます。
終了コード:0 は GO、1 は TAKEN、2 は CAUTION、3 は問題発生(対象またはフラグが無効、gh がない、API エラー)を意味します。
例
すでに修正する PR がある issue:
$ 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
すでに誰かが担当者になっている issue:
$ taken chahe-dridi/vscode-agent-bell#200
taken? chahe-dridi/vscode-agent-bell#200
verdict: TAKEN
...
why:
- assigned to: dk5488
自分が作業に立候補したコメントを除外した、問題のない issue:
$ 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
便利なフラグ
--json:人間向けの概要ではなく、すべての調査結果を JSON として出力します--me LOGIN:担当候補を調べる際に、自分のコメントを無視します--no-cache:1 時間の API レスポンスキャッシュをバイパスします--rest:REST の取得経路を強制します(ログインユーザーのデフォルトは GraphQL です)--health:コントリビューター向けの判定ではなく、1 つのリポジトリのメンテナーレポートを表示します
すべての項目は taken --help で確認できます。
バッチモードとリポジトリのスキャン
taken に複数の対象を渡すと、対象ごとに判定を 1 行ずつ出力します。
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
owner/repo のみを指定すると、リポジトリを自動的にスキャンします。オープン中の Issue(更新日時が新しい順、PR は除外)がそれぞれ確認されます。
taken django/django --label "good first issue" --limit 10
API レスポンスは ~/.cache/taken に 1 時間キャッシュされます(TAKEN_CACHE_DIR で変更可能)。そのため、スキャンを繰り返しても負荷を抑えられます。
オプトインの REST トランスポート(TAKEN_TRANSPORT=httpx)は、空のリストを含め、JSON オブジェクトと配列の両方を保持します。レスポンスの ETag はどちらの形式でもキャッシュされ、有効期限の後に 304 Not Modified が返された場合はキャッシュ済みの本文を再利用し、TTL を更新します。デフォルトのサブプロセストランスポートに変更はありません。
発見モード
taken --discover は GitHub 全体からコントリビューション候補を見つけます。GitHub の Issue 検索から候補を生のまま取得し、それぞれに taken の完全な検証を実行して、残った候補をランク付けします。リストに含まれるのは GO 判定のみで、スコアはアグリゲーターがフィルタリングしないシグナルであるメンテナーの応答性に基づきます。
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
各行でスコアの理由を確認できます。候補は並列で検証されます(デフォルトは 8 ワーカーです。--jobs N で調整できます)。
MCP サーバー
taken は MCP サーバーとしても提供されているため、コーディングエージェントは CLI にシェルアウトする代わりに、ツール呼び出しで Issue を確認できます。セットアップは同じです。gh がインストールされ、認証済みである必要があり、API 呼び出しは読み取り専用で、自分のログインを通じて行われます。
uvx --from "taken-gh[mcp]" taken-mcp
ツールは check_issue、scan_repo、discover_candidates の 3 つです。公式の MCP Registry に io.github.RogueAlg0/taken として公開されています。
開発
uv sync # 開発ツール(ruff、pytest)をインストール
uv run pytest
uv run ruff check
uv run ruff format --check
AI による支援
このプロジェクトは AI の支援を受けて開発されており、そのことを公にしています。すべてのコントリビューションは、取り込まれる前に作者がレビューし、内容を理解しています。
セキュリティ
サポート対象のバージョンと脆弱性の報告方法については、SECURITY.md を参照してください。公開 Issue ではなく、非公開の脆弱性報告を利用してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。