股票数据分析服务器

一个基于Python和Flask的MCP服务器,集成Finnhub股票API,提供实时金融数据查询、公司信息获取、新闻分析和市场情绪分析功能。

  • by Kriengg
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 kriengg/mcp-finnhub-server

使用说明

Python MCP服务器与Finnhub Stock API集成

这个项目演示了使用Python和Flask的模型上下文协议(MCP)服务器实现。它提供标准MCP功能以及Finnhub Stock API集成,用于实时财务数据。

特性

  • 提供示例资源(文本和JSON)
  • 实现基本工具(回声和三角函数计算器)
  • API库存工具:
    • stock_quote -获取实时股票报价
    • company_profile -获取公司信息
    • company_news -获取公司的最新新闻文章
    • stock_sentiment -分析股票的情绪和市场感知
  • 用于查询股票数据和分析市场情绪的自然语言接口
  • 提供示例提示
  • 通过HTTP使用JSON-RPC 2.0进行通信

先决条件

  • Python 3.8+
  • MCP兼容客户端(如Postman)
  • Finnhub API密钥(在https://finnhub.io/)
  • OpenAI API密钥(用于自然语言处理)

设置

  1. 创建并激活虚拟环境:

    python -m venv venv
    .\venv\Scripts\activate  # Windows
    source venv/bin/activate  # Unix/MacOS
    
  2. 安装依赖项:

    pip install -r requirements.txt
    
  3. 创建一个 .env 使用API密钥文件:

    FINNHUB_API_KEY=your_finnhub_api_key_here
    OPENAI_API_KEY=your_openai_api_key_here
    

运行服务器

要手动运行服务器,请执行以下操作:

python server.py

服务器将在以下时间可用http://localhost:5000/mcp

与邮递员联系

  1. 打开邮差桌面

  2. 创建新请求:

    • 将请求方法设置为POST
    • 将URL设置为http://localhost:5000/mcp
    • 将Content-Type标头设置为application/json
  3. 发送初始化请求:

    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "initialize",
      "params": {
        "protocolVersion": "2025-06-18",
        "capabilities": {
          "elicitation": {},
          "sampling": {}
        },
        "clientInfo": {
          "name": "postman-client",
          "version": "1.0.0"
        }
      }
    }
    
  4. 初始化后,您可以发出探索和使用服务器的请求:

    列出可用工具:

    {
      "jsonrpc": "2.0",
      "id": 2,
      "method": "tools/list",
      "params": {}
    }
    

    调用工具:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "method": "tools/call",
      "params": {
        "name": "echo",
        "parameters": {
          "message": "Hello, MCP!"
        }
      }
    }
    

    获取股票报价:

    {
      "jsonrpc": "2.0",
      "id": 4,
      "method": "tools/call",
      "params": {
        "name": "stock_quote",
        "parameters": {
          "symbol": "AAPL"
        }
      }
    }
    

    获取公司简介:

    {
      "jsonrpc": "2.0",
      "id": 5,
      "method": "tools/call",
      "params": {
        "name": "company_profile",
        "parameters": {
          "symbol": "MSFT"
        }
      }
    }
    

    获取公司新闻:

    {
      "jsonrpc": "2.0",
      "id": 6,
      "method": "tools/call",
      "params": {
        "name": "company_news",
        "parameters": {
          "symbol": "TSLA",
          "days": 7
        }
      }
    }
    

    分析股票情绪:

    {
      "jsonrpc": "2.0",
      "id": 7,
      "method": "tools/call",
      "params": {
        "name": "stock_sentiment",
        "parameters": {
          "symbol": "AAPL"
        }
      }
    }
    

    列出可用资源:

    {
      "jsonrpc": "2.0",
      "id": 4,
      "method": "resources/list",
      "params": {}
    }
    

    阅读资源:

    {
      "jsonrpc": "2.0",
      "id": 5,
      "method": "resources/read",
      "params": {
        "uri": "sample://data/example.txt"
      }
    }
    

    列出可用提示:

    {
      "jsonrpc": "2.0",
      "id": 6,
      "method": "prompts/list",
      "params": {}
    }
    

使用自然语言界面

此服务器包括一个自然语言端点,允许您使用纯英语而不是结构化JSON-RPC请求查询股票信息。

  1. 在您的 .env 文件

  2. 向发送POST请求 /ask 端点:

    使用JSON:

    {
      "query": "What's the current stock price for Tesla?"
    }
    

    或者请求正文中的纯文本。

  3. 服务器将:

    • 解析您的自然语言查询
    • 识别股票代码和所需信息
    • 调用相应的工具
    • 返回格式化的响应

示例查询:

  • “苹果目前的股价是多少?”
  • “请介绍一下微软公司”
  • “特斯拉的最新消息是什么?”
  • “微软股票今天表现如何?”
  • “亚马逊股票的市场情绪如何?”
  • “市场对Netflix的感觉如何?”
  • “分析谷歌股票的情绪”

理解代码

  • server.py -使用Flask处理MCP请求的主服务器实现
  • finnhub_api.py -Finnhub Stock API客户
  • nlp_tools.py -自然语言处理的辅助函数
  • .vscode/mcp.json -VS Code MCP客户端集成配置

额外资源