📂 MCP数据提取服务器
MCP数据提取服务器 是一个安全的沙盒服务器,通过 模型控制协议(MCP)不执行JavaScript。
______________________________________________________________________
目录
- initialize - tools/list - tools/call
- fetch_webpage - extract_links - - get_page_metadata - check_url
______________________________________________________________________
🎯 特性
- 安全网页获取 –删除脚本、iframe和cookie横幅;没有JavaScript执行。
- 丰富的数据提取 –检索链接、元数据、打开 图形/推特卡和可下载资源。
- 安全文件下载 -沙盒缓存中的大小限制、文件名净化和路径遍历保护。
- 内置缓存 –可选的缓存目录可减少重复的网络调用。
- 快速注射检测 –验证URL并获取恶意指令的内容。
______________________________________________________________________
📦 安装和快速启动
# Clone the repository (or copy the MCPDataFetchServer.1 folder)
git clone https://github.com/undici77/MCPDataFetchServer.git
cd MCPDataFetchServer
# Make the startup script executable
chmod +x run.sh
# Run the server, pointing to a sandboxed working directory
./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集成 工作室 *(或任何兼容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概述
所有通信如下 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": [ …tool definitions… ] }每个定义包括 name, description 和a 输入模式 (JSON 模式)。
tools/call
通用请求形状(替换 `` 以及必要的论据):
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "",
"arguments": { … }
}
}服务器根据工具的模式验证请求,执行操作,并返回 ToolResult 包含一个或多个 内容块.
______________________________________________________________________
🛠️ 可用工具
fetch_webpage
- 安全地获取网页,并以请求的格式返回干净的内容。
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
url | string | ✅ (无默认值) | 要获取的URL(仅限http/https). |
format | string | ❌ (markdown) | 输出格式-其中之一 markdown, text,或 html. |
include_links | boolean | ❌ (true) | 是否追加提取的链接列表。 |
include_images | boolean | ❌ (false) | 是否在输出中列出图像URL。 |
remove_banners | boolean | ❌ (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 | string | ✅ (无默认值) | 要分析的页面的URL。 |
filter | string | ❌ (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 | string | ✅ (无默认值) | 指向文件的直接URL。 |
filename | string | ❌ (自动生成) | 所需文件名;将被净化并强制进入缓存目录。 |
示例
{
"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
- 提取结构化元数据(标题、描述、打开 图形、推特卡片)。
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
url | string | ✅ (无默认值) | 要检查的页面的URL。 |
示例
{
"jsonrpc": "2.0",
"id": 13,
"method": "tools/call",
"params": {
"name": "get_page_metadata",
"arguments": { "url": "https://example.com/product/42" }
}
}*注:* 该工具返回一个格式化的文本块,其中包含标题、描述、关键字、打开 图形属性和推特卡片字段。
______________________________________________________________________
check_url
- 执行轻量级HEAD请求以报告状态代码、标头和大小,而无需下载正文。
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
url | string | ✅ (无默认值) | 要探测的URL。 |
示例
{
"jsonrpc": "2.0",
"id": 14,
"method": "tools/call",
"params": {
"name": "check_url",
"arguments": { "url": "https://example.com/resource.zip" }
}
}*注:* 响应包括重定向后的最终URL、简洁的状态摘要(✅ OK或⚠️ 错误),以及所选的HTTP标头,例如 Content‑Type 和 Content‑Length.
______________________________________________________________________
🔐 安全功能
- 路径遍历保护 –所有文件操作都限制在沙盒中 *工作目录*.
- 快速注射检测 在URL中获取HTML并生成内容。
- 被阻止的域和扩展 (本地主机、私有IP范围、可执行/脚本文件)。
- 内容大小限制 –最大值 50 MB用于页面提取,最大值 100 MB用于文件下载。
- HTML净化 –删除 `
,`,事件处理程序和其他风险元素。 - Cookie/横幅处理 –在获取过程中可选择删除同意横幅和弹出窗口。
______________________________________________________________________
*©2025 Undici77-保留所有权利。*
