← Back

How to use Claude + MCP to get a daily calendar briefing by email

Haven for Families · Technical Guide

If you're the kind of person who wants an AI to read your calendar every morning and email you a smart summary of your day, this is possible — and it's genuinely impressive when it works. It uses Claude, Anthropic's AI, connected to your calendar through something called MCP (Model Context Protocol).

This guide walks through the full setup. Fair warning: it takes a while, involves the terminal, and requires a few ongoing services. But if you want to understand how this kind of AI automation works, it's a great project.

If you just want the briefing — skip to the bottom.


What you're building

The finished setup looks like this: every morning, an automated script runs Claude with access to your calendar. Claude reads what's on your schedule, writes a natural-language summary of your day, and sends it to your email. No app to open. It just arrives.

What you'll need

Step 1: Install Claude Desktop and enable MCP

Step 1

Download and install Claude Desktop from claude.ai/download. MCP (Model Context Protocol) is built into Claude Desktop — it lets Claude connect to external tools and data sources on your machine.

Step 2

Open Claude Desktop, go to Settings → Developer and click Edit Config. This opens your claude_desktop_config.json file where MCP servers are configured.

Step 2: Set up an MCP calendar server

MCP servers are small local programs that give Claude access to a specific data source. There are community-built MCP servers for Google Calendar, iCal feeds, and more.

Step 3

Install an MCP calendar server via npm. For iCal-compatible calendars (Google Calendar, Apple Calendar, Outlook):

npm install -g @modelcontextprotocol/server-google-calendar

Or for a generic iCal URL feed:

npm install -g mcp-server-ical
Step 4

Add the server to your claude_desktop_config.json. For a Google Calendar setup it looks roughly like this:

{
  "mcpServers": {
    "calendar": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-google-calendar"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-client-secret",
        "GOOGLE_REFRESH_TOKEN": "your-refresh-token"
      }
    }
  }
}
Step 5

Getting those Google credentials requires creating a project in Google Cloud Console, enabling the Calendar API, creating OAuth credentials, and going through an authorization flow to get a refresh token. This is the most involved part of the setup — plan for 30–60 minutes.

⚠️ MCP servers are still early. Community-maintained MCP servers vary in quality and may break when the underlying API changes. If you're using Google Calendar, you'll also need to keep your OAuth refresh token valid — they expire if not used, or if you revoke access.

Step 3: Write the briefing script

Now you'll write a script that calls the Claude API, passes in a prompt asking it to read your calendar and write a briefing, then sends the result by email.

Step 6

Create a file called briefing.js. Install dependencies:

npm install @anthropic-ai/sdk nodemailer
Step 7

The script structure looks like this — you'll need to fill in your API keys, email credentials, and calendar tool name:

import Anthropic from "@anthropic-ai/sdk";
import nodemailer from "nodemailer";

const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

const response = await client.messages.create({
  model: "claude-sonnet-4-6",
  max_tokens: 1024,
  tools: [{ type: "calendar_read" }], // depends on your MCP server
  messages: [{
    role: "user",
    content: `Read my calendar for today and tomorrow.
    Write a friendly morning briefing that covers:
    - What's happening today, in order
    - Anything I need to prepare or bring
    - Any conflicts or tight timing
    - What tomorrow looks like
    Keep it warm and practical. Under 300 words.`
  }]
});

const briefingText = response.content
  .filter(b => b.type === "text")
  .map(b => b.text)
  .join("\n");

const transporter = nodemailer.createTransport({
  host: "smtp.youremailprovider.com",
  port: 587,
  auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS }
});

await transporter.sendMail({
  from: "briefing@yourdomain.com",
  to: "you@youremail.com",
  subject: `Your morning briefing — ${new Date().toLocaleDateString()}`,
  text: briefingText
});

Step 4: Schedule it to run every morning

Step 8

On Mac, use launchd to schedule the script. Create a plist file at ~/Library/LaunchAgents/com.you.briefing.plist:

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.you.briefing</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/node</string>
    <string>/path/to/your/briefing.js</string>
  </array>
  <key>StartCalendarInterval</key>
  <dict>
    <key>Hour</key><integer>7</integer>
    <key>Minute</key><integer>0</integer>
  </dict>
  <key>EnvironmentVariables</key>
  <dict>
    <key>ANTHROPIC_API_KEY</key>
    <string>your-key-here</string>
  </dict>
</dict>
</plist>
Step 9

Load the schedule:

launchctl load ~/Library/LaunchAgents/com.you.briefing.plist

Your Mac needs to be awake at 7am for this to fire. If it's asleep, the briefing won't run until the next morning.

⚠️ Total setup time: 2–4 hours. Ongoing maintenance includes: keeping Google OAuth tokens valid, keeping npm packages updated, monitoring for MCP server breakage, and making sure your Mac is awake at the scheduled time. The Anthropic API also has a small per-call cost — roughly $0.01–0.05 per briefing depending on your calendar size.

What you end up with

A working daily briefing for you. Just you. Your partner would need to replicate the entire setup independently — their own API key, their own script, their own scheduling, their own OAuth credentials. And the briefing only knows about the calendars you connected, so it won't include your partner's events unless you've shared calendars at the calendar level first.

It's a genuinely clever setup. But it's a developer project, not a family tool.


Haven does this out of the box — for your whole family

Haven is a family calendar app for iPhone that includes a daily morning briefing as a core feature. No terminal. No API keys. No scheduling scripts. You set your briefing time once during setup, and every morning it arrives as a notification — for you and your partner, covering both of your schedules together.

Capability Claude + MCP Haven
Daily morning briefing ✓ (you only) ✓ you + partner
Covers partner's schedule ✗ separate setup required ✓ built-in
Conflict warnings ✗ prompt engineering required ✓ automatic
Leave-at reminders ✗ not included ✓ with travel time
Works on iPhone ✗ requires Mac always on ✓ native app
Setup time 2–4 hours 2 minutes
Ongoing maintenance OAuth tokens, npm updates, server uptime None

Get the briefing without the setup

Haven sends a daily AI summary to you and your partner every morning — no terminal required.

Try Haven free for 7 days

$49/year or $7.99/month after trial · iPhone only