# Sean's Daily News Digest - reader tools (MCP)

A Model Context Protocol endpoint. **POST** JSON-RPC 2.0 to this URL to call read-only tools over the briefing's issues, story threads, headline search, sources and transparency stats. Public data only; no writes; no auth.

## Tools

- **get_issue** - One dated issue of the briefing as Markdown, by its YYYY-MM-DD date (from list_issues or search_headlines). Use get_latest_issue for the newest one.
- **get_latest_issue** - The newest issue of the briefing as Markdown: every story with its headline, summary, why it matters, and the sources it was written from with their bias labels. Use this for 'what is in today's briefing' or 'what happened today'.
- **get_sources** - Every feed the briefing reads, with its Media Bias/Fact Check bias and factuality rating, home region, and the perspective it was chosen to bring. Use this to interpret the bias labels on a story or to answer 'where does the briefing get its news'.
- **get_stats** - Transparency statistics for a window of days, as JSON: per-source fetch health, how often each source was used at each tier, recent runs with articles kept and AI cost, and the de-duplication filter's numbers. Default window 30 days.
- **get_thread** - One story thread's full history, newest installment first: the label, status, open questions the briefing is still watching, and for each day the matched headline and what was new. Ids come from list_threads.
- **list_issues** - The archive index, newest first: each issue's date, its one-line preview, and a link to its Markdown. Use this to find which dates exist before calling get_issue.
- **list_threads** - The briefing's running story threads: stories it has followed across several issues. Active threads first, then the most recently concluded, each with its id, label, status, and latest development. Use get_thread for a thread's full history.
- **search_headlines** - Full-text search over every headline the briefing has published, up to 50 most relevant first, with the date and tier of each. Use this to find when a topic was covered, then get_issue for the full story.

## Usage

POST https://news-digest.seanfloyd.dev/mcp with `Accept: application/json, text/event-stream` and a JSON-RPC body, e.g. `{"jsonrpc":"2.0","id":1,"method":"tools/list"}`. The server is stateless: no session is required, and every answer is a single JSON object.

Protocol versions 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25, 2026-07-28. Naming 2026-07-28 commits you to the stateless lifecycle: no `initialize`; the `MCP-Protocol-Version: 2026-07-28` and `Mcp-Method` headers (plus `Mcp-Name` on a call) on every request; and the `_meta` envelope (`io.modelcontextprotocol/protocolVersion` and `io.modelcontextprotocol/clientCapabilities`) in every request's params. `server/discover` then answers versions and capabilities in one round trip. If you are not implementing that, name an earlier version and use `initialize`, or send no version at all.

## Cannot POST JSON-RPC?

Every tool is also a GET. Start at https://news-digest.seanfloyd.dev/mcp/tools.json, or read https://news-digest.seanfloyd.dev/.well-known/mcp.json for the same catalogue plus this endpoint's capabilities and versions.

Prefer a page with the copy-paste command for your client? See https://news-digest.seanfloyd.dev/connect.

Want the issues as text? See https://news-digest.seanfloyd.dev/llms.txt.
