Holster MCP

com.nautaai由 nautaai.com 发布v0.1.1更新于 Oct 24, 2026

Local-first secret scanning, rotation, vault, and audit-log tools for AI agents.

已验证STDIO仅桌面开发者工具安全与监控

概览

AI 生成的概览

本地优先的 MCP 服务器,让 AI 助手扫描代码库中的密钥、检查 gitignore 覆盖、获取轮换手册并管理本地凭据库。

可以做什么
扫描指定仓库路径中的泄露密钥,报告文件、行号、密钥类型和严重程度,并可限制扫描深度。检查仓库 gitignore 中缺失或不安全的模式,并给出建议追加内容。获取按服务商划分的凭据轮换手册,包含步骤、预计耗时和警告。将密钥加入本地保险库,并为受支持的服务商轮换保险库条目,旧条目会被标记为已取代。按服务商、账户和时间范围查询本地保险库操作的审计日志。
适用场景
适合让助手在提交或发布前审计代码库中的泄露凭据、收紧 gitignore 规则,或在密钥泄露后按步骤完成轮换,同时把密钥保存在本地保险库而不是聊天记录或命令历史中。
运行要求
作为本地进程在用户机器上运行,从 PyPI 安装 holster-mcp,用 holster-mcp 命令或通过 uvx 启动。需要随包附带或可找到的 holster-doctor 二进制文件;平台 wheel 仅提供 macOS ARM 和 Linux x86_64。付费的保险库与审计工具需要 Holster 许可证,并通过参数、HOLSTER_VAULT_PATH 或配置文件指定本地保险库。
安装前请注意
保险库工具以工具输入形式接收密钥值,粘贴的凭据会经过助手对话;README 称密钥值不会进入命令行参数、日志或结构化错误输出,但使用前请自行核实。保险库与审计工具为付费功能,需要许可证。保险库操作会写入并取代本地保险库中的条目。免费扫描工具据称仅在本地运行,不会把仓库内容发送到网络服务。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Holster MCP,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Holster MCP

Holster MCP exposes local Holster Doctor checks to MCP-compatible agents. The server is local-first: free tools shell out to the bundled holster-doctor binary and never send repository contents to a network service.

Install

From PyPI:

bash
pip install holster-mcp

Development install:

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

Runtime command:

bash
holster-mcp

MCP client config:

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

See the main Holster README for vault and holster-cli release binary installation.

License: MIT for the MCP package.

Binary Resolution

The server locates holster-doctor in this order:

  1. HOLSTER_DOCTOR_BIN
  2. Packaged wheel binary at holster_mcp/bin/holster-doctor
  3. holster-doctor on PATH
  4. Repo-local target/release/holster-doctor
  5. Repo-local target/debug/holster-doctor

Free Tools

holster.scan_repo

Input:

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

Output:

json
{  "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

Input:

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

Output:

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

holster.rotation_playbook

Input:

json
{"provider": "github"}

Output:

json
{  "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."]}

Platform Wheels

Day 1 wheels are built for:

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

The wheels bundle the platform's holster-doctor binary and are intentionally not universal.

Paid Tools

Paid tools are local-only wrappers around holster-cli and are gated by a Holster license.

License Configuration

License lookup order:

  1. license_key argument passed to a paid MCP tool
  2. HOLSTER_LICENSE_KEY
  3. ~/.holster/config.toml

Supported config.toml shapes:

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

or:

toml
[license]key = "holster_live_ABCDEFGHIJKLMNOPQRSTUVWX"
[vault]path = "/absolute/path/to/holster-vault.db"

License cache:

text
~/.holster/licenses.db

If no license is configured, the first paid-tool call creates a local 7-day trial key with prefix holster_trial_.

Vault Configuration

Vault path lookup order:

  1. explicit tool argument where supported
  2. HOLSTER_VAULT_PATH
  3. ~/.holster/config.toml

holster.vault_add

Input:

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

Output:

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

The secret value is never placed in CLI argv, logs, or structured error output.

holster.vault_rotate

Day 2 supports github and stripe.

Without new_secret, the tool returns the provider playbook and waits for the human to rotate/paste the replacement:

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

With new_secret, the replacement is added to the local vault and the old entry is marked superseded when the installed CLI supports that command.

holster.audit_log

Input:

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

Output:

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

License Architecture

mermaid
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"]

The background poller refreshes cached live licenses every 10 minutes after a paid tool validates. There is no webhook receiver in Day 2 and no telemetry in V1.

来源:mcp/README.md,提交 bd70dbf

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分