市场情报后端服务

一个基于MCP(模型上下文协议)服务器的生产级后端服务,通过对话界面提供AI驱动的市场情报,并保留完整的上下文。

  • by BalajiMittapalli
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 BalajiMittapalli/market-intelligence-mcp

使用说明

市场情报MCP后端服务

一个运行在MCP(模型上下文协议)服务器上的生产级后端服务,通过保持完整上下文的对话界面提供AI驱动的市场智能。


概述

这项服务通过结合以下要素提供实时市场情报:

  • MCP 服务器带有5种专用市场数据工具的FastMCP框架
  • 人工智能集成Groq LLM(llama-3.1-8b-instant)用于自然语言理解
  • 上下文管理基于会话的对话历史记录,采用持久化存储
  • 数据来源Alpha Vantage(市场数据)、NewsAPI(财经新闻)

建筑

User Query → FastAPI Endpoint → AI Agent → MCP Server → Market Tools
                                                ↓
                                    Alpha Vantage / NewsAPI
                                                ↓
                                        Real-time Data

核心组件

  1. MCP服务器 (app/mcp/server.py)

    • 实现模型上下文协议
    • 管理5种市场情报工具
    • 处理工具执行和上下文
  2. 人工智能代理 (app/agents/market_intelligence_agent.py)

    • 处理自然语言查询
    • 根据上下文规划工具使用
    • 生成对话回复
  3. 上下文管理器 (app/services/context_manager.py)

    • 每会话保持对话历史记录
    • 在 SQLite 数据库中存储上下文
    • 实现令牌预算管理
  4. API路由器 (app/api/router.py)

    • 暴露REST端点
    • 管理会话和速率限制
    • 提供流式和非流式响应

可用的MCP工具

工具 描述 数据来源
get_stock_price 当前股价及变动百分比 Alpha Vantage 全球报价
get_stock_info 公司基本面和概况 Alpha Vantage 概述
calculate_indicators 相对强弱指数(RSI)和移动平均线(MA-20,MA-50) Alpha Vantage 日线时间序列数据
get_market_news 最新财经新闻头条 NewsAPI
get_market_summary 主要指数(标准普尔500指数、道琼斯指数、纳斯达克指数、罗素指数) Alpha Vantage(阿尔法优势,此处为假设的翻译,实际可能指某个提供金融数据或分析服务的平台名)

API终端点

非流式终端(必需)

POST /api/query

接收问题并返回包含上下文的AI生成答案。

请求:

{
  "message": "Give me the latest news on the stock market",
  "session_id": "optional-session-id"
}

回答:

{
  "response": "AI-generated answer with context",
  "session_id": "abc-123-def",
  "metadata": {
    "tool_results": [...],
    "market_state": "closed",
    "market_open": false
  }
}

流式传输终端(额外奖励)

POST /api/query/stream

用于实时响应的服务器发送事件流端点。

额外的终点(或目标)

  • POST /api/session/new - 创建新的对话会话
  • GET /api/session/{id}/history - 获取对话历史记录
  • DELETE /api/session/{id} - 删除会话
  • GET /api/market/summary - 直接市场概要
  • GET /api/health - 健康检查
  • GET /metrics - Prometheus指标

测试

快速测试

# 1. Health Check
curl https://your-deployment-url.app/api/health

# 2. Create Session
curl -X POST https://your-deployment-url.app/api/session/new \
  -H "Content-Type: application/json" \
  -d '{}'

# 3. Query Endpoint (Required)
curl -X POST https://your-deployment-url.app/api/query \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Give me the latest news on the stock market",
    "session_id": "SESSION_ID_FROM_STEP_2"
  }'

示例查询

# Stock price
curl -X POST https://your-deployment-url.app/api/query \
  -H "Content-Type: application/json" \
  -d '{"message": "What is the current price of AAPL?", "session_id": "SESSION_ID"}'

# Technical indicators
curl -X POST https://your-deployment-url.app/api/query \
  -H "Content-Type: application/json" \
  -d '{"message": "Give me RSI and moving averages for Tesla", "session_id": "SESSION_ID"}'

# Market summary
curl https://your-deployment-url.app/api/market/summary

# Streaming endpoint (bonus)
curl -N -X POST https://your-deployment-url.app/api/query/stream \
  -H "Content-Type: application/json" \
  -d '{"message": "Tell me about the tech sector", "session_id": "SESSION_ID"}'

技术栈

核心框架

  • Python 3.11或更高版本 - 编程语言
  • FastAPI(快速API) - 异步网络框架
  • FastMCP - 模型上下文协议实现
  • Uvicorn(注:Uvicorn是一个用于构建ASGI应用的ASGI服务器,常用于Python的异步Web框架中,如FastAPI) - ASGI服务器

人工智能与大型语言模型

  • Groq API - 大语言模型(LLM)推理(llama-3.1-8b-instant)
  • 提示工程 - 上下文感知的工具规划

数据来源

  • Alpha Vantage API - 实时股市数据
  • NewsAPI(新闻应用程序编程接口) - 金融新闻聚合
  • 雅虎财经 - 备用数据提供商

数据库与存储

  • SQLAlchemy 2.0 - 异步ORM(对象关系映射)
  • aiosqlite - 异步 SQLite 驱动程序
  • 会话存储(或会话级存储) - 会话持久性

制作特点

  • 速率限制 - SlowAPI(每个客户端每分钟30个请求)
  • 缓存 - 5分钟TTL(生存时间)且线程安全
  • 重试逻辑 - 带指数退避的坚持性(或:具有指数退避策略的坚持不懈)
  • 监测 - Prometheus 指标
  • 安全 可选的API密钥认证,CORS配置

