返回市场
数据获取服务器

数据获取服务器

作者:undici772 星标更新:2025-11-15

项目介绍

📂 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": "/绝对路径/to/MCPDataFetchServer.1/run.sh",
      "args": [
        "-d",
        "/绝对路径/to/工作目录"
      ],
      "env": { "WORKING_DIR": "." }
    }
  }
}

📌 提示:确保run.sh是可执行的(chmod +x ...),并且虚拟环境可以在首次启动时安装所需的Python包。


📡 MCP API概述

所有通信遵循JSON-RPC 2.0通过stdin/stdout进行。

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 Cards)。
名称类型必填描述
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 Card字段。


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、简洁的状态总结(✅ OK 或 ⚠️ Error)以及选定的HTTP头信息,如Content-TypeContent-Length


🔐 安全特性

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

© 2025 Undici77 – 保留所有权利。