项目简介
MCP Fetch Server 是一个基于 Go 语言开发的 MCP 服务器,它提供 URL 内容抓取功能,并针对 AI 模型进行了优化。该服务器能够从指定的 URL 获取网页内容,自动提取正文,去除广告、导航等无关元素,并将其转换为 token 效率更高的 Markdown 格式。这可以显著减少 LLM 处理上下文时的 token 消耗,同时保留关键信息。
主要功能点
- MCP 协议兼容: 遵循 Model Context Protocol (MCP) 规范,通过 JSON-RPC 接口提供工具执行能力。
- URL 内容抓取: 能够抓取指定 URL 的网页内容,并自动进行格式转换。
- Token 效率优化: 仅提取网页主要内容,去除冗余信息,减少 AI 模型的 token 使用量。
- Markdown 格式转换: 将 HTML 内容转换为 Markdown 格式,提高可读性和 token 效率。
- 增强内容可读性: 使用 go-readability 库,保留标题和重要内容,去除干扰元素。
- 智能内容处理: 在转换后的内容中包含标题和作者信息,并在转换失败时提供回退处理。
- 内容类型检测: 根据 Content-Type 头部信息返回适当的内容。
- 内容控制: 支持内容长度限制、偏移量和原始内容检索。
安装步骤
推荐使用 Docker:
-
拉取 Docker 镜像:
docker pull cnosuke/mcp-fetch:latest -
运行 Docker 容器:
docker run -i --rm cnosuke/mcp-fetch:latest
本地 Go 二进制文件运行 (适用于开发):
-
安装 Go 环境: 确保已安装 Go 1.24 或更高版本。
-
构建服务器:
make bin/mcp-fetch -
运行服务器:
./bin/mcp-fetch server --config=config.yml
服务器配置
MCP 客户端 (例如 Claude Desktop) 需要配置 MCP 服务器的启动命令才能连接到 MCP Fetch Server。配置信息通常在客户端的配置文件中 (例如 'claude_desktop_config.json')。
使用 Docker 镜像的配置:
{ "mcpServers": { "fetch": { // 服务器名称,客户端配置中用于标识该服务器 "command": "docker", // 启动服务器的命令,这里使用 docker "args": ["run", "-i", "--rm", "cnosuke/mcp-fetch:latest"] // 命令参数,运行 docker 镜像 } } }
使用 Go 二进制文件的配置:
{ "mcpServers": { "fetch": { // 服务器名称,客户端配置中用于标识该服务器 "command": "./bin/mcp-fetch", // 启动服务器的命令,指向编译后的二进制文件 "args": ["server"], // 命令参数,运行 server 子命令 "env": { // 环境变量配置(可选,根据需要配置) "LOG_PATH": "mcp-fetch.log", // 日志文件路径 "DEBUG": "false", // 是否开启debug模式 "FETCH_TIMEOUT": "10", // 请求超时时间 (秒) "FETCH_USER_AGENT": "mcp-fetch/1.0", // 自定义 User-Agent "FETCH_MAX_URLS": "20", // 每次请求最多处理的 URL 数量 "FETCH_MAX_WORKERS": "20", // 并发处理 URL 的 worker 数量 "FETCH_DEFAULT_MAX_LENGTH": "5000" // 默认内容最大长度 } } } }
基本使用方法
MCP 客户端通过发送 JSON-RPC 请求与 MCP Fetch Server 交互,以执行 'fetch' 和 'fetch_multiple' 工具。
'fetch' 工具 (抓取单个 URL):
{ "jsonrpc": "2.0", "method": "MCP.Tool.CallTool", "params": { "tool_name": "fetch", "arguments": { "url": "https://example.com", // 必填,要抓取的 URL "max_length": 1000, // 可选,返回内容的最大字符数,默认 5000 "start_index": 500, // 可选,内容起始字符索引,默认 0 "raw": false // 可选,是否获取原始内容 (不进行 Markdown 转换),默认 false } }, "id": "1" }
'fetch_multiple' 工具 (批量抓取 URL):
{ "jsonrpc": "2.0", "method": "MCP.Tool.CallTool", "params": { "tool_name": "fetch_multiple", "arguments": { "urls": [ // 必填,要抓取的 URL 列表 "https://1.example.com", "https://2.example.net", "https://3.example.org" ], "max_length": 9000, // 可选,所有 URL 返回内容总字符数限制,默认 5000 "raw": false // 可选,是否获取原始内容 (不进行 Markdown 转换),默认 false } }, "id": "2" }
注意: 'max_length' 参数用于限制返回内容的长度,以节省 token 消耗。对于 'fetch_multiple' 工具,'max_length' 是所有 URL 内容的总长度限制,服务器会根据 URL 数量和内容长度智能分配。
信息
分类
网页与API