微调器MCP🦀
   ](https://www.npmjs.com/package/pincer-mcp) ](https://www.npmjs.com/package/pincer-mcp) 
Pincer MCP是一个安全强化的模型上下文协议(MCP)网关,消除了代理AI系统中的“致命Trifecta”漏洞。通过充当无状态中介,Pincer确保代理 永远不要看到真正的API密钥.
🔒 问题
当前的人工智能代理以明文形式存储长期使用的API密钥 .env 文件或本地数据库。如果通过快速注入或主机入侵受到威胁,攻击者可以直接访问您的:
- 数据库密码
- 第三方API密钥
✨ 解决方案:代理令牌架构
Pincer实现了 “蒙眼”安全模式:
- 特工知道:只有一个唯一的代理令牌(
pxr_abc123...) - 平瑟知道:代理令牌映射→ 真正的API密钥(在操作系统密钥链中加密)
- 特工从未见过:实际证书
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
# Authorize an agent for signing
pincer agent authorize mybot gpg_sign_data --key *(更多来电者即将到来!)*
🚀 快速开始
先决条件
- 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
Install dependencies
npm install
Run tests
npm test
Run with watch mode
npm run dev
Build for production
npm run build
## 📚 文档
- **[安装指南](docs/SETUP.md)** -开始使用Pincer MCP
- **[IDE集成](docs/IDE_INTEGRATION.md)** -将Pincer与VSCode、Claude Desktop、Cursor等一起使用
- **[OpenClaw集成](docs/OPENCLAW_INTEGRATION.md)** -将Pincer与OpenClaw代理集成
- **[测试指导](docs/TESTING.md)** -全面的测试套件文档
- **[能力参考](docs/CAPABILITIES.md)** -完整的API和功能文档
- **[安全策略](SECURITY.md)** -漏洞报告和安全最佳实践
- **[更新日志](CHANGELOG.md)** -版本历史和发行说明
## 🤝 贡献
欢迎投稿!请参阅 [贡献.md](CONTRIBUTING.md) 作为指导方针。
## 📄 许可证
BSL 1.1(商业来源许可证)——见 [许可证](LICENSE) 了解详情。2028年4月1日转换为Apache 2.0。
- [模型上下文协议](https://modelcontextprotocol.io) -AI工具集成的标准。
- [买家](https://github.com/atom/node-keytar) -安全的跨平台钥匙链访问。
- [更好平方3](https://github.com/WiseLibs/better-sqlite3) -高性能本地持久性。
______________________________________________________________________
**建于❤️ 为了更安全的人工智能未来。**