返回市场
读我.md

读我.md

作者:F4156432 星标更新:2025-07-30

项目介绍

技术文档摘要

🚀 MCP 股票数据服务

基于MCP(模型上下文协议)的股票数据获取与分析服务,提供实时股票数据查询、技术指标计算及数据分析功能。

📋 服务介绍

MCP股票数据服务是一款专业的股票数据分析工具,通过东方财富API获取实时数据,提供多维度的股票数据查询和技术分析功能。该服务支持基础股票信息查询、技术指标计算以及数据可视化展示。

✨ 核心特性

  • 📊 实时股票数据 - 基于东方财富API获取最新的股票信息
  • 🔍 多维分析 - 基本面分析、技术分析、资金流向及市场情绪数据分析
  • 技术指标计算 - 基于移动平均线、MFI、换手率等技术指标的数据计算
  • 💡 数据查询服务 - 提供基础股票信息及历史数据查询
  • 📈 数据可视化 - 支持股票数据图表展示及分析
  • 🔧 易于集成 - 遵循标准MCP协议,支持多种客户端

🚀 快速开始

方法1:一键安装(推荐)

Windows 用户

  1. 将项目下载到本地
  2. 双击运行 install.bat
  3. 双击桌面快捷方式启动服务

Linux/Mac 用户

# 克隆项目
git clone https://github.com/yourusername/mcp-stock-advisor.git
cd mcp-stock-advisor

# 一键安装
chmod +x install.sh
./install.sh

# 启动服务
./start_service.sh

方法2:手动安装

# 1. 克隆项目
git clone https://github.com/yourusername/mcp-stock-advisor.git
cd mcp-stock-advisor

# 2. 安装依赖
pip install -r requirements.txt

# 3. 启动MCP服务
python stock_advisor_server.py --name "股票建议助手" --debug

方法3:Docker部署

# 使用Docker Compose
docker-compose up -d

# 或者直接使用Docker
docker build -t mcp-stock-advisor .
docker run -p 8080:8080 mcp-stock-advisor

📊 服务特性

核心工具

工具名称功能描述参数
get_stock_data获取基础股票数据symbol 股票代码
get_technical_indicators获取技术指标数据symbol 股票代码

数据分析维度

基本面数据分析

  1. 财务数据

    • 计算市盈率
    • 市值数据
    • 财务指标
  2. 技术数据

    • 价格趋势数据
    • 成交量数据
    • 技术指标计算
  3. 资金流向数据

    • 资金流向统计
    • 大单数据统计
    • 基金活跃度指标
  4. 市场数据

    • 市场关注度
    • 成交量统计
    • 市场热度指数

技术指标计算

  1. 移动平均指标

    • MA5(5日移动平均)
    • MA20(20日移动平均)
    • 移动平均关系分析
  2. 动能指标

    • MFI(资金流量指数)
    • 换手率计算
    • RSI(相对强弱指数)
  3. 趋势指标

    • 趋势方向判断
    • 支撑位和阻力位计算

🎬 使用示例

获取股票数据

import asyncio
from mcp_client import MCPClient

async def main():
    client = MCPClient()
    
    # 获取股票基本数据
    data = await client.call_tool(
        "get_stock_data",
        {"symbol": "600136"}
    )
    print(data)

    # 获取技术指标数据
    indicators = await client.call_tool(
        "get_technical_indicators",
        {"symbol": "600136"}
    )
    print(indicators)

asyncio.run(main())

命令行工具

# 获取特定股票数据
python get_stock_data.py 600136

# 获取技术指标分析
python get_technical_analysis.py 600136

# 批量数据查询
python batch_query.py 600136,000001,000002

🛠️ 服务配置

1. 基础服务配置(服务器配置)

