获取MCP服务器
分布式部署的多架构Docker镜像
______________________________________________________________________
📋 目录
______________________________________________________________________
概述
Fetch MCP Server为AI助手提供了强大的web内容检索功能。获取任何网页并接收您首选格式的内容——HTML、JSON、纯文本或Markdown。与VS Code、Cursor、Windsurf、Claude Desktop和任何兼容MCP的客户端无缝集成。
主要特点
✨ 支持多种格式 -HTML、JSON、纯文本和Markdown转换\ 🔒 安全且可配置 -自定义标头、SSL验证、重定向控制\ ⚡ 高性能 -可配置的超时、大小限制和重定向处理\ 🌐 CORS就绪 -基于浏览器的客户端内置CORS支持\ 🚀 多个协议 -HTTP、SSE和WebSocket传输支持\ 🎯 零配置 -使用合理的默认值即可开箱即用\ 🔧 高度可定制 -通过环境变量微调各个方面\ 📊 健康监测 -内置健康检查端点
支持的架构
| 架构 | 状态 | 注释 |
|---|---|---|
| x86-64 | ✅ 稳定 | 英特尔/AMD处理器 |
| ARM64 | ✅ 稳定 | 树莓派,苹果硅 |
可用标签
| 标签 | 稳定性 | 用例 |
|---|---|---|
stable | ⭐⭐⭐ | 生产(推荐) |
latest | ⭐⭐⭐ | 最新稳定功能 |
1.x.x | ⭐⭐⭐ | 版本固定 |
beta | ⚠️ | 仅测试 |
______________________________________________________________________
快速开始
先决条件
- Docker引擎23.0+
- 获取网络内容的网络访问
Docker Compose(推荐)
services:
fetch-mcp:
image: mekayelanik/fetch-mcp:stable
container_name: fetch-mcp
restart: unless-stopped
ports:
- "8060:8060"
environment:
- PORT=8060
- PUID=1000
- PGID=1000
- TZ=Asia/Dhaka
- PROTOCOL=SHTTP
- CORS=*
- DEFAULT_LIMIT=0
- FETCH_TIMEOUT=30000
- MAX_REDIRECTS=5
- FOLLOW_REDIRECTS=true
- VERIFY_SSL=true部署:
docker compose up -d
docker compose logs -f fetch-mcpDocker命令行界面
docker run -d \
--name=fetch-mcp \
--restart=unless-stopped \
-p 8060:8060 \
-e PORT=8060 \
-e PUID=1000 \
-e PGID=1000 \
-e PROTOCOL=SHTTP \
-e CORS=* \
mekayelanik/fetch-mcp:stable访问端点
| 协议 | 端点 | 用例 |
|---|---|---|
| 超文本传输协议 | http://host-ip:8060/mcp | 推荐 |
| 上海证券交易所 | http://host-ip:8060/sse | 实时流媒体 |
| WebSocket | ws://host-ip:8060/message | 双向 |
| 健康 | http://host-ip:8060/healthz | 监测 |
⏱️ 容器启动后5-10秒内服务器就绪
______________________________________________________________________
配置
环境变量
核心设置
| 变量 | 默认值 | 描述 |
|---|---|---|
PORT | 8060 | 服务器端口(1-65535) |
PUID | 1000 | 文件权限的用户ID |
PGID | 1000 | 文件权限的组ID |
TZ | Asia/Dhaka | 集装箱时区 |
PROTOCOL | SHTTP | 传输协议 |
CORS | _(无)_ | 跨源配置 |
获取设置
| 变量 | 默认值 | 描述 |
|---|---|---|
DEFAULT_LIMIT | 0 | 最大响应大小(字节,0=无限制) |
FETCH_TIMEOUT | 30000 | 请求超时(毫秒,1000-300000) |
MAX_REDIRECTS | 5 | 最大重定向关注次数(0-20) |
FOLLOW_REDIRECTS | true | 启用自动重定向跟踪 |
VERIFY_SSL | true | 启用SSL证书验证 |
USER_AGENT | _(默认)_ | 自定义用户代理标头 |
高级设置
| 变量 | 默认值 | 描述 |
|---|---|---|
RATE_LIMIT | 0 | 每台设备的最大请求数 RATE_LIMIT_PERIOD 按IP(0 =禁用) |
RATE_LIMIT_PERIOD | 10s | 用于速率限制的滑动窗口(例如。, 10s, 1m, 1h) |
MAX_CONNECTIONS_PER_IP | 0 | 每个IP的最大并发连接数(0 =禁用) |
IP_ALLOWLIST | *(空)* | 允许逗号分隔的IPs/CIDR(阻止所有其他IP/CIDR) |
IP_BLOCKLIST | *(空)* | 要阻止的逗号分隔IP/CIDR |
DEBUG_MODE | false | 启用调试模式(true, false, verbose) |
协议配置
# HTTP/Streamable HTTP (Recommended)
environment:
- PROTOCOL=SHTTP
# Server-Sent Events
environment:
- PROTOCOL=SSE
# WebSocket
environment:
- PROTOCOL=WSCORS配置
# Development - Allow all origins
environment:
- CORS=*
# Production - Specific domains
environment:
- CORS=https://example.com,https://app.example.com
# Mixed domains and IPs
environment:
- CORS=https://example.com,192.168.1.100:3000,/.*\.myapp\.com$/
# Regex patterns
environment:
- CORS=/^https:\/\/.*\.example\.com$/⚠️ 安全: 从不使用 CORS=* 在生产环境中尺寸限制示例
# Unlimited (default)
environment:
- DEFAULT_LIMIT=0
# 1 MB limit
environment:
- DEFAULT_LIMIT=1048576
# 5 MB limit
environment:
- DEFAULT_LIMIT=5242880
# 10 MB limit
environment:
- DEFAULT_LIMIT=10485760超时示例
# Quick responses (10 seconds)
environment:
- FETCH_TIMEOUT=10000
# Default (30 seconds)
environment:
- FETCH_TIMEOUT=30000
# Long-running requests (2 minutes)
environment:
- FETCH_TIMEOUT=120000自定义用户代理
environment:
- USER_AGENT=MyBot/1.0 (+https://example.com/bot)______________________________________________________________________
MCP客户端设置
运输兼容性
| 客户端 | HTTP | SSE | WebSocket | 推荐 |
|---|---|---|---|---|
| VS代码(Cline/Roo-Cline) | ✅ | ✅ | ❌ | HTTP |
| 克劳德桌面版 | ✅ | ✅ | ⚠️\* | HTTP |
| 光标 | ✅ | ✅ | ⚠️\* | HTTP |
| 帆板运动 | ✅ | ✅ | ⚠️\* | HTTP |
⚠️ \*WebSocket支持是实验性的
VS代码(Cline/Roo-Cline)
添加 .vscode/settings.json:
{
"mcp.servers": {
"fetch": {
"url": "http://host-ip:8060/mcp",
"transport": "http",
"autoApprove": [
"fetch_html",
"fetch_json",
"fetch_txt",
"fetch_markdown"
]
}
}
}克劳德桌面版
配置位置:
- Linux:
~/.config/Claude/claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"fetch": {
"transport": "http",
"url": "http://localhost:8060/mcp"
}
}
}光标
添加 ~/.cursor/mcp.json:
{
"mcpServers": {
"fetch": {
"transport": "http",
"url": "http://host-ip:8060/mcp"
}
}
}风帆冲浪(Codeium)
添加 .codeium/mcp_settings.json:
{
"mcpServers": {
"fetch": {
"transport": "http",
"url": "http://host-ip:8060/mcp"
}
}
}克劳德代码
添加 ~/.config/claude-code/mcp_config.json:
{
"mcpServers": {
"fetch": {
"transport": "http",
"url": "http://localhost:8060/mcp"
}
}
}或者通过CLI进行配置:
claude-code config mcp add fetch \
--transport http \
--url http://localhost:8060/mcpGitHub Copilot命令行界面
添加 ~/.github-copilot/mcp.json:
{
"mcpServers": {
"fetch": {
"transport": "http",
"url": "http://host-ip:8060/mcp"
}
}
}或者使用环境变量:
export GITHUB_COPILOT_MCP_SERVERS='{"fetch":{"transport":"http","url":"http://localhost:8060/mcp"}}'______________________________________________________________________
可用工具
🌐 fetch_html
获取一个网站并返回原始HTML内容。
参数:
url(string,必填):要获取的网站的URLheaders(object,可选):请求的自定义标头
使用案例:
- 抓取结构化web数据
- 分析页面结构
- 测试web应用程序
- 提取特定的HTML元素
示例提示:
- “从以下位置获取HTMLhttps://example.com"
- “获取HTMLhttps://news.ycombinator.com带有自定义标题”
- “从此页面下载原始HTML”
______________________________________________________________________
📦 fetch_json
从URL获取并解析JSON数据。
参数:
url(string,必填):JSON资源的URLheaders(object,可选):请求的自定义标头
使用案例:
- 使用REST API
- 读取配置文件
- 处理结构化数据
- API测试和调试
示例提示:
- “从以下位置获取JSONhttps://api.example.com/data"
- “从此API终结点获取JSON数据”
- “从下载并解析JSONhttps://example.com/config.json"
______________________________________________________________________
📄 fetch_txt
获取一个网站并返回干净的纯文本(HTML标签已删除)。
参数:
url(string,必填):要获取的网站的URLheaders(object,可选):请求的自定义标头
使用案例:
- 阅读文章和博客文章
- 文本分析和处理
- 无标记的内容提取
- 以可访问性为重点的内容检索
示例提示:
- “从获取文本内容https://blog.example.com/post"
- “从本文中获取纯文本”
- “从中提取文本https://example.com没有HTML”
______________________________________________________________________
📝 fetch_markdown
获取一个网站并将HTML转换为Markdown格式。
参数:
url(string,必填):要获取的网站的URLheaders(object,可选):请求的自定义标头
使用案例:
- 将网页内容转换为Markdown
- 从网页创建文档
- 以可读格式存档web内容
- 内容迁移到基于Markdown的系统
示例提示:
- “转换https://example.com到Markdown”
- “以Markdown格式获取此网页”
- “获取此文章并将其转换为Markdown”
______________________________________________________________________
高级用法
自定义标题示例
{
"url": "https://api.example.com/data",
"headers": {
"Authorization": "Bearer YOUR_TOKEN",
"Accept": "application/json",
"User-Agent": "MyApp/1.0"
}
}生产配置
services:
fetch-mcp:
image: mekayelanik/fetch-mcp:stable
container_name: fetch-mcp
restart: unless-stopped
ports:
- "8060:8060"
environment:
# Core settings
- PORT=8060
- PUID=1000
- PGID=1000
- TZ=UTC
- PROTOCOL=SHTTP
# Security
- CORS=https://app.example.com,https://admin.example.com
- VERIFY_SSL=true
# Performance
- DEFAULT_LIMIT=5242880 # 5 MB limit
- FETCH_TIMEOUT=30000 # 30 seconds
- MAX_REDIRECTS=5
- FOLLOW_REDIRECTS=true
# Custom identification
- USER_AGENT=MyCompany-Bot/1.0 (+https://example.com/bot)
# Resource limits
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
# Health check
healthcheck:
test: ["CMD", "nc", "-z", "localhost", "8060"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s反向代理设置
Nginx
server {
listen 80;
server_name fetch.example.com;
location / {
proxy_pass http://localhost:8060;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Timeouts for long-running requests
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
}
}交通
services:
fetch-mcp:
image: mekayelanik/fetch-mcp:stable
labels:
- "traefik.enable=true"
- "traefik.http.routers.fetch-mcp.rule=Host(`fetch.example.com`)"
- "traefik.http.routers.fetch-mcp.entrypoints=websecure"
- "traefik.http.routers.fetch-mcp.tls.certresolver=myresolver"
- "traefik.http.services.fetch-mcp.loadbalancer.server.port=8060"Docker网络设置
services:
fetch-mcp:
image: mekayelanik/fetch-mcp:stable
container_name: fetch-mcp
networks:
- mcp-network
environment:
- PORT=8060
- PROTOCOL=SHTTP
other-service:
image: other-service:latest
networks:
- mcp-network
environment:
- FETCH_MCP_URL=http://fetch-mcp:8060/mcp
networks:
mcp-network:
driver: bridge多个实例
services:
fetch-mcp-primary:
image: mekayelanik/fetch-mcp:stable
container_name: fetch-mcp-primary
ports:
- "8060:8060"
environment:
- PORT=8060
- FETCH_TIMEOUT=30000
fetch-mcp-fast:
image: mekayelanik/fetch-mcp:stable
container_name: fetch-mcp-fast
ports:
- "8061:8060"
environment:
- PORT=8060
- FETCH_TIMEOUT=10000
- DEFAULT_LIMIT=1048576 # 1 MB for quick fetches
fetch-mcp-large:
image: mekayelanik/fetch-mcp:stable
container_name: fetch-mcp-large
ports:
- "8062:8060"
environment:
- PORT=8060
- FETCH_TIMEOUT=120000
- DEFAULT_LIMIT=52428800 # 50 MB for large content______________________________________________________________________
故障排除
飞行前检查表
- ✅ Docker 23.0+
- ✅ 端口8060可用
- ✅ 网络连接
- ✅ 最新稳定图像
- ✅ 正确的环境变量
常见问题
容器无法启动
# Check logs
docker logs fetch-mcp
# Pull latest image
docker pull mekayelanik/fetch-mcp:stable
# Restart container
docker restart fetch-mcp连接被拒绝
# Verify container is running
docker ps | grep fetch-mcp
# Check port binding
docker port fetch-mcp
# Test health endpoint
curl http://localhost:8060/healthz超时错误
# Increase timeout for slow websites
environment:
- FETCH_TIMEOUT=60000 # 60 seconds
# Adjust redirect limit
environment:
- MAX_REDIRECTS=10SSL证书错误
# Disable SSL verification (not recommended for production)
environment:
- VERIFY_SSL=false
# Or update CA certificates in container
docker exec fetch-mcp apk add --update ca-certificatesCORS错误
# Development - allow all
environment:
- CORS=*
# Production - specific origins
environment:
- CORS=https://yourdomain.com,https://app.yourdomain.com权限错误
# Check your user ID
id $USER
# Update PUID/PGID
environment:
- PUID=1001 # Your actual UID
- PGID=1001 # Your actual GID超出大小限制
# Increase or remove size limit
environment:
- DEFAULT_LIMIT=0 # Unlimited
# or
- DEFAULT_LIMIT=10485760 # 10 MB调试模式
# Enable verbose debugging
environment:
- DEBUG_MODE=verbose
# Then check logs
docker logs -f fetch-mcp健康检查测试
# Basic health check
curl http://localhost:8060/healthz
# Test MCP endpoint
curl http://localhost:8060/mcp
# Test with tool invocation
curl -X POST http://localhost:8060/mcp \
-H "Content-Type: application/json" \
-d '{"method":"tools/list"}'______________________________________________________________________
资源与支持
文档
- 📦
- 🔧
- 🐳
MCP资源
获取帮助
Docker镜像问题:
一般问题:
- 检查日志:
docker logs fetch-mcp - 测试健康状况:
curl http://localhost:8060/healthz - 查看此README中的配置
更新
# Docker Compose
docker compose pull
docker compose up -d
# Docker CLI
docker pull mekayelanik/fetch-mcp:stable
docker stop fetch-mcp
docker rm fetch-mcp
# Re-run your docker run command版本固定
# Use specific version
services:
fetch-mcp:
image: mekayelanik/fetch-mcp:1.0.0
# Or use stable tag (recommended)
services:
fetch-mcp:
image: mekayelanik/fetch-mcp:stable______________________________________________________________________
性能提示
优化速度
environment:
- FETCH_TIMEOUT=10000 # Faster timeout
- DEFAULT_LIMIT=1048576 # 1 MB limit
- MAX_REDIRECTS=3 # Fewer redirects
- FOLLOW_REDIRECTS=true针对大型内容进行优化
environment:
- FETCH_TIMEOUT=120000 # 2 minutes
- DEFAULT_LIMIT=0 # No limit
- MAX_REDIRECTS=10资源限制
deploy:
resources:
limits:
cpus: '2.0'
memory: 1G
reservations:
cpus: '1.0'
memory: 512M速率限制和IP访问控制
- 速率限制: 集
RATE_LIMIT=100允许每100个请求RATE_LIMIT_PERIOD(默认值10s)每个IP。超过限制将返回HTTP 429Retry-After头球 - 连接限制: 集
MAX_CONNECTIONS_PER_IP=50限制每个IP的并发连接。超过此值将返回HTTP 429。 - IP阻止列表: 集
IP_BLOCKLIST=192.0.2.0/24,198.51.100.5以阻止特定IP/CIDR。被阻止的IP接收HTTP 403。 - IP地址列表: 集
IP_ALLOWLIST=10.0.0.0/8,192.168.1.0/24只允许列出的IP/CIDR。所有其他人都接收HTTP 403。始终允许本地主机。 - 所有功能默认为禁用。根据需要进行组合——在分配列表之前检查块列表。
______________________________________________________________________
安全最佳实践
- **从不使用
CORS=*生产中** - 总是使用
VERIFY_SSL=true除了开发 - 设置适当的尺寸限制 防止滥用
- 使用反向代理 具有速率限制
- 以非root身份运行 (默认puid/PGID)
- 监控日志 可疑活动
- 保持Docker镜像更新
- 使用特定的版本标签 用于生产
______________________________________________________________________
许可证
Docker镜像:GPL许可证-请参阅 许可证 了解详情。
免责声明: 非官方Docker镜像 mcp获取服务器。用户有责任遵守所取网站的服务条款和适用法律。
______________________________________________________________________
