IT趋势分析服务

一个基于MCP协议的IT趋势分析服务器,用于收集和分析IT服务、技术和趋势的流行度信号,支持从Reddit、自由职业市场和趋势搜索引擎获取数据并生成报告。

  • by kryadov
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 kryadov/analyze-it-trends-mcp-server

使用说明

IT趋势 MCP服务器

概述

此仓库提供了一个模型上下文协议(MCP)服务器,用于收集和分析有关IT服务、技术和趋势受欢迎程度的信号。它通过MCP暴露工具,以获取Reddit讨论、聚合指标并生成报告(HTML/PDF/Excel)。该设计具有可扩展性,可添加自由职业者市场爬虫和趋势搜索器(如Google Trends、GitHub Trending、Stack Overflow)。

建筑学

  • server.py使用FastMCP构建的MCP服务器,用于注册工具、资源和提示。
  • tools/
    • reddit_analyzer.py使用PRAW获取并分析Reddit帖子;提取技术提及内容和朴素情感分析结果。
    • report_generator.py生成HTML/PDF/Excel格式的报告;使用matplotlib渲染图表。
    • freelance_analyzer.py抓取并解析公开的自由职业市场(如Upwork/Freelancer),并汇总技能需求,同时进行基本费率分析。
    • trends_searcher.py从Google Trends、GitHub趋势和Stack Overflow标签中搜索公开信号;对结果进行标准化并汇总。
  • utils/
    • cache_manager.py带有TTL(生存时间)的文件/Redis缓存,以及get_or_fetch辅助函数。
    • data_processor.py归一化、增长率、异常检测以及多源聚合辅助工具。
    • api_clients.py外部API客户端(目前为Reddit)的工厂。
  • templates/
    • report_template.html用于HTML报告的Jinja2模板。
  • config.yaml服务器、数据源、分析、缓存、数据库和报告的配置。

MCP组件

工具

  • analyze_trends (别名: analyze, trends_analyze)

    • 输入: days: int = 7, sources: {"reddit": bool, "freelance": bool, "trends": bool}, include_charts: bool, language: str
    • 输出: { "date": "YYYY-MM-DD", "top_trends": list[str], "growth_leaders": list[str], "sources": {..}, "summary": str }
    • 注:聚合公共信号(Google趋势、GitHub热门趋势、Stack Overflow)并进行每日缓存。
  • search_trends

    • 输入: keywords: list[str], timeframe: str = "now 7-d", region: str = "US"
    • 输出: { "date": "YYYY-MM-DD", "inputs": {..}, "sources": { "google_trends": {...}, "github_trending": {...}, "stackoverflow": {...} }, "top_technologies": [{"technology": str, "mentions": float}] }
  • analyze_reddit

    • 输入: subreddits: list[str], lookback_days: int, keywords: list[str]
    • 输出:包含以下内容的JSON top_technologies (技术,提及次数)、每项技术的情感倾向以及统计数据
    • 实现:使用PRAW客户端,从指定的子版块获取最近帖子,提取关键词提及内容,进行简单情感分析,并按提及次数排序
  • analyze_freelance

    • 输入: platforms: list[str] (以下一项或多项:Upwork、Freelancer、全部), categories: list[str] (可选)
    • 输出: { "date": "YYYY-MM-DD", "source": "freelance_markets", "platforms": [...], "top_technologies": [...], "avg_hourly_rate": number, "stats": {...}, "status": "ok|partial|not_available" }
  • generate_report (别名: report_generate, create_report)

    • 输入: data: dict, format: str (pdf/电子表格/html), include_charts: bool
    • 输出: { "file_path": "...", "path": "..." } 生成的报告文件的路径
    • 实现:使用Jinja2模板生成HTML,通过matplotlib生成图表,通过reportlab生成PDF,通过openpyxl处理Excel
  • get_historical_comparison (存根)

    • 输入: technology: str, days_back: int
    • 输出: { status: "not_implemented", message: "..." }

资源

  • cache://trends/{date} – 如果存在,则按日期返回缓存的趋势数据。
  • history://technology/{name} – 如果存在,返回该技术的历史数据(缓存或 ./data 文件)。

提示

  • analysis_prompt – 系统提示进行分析。
  • forecast_prompt – 预测系统提示。

安装

  1. 克隆并准备环境
    • Python 3.10及以上版本
    • 创建并激活虚拟环境
     python -m venv .venv
    
  2. 安装依赖项
    pip install -r requirements.txt
    
  3. 配置环境
    • 创建一个 .env 在项目根目录中创建文件并设置所需的变量。
    • 至少提供Reddit的登录凭据:
      • REDDIT_CLIENT_ID
      • REDDIT_CLIENT_SECRET
    • 可选: GITHUB_TOKEN, STACKOVERFLOW_KEY, REDIS_URL
  4. 评论 config.yaml
    • 调整子版块、缓存后端、报告输出目录等。

