
Earnings Watch
io.github.benjamin-diPublished by GitHub account benjamin-div0.3.3Updated Nov 4, 2026
Verified issuer earnings calendars and results documents
Overview
Local MCP server that gives an assistant verified issuer earnings calendars, event evidence and official results-document links, plus a personal watchlist.
- What you can do
- Look up upcoming earnings dates with timing uncertainty, and inspect event evidence, revisions and recent history
- Retrieve official results-document links with their verification status, and follow a cursor-based public change feed
- Manage a personal watchlist: follow or unfollow issuers, queue registration and resolve ambiguity
- Plan optional external calendar operations and record confirmed writes acknowledged by the client
- Check catalogue and maintenance status, and use bundled prompts and an upcoming-events calendar resource
- When to use it
- Useful when an assistant needs to track company earnings dates and results documents with quoted evidence rather than guessed dates, and to keep a personal follow list or feed earnings events into an external calendar.
- Requirements
- Python 3.12+ and a local install of the published package (for example via uv tool install), then a stdio client entry running the serve command. Data lives in SQLite; fetching issuer pages and model extraction happen in separate maintenance runs. Optional model backends need your own signed-in Claude Code or Codex CLI; an OpenAI-compatible Codex endpoint needs codex_base_url and codex_key_env. No bundled issuer universe or market-data subscription.
Installation
In SourceWeft
- Open Earnings Watch in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Earnings Watch
Verified issuer earnings calendars and results documents through a CLI, Python API and MCP server. Models propose dates; deterministic checks require quoted evidence and consistent issuer, period and timing. A call time never silently becomes a publication time.
Calendar updates are optional. Earnings Watch produces an operation plan; your MCP client uses its external Outlook app to apply it and acknowledges confirmed writes. No Microsoft credentials or calendar SDK are required by this package.
Maintained source and contributions: benjamin-di/earnings-watch. See Source and releases.
Requires Python 3.12+. Install the published package with uv tool install earnings-watch, or develop from a source checkout:
The example uses reserved domains and fictional data; replace its source URLs and issuer metadata before fetching. There is no bundled issuer universe or market-data subscription.
Maintenance and models
Serving reads SQLite and updates personal follows/ledgers; it never fetches issuer pages or calls a model. Run maintenance separately:
The default backend is none: it preserves existing dates and still polls official release providers. To extract new dates, install and sign into your own Claude Code or Codex CLI, then configure it in earnings-watch.toml:
Supported minimum versions are Claude Code 2.1.312 and Codex 0.164.0. Run earnings-watch doctor --live to check capabilities and an optional model canary. The package has no login flow. Model usage follows your CLI account's limits and terms. Only an explicit sign-in or account-limit refusal, or a configured Codex endpoint that is unreachable or failing before any output, tries the next backend; a timed-out run is not repeated in the same tick.
Codex runs with --ignore-user-config. To send it through an OpenAI Responses-compatible endpoint, set both codex_base_url and codex_key_env (the name of the environment variable holding its key) under [llm]; the key itself never goes in the file. Use https:// for any endpoint that is not on the local host. Claude Code receives ANTHROPIC_BASE_URL and CLAUDE_CODE_MAX_RETRIES from the environment, so a bounded retry count lets an unavailable endpoint fail before the task timeout.
MCP
A local client configuration, after initialization:
Prompts: earnings_briefing, results_brief, sync_to_my_outlook. Resource: earnings://upcoming.ics. Exact times require verified clock and timezone evidence; otherwise calendar entries are all-day. Outlook operations never include attendees.
HTTP standalone mode uses a separate bearer token per person at /users/<id>/mcp. Gateway mode accepts a configured backend bearer and an immutable subject header from the admission gateway at /mcp. These modes are separate trust boundaries; see permissions.
Connections page and notifications
The optional Connections page provides Upcoming, Your companies, Notifications and Calendar in one place. Sign in, add companies or preview a holdings import, then subscribe to your private calendar feed. Facts are shared; holdings, watchlists, mutes, preferences and receipts are personal.
Results-out notifications are enabled for new people. Daily briefs and urgent changes are optional. Mail submission requires a separately configured transport; the server and acquisition worker never send messages themselves.
Docker Compose
Save the returned token privately and use it only on that person's HTTP path. The server binds to loopback by default. Both images run as uid 1000; Compose drops capabilities, prevents privilege escalation and mounts the root filesystem read-only. The worker image includes pinned model CLIs; their auth volume is optional with backends=["none"]. Configure CLI sign-in outside the read-only worker before enabling model maintenance. Protect auth files and the data volume from other users.
Use --config PATH, --person ID, and --json with the CLI. Settings come from TOML and EARNINGS_WATCH_* environment variables. See operations, architecture, providers and design decisions.
Development
make check verifies lock drift, lint, formatting, types, dependency boundaries, offline tests and wheel/source builds. Tests use synthetic issuers and fake network/model/account boundaries. Real-model and real-page checks are separate operator gates. Read CONTRIBUTING.md and SECURITY.md.
See implementation status for completed capabilities, release gates and the production adapter work still required before cutover.
Source: README.md at commit 0d3c6cc
Tools
0Version history
4- v0.3.3LatestNov 4, 2026
- v0.3.1Nov 1, 2026
- v0.2.1Oct 31, 2026
- v0.1.0Oct 30, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts