安全代理网关

Pincer-MCP是一个安全加固的模型上下文协议(MCP)网关,通过代理令牌架构消除AI代理系统中的'致命三重漏洞',确保代理永远不会看到真实的API密钥。

  • by VouchlyAI
  • TypeScript
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 vouchlyai/pincer-mcp

使用说明

微调器MCP🦀

Pincer MCP是一个安全强化的模型上下文协议(MCP)网关,消除了代理AI系统中的“致命Trifecta”漏洞。通过充当无状态中介,Pincer确保代理 永远不要看到真正的API密钥.

🔒 问题

当前的人工智能代理以明文形式存储长期使用的API密钥 .env 文件或本地数据库。如果通过快速注入或主机入侵受到威胁,攻击者可以直接访问您的:

  • 数据库密码
  • 第三方API密钥

✨ 解决方案:代理令牌架构

Pincer实现了 “蒙眼”安全模式:

  1. 特工知道:只有一个唯一的代理令牌(pxr_abc123...)
  2. 平瑟知道:代理令牌映射→ 真正的API密钥(在操作系统密钥链中加密)
  3. 特工从未见过:实际证书
sequenceDiagram
    participant Agent
    participant Pincer
    participant Vault (OS Keychain)
    participant External API

    Agent->>Pincer: tools/call + proxy_token: pxr_abc123
    Pincer->>Vault: Decrypt real API key
    Vault-->>Pincer: gemini_api_key: AIzaSy...
    Pincer->>External API: API call with real key
    External API-->>Pincer: Response
    Pincer->>Pincer: Scrub key from memory
    Pincer-->>Agent: Response (no credentials)

📦 可用工具

  • gemini_generate:保护Google Gemini API调用。
  • openai_chat:使用OpenAI GPT模型(GPT-4o、GPT-4-turbo、GPT-3.5-turbo等)完成聊天。
  • openai_list_models:列出所有可用的OpenAI模型。
  • openai_compatible_chat:与完成聊天 任何 与OpenAI兼容的API(Azure OpenAI、Ollama、vLLM等)。
  • openai_compatible_list_models:列出来自自定义OpenAI兼容端点的模型。
  • claude_chat:与拟人克劳德模型(克劳德3.5十四行诗、歌剧、俳句)的聊天完成。
  • openrouter_chat:统一API访问来自多个提供商(OpenAI、Anthropic、Google、Meta等)的100多个模型。
  • openrouter_list_models:列出OpenRouter提供商中的所有可用型号。
  • openwebui_chat:用于自托管LLM的OpenAI兼容接口。
  • openwebui_list_models:查找OpenWebUI实例上的可用模型。
  • gpg_sign_data:使用存储在Pincer保险库中的GPG/PGP私钥对数据或文件进行签名。 (无密钥执行——代理永远看不到密钥)
  • gpg_decrypt:使用保管库存储的私钥解密PGP加密数据。

🔑 GPG密钥管理

# Generate a new GPG keypair (private key stored in vault)
pincer key generate --name "Release Signing" --email dev@example.com

# Import an existing PGP private key
pincer key import ./my-key.asc --passphrase "my-passphrase"

# List all stored GPG keys
pincer key list

# Export public key (safe to share)
pincer key export <key-id>

# Authorize an agent for signing
pincer agent authorize mybot gpg_sign_data --key <key-id>

(更多来电者即将到来!)

🚀 快速开始

先决条件

  • Node.js 18+
  • 支持本机密钥链的macOS、Windows或Linux

安装

选项1:全局安装(推荐)

npm install -g pincer-mcp
# Now 'pincer' command is available system-wide

方案2:地方发展

git clone https://github.com/VouchlyAI/Pincer-MCP.git
cd Pincer-MCP
npm install
npm run build
npm link  # Makes 'pincer' command available locally

设置保险库

# 1. Initialize vault (creates master key in OS keychain)
pincer init

# 2. Store your real API keys (encrypted)
pincer set gemini_api_key "AIzaSyDpxPq..."
pincer set openai_api_key "sk-proj-..."

# 3. Register an agent and generate proxy token
pincer agent add openclaw
# Output: 🎫 Proxy Token: pxr_V1StGXR8_Z5jdHi6B-myT

# 4. Authorize the agent for specific tools
pincer agent authorize openclaw gemini_generate

多密钥支持

为同一工具存储多个密钥,并将其分配给不同的代理:

# Store two different Gemini API keys
pincer set gemini_api_key "AIzaSy_KEY_FOR_CLAWDBOT..." --label key1
pincer set gemini_api_key "AIzaSy_KEY_FOR_MYBOT..." --label key2

