Skip to main content
Glama
Mars-0310

morning-brief-mcp

by Mars-0310

Morning Brief MCP

Servicio independiente y determinista de informes matutinos de acciones A. No depende de AlphaAgent, XQ, bases de datos internas ni LLM Key. Expone el MorningBriefService existente a través del transporte estándar MCP stdio, conservando al mismo tiempo el modo de invocación normal en Python.

Funciones

El servicio expone 4 herramientas MCP:

  • generate_morning_brief(target_date=None, output_format="json"|"markdown"): genera el informe matutino completo.

  • get_morning_news(target_date=None, categories=None, limit_per_category=5): devuelve los eventos tras el filtrado por ventana, la deduplicación, el agrupamiento en clústeres, la clasificación y el ordenamiento por relevancia.

  • get_previous_close_context(target_date=None): devuelve el contexto de mercado de las acciones A del día de negociación anterior correspondiente a ese informe matutino.

  • get_news_coverage(target_date=None): devuelve el estado de los proveedores de noticias, los roles, las métricas y la cobertura, sin incluir el payload original ni información de autenticación.

Todas las herramientas están orientadas al día de negociación objetivo confirmado de las acciones A; el resultado es una recopilación determinista de evidencia de fuentes y no constituye asesoramiento de inversión.

Entorno e instalación

  • Python 3.11+

  • MCP Python SDK >=2.0.0,<3 (versión estable actual de aceptación: 2.0.0)

  • HITHINK_FINANCE_API_KEY (para el calendario de días de negociación y el contexto de mercado del día de negociación anterior)

Las noticias del informe matutino provienen directamente de proveedores web financieros públicos nacionales; no se necesita Brave Key. No se debe enviar un .env real:

$env:HITHINK_FINANCE_API_KEY="your-key"
python -m venv .venv
# Windows
.venv\Scripts\python -m pip install -e ".[test]"
# macOS/Linux
.venv/bin/python -m pip install -e ".[test]"

Invocación normal en Python

from morning_brief_mcp.renderers.markdown import render_markdown
from morning_brief_mcp.services.morning_brief import MorningBriefService

service = MorningBriefService()
try:
    report = service.generate("2026-08-17")
    markdown = render_markdown(report)
finally:
    service.close()

Inicio de MCP stdio

Después de la instalación, inícielo directamente:

morning-brief-mcp

También se puede usar la configuración de cliente genérica de command + args + env:

{
  "mcpServers": {
    "morning-brief-mcp": {
      "command": "python",
      "args": ["-m", "morning_brief_mcp.server"],
      "env": {
        "HITHINK_FINANCE_API_KEY": "${HITHINK_FINANCE_API_KEY}"
      }
    }
  }
}

target_date debe usar estrictamente YYYY-MM-DD. Si se omite, se usa la fecha actual de Asia/Shanghai y posteriormente la valida el calendario de días de negociación de HiThink; si no es día de negociación, devuelve target_not_trading_day sin cambiar de día de forma silenciosa.

Los errores de fecha, parámetros, configuración y upstream devuelven estructuras estables de invalid_request, target_not_trading_day, provider_unavailable o upstream_error, respectivamente. Un status="partial" en el informe de negocio sigue siendo un resultado de herramienta exitoso; por ejemplo, cuando una sola fuente de noticias falla pero los demás datos son suficientes para generar el informe matutino. El servidor stdio no imprime información de depuración en stdout; stdout solo transporta el protocolo MCP.

Arquitectura de datos

El descubrimiento de noticias accede por defecto directamente a las interfaces web públicas de los sitios financieros nacionales:

Proveedor

Rol

Capacidad histórica

Tier

财联社 CLS

primary

primary_full_window(last_time)

2

东方财富 7×24

primary

primary_full_window(sortEnd)

2

华尔街见闻

primary

primary_full_window(respuesta next_cursor)

2

金十

supplemental

supplemental_latest

2

MKTNews

supplemental

supplemental_latest

3

东方财富个股新闻

supplemental

supplemental_security, con límite estricto del número de valores

2

巨潮公告

supplemental

supplemental_security, con límite estricto del número de valores

1

Siempre que al menos dos proveedores primarios de dominios upstream diferentes paginen realmente hasta news_window.start, no se invocará GDELT en esta ronda. GDELT solo se usa como último recurso cuando la cobertura de la ventana completa es insuficiente; el éxito de solo-latest no se contabiliza como cobertura de ventana completa.

HiThink solo se encarga del calendario de días de negociación, el día de negociación anterior y el contexto de mercado del cierre anterior; no participa en el descubrimiento de noticias.

Ventana de noticias y pipeline

La ventana del informe matutino se fija de 15:00 del día de negociación anterior a 08:30 del día objetivo, en la zona horaria Asia/Shanghai, con ambos límites incluidos. Todos los proveedores se asignan primero a los campos unificados:

id, title, url, canonical_url, source, domain, published_at, description, language, category, tags, source_tier, provider, raw_source_id.

Después continúa con el pipeline determinista existente:

exact time filter → canonicalize → dedup/event cluster → classify → relevance → today_watch

Las noticias de múltiples fuentes sobre el mismo evento muestran un solo clúster y conservan related_sources y related_count. El elemento representativo se determina por Tier, tiempo e integridad de la información. description solo guarda el brief/resumen/fragmento de contenido/hover real de la fuente; no se amplía mediante programación.

Límites de velocidad, aislamiento de fallos y seguridad

Cada dominio comparte una sesión HTTP y un limitador de velocidad (rate limiter). Las solicitudes tienen timeout, reintentos acotados, Retry-After, retroceso exponencial y jitter. Por defecto, 东方财富 realiza solicitudes en serie con un intervalo mínimo de 1 segundo. El fallo de un solo proveedor solo registra su estado, advertencias y métricas; no bloquea a otros proveedores.

La paginación está limitada por DOMESTIC_MAX_PAGES y DOMESTIC_MAX_ITEMS. Cada proveedor registra el número de páginas, la cantidad bruta de elementos, la hora más antigua, el motivo de detención y los contadores de solicitudes HTTP/429/403/reintentos.

La API Key se lee únicamente de variables de entorno; no se convierte en un parámetro de herramienta ni aparece en la descripción de la herramienta, los registros, el esquema ni los resultados de MCP. La herramienta de diagnóstico no devuelve cabeceras de solicitud, payloads de upstream completos, URLs prefirmadas ni secretos internos.

Pruebas y smoke real

Las pruebas predeterminadas son completamente offline; todo el comportamiento HTTP usa fixtures/MockTransport:

PYTHONPATH=src python -m pytest

Después de configurar la clave de HiThink, se puede ejecutar un smoke real en un subproceso con el cliente oficial de Python para MCP y comparar los campos clave entre el Service y MCP:

python scripts/stdio_smoke.py

Contenido y notas de licencia

Estos proveedores utilizan interfaces web públicas, únicamente para el descubrimiento de datos y la agregación de enlaces. La licencia de la implementación de código abierto no equivale a la licencia del contenido de noticias de las fuentes; antes de un despliegue en producción o comercial, el usuario debe confirmar por su cuenta los términos de servicio de cada fuente, las políticas de rastreo y el permiso de uso del contenido. La implementación de referencia y el registro de licencias se encuentran en THIRD_PARTY_NOTICES.md.

Este servicio se utiliza para la recopilación e investigación de información de mercado y no constituye asesoramiento de inversión.

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mars-0310/morning-brief-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server