Weekly reliability reports, written by Agent0 and sent by Claude Dash0 documented a setup in which a Claude scheduled task calls Agent0 through the Dash0 MCP server's runTask tool each Monday at 08:45 to generate a weekly reliability report, which Claude converts to HTML and saves as a Gmail draft. On its first run against the OpenTelemetry Demo dataset, Agent0 returned a 7-day report in under 45 seconds showing adservice at a 30.01% error rate over 379,881 requests, loadgenerator at 3.96% over 771,583 requests and frontend at 3.38% over 9,758,356 requests, and noted no SLOs were defined, all three synthetic checks passed and four issues remained open, three critical. Dash0 said the run also quoted one check as "4783.00% against a 5% threshold," which is why the workflow starts with Gmail drafts and only switches create_draft to send_message after several weeks of review. Every Monday someone on the team opens Dash0, checks SLOs, scans failed checks, pulls the top error rates and pastes it all into an email for stakeholders. It's the same queries every week, and nobody enjoys it. We tried handing that job to Agent0. A Claude scheduled task asks Agent0, through the Dash0 MCP server, to write the weekly report. Claude then turns the answer into an HTML email and saves it as a Gmail draft. This post shows how it fits together, what Agent0 wrote on its first run, and what broke when we tested it. How it works how-it-works Three connectors in Claude do the work: - Dash0 MCP server. Exposes Agent0 as the runTask tool. Agent0 runs the investigation against live telemetry and returns its findings as text. Over MCP it only reads. - Gmail. create draft saves the email for review. send message sends it. - Scheduled tasks. Claude runs a stored prompt on a timer, in a fresh session each time. Each run goes like this: 1. The scheduled task fires, say Monday at 08:45. 2. Claude calls runTask with the dataset and a report prompt. 3. Agent0 queries metrics, traces, checks and open issues, then writes the report. 4. Claude converts the markdown answer to HTML and calls Gmail. 5. The run leaves an Agent0 thread in Dash0, so anyone can open it and see which queries produced each number. Claude never queries Dash0 directly in this setup. Agent0 decides which queries to run, which is why the report can cover "what happened this week" instead of a fixed list of panels. What Agent0 wrote what-agent0-wrote We pointed it at our OpenTelemetry Demo dataset and asked for a 7-day report: SLO status, failing synthetic checks, the top 3 services by error rate, and notable incidents. Agent0 answered in under 45 seconds. An excerpt: | Service | Error rate | Requests | |---|---|---| | adservice | 30.01% | 379,881 | | loadgenerator | 3.96% | 771,583 | | frontend | 3.38% | 9,758,356 | It also reported that no SLOs were defined in the dataset, that all three synthetic checks passed at every sample, and that four issues were still open at the end of the window, three of them critical. Two things stood out. It separated instrumented services from dependencies that were only seen from the outside, which is the distinction a reader needs and one we hadn't asked for. And it quoted one check as "4783.00% against a 5% threshold", a raw rule value that would confuse anyone outside the team. That line is the reason the setup below starts with drafts. Set it up yourself set-it-up-yourself You need the Dash0 MCP server and Gmail connected in Claude, and a Dash0 token that can read the dataset you report on. 1. Ask Claude to run listDatasets and note the dataset's technical ID. 2. In a chat, ask Claude to call runTask with that dataset and your report prompt. Edit the prompt until the answer is something you'd send. 3. Still in the chat, have Claude convert the answer to HTML and call create draft to yourself. Check it in Gmail. 4. Ask Claude to create a scheduled task with the full prompt and a weekly time. Each run starts with no memory, so the prompt has to carry everything. 5. Review the drafts for a few weeks. When they need no edits, change create draft to send message. The prompt we used: 1. Using the Dash0 MCP connector, call runTask with dataset "