mcpField
G
go-tokenless

go-tokenless

ローカル
github.com/Continuous-Actionsセキュリティ23 週間前に更新

go-tokenless について

GitHub Actionsのnpm公開を長期トークンからOIDCのTrusted Publishingへ移行するコマンドラインツールで、コーディングエージェントからも利用できます。変更を事前表示して必要なワークフローと `package.json` を編集し、人の判断が必要な場合は停止します。

主な機能

  1. 01移行計画と差分のプレビュー
  2. 02公開ワークフローとpackage.jsonの編集
  3. 03人の確認が必要な設定を検出
  4. 04複数のリリースツールとワークフローに対応
  5. 05MCPツールとAgent Skillを提供

活用シーン

  1. 01npm公開をOIDCのTrusted Publishingへ移行
  2. 02公開ワークフロー内の長期トークンを点検
  3. 03プライベートパッケージ取得用の読み取り専用トークンを設定
  4. 04CIで公開ワークフローへのトークン再混入を防止

MCP 対応

読み取り専用の `plan_trusted_publishing` と、リポジトリのファイルを書き換える `apply_trusted_publishing` を提供します。Gitやネットワークへの書き込みは行いません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"continuous-actions-go-tokenless": {
"command": "npx",
"args": [
"-y",
"go-tokenless"
]
}
}
}
起動コマンドnpx -y go-tokenless

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmgo-tokenless1.1.0

ツール

2

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
pathstringはいリポジトリルートの絶対パス。
repostringいいえGitHub の所有者/リポジトリ(git のリモートが "origin" ではない場合)。
npmArgsstringいいえ生成される npm コマンドに追加する引数。
offlinebooleanいいえnpm レジストリの検索をスキップします。
readTokenstringいいえプライベートな組織パッケージのインストール手順に渡す読み取り専用 npm トークンのシークレット名(例:NPM_READ_TOKEN)。公開手順ではトークンを使用しません。
npmVersionstringいいえ挿入するアップグレード手順で使用する npm のバージョン範囲。デフォルトは ^12 です。他のバージョンでは公開に失敗する可能性があります。

詳細

go-tokenless:リリースワークフローからNODE_AUTH_TOKENを削除し、id-token: writeを追加します

go-tokenless

CI npm MCP Registry OpenSSF Scorecard License: MIT

NPM_TOKENを削除しましょう。 1つのコマンドで、GitHub Actionsでのnpm公開を信頼された公開(OIDC)に切り替えられます。長期間有効なトークンはどこにも保存されず、リリースごとに来歴バッジが付きます。

npmはトークンによる公開を終了します。2027年1月以降、トークン単独では公開できなくなります(npmのドキュメント)。

目次

クイックスタート

npmに公開するリポジトリのルートから実行します。

npx go-tokenless          # 1. preview: lists every change and shows a diff, writes nothing
npx go-tokenless apply    # 2. edit the workflow and package.json files

その後、表示される次の手順に従います。変更をコミットし、npmでパッケージをワークフローに接続して、古いシークレットを削除します。Node 22.14以降が必要です。

変更内容

変更が必要な行だけを編集します。ワークフロー内のコメント、引用符、レイアウトはそのまま保持し、package.json では repository フィールドだけを編集します。書き込み前に、go-tokenless は両方のバージョンを再読み込みし、移行以外の変更がある場合は処理を中止します。

リリースワークフローの問題go-tokenless の動作
publish ジョブ(またはワークフロー)に NODE_AUTH_TOKEN / NPM_TOKEN がある削除します。これにより、シークレットを削除できます。npm は OIDC を優先しますが、設定済みのトークンにフォールバックするため、古いトークンが引き続き使われてしまいます
ジョブが OIDC トークンを要求できない既存の権限を維持したまま、permissions: id-token: write を追加します
npm が 11.5.1 より古い(Node 22 以下)npm install -g npm@^12 を追加するか、Node < 22 を 24 に変更します
actions/setup-node に registry-url がないregistry-url: https://registry.npmjs.org を追加します
JS-DevTools/npm-publish が v4 より古いトークンが不要になった v4 に更新します
スクリプトが .npmrc に _authToken を書き込む該当する行を削除します
package.json に repository がない、または形式が正しくないgit+https://github.com/<owner>/<repo>.git を設定します(モノレポでは directory も設定します)

判断が必要な場合は、終了コード 1 で停止し、何も書き込みません。

  • 外部のユーザーから実行可能な公開処理: pull_request_target、issue_comment、workflow_run などのトリガーで開始されるワークフローにある publish ジョブ。OIDC を付与すると、フォークから公開できてしまいます。
  • セルフホストランナー: npm は信頼された公開に使用できるランナーとして受け付けません。
  • 別のリポジトリを指す repository。
  • YAML アンカー: 編集がほかのジョブにも及ぶ可能性があります。
  • 公開コマンドが見つからない場合: npm トークンは渡されていますが、公開コマンドを特定できません。