运行MCP服务器

默认情况下, server.py 运行Streamable HTTP传输(通过配置 config.yaml,默认地址为 http://localhost:8080/)。

你也可以使用辅助脚本:

  • Windows(操作系统): run_server.bat
  • macOS/Linux: ./run_server.sh

直接运行:

python server.py

可用工具(MCP)

  • analyze_trends (别名: analyze, trends_analyze)

    • 示例调用
      result = await mcp_client.call_tool("analyze_trends", {
          "days": 7,
          "sources": {"reddit": true, "freelance": true, "trends": true},
          "include_charts": true,
          "language": "en"
      })
      
  • analyze_reddit

    • 示例调用
      result = await mcp_client.call_tool("analyze_reddit", {
          "subreddits": ["programming", "webdev"],
          "lookback_days": 7,
          "keywords": ["python", "javascript", "react"]
      })
      
  • generate_report (别名: report_generate, create_report)

    • 示例调用
      report = await mcp_client.call_tool("generate_report", {
          "data": result,
          "format": "html",  # or "pdf" / "excel"
          "include_charts": true
      })
      # Note: Response includes both keys: {"file_path": "...", "path": "..."}
      

数据模式

分析趋势结果

{
  "date": "YYYY-MM-DD",
  "top_trends": ["python", "rust", "kotlin"],
  "growth_leaders": ["langchain", "webgpu", "bun"],
  "sources": {"reddit": true, "freelance": true, "trends": true},
  "summary": "Aggregated technology signals from public sources for the last N days."
}

分析Reddit结果

{
  "date": "YYYY-MM-DD",
  "subreddits": ["programming", "webdev"],
  "lookback_days": 7,
  "top_technologies": [
    {"technology": "python", "mentions": 123},
    {"technology": "javascript", "mentions": 98}
  ],
  "sentiment": {
    "python": {"avg_sentiment": 0.42, "mentions": 25},
    "javascript": {"avg_sentiment": 0.12, "mentions": 30}
  },
  "stats": {"posts_analyzed": 300, "unique_tech_count": 20}
}

生成报告结果

{ "file_path": "./reports/report_20250101_120000.html", "path": "./reports/report_20250101_120000.html" }

故障排除

  • 缺少Reddit凭据
    • 如果Reddit客户端未配置,服务器将优雅地返回空结果。请提供 REDDIT_CLIENT_ID 并且 REDDIT_CLIENT_SECRET 在你的 .env。
  • SSL/网络错误
    • Reddit抓取器具有简单的指数退避重试机制。请检查连接状态或稍后再试。
  • 图表不可见
    • 确保 matplotlib 已安装且可使用非无头后端。报告仍将生成,但不包含图表。
  • PDF/Excel生成问题
    • 如果 reportlab 或者 openpyxl 如果缺失,服务器将回退到HTML生成。
  • Redis 缓存无法工作
    • 验证 REDIS_URL 并且确保一个 Redis 服务器正在运行,或者切换 cache.storage 翻译为:“存档”在 config.yaml。

获取Reddit API凭证

按照以下步骤创建一个Reddit应用,并获取该项目所需的凭据:

  1. 使用您的账户登录Reddit。
  2. 访问 https://www.reddit.com/prefs/apps(或 https://old.reddit.com/prefs/apps)。
  3. 点击“创建应用”(或“创建另一个应用”)。
  4. 填写表格:
    • 名称:例如,IT趋势MCP
    • 应用类型:脚本
    • 描述:可选
    • 重定向URI:http://localhost:8080(Reddit要求;本项目未使用)
  5. 应用创建后,复制:
    • 客户端ID:应用程序名称下方显示的短字符串(位于“个人使用脚本”旁边)。
    • 客户端密钥:标记为“secret”的值。
  6. 将它们放入你的 .env 文件中:
    • REDDIT_CLIENT_ID=你的客户端ID
    • REDDIT_CLIENT_SECRET=你的客户端密钥
    • REDDIT_USER_AGENT=ITTrendsAnalyzer/1.0 由 <你的Reddit用户名> 提供
  7. 保存.env文件并重启服务器。

注释:

  • 服务器通过PRAW使用只读访问权限;无需用户名/密码或刷新令牌。
  • 根据每个Reddit API的规则,使用一个独特且描述性的用户代理。
  • API的使用受到速率限制;如果遇到错误,请放慢速度稍后再试。

路线图

  • 持久化历史数据并启用 get_historical_comparison
  • 增加更多自由职业者资源(如Fiverr)并提供更丰富的费率分析
  • 在适当的情况下,为GitHub/StackExchange提供OAuth/API集成
  • 使用时间序列模型进行预测改进
  • 添加测试和持续集成;提供Docker打包

许可证

根据您的项目需求,选择Apache-2.0或类似的许可证。