mcpField
H
Holster MCP

Holster MCP

ローカル
nautaai.comセキュリティ021 週間前に更新

Holster MCP について

Holster MCPは、MCP対応エージェントにHolster Doctorのセキュリティチェックを提供します。ローカルリポジトリのスキャンや認証情報のローテーション案内に加え、ライセンス制のローカルVault・監査ツールを利用できます。リポジトリ内容はネットワークサービスへ送信されません。

主な機能

  1. 01リポジトリ内のシークレット検出
  2. 02.gitignoreの安全パターン確認
  3. 03認証情報のローテーション手順
  4. 04Vaultへのシークレット追加と更新
  5. 05Vaultの監査イベント確認

活用シーン

  1. 01リポジトリ内の認証情報漏えいを発見
  2. 02シークレットファイルの除外設定を確認
  3. 03プロバイダー別の認証情報更新手順を参照
  4. 04ローカルVaultで認証情報を保存・確認

MCP 対応

MCPサーバーは、ローカルのHolster DoctorチェックとHolster CLIによるVault操作を、MCP対応エージェント向けのツールとして公開します。無料ツールはローカルで動作し、リポジトリ内容をネットワークサービスへ送りません。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"com-nautaai-holster": {
"command": "uvx",
"args": [
"holster-mcp"
]
}
}
}
起動コマンドuvx holster-mcp

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

パッケージ
pypiholster-mcp0.1.1

ツール

6

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

パラメーター型必須説明
pathstringはい
depthintegerいいえ

詳細

Holster MCP

Holster MCP は、MCP 対応エージェントにローカルの Holster Doctor チェックを提供します。このサーバーはローカル優先です。無料ツールは同梱の holster-doctor バイナリをシェル経由で実行し、リポジトリの内容をネットワークサービスに送信することはありません。

インストール

PyPI からインストールする場合:

pip install holster-mcp

開発用インストール:

cd /path/to/holster/mcp
python3.11 -m pip install -e '.[dev]'

実行コマンド:

holster-mcp

MCP クライアントの設定:

{
  "mcpServers": {
    "holster": {
      "command": "uvx",
      "args": ["holster-mcp"]
    }
  }
}

Vault と holster-cli リリースバイナリのインストールについては、Holster のメイン README を参照してください。

ライセンス:MCP パッケージは MIT ライセンスです。

バイナリの解決

サーバーは次の順序で holster-doctor を検索します。

  1. HOLSTER_DOCTOR_BIN
  2. パッケージ化された wheel のバイナリ holster_mcp/bin/holster-doctor
  3. PATH 上の holster-doctor
  4. リポジトリ内の target/release/holster-doctor
  5. リポジトリ内の target/debug/holster-doctor

無料ツール

holster.scan_repo

入力:

{"path": "/absolute/repo/path", "depth": 3}

出力:

{
  "ok": true,
  "scanned_files": 15,
  "findings": [
    {
      "file": "src/main.py",
      "line": 12,
      "secret_kind": "openai_api_key",
      "severity": "error",
      "suggestion": "Rotate this key and move it into a local vault."
    }
  ]
}
holster.check_gitignore

入力:

{"path": "/absolute/repo/path"}

出力:

{
  "ok": true,
  "missing_patterns": [".env.local"],
  "existing_safe": [".env"],
  "existing_unsafe": [],
  "suggested_append": ".env.local\n*.pem"
}
holster.rotation_playbook

入力:

{"provider": "github"}

出力:

{
  "ok": true,
  "provider": "github",
  "steps": ["Create a replacement token...", "Update local consumers...", "Revoke the old token..."],
  "estimated_minutes": 15,
  "warnings": ["Do not revoke the old credential until the replacement has been verified."]
}

プラットフォーム別 Wheel

Day 1 の wheel は次のプラットフォーム向けにビルドされています。

  • macOS ARM(aarch64-apple-darwin)
  • Linux x86_64(x86_64-unknown-linux-gnu)

wheel には各プラットフォーム向けの holster-doctor バイナリがバンドルされており、ユニバーサル対応にはなっていません。

有料ツール

有料ツールは holster-cli のローカル専用ラッパーで、Holster ライセンスによって使用が制限されます。

ライセンス設定

ライセンスの検索順序:

  1. 有料 MCP ツールに渡された license_key 引数
  2. HOLSTER_LICENSE_KEY
  3. ~/.holster/config.toml

サポートされている config.toml の形式:

license_key = "holster_live_ABCDEFGHIJKLMNOPQRSTUVWX"
vault_path = "/absolute/path/to/holster-vault.db"

または:

[license]
key = "holster_live_ABCDEFGHIJKLMNOPQRSTUVWX"

[vault]
path = "/absolute/path/to/holster-vault.db"

ライセンスキャッシュ:

~/.holster/licenses.db

ライセンスが設定されていない場合、最初の有料ツール呼び出し時に、プレフィックスが holster_trial_ のローカル 7 日間トライアルキーが作成されます。

Vault の設定

Vault パスの検索順序:

  1. 対応している場合は、ツールに明示的に渡された引数
  2. HOLSTER_VAULT_PATH
  3. ~/.holster/config.toml
holster.vault_add

入力:

{
  "provider": "github",
  "account": "nauta-ai",
  "secret": "user-pasted-secret",
  "label": "primary"
}

出力:

{"ok": true, "vault_entry_id": "123e4567-e89b-12d3-a456-426614174000", "error": null}

シークレットの値が CLI の argv、ログ、構造化エラー出力に含まれることはありません。

holster.vault_rotate

Day 2 では github と stripe をサポートしています。

new_secret が指定されていない場合、ツールはプロバイダーのプレイブックを返し、人間が置き換え用の値をローテーションして貼り付けるのを待ちます。

{
  "provider": "github",
  "account": "nauta-ai",
  "vault_entry_id": "old-id"
}

new_secret が指定されている場合、置き換え用の値がローカル Vault に追加され、インストール済みの CLI がそのコマンドをサポートしていれば、古いエントリーは置き換え済みとしてマークされます。

holster.audit_log

入力:

{"provider": "github", "account": "nauta-ai", "since_days": 30}

出力:

{"ok": true, "events": [{"ts": "...", "action": "add", "provider": "github", "account": "nauta-ai", "ok": true}]}

ライセンスアーキテクチャ

flowchart TD
  A["Paid MCP tool call"] --> B["Resolve license key from arg/env/config"]
  B --> C{"Key present?"}
  C -- "No" --> D["Create local 7-day trial in ~/.holster/licenses.db"]
  C -- "Yes" --> E["Read ~/.holster/licenses.db"]
  D --> F{"Trial valid?"}
  E --> G{"Cached license valid?"}
  G -- "Valid" --> H["Dispatch paid tool"]
  G -- "Expired but within 7-day grace" --> I["Dispatch with license_warning"]
  G -- "Missing/stale live key" --> J["Stripe refresh: Customer.retrieve + Subscription.list"]
  J -- "Active" --> K["Update cache valid_until + last_checked"]
  J -- "Inactive/error/no API key" --> L["Return license_required_or_expired"]
  F -- "Valid" --> H
  F -- "Expired" --> L
  K --> H
  I --> H
  H --> M["Local holster-cli subprocess"]

バックグラウンドポーラーは、有料ツールによる検証後、キャッシュされた有効なライセンスを 10 分ごとに更新します。Day 2 には Webhook レシーバーはなく、V1 ではテレメトリーもありません。

コメント

MCP は初めてですか?

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

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