Cindy Zhu.
Free guides
Building & apps Claude

Build your own Jarvis with Claude (MCP + skills)

Hey, it's Cindy ๐ŸŒฑ You commented COMMAND, so here is the exact setup: the connectors to turn on and in what order, the starter prompts to copy.
btw the waitlist for AI System Club is now open! If you're keen on using AI to automate your content, video editing, job search, business or build AI agents, feel free to sign up (only if you want to hehe). Ps. the waitlist gets first dibs:)
the three pieces

What you're actually building

Forget the movie version. A working "Jarvis" is three unglamorous, powerful pieces bolted together:

  1. ๐ŸŒฑ Connectors (the eyes and hands). Claude reads and acts inside your real apps, so it answers from your actual day instead of guessing.
  2. ๐Ÿ’ก A voice layer (the part that feels like Jarvis). Voice mode is built into Claude on every plan, so the spoken command in the reel needs no setup at all.
  3. ๐Ÿง  A skill (the saved playbook). A reusable command you write once and trigger by name, so the same routine runs the same way every time.

The magic isn't a personality, it's the plumbing. Let's wire it, one piece at a time, testing each before you add the next.


the plumbing

Step 1: connect Claude to your tools with MCP

What MCP is: the Model Context Protocol is an open standard that lets Claude build a secure, two-way connection to your data and apps, so it can both read from them and act inside them. Anthropic introduced it in November 2024 and it's now what powers Claude's connectors (Anthropic's MCP announcement).

The exact setup, in order:

  1. ๐ŸŒฑ Open the connectors directory. In Claude, go to Customize, then Connectors (the direct address is claude.ai/customize/connectors). You can also click the + in the chat box and toggle connectors from there once they are added.
  2. ๐Ÿ’ก Add Google Calendar first. Find it in the directory, click Connect, and sign in to authorise it. Calendar is the safest one to start with because reading your week cannot break anything.
  3. ๐Ÿง  Test it before adding the next. Start a new chat and ask "what is on my calendar this week, and where am I overbooked". If it answers with your real events, that connector works. If it does not, reconnect it before adding anything else.
  4. ๐Ÿ‘ฉโ€๐Ÿ’ป Add Gmail, then Notion, the same way. One at a time, with a read-only test after each. Adding three at once is how people end up unable to tell which one is misbehaving.
  5. ๐ŸŒฑ On Team or Enterprise plans. An owner enables connectors at the organisation level first, then each person connects their own accounts.

What each one can actually do (worth knowing before you rely on it):

  • ๐Ÿ“ง Gmail: search and read your emails, manage labels and threads, and draft replies with full context. Heads-up: Claude drafts only, it cannot send. Every email still goes out manually from your Gmail (Google Workspace connectors help).
  • ๐Ÿ“† Google Calendar: view events, create, update and delete them, find mutual availability, and respond to invites. This one has full read and write (same source).
  • ๐Ÿ—‚๏ธ Notion: read and update your Notion pages and databases from inside the conversation, so your pipeline or task list becomes something Claude can actually pull from (Notion MCP help).
One real limitation to plan around: inside a normal chat, connectors run when you ask. There is no background trigger, so this Jarvis answers on demand rather than tapping you on the shoulder (connectors overview). If you want it running on a schedule with your laptop shut, that is routines in Claude Code, covered at the end.

from my latest Jarvis reel

The updated build manual

I rebuilt my own Jarvis for the latest reel and the prompt got a lot better, so here it is in full. Three pieces: a short file that tells Claude who you are, the build manual you paste once, and the connector step that most people skip. Do these three and the rest of this guide gets easier, because Claude is reading your real calendar, inbox and notes instead of guessing.


make it yours

Tell Claude who you are

This single file is the difference between your Jarvis and a generic bot. It's why yours knows a slipped deadline on project two matters more than a full inbox. In your project folder, ask Claude Code to create a CLAUDE.md, then make it specific. Make a priorities note while you're here, even five ranked bullets, because the brief ranks your day from it and can't invent one.

๐Ÿ“ your CLAUDE.md, fill in the brackets
# Who I am
I'm [name], I [what you do]. I care most about [your #1 goal right now].

# What I'm working on this month
- [project 1], [project 2], [project 3]

# My priorities, ranked
1. [top priority]  2. [next]  3. [next]

# My tone
[e.g. warm, direct, no corporate filler]

# Hard rules
- Always draft, never send. Never take irreversible actions without asking.
- Only use the apps I've connected.

layer two, the backend

Paste the build manual

Don't read this one, just copy the whole block. It's the architecture behind my Jarvis, and it saves itself as a skill you can trigger by phrase.

๐Ÿ“‹ the build manual, paste into Claude Code
You are my personal assistant, my own Jarvis. First, read my CLAUDE.md so you know who I am, my projects, my priorities and my tone. From now on, act as a proactive chief of staff for me, not a generic chatbot.

Keep this skill fully self-contained: list every source to pull and exactly how to format the brief, because when it runs on a schedule it has no memory of our chats.

Build me a "morning brief" routine, and save it as a reusable skill I can trigger by phrase (like "run my morning brief", "brief me", or "what's on my plate"). When I trigger it, do this:

1. CALENDAR: read today's events from my Google Calendar. Flag anything that needs prep, and any conflicts or gaps.
2. INBOX: scan my Gmail from the last 24 hours. Group it into needs-a-reply / FYI / ignore. For the needs-a-reply group, draft short replies in my tone and leave them in Drafts. Never send.
3. PRIORITIES + TASKS: read my priorities and task list (from my Notion or my priorities note), and pick the 3 things that actually matter most today, ranked, with a one-line why for each.
4. ONE THING TO KNOW: surface a single important signal, a deadline, a number that moved, a follow-up I'm forgetting.

Then write it as 6 to 8 short spoken lines, in my voice, warm and direct, no filler. END with the single most important question: "What should I handle first?"

Write the brief in [your language]. Save it to brief.txt and to a Notion page. Then rewrite jarvis_data.js so the dashboard shows today's real numbers and a one-line activity log per source you read, and mark each connector online or offline based on whether the call actually succeeded. Then read the brief out loud through my Fish Audio voice.

If a source is empty or a connector is down, say so plainly in the brief and mark it offline on the dashboard. Never fill a gap with a plausible guess.

Rules, always: you draft, I approve. Never send email, post, delete, or take any irreversible action on your own. Only pull from the apps I've connected.

So you're not pasting blind, this is the shape of what comes back:

๐Ÿ“… Calendar Today's events, what needs prep, and where the gaps and clashes are.
๐Ÿ“ฅ Inbox Last 24 hours sorted into needs-a-reply, FYI and ignore, with drafts waiting.
๐ŸŽฏ Priorities The three things that actually matter today, ranked, each with a one-line why.
๐Ÿ’ก One thing to know A single signal you would otherwise have missed.

The skill saves itself to ~/.claude/skills/<name>/SKILL.md. Ask Claude Code for more the same way, and it reaches for them automatically when a request matches:

๐ŸŒ… "run my morning brief" The full routine above.
โœ๏ธ "draft my replies" Triages the inbox and drafts responses in your tone.
๐Ÿ’ฌ "answer customer queries" Reads your FAQs, drafts support replies, escalates anything not covered.
๐Ÿ“Š "how are my numbers" Pulls your revenue or content stats into a quick read.

this is the part people skip

Authorise your connectors

A connector is an authorised link between the brain and a service you already use. It's the difference between Claude talking about your calendar and Claude reading it. Nobody can do this step for you. The prompt above is portable; your authorisations are yours, and until you grant them your beautiful dashboard is a screensaver.

  1. ๐ŸŒ Authorise on the web, once Go to claude.ai/customize/connectors. In the sidebar that's Customize, then Connectors. Connect one, approve it on that service's own consent screen.
  2. ๐Ÿ” The terminal inherits it You do not set connectors up twice. If you signed into Claude Code with your claude.ai account, connectors you added on the web are automatically available in the terminal. Run /mcp to see them. Ones you've never used hide behind a "Show unused connectors" row.
  3. โœ… Test one read before you trust it Ask for one read-only fact, then check it against the source with your own eyes. "How many rows in my tasks database are marked done?", then open the database and count. If it matches, move to the next connector.
  4. โž• Then add the next one One connector, one verified read, then the next. Slower, and the only route to ever reading the 8am brief without silently re-checking it.
โš ๏ธ Do not try to add Gmail or Calendar from the terminal. Some Anthropic-hosted connectors, Gmail, Google Calendar and Microsoft 365 among them, don't support local OAuth from Claude Code, because the upstream identity provider only accepts the redirect URL claude.ai registered. claude mcp add will fail with "is Anthropic-hosted and doesn't support local OAuth". Connect those on the web and let the CLI inherit them. claude mcp add --transport http NAME https://the-mcp-url/mcp then claude mcp login NAME is for third-party servers that publish their own MCP URL.
๐Ÿ•ต๏ธ If a connector you definitely added is missing, check your auth first. Connectors are only fetched when your active login is a claude.ai subscription. They are silently not loaded when ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN or apiKeyHelper is active, when a third-party provider like Bedrock is in play, or when CLAUDE_CODE_OAUTH_TOKEN holds a long-lived token. Run /status to see which auth is actually live. An ANTHROPIC_API_KEY left in your shell profile from an old experiment will hide every connector you own, with no error.

What each one can and cannot do. Worth knowing before you design a routine around it:

๐Ÿ“… Google Calendar Reads events and shared calendars, creates and updates them, finds mutual availability. It cannot see calendars your own Google account can't see, and it has no memory between runs, it re-queries every time.
๐Ÿ“ฅ Gmail Searches and reads with natural language, drafts, and sends, replies and forwards. It cannot read attachment contents, only metadata. If your workflow needs the PDF someone sent you, this is not the tool.
๐Ÿ“ Notion Searches the workspace, fetches pages, queries databases, creates and updates pages. It cannot see anything you haven't shared with the integration, and it rate-limits per workspace.
๐Ÿ” All of them Claude inherits your permissions and can only see and do what you already can. A "the page isn't there" answer is nearly always a sharing problem, not a model problem.
๐Ÿšจ The Gmail connector can send. Read that twice. Drafts-only is a discipline you impose, not a wall the tool provides. Approval prompts are the documented default, but a scheduled cloud routine has no approval prompt at all. So the drafts-only rule has to be written into the skill, written into the routine prompt, and the send capability left out of anything unattended. You'll also find older Anthropic doc pages claiming Claude "cannot send or modify emails". Those are stale, the live tool surface exposes send, reply and forward, and assuming the read-only version is a genuinely unsafe thing to build on.
๐Ÿ”ง The failure that will cost you an evening. A connector says "needs auth". You reconnect it on the web, watch the green tick, come back to the terminal, and it still says needs auth. The connection is fine. Claude Code is reading a stale local cache at ~/.claude/mcp-needs-auth-cache.json, keyed by connector display name, and a successful web re-login doesn't always clear the entry. Back the file up, remove that connector's key (or delete the file, it rebuilds), then fully quit and reopen Claude Code, Cmd+Q rather than closing the window. This is internal client state, not a documented API, so re-check the filename if it moves. The durable lesson is the symptom: when the web says connected and the client says needs auth, suspect a stale cache before you suspect your account.

the starter prompts

Step 2: the four prompts to run first

With the connectors on, keep the prompts plain and specific. The pattern that works: name which apps to look at, say how you want the answer grouped, and tell it what to do with what it finds.

1. The one from the reel. This is the "what's on my plate today, and reply to the top email" moment, written out properly:

๐ŸŒฑ what's on my plate today
Look at my Google Calendar, Gmail and Notion and tell me what my day actually looks like. Start with my calendar for today and tomorrow, including anything I need to prepare for rather than only turn up to.

Then scan my unread and recent email and tell me who is waiting on a reply from me, sorted by how long they have been waiting. Group everything into "urgent today" and "can wait", and keep each item to one line so I can read it in ten seconds.

For the single most important email that needs a response, draft a short reply in my voice for me to review. Do not send anything. If something in my Notion tasks is overdue and connected to any of the above, say so at the end.

2. The week ahead. Run this on a Sunday or Monday morning:

๐Ÿง  plan my week
Read my Google Calendar for the next seven days and give me an honest read on the shape of my week. Tell me which days are overbooked, where I have no unbroken focus time longer than 90 minutes, and which meetings look like they could have been a message.

Cross-check it against my Notion tasks and tell me which deadlines are unrealistic given the meetings already booked, naming the specific clash rather than being vague about it.

Finish with three concrete suggestions to fix the worst day, such as which meeting to move and where to move it to. Do not change anything in my calendar, only propose it.

3. Inbox triage with drafts. The one that saves the most time day to day:

๐Ÿ‘ฉโ€๐Ÿ’ป clear my inbox
Read my unread Gmail from the last three days and sort every thread into three buckets: reply now, reply later this week, and no reply needed. For each thread in the first bucket, tell me in one line what it is actually asking for, because subject lines lie.

Then draft a reply for every thread in the reply now bucket. Keep them short, warm and direct, in my voice, and never invent a commitment, a price or a date I have not already given. Where you need a detail I have not provided, leave a clearly marked gap rather than guessing.

Save them as drafts and give me a numbered list of what you drafted so I can review them in order.

4. The catch-up. For the Monday after a week away:

๐Ÿ’ก what did I miss
I have been away since [date]. Pull together what I missed across Gmail, Google Calendar and Notion, and tell me what genuinely needs me rather than everything that happened.

Give me: anything with a deadline that has passed or is within three days, anyone who has followed up more than once and is still waiting, meetings that were booked or moved while I was out, and any Notion page or task assigned to me since I left.

Rank the whole list by consequence of ignoring it, highest first, and tell me the three things to do before lunch today.

Those four already make it feel like an assistant. Next, make it something you can talk to.


the voice layer

Step 3: talk to it out loud

This is the bit that makes people say Jarvis, and it needs no setup at all. Voice mode is built into Claude on every plan, Free through Enterprise, on iOS, Android, desktop and the web, though it is built to work best from your phone (Claude help centre, use voice mode).

  1. ๐Ÿ’ก Start voice mode. On mobile, tap the voice mode icon next to the microphone in the text input field and pick a voice. On desktop or web, tap the sound wave icon in the lower right of the chat window.
  2. ๐Ÿง  Pick your listening mode. Hands-free means Claude listens continuously and answers at natural pauses. Push-to-talk means you hold a button while speaking, which is the one to use in a cafe or anywhere noisy.
  3. ๐ŸŒฑ Speak the prompt, do not type it. Say "what is on my plate today, and draft a reply to the most urgent email". With your connectors on, it pulls the real calendar and the real inbox and answers out loud.
  4. ๐Ÿ‘ฉโ€๐Ÿ’ป Know what it costs you. Voice conversations draw on your normal usage limits like any other chat, so a daily spoken brief is fine, all-day chatter is not.
๐Ÿ’ก Want proper hands-free control from your laptop instead, without touching the screen? Voice Mode is a free, MIT-licensed open-source tool that adds spoken conversations to Claude Code and other MCP clients, and it can run entirely locally with Whisper and Kokoro. It is a heavier lift than tapping an icon, so start with built-in voice mode and add this later if you want the terminal version.

make it repeatable

Step 4: save it as a skill so it runs the same way every time

A skill is a small reusable playbook you save once and trigger by name, instead of retyping the same instructions. It is one folder with a SKILL.md file that tells Claude what to do when you call it (use skills in Claude).

The trick most people miss: you don't have to write the skill by hand. Ask Claude to write it for you, then save what it gives you.

๐Ÿง  write the skill for me
Write me a Claude skill called "morning brief" that turns my daily check-in into one command. When I trigger it, it should read my Google Calendar, Gmail and Notion and output four things in this order: what is overdue, who is waiting on a reply from me, my three priorities for today, and anything on the calendar I need to prepare for rather than only attend.

Give it back to me as a complete SKILL.md file I can save, with a short lowercase-hyphenated name (do not put "claude" or "anthropic" in the name, or the upload gets rejected) and a description that says both what it does and when to use it, so it triggers on its own when I say "run my morning brief".

In the instructions, tell yourself to never invent an item that is not in one of the three sources, to keep every line to one sentence, and to end with a single sentence naming what to do first. Then tell me how to save it as a zipped folder I can upload.

Then save it:

  1. ๐ŸŒฑ Save the file. Take the SKILL.md Claude wrote and put it in a folder, for example a folder called morning-brief.
  2. ๐Ÿ’ก Zip that folder. The upload takes a zip, not a loose file.
  3. ๐Ÿ‘ฉโ€๐Ÿ’ป Upload it to Claude. Go to Customize, then Skills, click Add, choose Upload a skill, and pick your zip. Custom skills work on every plan, Free through Enterprise (use skills in Claude, and creating custom skills).
  4. ๐Ÿง  Run it once and fix it. Trigger the skill, read what comes back, and tell Claude what to change. Two or three passes and the brief comes out exactly how you want it every morning.

Now trigger it: in any new chat say run my morning brief, and Claude pulls calendar, inbox and pipeline into one summary without you re-explaining a thing.


go further

3 bonus skills to build next

Once the morning brief works, the same pattern (ask Claude to write the skill, save it, trigger by name) unlocks a lot more:

1 ยท deck from idea
Write me a Claude skill called "deck from idea". When I give it a topic, it should outline a short slide deck of five to seven slides, one clear point per slide, written in my voice and ready for me to drop straight into slides.

The instructions should tell you to open with the single claim the deck is making, give every slide a headline that says something rather than naming a category, and put the supporting detail in speaker notes instead of on the slide. If I have not told you who the audience is, ask before writing.

Return it as a complete SKILL.md with a name and a description that says when to use it.
2 ยท inbox triage
Write me a Claude skill called "inbox triage" that uses my Gmail connector. When triggered, it should read my unread email and sort every thread into "reply now", "reply later" and "no reply needed", with a one-line summary of what each thread in the first group is actually asking for.

It should then draft short replies for the "reply now" group in my voice, never inventing a commitment, price or date I have not already given, and leaving a clearly marked gap where it needs a detail from me. Drafts only, never send.

Return it as a complete SKILL.md, including the rule that it always tells me how many threads it read so I know nothing was skipped.
3 ยท week ahead
Write me a Claude skill called "week ahead" that uses my Google Calendar connector. When triggered, it should read the next seven days and tell me where I am overbooked, where I have no unbroken focus block longer than 90 minutes, and which meetings look like they could have been a message.

The instructions should have it name the specific meeting in each case rather than describing the problem in general terms, and finish with three concrete fixes for the worst day, including where to move something to.

It must never edit my calendar, only propose changes. Return it as a complete SKILL.md.

if you want it automatic

Step 5 (optional): have it run before you wake up

Everything above answers when you ask. If you want the brief waiting for you instead, that is a routine: a saved prompt plus connectors that runs on Anthropic's cloud infrastructure, so it keeps working with your laptop closed. Routines are available on Pro, Max, Team and Enterprise plans with Claude Code on the web enabled, and you create them at claude.ai/code/routines or with /schedule in the CLI (routines documentation).

๐Ÿ’ก Two things worth knowing before you schedule anything. A routine runs autonomously with no approval prompts, and it can use every tool from any connector you include, writes included, so add only the connectors that brief actually needs and tell it explicitly to draft and never send. The minimum schedule interval is one hour, and a green run status only means the session started, not that it did what you wanted, so read the first week of runs properly.

pick your level

How to get the most out of it

๐ŸŒฑ If you're starting out build only the morning brief first. One working skill you actually run every day beats five half-finished ones. Connect Calendar and Gmail to begin with, and add Notion once you trust it.
๐Ÿ’ก If you're further along chain skills together ("run my morning brief, then draft the replies it flagged"), and keep each skill narrow. A tight skill with a clear name and description triggers reliably, a bloated one that tries to do everything will not. Save your best prompts as skills the moment you have typed them twice.

the honest bit

An honest heads-up

This is not a hands-off robot on day one. In a normal chat, connectors run when you open it and ask, and Gmail is draft-only by design, so you stay the one who hits send. That is a feature rather than a bug: your assistant surfaces and drafts, you keep the final call. Start with the one brief, live with it for a week, then add the next skill.
the waitlist is now open

AI System Club is launching soon

Build AI systems with me through recorded lessons you can follow at your own pace. Join the waitlist for first access and the founding price.

btw this list gets first dibs
the moment doors open :)