MCP Masterclass — Part 5 of 5

Case Study: The DailyTickers MCP Server

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.

Production System 7 Tools 400+ Articles Anti-Hallucination
MCP from A to Z5/5
Overview7 ToolsData FlowAutomationLessons LearnedFuture
The Big Picture

What is DailyTickers?

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.

433
Articles Published
7
MCP Tools
4
Daily Automations
5
Article Types

The Problem We Solved

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:

Fetch Market Data

58 data types: quotes, bars, technicals, sentiment, options, earnings

Screen Stocks

Algorithmic scanning with regime detection and multi-factor scoring

Generate Reports

50-100KB HTML articles with ECharts, tables, and trade ideas

Publish & Index

Git commit, push to GitHub Pages, update search index

The Automation Pipeline
Discord Bot triggers Claude Code + MCP Server = Published Article
The Tools

7 Tools + 1 Resource

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.

ToolDescriptionParamsUsed By
GetMarketOverviewComplete market snapshot — indices, commodities, crypto, rates, sentiment, regime, newsdepth (quick/deep)Daily, Weekly
QueryData58 data types — quotes, bars, technicals, sentiment, earnings, options, insider txnstypes, symbolsAll article types
GetInstrumentsComplete analysis of a single symbol — fundamentals, technicals, sentiment, signalssymbolsStock analyses
RunAutoScreenerRegime-adaptive screener — detects market regime, selects best strategiesNoneScanner
RunScreenerCustom DSL screener — user-defined filters, multi-factor scoringdslScanner
CalculateOptionsGreeksBlack-Scholes Greeks for any option contractspot, strike, expiry, etc.Options analyses
LLMAnalysisSecondary AI analysis via DeepSeek for cross-validationqueryDeep analyses

Resource: marketwatch://watchlist

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 — The Swiss Army Knife

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.

QueryData Call Example
// 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" },
  ...
}

Design Insight: One Tool vs Many

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.

Architecture

Data Flow — From API to Published Article

The Pipeline

1

Trigger

Discord bot fires scheduled command (e.g., "analyse daily" at 7:00 AM)

2

Agent

Claude Code reads CLAUDE.md instructions, plans the article structure

3

Data Fetch

MCP tools called: GetMarketOverview, QueryData for 20+ symbols, WebSearch

4

Generate

Claude writes 50-100KB HTML with ECharts, tables, trade ideas, disclaimers

5

Index

add_card.js updates JSON indexes and search data

6

Publish

Git commit + push triggers GitHub Pages deployment in ~60 seconds

Typical Tool Call Sequence for a Daily Briefing

Tool Call Sequence
// 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
Automation

Automated Publishing Pipeline

DailyTickers runs on a fully automated schedule. A Discord bot manages task scheduling, and Claude Code does the heavy lifting.

TaskScheduleDurationOutput
Daily BriefingEvery day 7:00 AM~8 min60-80KB HTML, 14 sections
ScannerMon-Fri 11:00 PM~12 min80-100KB HTML, 10 setups
RetrospectiveFriday 11:00 PM~10 min50KB HTML, performance report
Weekly ReportSunday 6:00 PM~15 min100-120KB HTML, 18 sections

The Discord Bot Architecture

Discord Commands
// 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.

Hard-Won Wisdom

Lessons Learned — What Works, What Doesn't

What Works Brilliantly

Anti-Hallucination Strategies

The biggest risk with AI-generated financial content is hallucinated data. Here's how we prevent it:

Data-Only Sources

Every number comes from MCP tools. Never ask Claude to "estimate" or "recall" a stock price.

Price Spot Validation

Scanner verifies entry prices against live quotes. >10% deviation = rejected.

Cross-Validation

LLMAnalysis tool sends data to a second AI (DeepSeek) for independent verification.

Retrospectives

Weekly retros score past predictions. Consistently wrong patterns are pruned.

Size Checks

Articles under 10KB are rejected (truncated). Expected range: 50-120KB.

Disclaimers

Every article includes mandatory financial disclaimers with explicit "not financial advice" language.

What Doesn't Work

What's Next

The Future of DailyTickers MCP

Near-Term Roadmap

WebSocket Transport

Real-time market data streaming via Streamable HTTP for live dashboards

OAuth + Portfolios

User-specific watchlists and portfolio tracking via authenticated sessions

Multi-Language

Automated translation to 6 languages with variant switcher for each article

Mobile App

Native mobile experience with push notifications for daily briefings

The Bigger Picture

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:

The Formula
Domain Knowledge (CLAUDE.md) + Live Data (MCP) + AI Agent (Claude) = Autonomous Publishing
Final Quiz

Series Capstone Quiz

Why did DailyTickers use one QueryData tool instead of 58 individual tools?
Three reasons: (1) Fewer round-trips — Claude can request 13 data types in one call instead of 13 separate calls. (2) Internal parallelization — the server fetches all types simultaneously. (3) Tool selection clarity — 58 tools would overwhelm the AI's ability to pick the right one; a single unified tool with a types parameter is more reliable.
What's the #1 anti-hallucination strategy for AI-generated financial content?
Never let the AI cite data from memory. Every number, price, percentage, and date must come from a live data source (MCP tool call or web search). Claude's training data contains market information, but it's outdated and often wrong. The rule: if it's a number, it must come from a tool.
Describe the complete pipeline from Discord command to published article.
(1) Discord bot receives scheduled command. (2) Bot executes 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.
What makes CLAUDE.md files so powerful for AI automation?
CLAUDE.md files encode domain expertise as structured instructions. They tell the AI exactly what data to fetch, what sections to write, what format to use, what conventions to follow, and what validation checks to run. They're the equivalent of an employee handbook — they turn a general-purpose AI into a domain specialist. The more detailed and specific the instructions, the more consistent and reliable the output.
If you wanted to build a similar system for a different domain (e.g., legal research), what would you need?
You'd need: (1) An MCP server with tools for your domain's data sources (legal databases, case law APIs, court filings). (2) A CLAUDE.md file encoding the domain expertise (citation formats, legal terminology, document structure). (3) Reference documents showing the expected output format. (4) Validation pipelines (citation checking, factual verification). (5) A scheduling system (Discord bot, cron, or CI/CD) for automated workflows. The MCP + CLAUDE.md pattern is domain-agnostic.

Key Takeaways — Part 5 & Series Finale

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.

Restart Series Back to Home
MCP from A to Z5/5