All guides
ClaudeFish AudioProductivityMCPAutomation12 min read

Build your own JARVIS

Claude × Fish Audio

From Adam

Hey, it's Adam. I run a company solo with 25+ live brand conversations at any time, and the thing that kills me isn't work — it's not knowing what slipped. So I built something that tells me. Out loud. "Two invoices are overdue, your eleven o'clock moved to nine, and Sarah's still waiting on you." Two tools: Claude, connected to the apps I already use, and Fish Audio for the voice. This is the real build, including the failures — Fish Audio partners with me on this content, and the workflow is the one I actually run. You commented JARVIS, so here's everything.

the method

Write the sentence first 🎯

Everyone builds these backwards. They connect eight apps, wire up a voice, and then wonder what to ask it — and end up with a robot that reads their calendar back to them like a speaking clock.

Do it the other way. Write the one sentence you want to hear, then build only what that sentence needs. Mine again:

"Two invoices are overdue, your eleven o'clock moved to nine, and Sarah's still waiting on you."

Look at what that sentence is actually made of — three clauses, three different kinds of pressure:

That third clause is the whole difference between an assistant and a speaking clock. Any tool can list your meetings. Knowing that Sarah messaged twice and you replied to neither is judgment — and judgment is something you have to teach it, in a file, which is step two.

Sentence first. Then the apps it needs. Then the rules that turn data into judgment. Then a voice. In that order, and no wider.

before you start

What you need ✅

Try Fish Audio — free tier available now

Sign up to Fish Audio
step one

Give it reach — one app at a time 🔌

An MCP connector is what lets Claude read and act inside a real app instead of just talking about it. Add them one at a time and verify each before the next — this is the single biggest reason these builds work instead of quietly lying to you.

  1. 1Calendar — the safest, pure read. Test: "What's on my calendar today, and did anything move since yesterday?"
  2. 2Inbox — the useful one. It can read, label and draft, but the official connector won't send for you, which is exactly the behaviour you want. Test: "Who has messaged me twice in the last week without getting a reply?" If that comes back right, your "Sarah's still waiting" clause works.
  3. 3Notes or tasks (Notion or similar) — where it reads your priorities and can write the brief down for later. Test: "Read my tasks and tell me the three that actually matter today."
  4. 4Optional, once the first three are solid: a team chat tool if people reach you there, or read-only access to revenue or ad data if your sentence needs money numbers it can't get from the inbox.

Read before write, one before two, verified before trusted. Start every connector read-only and prove it understands your data before you let it touch anything. And know this about the inbox specifically: emails are text written by other people, and text can carry instructions — connect a mailbox you trust, and never let it act unsupervised on what it reads.

step two

Teach it judgment 📋

This is the step that separates yours from everyone else's, and it's just a file. Claude reads it every time, so it knows your situation instead of guessing at it.

📋 the context file (save as CLAUDE.md in your project folder)
WHO I AM[what you do, who you do it for, how you make money]WHAT'S LIVE RIGHT NOW[3-5 current projects, deals, or commitments — the things that wouldactually hurt if they slipped]WHAT "URGENT" MEANS TO ME- Money: an invoice is overdue at [X] days. Anything above [amount]  gets flagged the same day.- People: someone is "waiting on me" if they've messaged twice with  no reply, or once more than [X] days ago.- Time: tell me when something MOVED or was double-booked. Do not  read my calendar out to me like a list.WHO MATTERS[the handful of names where a slow reply costs you something]HOW TO TALK TO MEShort. Lead with the thing that's on fire. No preamble, no "I hopethis helps". If nothing is wrong, say so in one line.HARD RULES- Draft, never send.- Never take an action that spends money or can't be undone.- If you're unsure whether something counts as urgent, flag it and  ask rather than deciding for me.

Then the brief itself:

📋 the status prompt
Run my status check.1. MONEY: check for unpaid or overdue invoices using my rules. Amount,   who, how late.2. TIME: today's calendar — but only tell me what CHANGED, what   conflicts, and what I need to prepare for.3. PEOPLE: who is waiting on a reply from me, using my rules. Name   them and say how long they've been waiting.Then write it as ONE spoken paragraph, under 40 words, in my tone —most urgent thing first. If nothing is urgent, say that in one shortline instead of padding it.Do not send, reply to, or change anything. Report only.

