A real-world production MCP server powering automated financial reports, deep stock analysis, and daily market briefings. 7 tools, 1 resource, thousands of articles generated. Here's exactly how it works, what we learned, and what's next.
DailyTickers is a financial analysis platform that publishes institutional-quality market reports — daily briefings, weekly outlooks, individual stock analyses, and algorithmic scanner picks. Every article is generated by an AI agent powered by Claude Code and a custom MCP server.
Financial analysis requires pulling data from dozens of sources — stock prices, options chains, earnings calendars, economic indicators, news, sentiment. Before MCP, each analysis required manually gathering this data. With our MCP server, Claude Code can autonomously:
58 data types: quotes, bars, technicals, sentiment, options, earnings
Algorithmic scanning with regime detection and multi-factor scoring
50-100KB HTML articles with ECharts, tables, and trade ideas
Git commit, push to GitHub Pages, update search index
The DailyTickers MCP Gateway exposes 7 carefully designed tools and 1 resource. Each tool is optimized for a specific workflow in the article generation pipeline.
| Tool | Description | Params | Used By |
|---|---|---|---|
| GetMarketOverview | Complete market snapshot — indices, commodities, crypto, rates, sentiment, regime, news | depth (quick/deep) | Daily, Weekly |
| QueryData | 58 data types — quotes, bars, technicals, sentiment, earnings, options, insider txns | types, symbols | All article types |
| GetInstruments | Complete analysis of a single symbol — fundamentals, technicals, sentiment, signals | symbols | Stock analyses |
| RunAutoScreener | Regime-adaptive screener — detects market regime, selects best strategies | None | Scanner |
| RunScreener | Custom DSL screener — user-defined filters, multi-factor scoring | dsl | Scanner |
| CalculateOptionsGreeks | Black-Scholes Greeks for any option contract | spot, strike, expiry, etc. | Options analyses |
| LLMAnalysis | Secondary AI analysis via DeepSeek for cross-validation | query | Deep analyses |
A read-only resource exposing the current watchlist — a curated list of symbols the platform actively tracks. Claude reads this resource to know which stocks to include in daily briefings and weekly reports.
QueryData is the most-used tool because it supports 58 different data types through a single interface. The AI specifies which data types it needs, and the server fetches all of them in parallel.
// Claude calls QueryData to get everything about NVDA { "types": "quote,bars_daily,financials,earnings_quarterly,holders,stats,support_resistance,volume_profile,sentiment_overall,trading_signals,analyst_actions,insider_transactions,news", "symbols": "NVDA" } // Returns a unified JSON with all 13 data types // Each type is keyed by its name: { "quote": { "price": 142.50, "change": 3.2, ... }, "bars_daily": [{ "date": "2026-03-05", "close": 142.50, ... }], "financials": { "revenue": 130.5e9, ... }, "sentiment_overall": { "score": 0.72, "label": "bullish" }, ... }
We debated between 58 individual tools (get_quote, get_bars, get_financials...) and one unified QueryData tool. We chose the unified approach because: (1) Claude can request multiple data types in one call, reducing round-trips. (2) The server parallelizes all fetches internally. (3) 58 tools would overwhelm the model's tool selection. The tradeoff: the types parameter is a comma-separated string, which is slightly less discoverable than individual tools.
Discord bot fires scheduled command (e.g., "analyse daily" at 7:00 AM)
Claude Code reads CLAUDE.md instructions, plans the article structure
MCP tools called: GetMarketOverview, QueryData for 20+ symbols, WebSearch
Claude writes 50-100KB HTML with ECharts, tables, trade ideas, disclaimers
add_card.js updates JSON indexes and search data
Git commit + push triggers GitHub Pages deployment in ~60 seconds
// 1. Market snapshot GetMarketOverview({ depth: "deep" }) // 2. US indices + major ETFs QueryData({ types: "quote,bars_daily", symbols: "SPY,QQQ,DIA,IWM,GLD,SLV,USO,TLT" }) // 3. International markets QueryData({ types: "quote", symbols: "EFA,EEM,FXI" }) // 4. Crypto QueryData({ types: "quote", symbols: "BTC-USD,ETH-USD,SOL-USD,XRP-USD" }) // 5. Web search for context WebSearch("CPI inflation March 2026 FOMC") WebSearch("earnings calendar this week") WebSearch("geopolitics Ukraine China tariffs") // Total: 3 MCP calls + 3 web searches = complete daily briefing
DailyTickers runs on a fully automated schedule. A Discord bot manages task scheduling, and Claude Code does the heavy lifting.
| Task | Schedule | Duration | Output |
|---|---|---|---|
| Daily Briefing | Every day 7:00 AM | ~8 min | 60-80KB HTML, 14 sections |
| Scanner | Mon-Fri 11:00 PM | ~12 min | 80-100KB HTML, 10 setups |
| Retrospective | Friday 11:00 PM | ~10 min | 50KB HTML, performance report |
| Weekly Report | Sunday 6:00 PM | ~15 min | 100-120KB HTML, 18 sections |
// Schedule management via Discord every day at 07:00 articles analyse daily every weekday at 23:00 articles scan du jour every friday at 23:00 articles retrospective scanner every sunday at 18:00 articles nouvelle analyse weekly // Manual commands articles analyse NVDA // Generate ticker analysis articles scan du jour // Run scanner now schedules // List all scheduled tasks run #1 // Execute task #1 immediately
The bot translates Discord commands into claude -p "command" executions in a tmux session. Claude Code reads the project's CLAUDE.md (which contains all the article generation instructions), calls MCP tools for data, generates the HTML, runs the indexing script, and git pushes.
git push triggers GitHub Pages deployment — no CI/CD configuration needed.The biggest risk with AI-generated financial content is hallucinated data. Here's how we prevent it:
Every number comes from MCP tools. Never ask Claude to "estimate" or "recall" a stock price.
Scanner verifies entry prices against live quotes. >10% deviation = rejected.
LLMAnalysis tool sends data to a second AI (DeepSeek) for independent verification.
Weekly retros score past predictions. Consistently wrong patterns are pruned.
Articles under 10KB are rejected (truncated). Expected range: 50-120KB.
Every article includes mandatory financial disclaimers with explicit "not financial advice" language.
Real-time market data streaming via Streamable HTTP for live dashboards
User-specific watchlists and portfolio tracking via authenticated sessions
Automated translation to 6 languages with variant switcher for each article
Native mobile experience with push notifications for daily briefings
DailyTickers demonstrates a pattern that will become ubiquitous: AI agents + MCP servers + automated workflows = autonomous content production. The same architecture works for any domain — legal research, medical literature reviews, competitive intelligence, technical documentation.
The key ingredients are:
types parameter is more reliable.claude -p "command" in tmux. (3) Claude Code reads CLAUDE.md for instructions. (4) Claude calls MCP tools (GetMarketOverview, QueryData) + web searches. (5) Claude generates 50-100KB HTML article. (6) add_card.js indexes the article. (7) git add + git commit + git push. (8) GitHub Pages deploys in ~60 seconds.Series Complete
MCP from A to Z — Congratulations!
You now have a complete understanding of the Model Context Protocol — from theory to production. Go build something amazing.