ドライラン(npm publish --dry-run)は公開として扱われません。GitHub Packages に公開するステップと、GITHUB_TOKEN の値には手を加えません。

出力例
$ npx go-tokenless
go-tokenless: Ready to go tokenless. (acme/widgets)

Changes:
  .github/workflows/release.yml
    - publish: remove `NODE_AUTH_TOKEN` from job env
    - publish: grant `id-token: write`
    - publish: raise setup-node from Node 20 to 24 (trusted publishing needs Node 22.14+)
  package.json
    - widgets: add repository.url git+https://github.com/acme/widgets.git

Next:
  1. Run `npx go-tokenless apply` (or apply the diff above) and commit the changes on a branch.
  2. Add a trusted publisher for each package. With npm 11.15+ logged in with 2FA, run:
       npm trust github widgets --repo acme/widgets --file release.yml --allow-publish --yes
  3. Merge, then let the release workflow publish once. Check the new version shows a provenance badge.
  4. Delete the old publish token secret (`gh secret delete NPM_TOKEN`) and revoke the token on npmjs.com.

サポート対象のリリース構成

構成備考
npm publish(ワークスペースを含む)
pnpm publish / -r publishpnpm 10 は npm に処理を委ねます。pnpm 11 では 11.1.3 以降が必要です
Yarn Berry yarn npm publishYarn 4.10.3 以降。.yarnrc.yml から npmAuthToken を削除してください
changesets(changesets/action)そのまま動作します。トークンなしでの初回リリースで認証できない場合は、v2 に更新してください
semantic-release@semantic-release/npm 13.1.0 以降(semantic-release 25 以降)が必要です
release-please + npm publish
Lerna / Nx releaseLerna 9 以降
JS-DevTools/npm-publishv4 に更新されます
release-itnpm.skipChecks: true も設定してください
再利用可能なワークフロー(workflow_call)npm は呼び出し元ワークフローのファイル名を確認します。呼び出し元ごとに信頼設定コマンドが出力されます
スクリプト内での公開package.json のスクリプト、./scripts/*.sh、make <target>、ローカルのコンポジットアクション(uses: ./.github/actions/...)をたどります。working-directory も含みます
Yarn 1 yarn publish、bun publish対応していないツールとして検出されます。これらのツールはまだ信頼された公開を利用できないため、npm publish に切り替えてください

プライベートパッケージ

npm 組織のプライベートパッケージをインストールする必要がある場合は、インストールのステップに読み取り専用トークンを渡してください。公開ステップでは引き続きトークンを使いません。

npx go-tokenless apply --read-token NPM_READ_TOKEN
       - run: npm ci
+        env:
+          NODE_AUTH_TOKEN: ${{ secrets.NPM_READ_TOKEN }}
       - run: npm publish

リリースワークフロー内のすべてのインストールステップにトークンが設定されます。個別のビルドジョブやテストジョブも対象です。npmjs.com でパッケージへの読み取り専用アクセス権を持つ粒度の細かいトークンを作成し、gh secret set NPM_READ_TOKEN で保存してください。

CI でトークンなしの状態を維持する

Action を CI に追加してください。公開ワークフローにトークンが再び入り込むとジョブを失敗させ、ジョブのサマリーに具体的な修正内容を表示します。

# .github/workflows/ci.yml
jobs:
  tokenless:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v5
      - uses: continuous-actions/go-tokenless@v1
        # with:
        #   mode: report               # annotate only, never fail
        #   read-token: NPM_READ_TOKEN # if installs use a read-only token

go-tokenless --json を読み取り専用で実行し、トークンは必要ありません。status の出力は already-tokenless、ready、blocked、no-publish-workflow のいずれかです。

AI エージェントで使う

go-tokenless は、コーディングエージェントによる実行を想定して作られています。--json 出力、明確な終了コード、MCP サーバー、Agent Skill を備えています。エージェントに次のように依頼してください。「npm の公開をトラステッドパブリッシングに移行してください。」

クライアントセットアップ
Claude ディレクトリ(claude.ai、Cowork、Claude Code)Anthropic のプラグインディレクトリに申請済みで、承認待ちです。掲載されたら、ディレクトリを開き、go-tokenless を検索して Add を選択してください。その後、go-tokenless@synced として Claude Code に同期されます。それまでは、以下のマーケットプレイスコマンドを使用してください
Claude Code(プラグイン:スキル + MCP)/plugin marketplace add continuous-actions/go-tokenless を実行し、続けて /plugin install go-tokenless@continuous-actions を実行します
Claude Code(MCP のみ)claude mcp add go-tokenless -- npx -y go-tokenless mcp
Gemini CLIgemini extensions install https://github.com/continuous-actions/go-tokenless
Cursor、VS Code、その他以下の MCP 設定を追加します
スキルに対応する任意のエージェントnpx skills add continuous-actions/go-tokenless
{ "mcpServers": { "go-tokenless": { "command": "npx", "args": ["-y", "go-tokenless", "mcp"] } } }

MCP ツールは plan_trusted_publishing(読み取り専用)と apply_trusted_publishing(ファイルを書き込みます。git やネットワークへの書き込みは行いません)です。MCP Registry には io.github.continuous-actions/go-tokenless として掲載されています。llms.txt と Agent Skill も参照してください。

オプション

npx go-tokenless [plan | apply | mcp] [options]
オプション説明
--jsonプラン全体を JSON(status、changes、diff、findings、trust、nextSteps)として出力します
--diffテキスト出力に差分を含めます(plan では常に有効です)
--repo <owner/repo>origin が GitHub でない場合に指定する GitHub リポジトリ
--cwd <dir>リポジトリのルート(デフォルト:現在のディレクトリ)
--offline各パッケージがすでに存在するかを確認する npm レジストリのチェックをスキップします
--read-token <SECRET>インストール手順に読み取り専用トークンを指定します(このシークレットから取得。 プライベートパッケージ)
--npm-version <range>挿入するアップグレード手順で使用する npm。デフォルトは ^12 で、リリースによる予期しない変更を避けるため、1 つのメジャーバージョンに固定されています。ほかのバージョンでは警告が表示され、11.5.1 未満は拒否されます
--npm-args "<args>"生成されるすべての npm コマンド(アップグレード手順と npm trust)に追加する引数

終了コード:0 正常 · 1 ブロック(人による修正が必要) · 2 使用方法のエラー · 3 予期しないエラー。

アクセスする情報

  • ファイル: 指定されたリポジトリ内の .github/workflows/*.yml、package.json ファイル、および関連スクリプトを読み取ります。apply と MCP ツールの apply_trusted_publishing が書き込むのは、そのリポジトリ内のワークフローファイルと package.json ファイルだけです。リポジトリ外へのリンクをたどることはありません。
  • ネットワーク: 各パッケージがすでに存在するかを確認するため、https://registry.npmjs.org/<package> に読み取り専用の GET リクエストを送信します(--offline または MCP の offline: true で無効になります)。それ以外のデータを取得または送信することはありません。テレメトリもありません。
  • 実行しないこと: リポジトリのコードを実行したり、シークレットや環境トークンを読み取ったり、変更を加える git コマンドを実行したり、ユーザーに代わって npm や GitHub に接続したりすることはありません。
  • 実行方法: Claude Code プラグインと Gemini 拡張機能は、npx -y go-tokenless@<pinned version> mcp で MCP サーバーを起動します。

ユーザー自身でしか行えないこと

go-tokenless が npm アカウント、シークレット、git の履歴に触れることはありません。apply の実行後に、次の操作を行ってください。

  1. 各パッケージをワークフローに接続する: 表示された npm trust github … コマンドを実行する(npm 11.15 以降。2FA が求められます)か、npmjs.com → package → Settings → Trusted publishing に移動します。
  2. 新しいパッケージは、まず手動で一度公開する必要があります。npm が接続できるのは、すでに存在するパッケージのみです。該当するものはプランに表示されます。
  3. 最初のトークンレスリリース後、古いシークレットを削除し、トークンを失効させます。

トラブルシューティング

各エラーの原因と解決方法を個別のページで確認できます:ENEEDAUTH、404 on PUT、E422 repository.url、トークンが引き続き使用される場合、2FA バイパスに関する通知。

エラー主な原因
npm error code ENEEDAUTHid-token: write が設定されていない、npm のバージョンが 11.5.1 より古い、またはワークフローファイル名が信頼済みパブリッシャーと完全に一致しない(大文字と小文字を区別し、.yml を含む)
npm error 404 Not Found - PUT https://registry.npmjs.org/...上記と同じ原因、environment の不一致、または信頼済みパブリッシャーがまだ設定されていない
npm error code E422 … repository.urlpackage.json の repository が GitHub リポジトリと一致しない。apply で形式を修正できます
公開時にトークンが引き続き使用されるNODE_AUTH_TOKEN、NPM_TOKEN、.npmrc の _authToken、または .yarnrc.yml の npmAuthToken がまだ設定されています。npx go-tokenless を再度実行して該当箇所を確認してください

コントリビューション

Issue とプルリクエストを歓迎します。corepack enable && yarn install && yarn check を実行してください(型チェック、ビルド、エンドツーエンドテストを行います)。コードの構成については AGENTS.md、脆弱性の報告については SECURITY.md をご覧ください。

ライセンス

MIT © continuous-actions

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。