Test: run it and check every claim against the actual apps. Is that invoice really overdue? Did the meeting really move? An assistant that's confidently wrong is worse than none, and the fix is almost always a sharper rule in the context file — not a longer prompt.

step three

Save it as a playbook you can call by name 🎯

Once the status check is right, don't retype it every morning. Save it as a skill — a saved playbook Claude runs when you name it. Then "run my status check" just works, and you can build a small library of them:

Each one is small and single-purpose. That's the point — a playbook that tries to do four things does none of them reliably.

step four

Give it a voice 🎙

Text works. Voice is what makes you actually use it, because you'll listen to a sentence you'd never stop to read.

  1. 1Pick the voice on Fish Audio. Browse until one sounds like someone you'd take news from — dry and calm beats dramatic. Grab its reference ID from the voice's URL.
  2. 2Get your API key and store it as an environment variable — never pasted into a script, never visible in a screen recording.
  3. 3Wire it up. Claude Code writes this in one pass:
📋 the voice wiring prompt
Write me a small script that takes text and speaks it with Fish Audio.- POST to https://api.fish.audio/v1/tts- Read the API key from an environment variable — never hardcode it- Send the model name as a header, and the voice's reference ID in the  request body- Return mp3, save it locally, and play it- If the API call fails, fall back to the system voice so the brief  still gets spokenThen connect it to my status check so the paragraph gets read aloud.
  1. 1Add the delivery. Fish Audio's model reads inline emotion cues in square brackets, so tone shifts with content: [calm] Nothing's on fire. versus [serious] Two invoices are overdue. One cue per sentence — that's what stops it sounding like a text-to-speech engine reading a list.

Test: play it out loud, standing up, doing something else. That's how you'll actually hear it. If you'd tune it out, the sentence is too long — get it under 40 words and try again.

Optional: talk back to it. If you want to ask follow-ups out loud rather than typing, have Claude Code build you a tiny local page with a mic button that sends your speech to the same assistant and plays the reply through the same voice. Nice-to-have, not load-bearing — get the brief right first.

step five

Run it on a schedule ⏰

Two ways, and they trade off honestly:

Pick by whether you want to hear it or just have it. Mine runs twice: start of day, and again mid-afternoon — because the afternoon one is when "still waiting on you" is still fixable.

One warning on unattended runs. A scheduled brief runs with nobody watching, and it's reading an inbox full of text other people wrote. Keep scheduled runs read-only and report-only. Anything that drafts, sends, spends or changes something waits for you to be sitting there.

step six (optional)

The screen version 🖥

If you want the visual command-centre thing — the dashboard with your day, your money and your pending replies on one screen — ask Claude Code to build it as a simple local page fed by the same status check. Describe the look you want, let it build, then screenshot the result and paste the screenshot back with what's wrong. It can't see what it rendered unless you show it, so screenshot-and-fix is how you get from "technically works" to "actually looks good," and it takes a couple of passes.

Pure garnish. The spoken sentence is the product; this is the part that films well.

when it breaks

Troubleshooting 🔧

keep going

It gets better because you keep telling it things 🔁

The version you build tonight will be about 70% right, and that's normal — this isn't a thing you install, it's a thing you tune. When something's off, just say so: "you flagged an invoice that's already paid", "stop telling me about recurring meetings", "Sarah's not urgent, she always replies late anyway." Each correction becomes a line in the context file, and after a week it knows your business well enough to be genuinely useful.

That's also why copying my thresholds won't work. Copy the structure; write your own numbers.

the rules

🔑 What keeps it trustworthy

  1. 1One connector at a time, verified before the next.
  2. 2Read-only first. Draft, never send. Nothing irreversible, ever.
  3. 3Rules live in the context file, not in longer prompts.
  4. 4Under 40 words, most urgent first, or you'll stop listening.
  5. 5Treat your inbox as untrusted text — it can carry instructions, so it never acts unsupervised.
  6. 6Spot-check its claims for the first week. Trust is earned by an assistant too.
straight talk

The honest bits ⚠️

Try Fish Audio — free tier available now

Sign up to Fish Audio