{
  "name": "stock-data-service",
  "display_name": "股票数据服务",
  "description": "提供股票数据查询和技术分析的MCP服务",
  "version": "1.0.0",
  "author": "Your Name",
  "license": "MIT",
  "homepage": "https://github.com/yourusername/mcp-stock-advisor",
  "repository": {
    "type": "git",
    "url": "https://github.com/yourusername/mcp-stock-advisor.git"
  },
  "main": "stock_advisor_server.py",
  "env": {
    "MCP_PORT": "8080",
    "DATA_SOURCE": "eastmoney",
    "CACHE_TIMEOUT": "300",
    "LOG_LEVEL": "INFO"
  },
  "tools": [
    {
      "name": "get_stock_price",
      "description": "获取实时股票价格",
      "parameters": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string",
            "description": "股票代码,如600136"
          }
        },
        "required": ["symbol"]
      }
    },
    {
      "name": "get_stock_data",
      "description": "获取股票基本数据",
      "parameters": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string",
            "description": "股票代码,如600136"
          }
        },
        "required": ["symbol"]
      }
    },
    {
      "name": "get_technical_indicators",
      "description": "获取技术指标数据",
      "parameters": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string",
            "description": "股票代码,如600136"
          }
        },
        "required": ["symbol"]
      }
    },
    {
      "name": "search_stock_by_name",
      "description": "按名称搜索股票",
      "parameters": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "股票名称"
          }
        },
        "required": ["name"]
      }
    },
    {
      "name": "get_market_data",
      "description": "获取市场数据分析",
      "parameters": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string",
            "description": "股票代码,如600136"
          }
        },
        "required": ["symbol"]
      }
    }
  ],
  "resources": [
    {
      "name": "stock_info",
      "description": "股票基本信息",
      "uri": "/stock/{symbol}/info"
    },
    {
      "name": "technical_data",
      "description": "技术指标数据",
      "uri": "/stock/{symbol}/technical"
    }
  ]
}

2. MCP客户端配置

