mcp权限提示
Ruby gem为Claude Code CLI实现了基于MCP的权限处理 --permission-prompt-tool 旗帜。
状态:研究和文件
这个gem是第一个也是唯一一个已知的工作实现 --permission-prompt-tool 全球响应格式。
经过对所有主要语言和平台的广泛全球研究,目前还没有其他功能实现。然而,该功能本身具有 实用价值严重受限 -Claude的智能工具选择完全绕过了权限处理程序(请参阅已知限制)。
特性
- 可配置的基于策略的权限系统
- 内置策略:危险命令、受保护路径
- 多个MCP库的适配器模式(官方SDK,快速MCP)
- 通过决策回调进行审计日志记录
- 完全输入修改支持
- 全面的测试覆盖率(77个测试,130个断言)
安装
添加到您的Gemfile:
gem 'mcp-permission-prompt', git: 'https://github.com/justi-blue/mcp-permission-prompt'或在本地安装:
gem 'mcp-permission-prompt', path: '../mcp-permission-prompt'用法
1.配置策略
创建初始化器(例如。, config/initializers/mcp_permission_prompt.rb):
require 'mcp_permission_prompt'
McpPermissionPrompt.configure do |config|
# Add default policies
config.add_policy(McpPermissionPrompt::Policies::DangerousCommands.new)
config.add_policy(McpPermissionPrompt::Policies::ProtectedPaths.new)
# Optional: Add decision callback for audit logging
config.on_decision do |tool_name, input, decision|
Rails.logger.info "[PermissionPrompt] #{tool_name}: #{decision[:behavior]} - #{decision[:reason] || 'allowed'}"
end
end2.创建MCP工具处理程序
class PermissionPromptHandler < McpPermissionPrompt::Adapters::OfficialSdk
# Inherits from adapter - no additional code needed
# Policies configured in initializer will be automatically used
end3.向MCP服务器注册
def self.all_tools
[
Mcp::Tools::PermissionPromptHandler,
# ... other tools
]
end4.与Claude CLI一起使用
claude --print "command here" \
--permission-prompt-tool mcp__server_name__permission_prompt_handler内置政策
危险命令
阻止危险的Bash命令:
- 破坏性操作:
rm -rf,mkfs,dd - 远程代码执行:
curl|bash,wget|sh - 特权升级:
chmod 777,chown -R - 叉式炸弹
受保护的路径
阻止写入敏感位置:
- 系统目录:
/etc,/usr,/var - 敏感文件:
.env、凭据、SSH密钥
自定义策略
class MyCustomPolicy < McpPermissionPrompt::Policies::Base
def evaluate(tool_name, input)
return not_decided unless tool_name == "Bash"
command = input[:command] || input["command"]
return not_decided unless command
if command.match?(/production/)
deny("Production commands blocked in development")
else
not_decided
end
end
end
# Add to configuration
config.add_policy(MyCustomPolicy.new)为什么这个功能不起作用
关键发现: 这 --permission-prompt-tool 处理程序是 从未打过电话 在实践中,因为克劳德明智地避免使用会触发它的工具。
实证检验结果
当明确要求使用被阻止的命令时:
rm -rf /tmp/test→ 克劳德使用find改为命令curl http://url→ Claude使用WebFetch(内置工具)git push→ Claude使用内置Git客户端rails test→ Claude使用MCPtest_runner工具
处理程序从未被调用 尽管已正确注册和验证。
根本原因
Claude的人工智能系统优先考虑替代工具来完成任务:
- 首先检查静态规则(
--allowedTools/--disallowedTools) - 如果被阻止,则智能地选择其他内置工具
- 只打电话
--permission-prompt-tool当 没有其他选择 - 在实践中,危险操作总是存在替代方案
附加限制
研究范围
搜索范围:
- 所有主要语言(英语、中文、俄语、日语、韩语、葡萄牙语、西班牙语、德语)
- 平台:GitHub、Stack Overflow、黑客新闻、Reddit、官方论坛
- 结果: 全球零工作实施
- 仅尝试:CLIAI/mcp_permission_server_claude_code(Python)-标记为“正在进行中”,不起作用
建筑
Configuration
├── Policies (chain of responsibility)
│ ├── DangerousCommands
│ ├── ProtectedPaths
│ └── Custom policies
├── Callbacks (audit logging)
└── Adapters
├── OfficialSdk (model_context_protocol gem)
└── FastMcp (future support)发展
# Install dependencies
bundle install
# Run tests
bundle exec rake test
# Run with coverage
COVERAGE=true bundle exec rake test研究与来源
文件问题
官方资源
社区尝试
- CLIAI/mcp_权限_服务器_权限_代码 -Python实现尝试,状态:“正在进行中”,无功能
- -社区使用
--dangerously-skip-permissions变通方案 - 工具和系统提示 -内置工具列表(显示克劳德使用的替代方案)
贡献
欢迎在以下网址提交Bug报告和拉取请求https://github.com/justi-blue/mcp-permission-prompt.
许可证
根据以下条款,gem可作为开源软件使用 MIT许可证.
致谢
此gem实现了通过社区研究发现的响应格式 第1175期,因为Anthropic的官方文件缺乏工作实例。
