🚀 URL 鏈接抓取 MCP
URL 鏈接抓取 MCP 是一個乾淨的 Model Context Protocol (MCP) 實現方案,它能讓 Claude 或其他大語言模型(LLM)從 URL 中獲取所需內容,為信息獲取提供了便捷途徑。
🚀 快速開始
安裝依賴庫
pip install "requests>=2.31.0" "python-multipart>=0.3.5"
啟動 MCP 服務器
python mcp_urlfetch/server.py --port 8000
調用工具函數
在 Python 代碼中使用:
from mcp_urlfetch.client import AsyncMCPClient
async def main():
async with AsyncMCPClient('localhost', 8000) as client:
result = await client.call_tool("fetch_url", {
"url": "https://example.com"
})
result = await client.call_tool("fetch_json", {
"url": "https://api.example.com/data",
"headers": {"Authorization": "Bearer token"}
})
result = await client.call_tool("fetch_image", {
"url": "https://example.com/image.jpg"
})
if __name__ == "__main__":
import asyncio
asyncio.run(main())
✨ 主要特性
- 可從任意 URL 獲取內容。
- 支持多種內容類型,包括 HTML、JSON、文本和圖片。
- 能夠控制請求參數,如頭信息和超時時間。
- 具備清晰的錯誤處理機制。
- 支持交互式的 CLI 操作。
📦 安裝指南
安裝依賴庫
pip install "requests>=2.31.0" "python-multipart>=0.3.5"
💻 使用示例
基礎用法
from mcp_urlfetch.client import AsyncMCPClient
async def main():
async with AsyncMCPClient('localhost', 8000) as client:
result = await client.call_tool("fetch_url", {
"url": "https://example.com"
})
result = await client.call_tool("fetch_json", {
"url": "https://api.example.com/data",
"headers": {"Authorization": "Bearer token"}
})
result = await client.call_tool("fetch_image", {
"url": "https://example.com/image.jpg"
})
if __name__ == "__main__":
import asyncio
asyncio.run(main())
高級用法
快速測試腳本 (examples/quick_test.py
)
from mcp_urlfetch.client import AsyncMCPClient
async def main():
async with AsyncMCPClient('localhost', 8000) as client:
result = await client.call_tool("fetch_url", {"url": "https://example.com"})
print(f"URL 內容: {result}")
result = await client.call_tool("fetch_json", {
"url": "https://api.example.com/data",
"headers": {"Authorization": "Bearer token"}
})
print(f"JSON 數據: {result}")
result = await client.call_tool("fetch_image", {"url": "https://example.com/image.jpg"})
print(f"圖片數據已獲取,大小:{len(result)} bytes")
if __name__ == "__main__":
import asyncio
asyncio.run(main())
📚 詳細文檔
目錄結構
項目根目錄/
├── mcp_urlfetch/ # 核心代碼模塊
│ ├── __init__.py # 包初始化文件
│ ├── client.py # 客戶端 API 實現
│ ├── server.py # MCP 服務器實現
│ └── tools.py # 工具函數定義
├── examples/ # 示例腳本
│ ├── quick_test.py # 快速測試腳本
│ ├── simple_usage.py # 簡單用法示例
│ └── interactive_client.py # 交互式 CLI 客戶端
└── tests/ # 測試用例
├── direct_test.py # 直接測試 URL 抓取功能
└── mcp_server_test.py # MCP 服務器功能測試
工具功能
fetch_url
從指定 URL 獲取內容並返回文本。
屬性 |
詳情 |
參數 |
url (必填):要獲取的 URL 地址;headers (可選):附加請求頭信息;timeout (可選):設置請求超時時間,單位為秒,默認為 10 秒。 |
fetch_image
從指定 URL 獲取圖片並返回圖片數據。
屬性 |
詳情 |
參數 |
url (必填):要獲取圖片的 URL 地址;timeout (可選):設置請求超時時間,單位為秒,默認為 10 秒。 |
fetch_json
從指定 JSON 接口獲取數據,並解析後返回格式化字符串。
屬性 |
詳情 |
參數 |
url (必填):要獲取 JSON 數據的 URL 地址;headers (可選):附加請求頭信息;timeout (可選):設置請求超時時間,單位為秒,默認為 10 秒。 |
測試方法
運行測試用例
python -m pytest tests/
🔧 技術細節
定義工具函數
在 mcp_urlfetch/tools.py
中定義:
from typing import Dict, Optional
from pydantic import Field
from mcp_core.context import Context
from mcp_core.tool import Tool
from mcp_core.utils import async_func_to_coroutine
@Tool(
name="fetch_url",
description="Fetch content from a URL and return it as text."
)
async def fetch_url(url: AnyUrl, headers: Optional[Dict[str, str]] = None, timeout: int = 10, ctx: Context = None):
@Tool(
name="fetch_image",
description="Fetch an image from a URL and return it as an image."
)
async def fetch_image(url: AnyUrl, timeout: int = 10, ctx: Context = None):
@Tool(
name="fetch_json",
description="Fetch JSON from a URL, parse it, and return it formatted."
)
async def fetch_json(url: AnyUrl, headers: Optional[Dict[str, str]] = None, timeout: int = 10, ctx: Context = None):
📄 許可證
本項目使用 MIT License 開源協議。
👥 貢獻指南
歡迎 Fork 該倉庫並提交 Pull Request!
📚 參考文檔
項目版本: 1.0.0
文檔最後更新時間: 2024年3月1日