trading-mcp
trading-mcp
Servicio MCP para datos de trading e indicadores técnicos, construido sobre uv + pydantic + akshare + TA-Lib.
Contenido del proyecto
Proporciona consultas de datos de mercado bursátil y cálculo de indicadores técnicos básicos (velas, RSI, MA, MACD).
Proporciona consultas de datos fundamentales a medio y largo plazo (indicadores principales de acciones A, tres estados financieros principales de acciones de EE. UU., indicadores principales de acciones de EE. UU.).
Capa de acceso a datos de mercado unificada, compatible con acciones A y acciones de EE. UU. (por ejemplo,
AAPL.US).Interfaz de herramientas MCP, compatible con salida en formato Markdown o JSON.
Arquitectura del proyecto
data/: Capa de acceso a datos de mercado. InterfazMarketDataClient+ implementaciónAkshareMarketDataClient.services/: Capa de servicios de negocio. Convierte las cotizaciones originales en estructuras estándar y dirige el cálculo de indicadores.indicators/: Encapsulación del motor de indicadores. Llamadas unificadas basadas en TA-Lib.models/: Modelos de solicitud y respuesta de herramientas (Pydantic).utils/: Formateo de salida MCP (tablas Markdown, etc.).mcp_app.py/main.py: Punto de entrada del servicio MCP y registro de herramientas.
Estructura de directorios
config/: Definición de configuración (Pydantic Settings).data/: Implementación del cliente de datos de mercado.indicators/: Motor de cálculo de indicadores.models/: Modelos de solicitud/respuesta.services/: Capa de servicios de negocio.tests/: Pruebas unitarias.utils/: Formateo de salida y herramientas auxiliares.mcp_app.py: Registro de herramientas MCP.main.py: Punto de entrada para iniciar el servicio.
Instalación y dependencias
Instalar dependencias:
uv sync --extra devInstalar librerías del sistema TA-Lib:
macOS:
brew install ta-libDebian/Ubuntu:
sudo apt-get install libta-lib0 libta-lib0-devWindows: Usar el wheel precompilado correspondiente a la versión de Python
Instrucciones de configuración
La configuración se sobrescribe mediante el prefijo de variables de entorno TRADING_MCP_:
export TRADING_MCP_ENVIRONMENT=dev
export TRADING_MCP_DATA_DIR=./data
export TRADING_MCP_DEFAULT_SYMBOL=000001
export TRADING_MCP_HOST=0.0.0.0
export TRADING_MCP_PORT=8000
export TRADING_MCP_AKSHARE_PROXY_ENABLED=true
export TRADING_MCP_AKSHARE_PROXY_AUTH_IP=***
export TRADING_MCP_AKSHARE_PROXY_AUTH_TOKEN=*** TRADING_MCP_AKSHARE_PROXY_RETRY=30Significado de los campos:
TRADING_MCP_ENVIRONMENT: Identificador del entorno de ejecución (ej.dev/test/prod).TRADING_MCP_DATA_DIR: Directorio de datos local.TRADING_MCP_DEFAULT_SYMBOL: Activo de cotización predeterminado.TRADING_MCP_HOST: Dirección de escucha del servicio MCP.TRADING_MCP_PORT: Puerto del servicio MCP.TRADING_MCP_AKSHARE_PROXY_ENABLED: Si se habilitaakshare-proxy-patch.TRADING_MCP_AKSHARE_PROXY_AUTH_IP: IP de la pasarela de autorización deakshare-proxy-patch; si no se configura, no se instalará el parche.TRADING_MCP_AKSHARE_PROXY_AUTH_TOKEN: Token de autorización opcional.TRADING_MCP_AKSHARE_PROXY_RETRY: Número de reintentos internos del parche.
Notas sobre el proxy anti-scraping de East Money:
El proyecto incluye
akshare-proxy-patch, que intentará instalarse automáticamente al importar data/akshare_client.py.Solo se habilitará si se configura
TRADING_MCP_AKSHARE_PROXY_AUTH_IPyTRADING_MCP_AKSHARE_PROXY_ENABLED=true.El parche solo interceptará solicitudes a dominios relacionados con East Money y no afectará a otros sitios no objetivo.
Uso en Python
from trading_mcp.config import Settings
from trading_mcp.data import AkshareMarketDataClient
from trading_mcp.indicators import IndicatorEngine
settings = Settings(environment="dev", data_dir="./data", default_symbol="000001")
client = AkshareMarketDataClient()
frame = client.fetch(settings.default_symbol, "2024-01-01", "2024-02-01")
engine = IndicatorEngine()
close_series = frame["close"] if "close" in frame.columns else frame.iloc[:, 0]
result = engine.compute("sma", close_series, timeperiod=5)
print(result.tail())Servicio MCP Iniciar el servicio MCP (HTTP transmitible):
python main.pyIniciar el Inspector MCP (adaptado para WSL, accesible desde el host):
./dev.shPor defecto se utilizará la siguiente configuración del Inspector:
MCP_INSPECTOR_HOST=0.0.0.0MCP_INSPECTOR_CLIENT_PORT=6274MCP_INSPECTOR_SERVER_PORT=6277MCP_INSPECTOR_AUTO_OPEN=false
Acceder preferiblemente desde el navegador del host Windows:
http://localhost:6274Si el reenvío de localhost de WSL no está habilitado en la máquina local, también puede ejecutar hostname -I dentro de WSL para ver la IP y luego acceder desde el host a http://<wsl-ip>:6274.
Si solo desea acceder desde el entorno Linux local, puede sobrescribirlo con:
MCP_INSPECTOR_HOST=127.0.0.1 ./dev.shNota: El proxy del Inspector tiene la capacidad de iniciar procesos locales. 0.0.0.0 solo debe usarse en entornos de red de confianza.
Herramientas disponibles:
trading_kline(symbol, limit=30, offset=0, period_type="1d", start_date=None, end_date=None, response_format="markdown")trading_macd(symbol, limit=30, fast_period=12, slow_period=26, signal_period=9, offset=0, period_type="1d", start_date=None, end_date=None, response_format="markdown")trading_rsi(symbol, limit=30, period=14, offset=0, period_type="1d", start_date=None, end_date=None, response_format="markdown")trading_ma(symbol, limit=30, period=20, ma_type="sma", offset=0, period_type="1d", start_date=None, end_date=None, response_format="markdown")trading_volume(symbol, limit=30, offset=0, period_type="1d", start_date=None, end_date=None, response_format="markdown")trading_fund_flow_individual_em(symbol, limit=30, offset=0, start_date=None, end_date=None, response_format="markdown")trading_fund_flow_individual_rank_em(indicator="5日", limit=30, offset=0, response_format="markdown")trading_fund_flow_sector_rank_em(indicator="今日", sector_type="行业资金流", sort_by="主力净流入", limit=30, offset=0, response_format="markdown")trading_fund_flow_sector_summary_em(symbol, indicator="今日", limit=30, offset=0, response_format="markdown")trading_fundamental_cn_indicators(symbol, indicator="按报告期", limit=30, offset=0, start_date=None, end_date=None, response_format="markdown")trading_fundamental_us_report(stock, symbol="资产负债表", indicator="年报", limit=30, offset=0, start_date=None, end_date=None, response_format="markdown")trading_fundamental_us_indicators(symbol, indicator="年报", limit=30, offset=0, start_date=None, end_date=None, response_format="markdown")trading_industry_summary_ths(limit=30, offset=0, response_format="markdown")trading_industry_index_ths(symbol, limit=30, offset=0, start_date=None, end_date=None, response_format="markdown")trading_industry_name_em(limit=30, offset=0, response_format="markdown")trading_board_change_em(limit=30, offset=0, response_format="markdown")trading_industry_spot_em(symbol, limit=30, offset=0, response_format="markdown")trading_industry_cons_em(symbol, limit=30, offset=0, response_format="markdown")trading_industry_hist_em(symbol, period="日k", adjust="none", limit=30, offset=0, start_date=None, end_date=None, response_format="markdown")trading_industry_hist_min_em(symbol, period="5", limit=30, offset=0, response_format="markdown")trading_info_global_em(limit=30, offset=0, response_format="markdown")
Notas sobre los parámetros de trading_fundamental_cn_indicators:
Enum
indicator:按报告期(por periodo de informe),按单季度(por trimestre individual)Entrada compatible para
symbol:000001,000001.SZ,600519.SH(autocompletado o normalización de sufijos)Los resultados fundamentales se devuelven en formato de fila original:
columns + items
Notas sobre los parámetros de trading_fundamental_us_report:
Enum
symbol(tipo de informe):资产负债表(Balance general),综合损益表(Estado de resultados),现金流量表(Estado de flujo de efectivo)Enum
indicator(periodo del informe):年报(Informe anual),单季报(Informe trimestral),累计季报(Informe trimestral acumulado)Entrada compatible para
stock:TSLA,AAPL.US,105.AAPL,BRK.B(normalizado internamente al ticker reconocible por AkShare)
Notas sobre los parámetros de trading_fundamental_us_indicators:
Enum
indicator:年报,单季报,累计季报Entrada compatible para
symbol:TSLA,AAPL.US,105.AAPL,BRK.BLos resultados fundamentales se devuelven en formato de fila original:
columns + items
Notas sobre los campos de trading_volume:
Campos devueltos:
timestamp,volume,amount,turnover_rateEstrategia de unidades: Se conservan las unidades originales de la fuente de datos y se devuelven a través de los campos de respuesta
Acciones A:
volume_unit=lot,amount_unit=CNYAcciones de EE. UU.:
volume_unit=share,amount_unit=USDturnover_rate_unit=percent
Cuando los datos semanales/mensuales se agregan a partir de líneas diarias,
turnover_ratepuede sernull
Notas sobre las herramientas de flujo de capital:
trading_fund_flow_individual_em: Flujo de capital de acciones individuales de East Money,symboladmite000001,600519.SH,830799.BJtrading_fund_flow_individual_rank_em: Ranking de flujo de capital de acciones individuales de East MoneyEnum
indicator:今日(Hoy),3日,5日,10日
trading_fund_flow_sector_rank_em: Ranking de flujo de capital de sectores de East MoneyEnum
indicator:今日,5日,10日Enum
sector_type:行业资金流(Flujo de capital industrial),概念资金流(Flujo de capital conceptual),地域资金流(Flujo de capital regional)Enum
sort_by:涨跌幅(Variación de precio),主力净流入(Entrada neta principal); por defecto ordenado descendentemente por主力净流入
Cuando la interfaz de ranking de East Money no está disponible:
El ranking de acciones individuales volverá al ranking de flujo de capital de acciones de Tonghuashun
El ranking de sectores industriales/conceptuales volverá al ranking correspondiente de Tonghuashun
Después del retroceso, las columnas devueltas pueden diferir de las columnas originales de East Money; el
地域资金流no tiene retroceso
trading_fund_flow_sector_summary_em: Flujo de capital de las acciones constituyentes de un sector específicoPor defecto usa East Money, en caso de fallo vuelve a Tonghuashun
symboles el nombre del sector, ej.电源设备(Equipos de energía),风电设备(Equipos de energía eólica)Enum
indicator:今日,5日,10日Después del retroceso, las columnas devueltas pueden diferir de las columnas originales de East Money
Los resultados del flujo de capital se devuelven unificadamente como tablas originales:
columns + items
Notas sobre los símbolos:
Ejemplo de acciones A:
000001,300308.SZEjemplo de acciones de EE. UU.:
AAPL.US,AAPL,105.AAPL,BRK.B
Notas sobre las herramientas de sectores industriales:
trading_industry_summary_ths: Tabla resumen de sectores de Tonghuashun, devuelve los campos de resumen de sector originalestrading_industry_index_ths: Índice sectorial de Tonghuashun,symboles el nombre del sector, admitestart_date/end_datetrading_industry_name_em: Lista de nombres de sectores industriales de East Moneytrading_board_change_em: Detalles de cambios inusuales en sectores de East Money durante el díatrading_industry_spot_em: Cotizaciones en tiempo real de sectores industriales de East Money,symboles el nombre del sectortrading_industry_cons_em: Acciones constituyentes de sectores industriales de East Money,symboles el nombre del sectortrading_industry_hist_em: Cotizaciones históricas de sectores industriales de East MoneyEnum
period:日k(Diario),周k(Semanal),月k(Mensual)Enum
adjust:none,qfq(ajuste hacia adelante),hfq(ajuste hacia atrás); dondenonesignifica sin ajuste
trading_industry_hist_min_em: Cotizaciones históricas intradiarias de sectores industriales de East MoneyEnum
period:1,5,15,30,60
Los resultados de sectores industriales se devuelven unificadamente como tablas originales:
columns + items
Notas sobre las herramientas de información:
trading_info_global_em: Noticias financieras globales de East MoneyLos resultados de información se devuelven unificadamente como tablas originales:
columns + items
Estructura de respuesta (structuredContent)
{
"stock": "TSLA",
"symbol": "资产负债表",
"indicator": "年报",
"columns": ["REPORT_DATE", "ITEM_NAME", "AMOUNT"],
"items": [],
"count": 0,
"total": 0,
"limit": 30,
"offset": 0,
"has_more": false,
"next_offset": null,
"start_date": null,
"end_date": null
}Flujo de interacción de datos MCP (Arquitectura y diagrama de secuencia)
A continuación, se utiliza Mermaid para dibujar la arquitectura principal de interacción de datos y el diagrama de secuencia del MCP actual, para ayudar a comprender la ruta de flujo de las solicitudes dentro del sistema.
Esquema de arquitectura (Flowchart)
flowchart LR
Client[Client / User] -->|HTTP/Stream 请求| MCP[MCP Server]
MCP -->|调用工具接口| API[Tool Dispatcher / Handlers]
API --> Market[MarketDataClient (Akshare / Providers)]
Market -->|行情数据| Storage[Local Cache / Data Dir]
API --> Indicator[IndicatorEngine (TA-Lib)]
Indicator -->|指标结果| Formatter[Response Formatter (Markdown / JSON)]
Formatter -->|返回| Client
Market -.->|必要时| Proxy[akshare-proxy-patch]
MCP -->|注册 & 管理| Inspector[MCP Inspector]Explicación:
MCP Server: Recibe solicitudes externas (HTTP/stream), responsable de analizar la solicitud y llamar a las herramientas internas.
Tool Dispatcher: Enruta la solicitud a la herramienta específica (ej. trading_kline, trading_macd).
MarketDataClient: Capa de acceso a datos de mercado unificada, actualmente implementada principalmente con Akshare, admite parches de proxy.
IndicatorEngine: Llama a TA-Lib o algoritmos integrados para calcular indicadores técnicos.
Response Formatter: Convierte datos estructurados en formato de respuesta MCP Markdown o JSON.
Local Cache/Storage: Utilizado para almacenamiento en caché a corto plazo y datos históricos para reducir las llamadas a la API.
Diagrama de secuencia (Sequence Diagram)
sequenceDiagram
participant U as Client/User
participant M as MCP Server
participant D as Tool Dispatcher
participant MD as MarketDataClient
participant I as IndicatorEngine
participant F as Formatter
U->>M: 发起 trading_macd 请求 (symbol, start, end, params)
M->>D: 解析并转发请求
D->>MD: 请求历史 K 线 (symbol, start, end)
MD-->>D: 返回原始行情数据 (OHLCV)
D->>I: 传入行情数据与参数, 调用指标计算
I-->>D: 返回指标结果 (MACD lines, histogram)
D->>F: 格式化为 Markdown / JSON 的 MCP 响应
F-->>M: 返回格式化结果
M-->>U: 通过 HTTP Stream 返回响应 (chunked / 完整)
alt 缓存命中
D->>Storage: 读取缓存
Storage-->>D: 返回缓存数据
end
alt 第三方被阻断/需要代理
MD->>Proxy: 走 akshare-proxy-patch
Proxy-->>MD: 返回代理后的数据
endLos dos diagramas anteriores son vistas abstractas del sistema actual; si desea detallar los diagramas con más componentes (por ejemplo: autenticación, limitación de tasa, colas, tareas asíncronas, métricas de monitoreo), dígame qué partes necesita agregar y puedo expandir y actualizar los diagramas Mermaid en el README.
Si confirma que esta actualización es correcta, enviaré los cambios a una nueva rama y los subiré, luego crearé una Pull Request para su revisión.
This server cannot be deployed
Maintenance
Related MCP Connectors
China A-share market data for research, backtesting and AI agents via MCP.
China A-share market data over MCP: 22 tools for quotes, K-line, financials, money flow, top-trader boards, sectors, macro, convertible bonds and factor screening. Five tools need no API key, so you can connect and try it immediately.
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
Market Data App MCP — wraps the Market Data App API (marketdata.app)
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides stock market data and computes technical indicators like EMA, MACD, and RSI across multiple timeframes using the LongPort API and TA-Lib. It enables users to perform detailed financial analysis and multi-timeframe market reviews through standard MCP tools.-
- FlicenseNot gradedqualityAmaintenanceEnables AI agents and backends to query and analyze A-share, US equity, ETF, index, and crypto market data, technical indicators, fundamentals, money flow, news, and filings through MCP tools or HTTP APIs. It also supports agent-friendly artifact outputs and CSV/JSON code-export workflows.-
- FlicenseNot gradedqualityAmaintenanceEnables AI agents and backends to query A-share, US equity, ETF, index, and crypto market data, compute technical indicators, retrieve fundamentals, news, filings, money flow, and export CSV/JSON for code workflows through MCP tools and HTTP APIs.-
- FlicenseNot gradedqualityAmaintenanceEnables AI agents and backends to query A-share, US equity, ETF, index, and crypto market data, run technical indicators, fundamentals, money flow, news, and filings analysis over MCP or HTTP, and export results as CSV/JSON for code-execution workflows.-