c

cnguyen14

web-scrapingecommerce-and-retail

314 查看 · 2026-07-07 更新

PhoneLCDParts MCP 服务器

该项目提供了一个模型上下文协议(MCP)服务器,并附带一个从 phonelcdparts.com 抓取产品搜索结果的工具。

目的

主要工具 scrape_phonelcdparts 允许与 MCP 兼容的客户端(如 LLM 代理)根据搜索词查询 phonelcdparts.com 网站上的产品。它返回包含产品名称、价格、直接 URL 和图片 URL 的结构化 JSON 数据。

这使得可以自动化获取产品信息,适用于各种应用,例如价格跟踪、数据分析或集成到更大的 AI 驱动工作流中。

前提条件

  • Python 3.12 或更高版本。
  • uv(用于环境和包管理)。
  • 有效的 Firecrawl API 密钥(来自 firecrawl.dev)。

设置

  1. 克隆仓库(如果适用)或导航到项目目录: bash cd path/to/phonelcdpart-mcp

  2. 使用 uv 创建并激活虚拟环境: bash uv venv source .venv/bin/activate

  3. 配置 Firecrawl API 密钥:phonelcdpart-mcp 项目的根目录下创建一个名为 .env 的文件(即 phonelcdpart-mcp/.env)。 将您的 Firecrawl API 密钥添加到此文件中: env FIRECRAWL_API_KEY="YOUR_ACTUAL_FIRECRAWL_API_KEY_HERE"

    应用程序使用 python-dotenv 库在运行时加载此密钥。

  4. 使用 uv 安装依赖项: bash uv pip install .

    这将安装 pyproject.toml 中列出的所有依赖项,包括 python-dotenv

运行 MCP 服务器

您有几种选项来运行服务器:

  1. 直接使用 Python(适用于简单的开发): bash python app.py

  2. 使用 Uvicorn(推荐用于开发,提供自动重载): 确保已安装 uvicorn(它在 pyproject.toml 中)。 bash uvicorn app:mcp --reload --host 0.0.0.0 --port 8000

    app:mcp 指的是 app.py 文件中的 FastMCP 实例 mcp。)

  3. 使用已安装的脚本(如果 uv pip install . 成功): 成功执行 uv pip install . 后,pyproject.toml 中定义的脚本应该可用: bash start-mcp

    这通常会使用 mcp.run() 方法。

服务器通常会在 http://127.0.0.1:8000http://0.0.0.0:8000 上启动。

使用工具

一旦服务器运行起来,您可以使用任何与 MCP 兼容的客户端与其交互。

  • 工具名称: scrape_phonelcdparts
  • 描述(来自文档字符串): 根据给定的搜索查询从 phonelcdparts.com 抓取产品信息(名称、价格、URL、图片 URL)。
  • 参数:
    • search_query (字符串):产品搜索词(例如 "iphone 15 pro max lcd")。
  • 返回值: 字典列表,每个字典包含:
    • name (字符串)
    • price (字符串)
    • url (字符串)
    • image_url (字符串)

示例调用(概念性的,使用 Python 客户端):

python

(这是一个概念性示例,展示客户端如何调用该工具)

import asyncio

from fastmcp import Client

async def main():

# 确保 server_url 与您的 MCP 服务器运行的位置匹配

server_url = "http://127.0.0.1:8000/sse"

async with Client(server_url) as client:

try:

result = await client.call_tool(

"scrape_phonelcdparts",

{"search_query": "iphone 14 screen"}

)

if result and result.data:

print("Tool Result:")

for item in result.data:

print(item)

else:

print("No data returned or tool call failed.")

except Exception as e:

print(f"Error calling tool: {e}")

if name == "main":

asyncio.run(main())这段客户端代码将连接到正在运行的MCP服务器,并使用指定的搜索查询调用scrape_phonelcdparts工具,然后打印结构化的JSON结果。

来源