README
🚀 📂 MCP数据获取服务器
MCP数据获取服务器 是一个安全的沙箱化服务器,它通过 模型控制协议(MCP) 在不执行 JavaScript 的情况下获取网页内容并提取数据。
📖 目录
✨ 主要特性
- 安全的网页获取 – 去除脚本、iframe 和 cookie 横幅;不执行 JavaScript。
- 丰富的数据提取 – 检索链接、元数据、Open Graph/Twitter 卡片和可下载资源。
- 安全的文件下载 – 有大小限制、文件名清理和沙箱缓存内的路径遍历保护。
- 内置缓存 – 可选的缓存目录可减少重复的网络调用。
- 提示注入检测 – 验证 URL 和获取的内容是否包含恶意指令。
📦 安装与快速开始
# 克隆仓库(或复制 MCPDataFetchServer.1 文件夹)
git clone https://github.com/undici77/MCPDataFetchServer.git
cd MCPDataFetchServer
# 使启动脚本可执行
chmod +x run.sh
# 运行服务器,指向沙箱化的工作目录
./run.sh -d /path/to/working/directory
📌 三步概述 1️⃣ 脚本创建一个虚拟环境并安装依赖项。 2️⃣ 它在项目根目录内准备一个缓存文件夹(
.fetch_cache)。 3️⃣main.py启动 MCP 服务器,在 stdin/stdout 上监听 JSON‑RPC 请求。
⚙️ 命令行选项
| 选项 | 描述 |
|------|------|
| -d, --working-dir | 沙箱化工作目录 的路径,所有文件操作都限制在此目录内(默认:~/.mcp_datafetch)。 |
| -c, --cache-dir | 相对于工作目录的 缓存子目录 名称(默认:cache)。 |
| -h, --help | 显示帮助信息并退出。 |
🤝 与 LM Studio 集成 (或任何 MCP 兼容的客户端)
在你的 mcp.json 配置中添加一个条目,以便 LM Studio 可以自动启动服务器。
{
"mcpServers": {
"datafetch": {
"command": "/absolute/path/to/MCPDataFetchServer.1/run.sh",
"args": [
"-d",
"/absolute/path/to/working/directory"
],
"env": { "WORKING_DIR": "." }
}
}
}
📌 提示:确保
run.sh是可执行的(chmod +x …),并且虚拟环境可以在首次启动时安装所需的 Python 包。
📡 MCP API 概述
所有通信都遵循通过 stdin/stdout 的 JSON‑RPC 2.0 协议。
initialize
请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {}
}
响应包含协议版本、服务器功能和基本元数据(例如,名称 = mcp-datafetch-server,版本 = 2.1.0)。
tools/list
请求:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}
响应:{ "tools": [ …工具定义… ] }。每个定义包括 name、description 和一个 输入模式(JSON Schema)。
tools/call
通用请求格式(根据需要替换 <tool_name> 和参数):
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "<tool_name>",
"arguments": { … }
}
}
服务器根据工具的模式验证请求,执行操作,并返回一个包含一个或多个 内容块 的 ToolResult。
🛠️ 可用工具
fetch_webpage
- 安全地获取网页并以请求的格式返回干净的内容。
| 名称 | 类型 | 是否必需 | 描述 |
|------|------|----------|------|
| url | 字符串 | ✅(无默认值) | 要获取的 URL(仅支持 http/https)。 |
| format | 字符串 | ❌(默认 markdown) | 输出格式 – 可以是 markdown、text 或 html 之一。 |
| include_links | 布尔值 | ❌(默认 true) | 是否附加提取的链接列表。 |
| include_images | 布尔值 | ❌(默认 false) | 是否在输出中列出图像 URL。 |
| remove_banners | 布尔值 | ❌(默认 true) | 尝试去除 cookie 横幅和弹出窗口。 |
示例
{
"jsonrpc": "2.0",
"id": 10,
"method": "tools/call",
"params": {
"name": "fetch_webpage",
"arguments": {
"url": "https://example.com/article",
"format": "markdown",
"include_links": true,
"include_images": false,
"remove_banners": true
}
}
}
注意:该工具在返回内容之前会清理 HTML,去除脚本/iframe,并检查提示注入模式。
extract_links
- 从页面中提取并分类所有超链接。
| 名称 | 类型 | 是否必需 | 描述 |
|------|------|----------|------|
| url | 字符串 | ✅(无默认值) | 要分析的页面的 URL。 |
| filter | 字符串 | ❌(默认 all) | 仅返回 all、internal、external 或 resources。 |
示例
{
"jsonrpc": "2.0",
"id": 11,
"method": "tools/call",
"params": {
"name": "extract_links",
"arguments": {
"url": "https://example.com/blog",
"filter": "internal"
}
}
}
注意:链接分为 内部(同一域名)或 外部;资源链接(图像、PDF 等)可以使用 resources 进行过滤。
download_file
- 安全地将远程文件下载到沙箱化的缓存目录中。
| 名称 | 类型 | 是否必需 | 描述 |
|------|------|----------|------|
| url | 字符串 | ✅(无默认值) | 文件的直接 URL。 |
| filename | 字符串 | ❌(自动生成) | 所需的文件名;将被清理并强制放入缓存目录。 |
示例
{
"jsonrpc": "2.0",
"id": 12,
"method": "tools/call",
"params": {
"name": "download_file",
"arguments": {
"url": "https://example.com/files/report.pdf",
"filename": "report_latest.pdf"
}
}
}
注意:服务器强制执行 100 MB 的下载限制,根据阻止的域名/扩展名验证 URL,并返回工作目录内的相对路径以供跨代理访问。
get_page_metadata
- 从网页中提取结构化元数据(标题、描述、Open Graph、Twitter 卡片)。
| 名称 | 类型 | 是否必需 | 描述 |
|------|------|----------|------|
| url | 字符串 | ✅(无默认值) | 要检查的页面的 URL。 |
示例
{
"jsonrpc": "2.0",
"id": 13,
"method": "tools/call",
"params": {
"name": "get_page_metadata",
"arguments": { "url": "https://example.com/product/42" }
}
}
注意:该工具返回一个包含标题、描述、关键字、Open Graph 属性和 Twitter 卡片字段的格式化文本块。
check_url
- 执行轻量级的 HEAD 请求,报告状态码、头部信息和大小,而不下载正文。
| 名称 | 类型 | 是否必需 | 描述 |
|------|------|----------|------|
| url | 字符串 | ✅(无默认值) | 要探测的 URL。 |
示例
{
"jsonrpc": "2.0",
"id": 14,
"method": "tools/call",
"params": {
"name": "check_url",
"arguments": { "url": "https://example.com/resource.zip" }
}
}
注意:响应包括重定向后的最终 URL、简洁的状态摘要(✅ 正常或 ⚠️ 错误)以及选定的 HTTP 头部信息,如 Content‑Type 和 Content‑Length。
🔐 安全特性
- 路径遍历保护 – 所有文件操作都限制在沙箱化的 工作目录 内。
- 对 URL、获取的 HTML 和生成的内容进行提示注入检测。
- 阻止的域名和扩展名(本地主机、私有 IP 范围、可执行/脚本文件)。
- 内容大小限制 – 页面获取最大 50 MB,文件下载最大 100 MB。
- HTML 清理 – 在处理之前去除
<script>、<iframe>、事件处理程序和其他危险元素。 - Cookie/横幅处理 – 在获取过程中可选地去除同意横幅和弹出窗口。
© 2025 Undici77 – 保留所有权利。
微信扫一扫