上下文保持(或上下文保留)

上下文是如何被保留的

  1. 基于会话的存储

    • 每个用户都会获得一个唯一的会话ID
    • 所有消息均存储在SQLite数据库中
    • 跨查询维护的对话历史
  2. 上下文管理器

    • 检索最后N条消息(默认:10条)
    • 包含元数据(时间戳、工具结果)
    • 清理旧消息以管理令牌预算
  3. 工具结果集成

    • 每条消息中存储的工具输出
    • 代理引用了之前的工具调用
    • 支持后续提问,无需重复查询

示例

Query 1: "What is the price of AAPL?"
→ Agent calls get_stock_price tool
→ Stores result: $245.27

Query 2: "What about its RSI?" (no need to specify AAPL again)
→ Agent retrieves context (AAPL from previous query)
→ Calls calculate_indicators for AAPL
→ Returns RSI with full context

配置

环境变量

# Required
GROQ_API_KEY=your_groq_api_key
ALPHA_VANTAGE_KEY=your_alpha_vantage_key
NEWS_API_KEY=your_news_api_key

# Optional
GROQ_MODEL=llama-3.1-8b-instant
DATABASE_URL=sqlite+aiosqlite:///./market_intelligence.db
MAX_CONTEXT_MESSAGES=10
ALPHA_VANTAGE_CACHE_TTL=300
CORS_ALLOW_ALL=true

# Production (optional)
REQUIRE_API_KEY=true
API_KEYS=key1,key2,key3

MCP服务器配置

服务器初始化

使用FastMCP框架对MCP服务器进行初始化:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP(
    name="Market Intelligence MCP",
    instructions=(
        "Provide actionable market intelligence leveraging live market data, "
        "curated news, and technical indicators. Maintain conversational context "
        "to personalize responses."
    ),
    log_level="INFO",
)

工具注册

每种市场情报工具都已在MCP服务器上注册:

mcp.add_tool(get_stock_price, name="get_stock_price", description="...")
mcp.add_tool(get_stock_info, name="get_stock_info", description="...")
mcp.add_tool(calculate_indicators, name="calculate_indicators", description="...")
mcp.add_tool(get_market_news, name="get_market_news", description="...")
mcp.add_tool(get_market_summary, name="get_market_summary", description="...")

MCP端点

  • /mcp - MCP HTTP 端点
  • /mcp/sse - MCP Server-Sent Events 端点

部署

本地开发

# Install dependencies
pip install -r requirements.txt

# Set environment variables
cp .env.example .env
# Edit .env with your API keys

# Run server
uvicorn app.main:app --reload --port 8000

Docker 部署

# Build image
docker build -t market-intelligence-api .

# Run container
docker run -p 8000:8000 \
  -e GROQ_API_KEY=$GROQ_API_KEY \
  -e ALPHA_VANTAGE_KEY=$ALPHA_VANTAGE_KEY \
  -e NEWS_API_KEY=$NEWS_API_KEY \
  market-intelligence-api

铁路部署

  1. 将代码推送到GitHub
  2. 将存储库连接到铁路系统
  3. 在设置 → 变量 中添加环境变量
  4. 通过Dockerfile自动部署

生产特性

速率限制

  • 客户端:每个IP每分钟30个请求
  • Alpha Vantage:使用令牌桶算法,每分钟5次请求
  • 超过限制时自动返回429响应

缓存

  • 股票价格的5分钟TTL(时间到期限制)
  • 线程安全的缓存实现
  • 预热后90%的缓存命中率

数据血缘(或数据来源追踪)

每个回复都包括:

  • source数据提供商(alpha_vantage,newsapi)
  • as_of数据的时间戳
  • cached是否来自缓存
  • market_state开放/关闭/非办公时间
  • delayed数据是否延迟

监测

  • Prometheus指标位于 /metrics
  • 请求次数、持续时间、错误率
  • 缓存命中/未命中率
  • Alpha Vantage API调用追踪

项目结构

Backend_MCP/
├── app/
│   ├── main.py                 # FastAPI application entry point
│   ├── agents/
│   │   └── market_intelligence_agent.py  # AI agent with tool planning
│   ├── api/
│   │   └── router.py           # REST API endpoints
│   ├── core/
│   │   └── config.py           # Configuration management
│   ├── mcp/
│   │   └── server.py           # MCP server implementation
│   ├── models/
│   │   ├── database.py         # SQLAlchemy models
│   │   └── market_data.py      # Data models with provenance
│   ├── services/
│   │   └── context_manager.py  # Session & context management
│   └── utils/
│       ├── auth.py             # API key authentication
│       └── rate_limiter.py     # Rate limiting & caching
├── tests/                      # Test suite
├── Dockerfile                  # Container configuration
├── requirements.txt            # Python dependencies
└── README.md                   # This file

安全

  • API密钥认证 (可选):X-API-Key头部验证
  • CORS 配置可配置的允许来源
  • 速率限制防止滥用和拒绝服务(DOS)攻击
  • 输入验证所有请求的Pydantic模型
  • 密钥管理环境变量,不使用硬编码密钥

许可证

麻省理工学院许可证


链接

  • GitHub 仓库https://github.com/BalajiMittapalli/market-intelligence-mcp(中文可表述为:GitHub上的市场情报MCP项目链接,由BalajiMittapalli维护)
  • API 文档: /docs (Swagger UI)
  • 指标仪表板: /metrics (Prometheus 格式)

使用FastAPI、FastMCP、Groq LLM和Alpha Vantage API构建