Back to MCP directory
publicPublicdnsLocal runtime

mcpdatafetchserver

MCP数据获取服务器是一个安全、沙盒化的服务器,通过模型控制协议(MCP)获取网页内容并提取数据,不执行JavaScript。

article

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/stdoutJSON‑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": [ …工具定义… ] }。每个定义包括 namedescription 和一个 输入模式(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) | 输出格式 – 可以是 markdowntexthtml 之一。 | | 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) | 仅返回 allinternalexternalresources。 |

示例

{
  "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‑TypeContent‑Length


🔐 安全特性

  • 路径遍历保护 – 所有文件操作都限制在沙箱化的 工作目录 内。
  • 对 URL、获取的 HTML 和生成的内容进行提示注入检测。
  • 阻止的域名和扩展名(本地主机、私有 IP 范围、可执行/脚本文件)。
  • 内容大小限制 – 页面获取最大 50 MB,文件下载最大 100 MB。
  • HTML 清理 – 在处理之前去除 <script><iframe>、事件处理程序和其他危险元素。
  • Cookie/横幅处理 – 在获取过程中可选地去除同意横幅和弹出窗口。

© 2025 Undici77 – 保留所有权利。

help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client