mcp代理
绕过Claude Desktop沙盒网络限制的MCP服务器。
Claude Desktop在一个受限的沙盒中运行,该沙盒阻止了许多需要互联网访问的网络操作和CLI工具。此MCP服务器提供了三个在沙盒外运行的工具,使Claude能够:
- 获取任何URL(API调用、web抓取、下载)
- 执行支持网络的CLI工具(yt-dlp、curl、ffmpeg等)
- 读取由这些工具创建的文件(字幕文件、下载等)
安装
快速安装(通过GitHub)
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"proxy": {
"command": "npx",
"args": ["-y", "github:CodefiLabs/claude-desktop-skills-proxy"]
}
}
}重新启动Claude Desktop以使更改生效。服务器将自动下载并运行。
本地开发
git clone https://github.com/CodefiLabs/claude-desktop-skills-proxy.git
cd claude-desktop-skills-proxy
npm install
npm run build然后配置Claude Desktop以使用本地版本:
{
"mcpServers": {
"proxy": {
"command": "node",
"args": ["/path/to/claude-desktop-skills-proxy/dist/index.js"]
}
}
}工具
代理蚀刻
向任何URL发出HTTP请求。支持所有常见的HTTP方法。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url | string | 是 | 要获取的URL |
method | string | 否 | HTTP方法:GET、POST、PUT、DELETE、PATCH、HEAD(默认值:GET) |
headers | object | 否 | 自定义HTTP标头作为键值对 |
body | string | 否 | 请求POST/PUT/PATCH的正文 |
timeout | number | 否 | 超时(毫秒)(默认值:30000) |
approve | string | 否 | 域批准:“一次”或“始终” |
示例-简单GET:
{
"url": "https://api.github.com/users/octocat"
}示例-带标头的POST:
{
"url": "https://api.example.com/data",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token123"
},
"body": "{\"key\": \"value\"}"
}示例-批准新域:
{
"url": "https://newsite.com/api",
"approve": "always"
}网络exec
执行需要网络访问的CLI命令。使用安全 spawn() 而不是shell执行。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
command | string | Yes | 要执行的命令(例如,“yt-dlp”、“curl”) |
args | array | 否 | 命令参数为数组 |
cwd | string | 否 | 工作目录 |
env | object | 否 | 其他环境变量 |
timeout | number | 否 | 超时(毫秒)(默认值:60000) |
approve | string | 否 | 命令批准:“一次”或“始终” |
示例-使用yt-dlp下载视频:
{
"command": "yt-dlp",
"args": ["--output", "video.mp4", "https://youtube.com/watch?v=dQw4w9WgXcQ"],
"cwd": "/Users/kk/Downloads",
"approve": "always"
}示例-使用curl进行提取:
{
"command": "curl",
"args": ["-s", "https://api.ipify.org?format=json"],
"approve": "once"
}示例-使用ffmpeg转换视频:
{
"command": "ffmpeg",
"args": ["-i", "input.mp4", "-c:v", "libx264", "output.mp4"],
"cwd": "/Users/kk/Videos",
"timeout": 300000
}read_file
从主机文件系统读取文件。可用于读取由创建的文件 network_exec (例如来自yt-dlp的字幕文件)。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
path | string | 是 | 要读取的文件的绝对路径 |
encoding | string | 否 | 二进制文件为“utf8”(默认)或“base64” |
maxSize | number | 否 | 最大文件大小(字节)(默认值:5MB) |
示例-读取字幕文件:
{
"path": "/tmp/video.en.vtt"
}示例-将二进制文件读取为base64:
{
"path": "/tmp/image.png",
"encoding": "base64"
}yt-dlp字幕的工作流程:
- 下载字幕
network_exec:
{
"command": "yt-dlp",
"args": ["--write-auto-sub", "--skip-download", "-o", "/tmp/%(id)s", "VIDEO_ID"],
"approve": "always"
}- 使用以下命令读取字幕文件
read_file:
{
"path": "/tmp/VIDEO_ID.en.vtt"
}受阻路径: 敏感文件,如 ~/.ssh/*, ~/.aws/*, /etc/shadow, .env 为了安全起见,文件和凭据文件被阻止。
审批流程
当访问新域或运行新命令时,该工具会返回 needs_approval 状态:
{
"status": "needs_approval",
"domain": "example.com",
"message": "Domain \"example.com\" is not in your allowlist. To proceed, call proxy_fetch again with approve: \"once\" for this request only, or approve: \"always\" to remember this domain."
}审批选项:
"once"-仅允许此单个请求"always"-添加到满列表并记住以备将来请求
一旦获得批准 "always",对该域/命令的后续请求会自动工作。
安全
阻止域(SSRF保护)
以下域始终被阻止,以防止服务器端请求伪造攻击:
localhost,127.0.0.1,::1-环回地址169.254.169.254-AWS元数据端点10.*,172.16-31.*,192.168.*-私有IP范围fe80:*,fc00:*,fd00:*-IPv6专用/链路本地
已阻止的命令
出于安全考虑,这些命令被阻止:
- 破坏性:
rm,rmdir,del,mv - 特权升级:
sudo,su,doas - 权限:
chmod,chown,chgrp - 系统:
mkfs,fdisk,dd,format - 包管理器:
apt,brew,yum等等。 - 外壳:
bash,sh,zsh等等。 - 网络滥用:
nc,netcat,telnet
参数验证
命令参数中的Shell运算符被阻止,以防止注入:
;,|,&&,||-命令链>,<-重定向$(, ``,${` -命令/变量替换
速率限制
请求有速率限制,以防止滥用:
- 每个域/命令每分钟60个请求
- 自动冷却,收到信息后重试
配置
配置存储在 ~/.config/mcp-proxy/config.json:
{
"allowedDomains": ["api.github.com", "example.com"],
"blockedDomains": ["localhost", "127.0.0.1", "..."],
"allowedCommands": ["yt-dlp", "curl", "ffmpeg"],
"blockedCommands": ["rm", "sudo", "..."]
}该文件在首次使用时自动创建。用户批准的域/命令将添加到列表中。无法覆盖安全阻止列表。
发展
# Build
npm run build
# Watch mode
npm run watch
# Test with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.js许可证
麻省理工学院