# View all stored keys
pincer list

# Assign specific keys to each agent
pincer agent add clawdbot
pincer agent authorize clawdbot gemini_generate --key key1

pincer agent add mybot  
pincer agent authorize mybot gemini_generate --key key2

# View agent permissions
pincer agent list

结果: clawdbot 使用键1, mybot 使用key2-非常适合限速或成本跟踪!

运行服务器

npm run dev

配置您的代理

给你的代理人 代理令牌 (不是真正的API密钥):

export PINCER_PROXY_TOKEN="pxr_V1StGXR8_Z5jdHi6B-myT"

工具到秘密名称映射

存储机密时,必须为每个工具使用正确的机密名称。看 工具映射指南 以获取完整的参考。

当你奔跑时 pincer agent authorize myagent gemini_generate,Pincer将注入 gemini_api_key 调用该工具时的秘密。

调用工具

您的代理在正文中发送带有代理令牌的请求:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "gemini_generate",
    "arguments": {
      "prompt": "Hello world",
      "model": "gemini-2.0-flash"
    },
    "_meta": {
      "pincer_token": "pxr_V1StGXR8_Z5jdHi6B-myT"
    }
  }
}

Pincher将代理令牌映射到真正的API密钥,并安全地执行调用。

🏗️ 建筑

双层保险库系统

第1层:主密钥(操作系统钥匙链)

  • 存储在macOS钥匙串、Windows凭据管理器或GNOME钥匙圈中
  • 从不触碰文件系统
  • 仅用于加密/解密

第2层:加密存储(SQLite)

  • 数据库位于 ~/.pincer/vault.db
  • 三张桌子:
    • secrets:真实API密钥(AES-256-GCM加密)
    • proxy_tokens:代理令牌→ 代理ID映射
    • agent_mappings:代理ID→ 工具授权

身份验证流程

Request (_meta.pincer_token: pxr_xxx)
  ↓
Gatekeeper: Extract proxy token from body
  ↓
Vault: Resolve pxr_xxx → agent_id → tool_name → real_api_key
  ↓
Injector: JIT decrypt & inject real key
  ↓
Caller: Execute external API call
  ↓
Scrubber: Overwrite key in memory with zeros
  ↓
Audit: Log to tamper-evident chain

🔐 安全与合规

Pincer是为企业级安全而构建的:

  • 硬件支持的密码学:主加密密钥永远不会离开操作系统本机密钥链。
  • 代理令牌隔离:代理仅处理短暂的 pxr_ 代币;他们从不碰真正的证书。
  • JIT解密:机密仅在API调用的持续时间内解密。
  • 零占用内存:敏感数据在使用后立即从内存中清除(清零)。
  • 细粒度授权:严格的每个代理、每个工具的访问控制策略。
  • 篡改证据审计日志:仅用SHA-256链哈希附加工具调用历史记录。
  • 强化执行:对所有输入和受保护的环境执行进行模式验证。
  • 标准兼容:与标准模型上下文协议传输完全兼容。

🔍 审计日志

每次工具调用都会记录到 ~/.pincer/audit.jsonl 包括UTC和本地时间戳,加上字符计数和估计的令牌使用情况:

{
  "agentId": "openclaw",
  "tool": "gemini_generate",
  "duration": 234,
  "status": "success",
  "input_chars": 156,
  "output_chars": 423,
  "estimated_input_tokens": 39,
  "estimated_output_tokens": 106,
  "timestamp_utc": "2026-02-05T08:32:00.000Z",
  "timestamp_local": "2/5/2026, 2:02:45 PM",
  "chainHash": "a1b2c3d4e5f6g7h8",
  "prevHash": "0000000000000000"
}

令牌估计:Pincer使用4:1的字符与令牌比率(平均每个令牌约4个字符)自动估计令牌使用情况。这为所有AI提供商提供了一致的成本跟踪,而不依赖于特定于提供商的API。


Chain hashes provide tamper detection - any modification breaks the SHA-256 chain.

## 🧪 Development

```bash
# Install dependencies
npm install

# Run tests
npm test

# Run with watch mode
npm run dev

# Build for production
npm run build

📚 文档

🤝 贡献

欢迎投稿!请参阅 贡献.md 作为指导方针。

📄 许可证

BSL 1.1(商业来源许可证)——见 许可证 了解详情。2028年4月1日转换为Apache 2.0。


建于❤️ 为了更安全的人工智能未来。