Skip to content

fanyty/mcp

Repository files navigation

AI 新闻抓取与 MCP 交互示例 (AI News Crawler for MCP Learning)

项目描述

本项目旨在演示如何构建一个简单的 Node.js 应用来抓取特定网站的 AI 新闻,并重点展示如何与假设的 "MCP" (根据文件名 mcp-client.js, firecrawl-server/, cline_mcp_settings.json 推断的系统或服务名称) 进行交互。

主要流程包括:

  1. https://ai-bot.cn/daily-ai-news/ 获取每日 AI 新闻的 HTML 内容。
  2. 解析 HTML,提取关键信息(标题、内容摘要)。
  3. 将提取的数据格式化为结构化的 JSON 卡片。
  4. 提供独立运行的能力,同时也设计为可被 MCP 服务集成或通过 MCP 客户端调用,以此作为学习和实践 MCP 集成方法的案例。

注意: "MCP" 的具体性质和功能基于项目中的文件命名推测,实际交互细节需参考 mcp-client.jsfirecrawl-server/ (如果存在并包含实现代码)。

核心功能

  • 新闻抓取: 使用 axios 从目标网站获取 HTML。
  • HTML 解析: 利用 cheerio 库解析 DOM,提取新闻数据。包含多种解析策略以提高兼容性。
  • 数据格式化: 将提取的新闻结构化为 JSON 对象数组(新闻卡片)。
  • 数据持久化: 将中间处理结果 (crawl-results.json) 和最终输出 (ai-news-cards.json) 保存为文件。
  • 运行模式:
    • 独立脚本: 可直接通过 node 运行 firecrawl-ai-news.js 进行一次性抓取和处理。
    • 模块集成 (MCP 学习重点): firecrawl-ai-news.js 导出 fetchDailyAINews 函数,设计为可被其他 Node.js 应用(如 mcp-client.jsfirecrawl-server/ 中的服务)导入和调用,模拟与 MCP 系统的集成。

项目结构

mcp/
├── .git/                  # Git 版本控制元数据
├── firecrawl-server/      # (推测) 包含 MCP 服务端实现的目录
├── node_modules/          # Node.js 依赖库
├── ai-news-cards.json     # 输出:格式化的新闻卡片 JSON
├── ai-news.html           # (可能) 示例或测试用的原始 HTML 文件
├── cline_mcp_settings.json # (推测) 特定环境(cline)的 MCP 配置文件
├── crawl-results.json     # 中间输出:原始 HTML 或提取的新闻条目 JSON
├── firecrawl-ai-news.js   # 主要脚本:获取 HTML,调用格式化模块
├── firecrawl-ai-news-formatter.js # 核心逻辑:解析 HTML,格式化数据
├── mcp-client.js          # (推测) 用于与 MCP 服务交互的客户端脚本
├── package-lock.json      # 锁定依赖版本
├── package.json           # 项目配置文件,定义依赖等
└── README.md              # 项目说明文档 (本文档)

技术栈与依赖

  • 核心: Node.js
  • 主要依赖:
    • axios: HTTP 请求库,用于获取网页 HTML。
    • cheerio: HTML 解析库,用于提取新闻内容。
    • puppeteer: 浏览器自动化库 (具体用途需检查 firecrawl-server/ 或其他脚本,可能用于更复杂的抓取或 MCP 相关任务)。

安装

  1. 确保已安装 Node.js 和 npm。
  2. 克隆仓库 (如果尚未克隆)。
  3. 进入项目目录并安装依赖:
    cd mcp
    npm install

使用方法

1. 独立运行 (基础功能测试)

直接执行主脚本来抓取和处理新闻:

node firecrawl-ai-news.js

该命令会:

  • 访问 https://ai-bot.cn/daily-ai-news/
  • 处理获取到的 HTML。
  • 将格式化的新闻卡片打印到控制台。
  • 更新 crawl-results.jsonai-news-cards.json 文件。

2. 作为模块集成 (MCP 学习与实践)

firecrawl-ai-news.js 被设计为可以集成到其他 Node.js 应用中,特别是与 MCP 相关的客户端或服务端。

它导出一个异步函数 fetchDailyAINews

// 示例:在另一个脚本 (如 mcp-client.js 或 firecrawl-server/ 中的服务) 中调用
const { fetchDailyAINews } = require('./firecrawl-ai-news'); // 假设在同级目录

async function getAndProcessNewsForMCP() {
  try {
    console.log("正在为 MCP 获取和处理 AI 新闻...");
    const newsCards = await fetchDailyAINews();
    console.log(`成功获取 ${newsCards.length} 条新闻卡片。`);
    // 在这里可以添加将 newsCards 发送给 MCP 服务或进行其他 MCP 相关操作的逻辑
    // 例如:mcpApi.submitNews(newsCards);
    return newsCards;
  } catch (error) {
    console.error("MCP 新闻处理失败:", error);
    // 添加 MCP 相关的错误处理逻辑
  }
}

// 调用示例
getAndProcessNewsForMCP();

通过这种方式,可以将新闻抓取功能嵌入到更复杂的 MCP 工作流中。具体的 MCP 交互逻辑需要查看和实现 mcp-client.jsfirecrawl-server/ 中的代码。

输出文件说明

  • ai-news-cards.json: 包含一个 JSON 对象数组,每个对象代表一条新闻卡片,具有以下字段:
    • source: 新闻来源 URL。
    • title: 新闻标题。
    • content: 新闻内容摘要(限制长度)。
    • status: 处理状态 ("ok", "warning" 等)。
    • timestamp: 处理时间戳 (ISO 格式)。
    • hasError: 是否出错 (通常为 false)。
    • errorMessage: 错误信息 (通常为 null)。
  • crawl-results.json: 包含处理过程中的中间数据。初始可能包含抓取的原始 HTML,之后会被提取出的新闻条目数组覆盖(结构类似 ai-news-cards.json 但可能字段略有不同)。

(可选) 配置

检查 cline_mcp_settings.json 文件以了解是否存在特定于 "cline" 环境的 MCP 相关配置。

(可选) MCP 服务交互细节

mcp-client.jsfirecrawl-server/ 目录预计包含了与 MCP 系统交互的具体实现。需要进一步分析这些文件来理解其功能和如何配置/运行 MCP 相关的客户端或服务端。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published