标准MCP配置(mcp-config.json

{
  "mcpServers": {
    "stock-data-service": {
      "command": "python",
      "args": ["MCP/stock_advisor_server.py", "--name", "股票数据服务"],
      "env": {
        "MCP_PORT": "8080",
        "DATA_SOURCE": "eastmoney",
        "CACHE_TIMEOUT": "300",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

Claude Desktop配置

{
  "mcpServers": {
    "stock-data-service": {
      "command": "python",
      "args": ["d:/trae代码/魔塔MCP/MCP/stock_advisor_server.py", "--name", "股票数据服务"],
      "env": {
        "PYTHONPATH": "d:/trae代码/魔塔MCP"
      }
    }
  }
}

配置文件位置

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

3. 环境变量配置

基础环境变量

# 服务端口配置
export MCP_PORT=8080                    # MCP服务端口

# 数据源配置
export DATA_SOURCE=eastmoney            # 数据源选择 (eastmoney/tencent/sina)

# 缓存配置
export CACHE_TIMEOUT=300                # 缓存超时时间(秒)
export ENABLE_CACHE=true                # 是否启用缓存

# 日志配置
export LOG_LEVEL=INFO                   # 日志级别 (DEBUG/INFO/WARNING/ERROR)
export LOG_FILE=mcp-stock.log           # 日志文件路径

# 性能配置
export MAX_CONCURRENT_REQUESTS=10       # 最大并发请求数
export REQUEST_TIMEOUT=30               # 请求超时时间(秒)

高级环境变量

# API配置
export EASTMONEY_API_KEY=""             # 东方财富API密钥(可选)
export RATE_LIMIT_PER_MINUTE=100        # 每分钟请求限制

# 安全配置
export ENABLE_AUTH=false                # 是否启用认证
export API_KEYS="key1,key2,key3"        # API密钥列表

# 数据库配置(可选)
export DB_HOST=localhost                # 数据库主机
export DB_PORT=5432                     # 数据库端口
export DB_NAME=stock_data               # 数据库名称
export DB_USER=postgres                 # 数据库用户
export DB_PASSWORD=""                   # 数据库密码

4. Docker配置

Dockerfile配置

FROM python:3.9-slim

WORKDIR /app

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    gcc \
    && rm -rf /var/lib/apt/lists/*

# 复制依赖文件
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制源代码
COPY MCP/ ./MCP/
COPY *.py ./

# 设置环境变量
ENV MCP_PORT=8080
ENV DATA_SOURCE=eastmoney
ENV LOG_LEVEL=INFO

# 暴露端口
EXPOSE 8080

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD python -c "import requests; requests.get('http://localhost:8080/health')" || exit 1

# 启动命令
CMD ["python", "MCP/stock_advisor_server.py", "--name", "股票数据服务"]

Docker Compose配置

version: '3.8'
services:
  stock-data-service:
    build: 
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    environment:
      - MCP_PORT=8080
      - DATA_SOURCE=eastmoney
      - CACHE_TIMEOUT=300
      - LOG_LEVEL=INFO
      - ENABLE_CACHE=true
      - MAX_CONCURRENT_REQUESTS=10
    volumes:
      - ./logs:/app/logs
      - ./cache:/app/cache
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "python", "-c", "import requests; requests.get('http://localhost:8080/health')"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    networks:
      - stock-network

  # Redis缓存服务(可选)
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    networks:
      - stock-network

volumes:
  redis_data:

networks:
  stock-network:
    driver: bridge

5. 配置文件管理

创建配置文件(config.json

{
  "server": {
    "name": "股票数据服务",
    "port": 8080,
    "debug": false,
    "max_workers": 4
  },
  "data": {
    "source": "eastmoney",
    "cache_timeout": 300,
    "retry_times": 3,
    "request_timeout": 30
  },
  "logging": {
    "level": "INFO",
    "file": "logs/mcp-stock.log",
    "max_size": "10MB",
    "backup_count": 5
  },
  "security": {
    "enable_auth": false,
    "api_keys": [],
    "rate_limit": {
      "requests_per_minute": 100,
      "burst_size": 10
    }
  },
  "features": {
    "enable_cache": true,
    "enable_metrics": true,
    "enable_health_check": true
  }
}

Python代码加载配置

import json
import os
from typing import Dict, Any

def load_config(config_path: str = "config.json") -> Dict[str, Any]:
    """加载配置文件"""
    default_config = {
        "server": {"name": "股票数据服务", "port": 8080, "debug": False},
        "data": {"source": "eastmoney", "cache_timeout": 300},
        "logging": {"level": "INFO", "file": "mcp-stock.log"}
    }
    
    if os.path.exists(config_path):
        with open(config_path, 'r', encoding='utf-8') as f:
            config = json.load(f)
        # 合并默认配置
        for key, value in default_config.items():
            if key not in config:
                config[key] = value
            elif isinstance(value, dict):
                for sub_key, sub_value in value.items():
                    if sub_key not in config[key]:
                        config[key][sub_key] = sub_value
        return config
    else:
        return default_config

# 使用示例
config = load_config()
server_port = config["server"]["port"]
data_source = config["data"]["source"]

6. 命令行参数配置

# 基础启动
python stock_advisor_server.py

# 指定服务名称
python stock_advisor_server.py --name "股票数据服务"

# 启用调试模式
python stock_advisor_server.py --debug

# 指定端口
python stock_advisor_server.py --port 8080

# 指定配置文件
python stock_advisor_server.py --config config.json

# 指定日志级别
python stock_advisor_server.py --log-level DEBUG

# 组合使用
python stock_advisor_server.py --name "股票数据服务" --debug --port 8080 --log-level INFO

7. 配置验证

配置检查脚本

#!/usr/bin/env python3
"""配置验证脚本"""

import json
import os
import sys

def validate_config():
    """验证配置文件"""
    errors = []
    
    # 检查必需的环境变量
    required_env = ["MCP_PORT", "DATA_SOURCE"]
    for env_var in required_env:
        if not os.getenv(env_var):
            errors.append(f"缺少环境变量: {env_var}")
    
    # 检查端口是否可用
    port = int(os.getenv("MCP_PORT", 8080))
    if not (1024 <= port <= 65535):
        errors.append(f"端口号无效: {port}")
    
    # 检查数据源配置
    data_source = os.getenv("DATA_SOURCE", "eastmoney")
    if data_source not in ["eastmoney", "tencent", "sina"]:
        errors.append(f"不支持的数据源: {data_source}")
    
    # 检查日志级别
    log_level = os.getenv("LOG_LEVEL", "INFO")
    if log_level not in ["DEBUG", "INFO", "WARNING", "ERROR"]:
        errors.append(f"无效的日志级别: {log_level}")
    
    if errors:
        print("配置验证失败:")
        for error in errors:
            print(f"  - {error}")
        sys.exit(1)
    else:
        print("配置验证通过!")

if __name__ == "__main__":
    validate_config()

8. 配置最佳实践

开发环境配置

# .env.development
MCP_PORT=8080
DATA_SOURCE=eastmoney
LOG_LEVEL=DEBUG
ENABLE_CACHE=false
MAX_CONCURRENT_REQUESTS=5

生产环境配置

# .env.production
MCP_PORT=8080
DATA_SOURCE=eastmoney
LOG_LEVEL=INFO
ENABLE_CACHE=true
MAX_CONCURRENT_REQUESTS=20
ENABLE_AUTH=true

测试环境配置

# .env.test
MCP_PORT=8081
DATA_SOURCE=mock
LOG_LEVEL=DEBUG
ENABLE_CACHE=false
REQUEST_TIMEOUT=10

系统需求

  • Python 3.8+
  • 网络连接(获取实时股票数据)
  • 内存:至少512MB
  • 磁盘空间:至少100MB

🔍 故障排除

常见问题

Q: 服务启动失败

# 检查端口占用
netstat -an