morning-brief-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@morning-brief-mcpWhat's in today's morning brief?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Morning Brief MCP
An independent, deterministic A-share morning brief service. It does not rely on AlphaAgent, XQ, internal databases, or LLM Key, and exposes the existing MorningBriefService through the standard MCP stdio transport while retaining the normal Python invocation method.
Features
The service exposes 4 MCP tools:
generate_morning_brief(target_date=None, output_format="json"|"markdown"): Generate a complete morning brief.get_morning_news(target_date=None, categories=None, limit_per_category=5): Return events after window filtering, deduplication, clustering, classification, and relevance ranking.get_previous_close_context(target_date=None): Return the A-share market context of the previous trading day corresponding to this morning brief.get_news_coverage(target_date=None): Return news provider status, roles, metrics, and coverage, without raw payloads or authentication information.
All tools target a confirmed A-share target trading day; the results are deterministic compilations of source evidence and do not constitute investment advice.
Environment and Installation
Python 3.11+
MCP Python SDK
>=2.0.0,<3(currently accepted stable version: 2.0.0)HITHINK_FINANCE_API_KEY(used for the trading calendar and previous trading day market context)
Morning brief news comes directly from domestic public financial web providers; no Brave Key is needed. Do not commit real .env files:
$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]"Plain Python Invocation
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()MCP stdio Startup
Start directly after installation:
morning-brief-mcpYou can also use the generic command + args + env client configuration:
{
"mcpServers": {
"morning-brief-mcp": {
"command": "python",
"args": ["-m", "morning_brief_mcp.server"],
"env": {
"HITHINK_FINANCE_API_KEY": "${HITHINK_FINANCE_API_KEY}"
}
}
}
}target_date must strictly use YYYY-MM-DD. When omitted, the current date in Asia/Shanghai is used, and is then still verified by the HiThink trading calendar; non-trading days return target_not_trading_day and the date is not silently changed.
Date, parameter, configuration, and upstream errors return stable invalid_request, target_not_trading_day, provider_unavailable, or upstream_error structures, respectively. A business report with status="partial" is still a successful tool result, for example when a single news source fails but other data is sufficient to generate the morning brief. The stdio server does not print debug information to stdout; stdout only carries the MCP protocol.
Data Architecture
News discovery directly accesses the public web interfaces of domestic financial sites by default:
Provider | Role | Historical capability | Tier |
财联社 CLS | primary |
| 2 |
东方财富 7×24 | primary |
| 2 |
华尔街见闻 | primary |
| 2 |
金十 | supplemental |
| 2 |
MKTNews | supplemental |
| 3 |
东方财富个股新闻 | supplemental |
| 2 |
巨潮公告 | supplemental |
| 1 |
As long as at least two primary providers from different upstream domains actually paginate to news_window.start, GDELT will not be called in this round. Only when full-window coverage is insufficient is GDELT used as a last fallback; latest-only success is not counted as full-window coverage.
HiThink is only responsible for the trading calendar, the previous trading day, and previous-close market context; it does not participate in news discovery.
News Window and Pipeline
The morning brief window is fixed from 15:00 of the previous trading day to 08:30 of the target trading day, in the Asia/Shanghai timezone, with both boundaries inclusive. All providers are first mapped to the unified fields:
id, title, url, canonical_url, source, domain,
published_at, description, language, category, tags,
source_tier, provider, raw_source_id.
Then it continues through the existing deterministic pipeline:
exact time filter → canonicalize → dedup/event cluster → classify → relevance → today_watch
Multi-source reports of the same event display only one cluster, while retaining related_sources and related_count. The representative item is determined by Tier, time, and information completeness. The description stores only the upstream real brief/summary/content snippet/hover, without programmatic expansion.
Rate Limiting, Failure Isolation, and Security
Each domain shares one HTTP session and a rate limiter. Requests have timeout, bounded retries, Retry-After, exponential backoff, and jitter. 东方财富 defaults to serial execution with a minimum interval of 1 second. A single provider failure only records its status, warning, and metrics, and does not block other providers.
Pagination is limited by DOMESTIC_MAX_PAGES and DOMESTIC_MAX_ITEMS. Each provider records page count, raw item count, oldest time, stop reason, and HTTP request/429/403/retry counts.
The API Key is read only from environment variables; it never becomes a tool parameter and never appears in tool descriptions, logs, schema, or MCP results. Diagnostic tools do not return request headers, full upstream payloads, pre-signed URLs, or internal secrets.
Tests and Real Smoke
Default tests are completely offline; all HTTP behavior uses fixtures/MockTransport:
PYTHONPATH=src python -m pytestAfter configuring the HiThink Key, you can use the official MCP Python client to run a real subprocess smoke and compare key Service and MCP fields:
python scripts/stdio_smoke.pyContent and Licensing Notes
These providers use public web interfaces solely for data discovery and link aggregation. The open-source implementation license is not equivalent to the upstream news content license; before production or commercial deployment, users must independently confirm each upstream's terms of service, crawling policy, and content usage license. See THIRD_PARTY_NOTICES.md for the reference implementation and license records.
This service is for market information organization and research and does not constitute investment advice.
This server cannot be installed
Maintenance
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
Read-only China A-share data for AI agents: market, limit-up, capital flow and disclosures.
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
The financial MCP for AI agents - 90+ financial tables, SEC filings, signals, alt-data.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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