Brew better coffee through Claude

aiden-mcp connects Claude to your Fellow Aiden. Free, open source, hosted on Cloudflare. Setup takes about a minute.

Setup

  1. Open Claude.aiSettingsConnectorsAdd custom connector
  2. Fill in:
    • Name: Aiden
    • URL: https://aidenmcp.ravenhoward.org/mcp
    • Leave OAuth Client ID and OAuth Client Secret empty — Claude registers itself
  3. Click Connect. A sign-in page opens. Enter your Fellow email and password (the same ones you use for the Fellow iOS app).
  4. Try: “List my Aiden profiles.”
Privacy: Your Fellow password reaches the server exactly once during sign-in. It's used to authenticate to Fellow's API, then discarded. Only the resulting JWT (which Fellow itself issues) is briefly cached for one hour. Never logged. Source code is open for verification.

What it does

Eight tools, two of which work without sign-in:

Tool Auth What it does
fetch_coffee_details none Scrape a Shopify roaster page (Counter Culture, Onyx, Sey, Heart, Verve…) and return structured coffee data
brewing_guidelines none Aiden-specific brewing principles tailored to a coffee's process, varietals, and your flavor goal
list_profiles OAuth List the brew profiles on your Aiden, grouped by category
create_profile OAuth Push a new profile, get back a brew.link URL
update_profile OAuth Dial in an existing profile in place — change just the ratio, just a temp, etc. brew.link stays the same
delete_profile OAuth Free up a slot (Aiden has a 14-profile cap)
share_profile OAuth Generate a brew.link for any existing profile
get_device_info OAuth Verify connection, see slot usage

What a session looks like

You: “I picked up this coffee from Counter Culture. My old profile tasted thin and sour — I want to actually taste the fig and strawberry. Make me a new profile and push it to my Aiden.”

Claude calls three tools, in order:

  1. fetch_coffee_details(url) → returns name, country, process, tasting notes, story
  2. brewing_guidelines({process: "natural sundried", flavor_goal: "more fruit"}) → returns principles + a starting recipe
  3. create_profile({...}) → pushes to Aiden, returns brew.link

Claude: “I pushed Mpemba v3 to your Aiden. Three changes from your old profile: dropped temps ~4°C across all stages (96/95/94 → 92/91/90 SS) to preserve the fig and strawberry esters that high heat was driving off, opened ratio from 1:15 → 1:16, went coarser on grind. brew.link: brew.link/p/o3nZ”

Other ways to use it

Claude Desktop with header-based auth

Claude Desktop also supports the OAuth flow (Settings → Connectors). If you'd prefer to skip OAuth and pass credentials directly, edit ~/Library/Application Support/Claude/claude_desktop_config.json on macOS:

{
  "mcpServers": {
    "aiden": {
      "url": "https://aidenmcp.ravenhoward.org/mcp",
      "headers": {
        "X-Fellow-Email": "you@example.com",
        "X-Fellow-Password": "your-fellow-password"
      }
    }
  }
}

Other MCP clients

Streamable HTTP transport at /mcp. Auth via OAuth 2.0 (auth code + PKCE) or X-Fellow-Email / X-Fellow-Password headers. See the README for details.

Don't trust me with your password? Self-host.

It's a Cloudflare Worker. The whole thing runs on Cloudflare's free tier and takes about five minutes to deploy. Anything you brew goes through your own Worker, your own KV namespace.

git clone https://github.com/ravenintheforrest/aiden-mcp
cd aiden-mcp
npm install
npx wrangler login

# Create the OAuth state KV namespace
npx wrangler kv namespace create AIDEN_OAUTH
# Copy the id from the output into wrangler.toml

# Deploy
npx wrangler deploy

CF's free tier covers 100k requests/day — way more than personal use will ever touch. You can attach a custom domain after deploy via the CF dashboard.

How it works