🚀 superFetch MCP Server
superFetch MCP Server是一個模型上下文協議(MCP)服務器,它可以抓取網頁,使用Mozilla Readability提取可讀內容,並返回對AI友好的JSONL或Markdown格式數據。
快速開始 | 如何選擇工具 | 可用工具 | 資源 | 配置 | 安全 | 開發
已發佈到 MCP Registry - 搜索 io.github.j0hanz/superfetch
⚠️ 重要提示
此服務器可以代表AI助手訪問URL。內置的SSRF保護會阻止私有IP範圍和雲元數據端點,但在敏感環境中部署時仍需謹慎。
✨ 主要特性
| 特性 |
描述 |
| 智能提取 |
啟用Mozilla Readability時,可去除廣告、導航欄和樣板內容 |
| JSONL + Markdown |
提供JSONL語義塊或帶前置元數據的簡潔Markdown格式輸出 |
| 結構化塊 |
支持標題、段落、列表、代碼、表格、圖像、塊引用等結構化內容 |
| 內置緩存 |
具有TTL、最大鍵數和資源訂閱功能的內存緩存 |
| 彈性抓取 |
支持重定向處理,並通過指數退避和抖動機制進行重試 |
| 安全優先 |
提供URL驗證、SSRF/DNS/IP黑名單、頭部清理等安全功能 |
| HTTP模式 |
支持API密鑰認證、會話管理、速率限制和CORS跨域資源共享 |
🚀 快速開始
將superFetch添加到您的MCP客戶端配置中,無需安裝。
Claude Desktop
在claude_desktop_config.json中添加以下內容:
{
"mcpServers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"]
}
}
}
VS Code
在工作區的.vscode/mcp.json中添加以下內容:
{
"servers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"]
}
}
}
自定義配置
通過在env屬性中添加環境變量來配置SuperFetch的行為:
{
"servers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"],
"env": {
"CACHE_TTL": "7200",
"LOG_LEVEL": "debug",
"FETCH_TIMEOUT": "60000"
}
}
}
}
更多可用選項請參考配置部分。
Cursor
- 打開Cursor設置
- 轉到 功能 > MCP服務器
- 點擊 "+ 添加新的全局MCP服務器"
- 添加以下配置:
{
"mcpServers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"]
}
}
}
💡 使用建議
(Windows):如果遇到問題,請嘗試使用:cmd /c "npx -y @j0hanz/superfetch@latest --stdio"
Codex IDE
在~/.codex/config.toml文件中添加以下內容:
基本配置:
[mcp_servers.superfetch]
command = "npx"
args = ["-y", "@j0hanz/superfetch@latest", "--stdio"]
帶環境變量的配置:
[mcp_servers.superfetch]
command = "npx"
args = ["-y", "@j0hanz/superfetch@latest", "--stdio"]
env = { CACHE_TTL = "7200", LOG_LEVEL = "debug", FETCH_TIMEOUT = "60000" }
訪問配置文件:點擊齒輪圖標 -> "Codex設置 > 打開config.toml"
文檔:Codex MCP指南
Cline(VS Code擴展)
打開Cline MCP設置文件:
macOS:
code ~/Library/Application\ Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
Windows:
code %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json
添加以下配置:
{
"mcpServers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"],
"disabled": false,
"autoApprove": []
}
}
}
Windsurf
在./codeium/windsurf/model_config.json中添加以下內容:
{
"mcpServers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"]
}
}
}
Claude Desktop(配置文件位置)
macOS:
open -e "$HOME/Library/Application Support/Claude/claude_desktop_config.json"
code "$HOME/Library/Application Support/Claude/claude_desktop_config.json"
Windows:
code %APPDATA%\Claude\claude_desktop_config.json
📦 安裝指南
全局安裝
npm install -g @j0hanz/superfetch
superfetch --stdio
superfetch
從源代碼安裝
git clone https://github.com/j0hanz/super-fetch-mcp-server.git
cd super-fetch-mcp-server
npm install
npm run build
運行服務器
stdio模式(直接MCP集成)
node dist/index.js --stdio
HTTP模式(默認)
HTTP模式需要API_KEY,並且除非ALLOW_REMOTE=true,否則僅綁定到迴環地址。
API_KEY=supersecret npx -y @j0hanz/superfetch@latest
Windows(PowerShell):
$env:API_KEY = "supersecret"
npx -y @j0hanz/superfetch@latest
端點(所有端點都需要Authorization: Bearer <API_KEY>或X-API-Key: <API_KEY>):
GET /health
POST /mcp
GET /mcp(SSE流)
DELETE /mcp
GET /mcp/downloads/:namespace/:hash
會話通過mcp-session-id頭部進行管理(詳見HTTP模式詳情)。
💻 使用示例
基礎用法
以下是使用fetch-url工具的示例:
{
"url": "https://example.com/article",
"title": "Example Article",
"contentBlocks": 42,
"fetchedAt": "2025-12-11T10:30:00.000Z",
"format": "jsonl",
"contentSize": 12345,
"cached": false,
"content": "{\"type\":\"metadata\",\"title\":\"Example Article\",\"url\":\"https://example.com/article\"}\n{\"type\":\"heading\",\"level\":1,\"text\":\"Introduction\"}"
}
高級用法
以下是使用fetch-markdown工具幷包含文件信息的示例:
{
"url": "https://example.com/docs",
"title": "Documentation",
"fetchedAt": "2025-12-11T10:30:00.000Z",
"markdown": "---\ntitle: Documentation\nsource: \"https://example.com/docs\"\n---\n\n# Getting Started\n\nWelcome...",
"contentSize": 9876,
"cached": false,
"truncated": false,
"file": {
"downloadUrl": "/mcp/downloads/markdown/abc123def456",
"fileName": "documentation.md",
"expiresAt": "2025-12-11T11:30:00.000Z"
}
}
可用工具
工具響應說明
兩個工具都會返回:
structuredContent,包含機器可讀的字段
content塊,其中包括:
- 一個
text塊,包含structuredContent的JSON數據
- 一個
resource塊,包含一個file:///... URI,指向完整內容(適合stdio模式)
- 當內容超過
MAX_INLINE_CONTENT_CHARS且緩存啟用時,會有一個resource_link塊
如果內容過大且緩存禁用,服務器會截斷輸出並追加...[truncated]。
fetch-url
抓取網頁並將其轉換為包含語義內容塊的AI可讀JSONL格式。您也可以通過format: "markdown"請求Markdown格式。
| 參數 |
類型 |
默認值 |
描述 |
url |
字符串 |
必需 |
要抓取的URL |
format |
"jsonl" | "markdown" |
"jsonl" |
輸出格式 |
extractMainContent |
布爾值 |
true |
使用Readability提取主要內容 |
includeMetadata |
布爾值 |
true |
包含頁面元數據 |
maxContentLength |
數字 |
- |
最大內容長度(字符數) |
customHeaders |
對象 |
- |
自定義HTTP頭部(會進行清理) |
timeout |
數字 |
30000 |
請求超時時間(毫秒,範圍1000 - 120000) |
retries |
數字 |
3 |
重試次數(範圍1 - 10) |
fetch-markdown
抓取網頁並將其轉換為簡潔的Markdown格式,可選擇包含前置元數據。
| 參數 |
類型 |
默認值 |
描述 |
url |
字符串 |
必需 |
要抓取的URL |
extractMainContent |
布爾值 |
true |
僅提取主要內容 |
includeMetadata |
布爾值 |
true |
包含YAML前置元數據 |
maxContentLength |
數字 |
- |
最大內容長度(字符數) |
customHeaders |
對象 |
- |
自定義HTTP頭部(會進行清理) |
timeout |
數字 |
30000 |
請求超時時間(毫秒,範圍1000 - 120000) |
retries |
數字 |
3 |
重試次數(範圍1 - 10) |
大內容處理
- 內聯限制:
MAX_INLINE_CONTENT_CHARS(默認20000)。
- 如果內容超過限制且緩存啟用,響應會包含
resourceUri和resource_link塊。
- 如果緩存禁用,內容會被截斷並追加
...[truncated]。
- 可以通過每個請求的
maxContentLength參數設置更低的限制。
資源
| URI |
描述 |
superfetch://health |
即時服務器健康和內存檢查 |
superfetch://stats |
服務器統計信息和緩存指標 |
superfetch://cache/list |
列出緩存條目及其資源URI |
superfetch://cache/{namespace}/{urlHash} |
緩存內容條目(namespace:url,markdown) |
資源訂閱會在緩存條目更新時通知客戶端。
下載端點(HTTP模式)
在HTTP模式下運行時,可以直接下載緩存的內容。
端點
GET /mcp/downloads/:namespace/:hash
namespace:markdown 或 url
- 需要認證(
Authorization: Bearer <API_KEY> 或 X-API-Key: <API_KEY>)
響應頭
| 頭部 |
值 |
Content-Type |
text/markdown; charset=utf-8 或 application/x-ndjson; charset=utf-8 |
Content-Disposition |
attachment; filename="<name>" |
Cache-Control |
private, max-age=<CACHE_TTL> |
示例用法
curl -H "Authorization: Bearer $API_KEY" \
http://localhost:3000/mcp/downloads/markdown/abc123.def456 \
-o article.md
錯誤響應
| 狀態 |
代碼 |
描述 |
| 400 |
BAD_REQUEST |
無效的命名空間或哈希格式 |
| 404 |
NOT_FOUND |
內容未找到或已過期 |
| 503 |
SERVICE_UNAVAILABLE |
下載服務不可用 |
📚 詳細文檔
配置
通過在MCP客戶端配置的env屬性中添加環境變量來配置SuperFetch的行為。
| 類別 |
變量 |
默認值 |
有效值 |
描述 |
| 抓取設置 |
FETCH_TIMEOUT |
30000 |
5000 - 120000 |
請求超時時間(毫秒) |
| 抓取設置 |
USER_AGENT |
superFetch-MCP/1.0 |
任何有效的用戶代理 |
自定義用戶代理 |
| 緩存設置 |
CACHE_ENABLED |
true |
true / false |
啟用響應緩存 |
| 緩存設置 |
CACHE_TTL |
3600 |
60 - 86400 |
緩存生命週期(秒) |
| 緩存設置 |
CACHE_MAX_KEYS |
100 |
10 - 1000 |
最大緩存條目數 |
| 輸出設置 |
MAX_INLINE_CONTENT_CHARS |
20000 |
1000 - 200000 |
內聯內容限制,超過此限制會生成resource_link |
| 日誌設置 |
LOG_LEVEL |
info |
debug / info / warn / error |
日誌詳細程度 |
| 日誌設置 |
ENABLE_LOGGING |
true |
true / false |
啟用/禁用日誌記錄 |
| 提取設置 |
EXTRACT_MAIN_CONTENT |
true |
true / false |
使用Readability提取主要內容 |
| 提取設置 |
INCLUDE_METADATA |
true |
true / false |
包含元數據/前置元數據 |
| HTTP服務器設置 |
API_KEY |
- |
- |
HTTP模式必需 |
| HTTP服務器設置 |
HOST |
127.0.0.1 |
- |
HTTP服務器主機 |
| HTTP服務器設置 |
PORT |
3000 |
- |
HTTP服務器端口 |
| HTTP服務器設置 |
ALLOW_REMOTE |
false |
true / false |
允許綁定到非迴環接口 |
| HTTP服務器設置 |
TRUST_PROXY |
false |
true / false |
信任代理頭部以解析客戶端IP |
| HTTP服務器設置 |
SESSION_TTL_MS |
1800000 |
- |
會話TTL(毫秒,30分鐘) |
| HTTP服務器設置 |
SESSION_INIT_TIMEOUT_MS |
10000 |
- |
會話初始化允許的時間 |
| HTTP服務器設置 |
MAX_SESSIONS |
200 |
- |
最大活動會話數 |
| CORS設置 |
ALLOWED_ORIGINS |
[] |
逗號分隔的允許來源列表 |
允許的來源列表 |
| CORS設置 |
CORS_ALLOW_ALL |
false |
true / false |
允許所有來源(僅用於開發) |
| 速率限制 |
RATE_LIMIT_ENABLED |
true |
true / false |
啟用/禁用HTTP速率限制 |
| 速率限制 |
RATE_LIMIT_MAX |
100 |
1 - 10000 |
每個IP在每個窗口內的最大請求數 |
| 速率限制 |
RATE_LIMIT_WINDOW_MS |
60000 |
1000 - 3600000 |
速率限制窗口(毫秒) |
| 速率限制 |
RATE_LIMIT_CLEANUP_MS |
60000 |
10000 - 3600000 |
限制器條目的清理間隔 |
配置預設
默認(推薦) - 無需配置
{
"servers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"]
}
}
}
調試模式 - 詳細日誌記錄,無緩存
{
"servers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"],
"env": {
"LOG_LEVEL": "debug",
"CACHE_ENABLED": "false"
}
}
}
}
性能模式 - 積極緩存以提高速度
{
"servers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"],
"env": {
"CACHE_TTL": "7200",
"CACHE_MAX_KEYS": "500",
"LOG_LEVEL": "warn"
}
}
}
}
自定義用戶代理 - 用於阻止機器人的網站
{
"servers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"],
"env": {
"USER_AGENT": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
}
}
}
慢速網絡 / CI - 延長超時時間
{
"servers": {
"superFetch": {
"command": "npx",
"args": ["-y", "@j0hanz/superfetch@latest", "--stdio"],
"env": {
"FETCH_TIMEOUT": "60000",
"CACHE_ENABLED": "false",
"LOG_LEVEL": "warn"
}
}
}
}
HTTP模式詳情
HTTP模式使用MCP可流式HTTP傳輸。工作流程如下:
- 發送
POST /mcp請求,包含initialize請求,且不包含mcp-session-id頭部。
- 服務器在響應頭中返回
mcp-session-id。
- 在後續的
POST /mcp、GET /mcp和DELETE /mcp請求中使用該頭部。
如果達到MAX_SESSIONS,服務器會盡可能淘汰最舊的會話,否則返回503。
內容塊類型
JSONL輸出包含語義內容塊:
| 類型 |
描述 |
metadata |
最小頁面元數據(類型、標題、URL) |
heading |
標題(h1 - h6),帶有級別指示符 |
paragraph |
文本段落 |
list |
有序/無序列表 |
code |
代碼塊,可選語言 |
table |
帶有表頭和行的表格 |
image |
帶有src和alt文本的圖像 |
blockquote |
塊引用文本 |
🔧 技術細節
安全
SSRF保護
阻止的目標包括:
- 本地主機和迴環地址
- 私有IP範圍(
10.x.x.x、172.16 - 31.x.x、192.168.x.x)
- 雲元數據端點(AWS、GCP、Azure)
- IPv6鏈路本地和唯一本地地址
- 內部後綴,如
.local和.internal
URL驗證
- 僅允許
http和https URL
- URL中不允許嵌入憑據
- 最大URL長度:2048字符
頭部清理
阻止的頭部:host、authorization、cookie、x-forwarded-for、x-real-ip、proxy-authorization
速率限制
默認:每個IP 100請求/分鐘(僅HTTP模式)。可通過RATE_LIMIT_MAX和RATE_LIMIT_WINDOW_MS進行配置。
開發
腳本
| 命令 |
描述 |
npm run dev |
開發服務器,支持熱重載 |
npm run build |
編譯TypeScript |
npm start |
生產服務器 |
npm run lint |
運行ESLint |
npm run type-check |
TypeScript類型檢查 |
npm run format |
使用Prettier格式化代碼 |
npm test |
運行Vitest測試 |
npm run test:coverage |
運行帶覆蓋率的測試 |
npm run bench |
運行最小性能基準測試 |
npm run release |
創建新版本 |
npm run knip |
查找未使用的導出/依賴項 |
npm run knip:fix |
自動修復未使用的代碼 |
技術棧
| 類別 |
技術 |
| 運行時 |
Node.js >=20.12 |
| 語言 |
TypeScript 5.9 |
| MCP SDK |
@modelcontextprotocol/sdk ^1.25.1 |
| 內容提取 |
@mozilla/readability ^0.6.0 |
| HTML解析 |
Cheerio ^1.1.2, LinkeDOM ^0.18.12 |
| Markdown |
Turndown ^7.2.2 |
| HTTP |
Express ^5.2.1, undici ^6.22.0 |
| 驗證 |
Zod ^3.24.1 |
📄 許可證
文檔中未提及許可證相關信息。
貢獻
- 分叉倉庫
- 創建功能分支:
git checkout -b feature/amazing-feature
- 確保代碼通過檢查:
npm run lint
- 運行測試:
npm test
- 提交更改:
git commit -m 'Add amazing feature'
- 推送:
git push origin feature/amazing-feature
- 打開拉取請求
其他MCP服務器示例,請參考:github.com/modelcontextprotocol/servers