真棒获取mcp
用于LLM代理的安全、高速URL获取MCP服务器。
______________________________________________________________________
为什么真棒获取mcp
赋予LLM代理URL获取功能会带来以下问题。
1.SSRF(服务器端请求伪造)漏洞
当LLM代理直接获取用户提供的URL时,它可以启用对专用网络的未经授权的访问(127.0.0.1, 10.x.x.x, 169.254.169.254等等)。在云环境中,存在通过IMDS(实例元数据服务)泄露凭据的风险。
真棒获取mcp 确定性地 强制执行URL方案验证、DNS解析结果的私有IP检查和有效载荷大小限制,提供不依赖于LLM判断的安全边界。
2.上下文污染和窗口破坏
当获取结果包含图像二进制文件时,大量base64编码的数据会淹没LLM的上下文窗口。返回数万个字符的原始文档内容可能会超过并破坏上下文窗口。
awesome fetch mcp在返回内容之前将其转换为结构化的Markdown文本。图像由服务器端LLM分析并转换为文本,全文检索的上限为20000个字符,以及 outline 和 metadata 模式只允许提取所需的信息。
3.多租户环境中缺乏治理
# BAD: AI can arbitrarily access other tenants' data
fetch_tool(client_id="123abc", image_path="bobs_image.png")当租户标识符或文件路径作为参数传递给LLM时,无法从结构上阻止通过提示注入进行权限升级。
真棒fetch mcp在工具参数中不包括租户信息。租户身份验证是通过使用短命令牌(JWT)的确定性API访问控制来处理的,将LLM的概率行为与安全性分离。
设计原则
LLM Agent ──(MCP)──▶ awesome-fetch-mcp ──(Playwright)──▶ Internet
This is the deterministic boundary| 原则 | 方法 |
|---|---|
| SSRF防御 | 方案验证+DNS解析IP检查+私有IP拒绝 |
| 上下文保护 | Markdown转换+字符限制+提取模式选择 |
| 二进制处理 | 服务器端LLM图像分析+PDF/Office文本提取 |
| 租户隔离 | JWT短期令牌身份验证+确定性访问控制 |
| 性能 | 并行URL获取+剧作家并发连接控制 |
______________________________________________________________________
快速开始
安装
uv sync
uv run playwright install chromium发射
# Start as a remote MCP server (default: streamable-http, port 8000)
uv run awesome-fetch
# Start with a custom port
MCP_PORT=8888 uv run awesome-fetch
# Start in stdio mode
MCP_TRANSPORT=stdio uv run awesome-fetch______________________________________________________________________
环境变量
环境变量在中定义 src/awesome_fetch_mcp/config.py.
| 变量 | 描述 | 默认值 |
|---|---|---|
MCP_TRANSPORT | 运输方式(streamable-http, stdio, sse) | streamable-http |
MCP_HOST | 要绑定的主机 | 0.0.0.0 |
MCP_PORT | 要收听的端口 | 8000 |
MCP_MODEL_PROVIDER | 模型提供者(bedrock).与一起设置时启用图像分析 MCP_MODEL_NAME | 没有 |
MCP_MODEL_NAME | 型号名称(例如。, global.anthropic.claude-sonnet-4-6) | 无 |
AWS_REGION | AWS基岩区 | us-east-1 |
TOKEN_EXPIRY_MINUTES | JWT令牌到期时间(分钟) | 15 |
ALLOW_UNSAFE_IPS | 允许访问私有IP | false |
HTTP_PROXY | HTTP代理 | 无 |
HTTPS_PROXY | HTTPS代理 | 无 |
NO_PROXY | 代理排除列表 | 无 |
AIOHTTP_SSL_VERIFY | aiohttp的SSL验证 | true |
AUTH_SECRET | 设置后启用JWT令牌身份验证。未设置时无身份验证(开发模式) | 无 |
______________________________________________________________________
工具参考
太棒了
一种获取URL并以结构化Markdown形式返回内容的工具。
参数
| 参数 | 必填 | 默认 | 说明 |
|---|---|---|---|
urls | 是 | - | 要获取的URL列表 |
mode | 没有 | "full" | 提取模式 |
force | 没有 | false | 忽略字符限制(20000个字符) |
wait_for | 没有 | 0 | 动态内容的等待时间(毫秒) |
headers | 否 | 无 | 自定义HTTP标头字典 |
image_prompt | 否 | 无 | 图像分析的附加提示(例如。, "Extract the insurance premium for a 35-year-old male from the table") |
提取模式(mode)
| 模式 | 描述 |
|---|---|
full | 将全文转换为Markdown并返回 |
outline | 仅提取和返回标题(h1-h6) |
metadata | 仅返回标题和描述 |
______________________________________________________________________
客户端配置
克劳德桌面(claude_desktop_config.json)
通过远程MCP连接(可流式传输http):
{
"mcpServers": {
"awesome-fetch": {
"url": "http://localhost:8000/mcp"
}
}
}通过stdio模式连接:
{
"mcpServers": {
"awesome-fetch": {
"command": "uv",
"args": ["--directory", "/path/to/awesome-fetch-mcp", "run", "awesome-fetch"],
"env": {
"MCP_TRANSPORT": "stdio"
}
}
}
}光标(.cursor/mcp.json)
{
"mcpServers": {
"awesome-fetch": {
"url": "http://localhost:8000/mcp"
}
}
}克劳德代码
claude mcp add awesome-fetch http://localhost:8000/mcp______________________________________________________________________
运输方式
此服务器支持3种传输模式。
| 模式 | 用例 | 配置 |
|---|---|---|
streamable-http | 作为远程MCP服务器运行。支持来自多个客户端的同时连接。默认模式。 | MCP_TRANSPORT=streamable-http |
stdio | 通过标准I/O进行通信。直接从本地客户端(如Claude Desktop)启动流程时使用。 | MCP_TRANSPORT=stdio |
sse | 通过服务器发送的事件进行通信。当需要流媒体支持时使用。 | MCP_TRANSPORT=sse |
______________________________________________________________________
建筑
请求的处理分为以下3个步骤。
- 分析 --URL验证(方案验证、通过SSRF保护拒绝私有IP)
- 执行 --与剧作家一起确定内容类型;将HTML转换为Markdown,通过aiohttp从二进制文件(PDF等)中下载和提取文本,使用服务器端LLM分析图像
- 审查 --字符限制检查(in
full模式与force=false,超过20000个字符将返回错误)
支持格式
| 格式 | 处理方法 |
|---|---|
| HTML | 使用Playwright渲染,转换为Markdown |
| 文本提取(PyMuPDF) | |
| DOCX/XLSX/PPTX | 文本提取(python DOCX/openpyxl/python PPTX) |
| 图像 | 服务器端LLM分析,以文本形式返回 |
______________________________________________________________________
部署架构
通过部署令人敬畏的fetch mcp作为AI代理的网络边界,您可以实现深度防御。
核心原则:不要让AI代理直接访问互联网——只允许通过SSRF保护的真棒获取进行外部URL访问。
推荐配置:专用子网+NAT网关
Internet
│
[ IGW/NAT ]
│
┌─── private subnet ───┐
│ │
│ ┌────────────────┐ │
│ │ awesome-fetch │──┼──▶ NAT GW (outbound only)
│ │ MCP server │ │
│ └───▲────────────┘ │
│ │ http (VPC内) │
│ ┌───┴────────────┐ │
│ │ AI Agent App │ │
│ │ (EC2/ECS) │ │
│ └────────────────┘ │
└──────────────────────┘
SG: Internal traffic only- 令人敬畏的fetch和AI Agent都部署在 专用子网
- NAT网关 仅提供出站互联网访问(用于获取URL)
- 公共子网中只有NAT GW/ALB,最大限度地减少了攻击面
- 安全组限制访问
awesome-fetch:8000仅限AI代理
成本优化配置:公用子网(无NAT GW)
为了避免NAT网关成本(固定费用+数据传输费用),可以在公共子网中部署出色的fetch。
private subnet
┌────────────────────┐
│ AI Agent App │
│ (EC2/ECS) │
└───┬────────────────┘
│ http (VPC内)
public subnet
┌───▼────────────────┐
│ awesome-fetch │
│ MCP server │
│───────IGW──────────│
└────────────────────┘- AI Agent部署在 专用子网 (无直接互联网接入)
- 真棒fetch部署在 公用子网,通过IGW获取URL
- 通过安全组将强大的获取入站流量限制为仅限AI代理的SG (拒绝直接访问公共IP)
纵深防御优势
| 层 | 防御 |
|---|---|
| 网络 | AI Agent无法直接访问互联网。URL获取只能通过真棒获取 |
| 应用 | SSRF保护(私有IP拒绝、方案验证、有效载荷大小限制) |
| 认证 | 通过JWT短期令牌隔离租户 |
| 数据 | 上下文窗口保护(字符限制+图像到文本转换) |
即使在应用层SSRF保护中发现了旁路,网络层也会阻止AI代理的直接互联网访问,防止代理发起的SSRF攻击。
