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
- Open Claude.ai → Settings → Connectors → Add custom connector
- Fill in:
- Name:
Aiden - URL:
https://aidenmcp.ravenhoward.org/mcp - Leave OAuth Client ID and OAuth Client Secret empty — Claude registers itself
- Name:
- Click Connect. A sign-in page opens. Enter your Fellow email and password (the same ones you use for the Fellow iOS app).
- Try: “List my Aiden profiles.”
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:
fetch_coffee_details(url)→ returns name, country, process, tasting notes, storybrewing_guidelines({process: "natural sundried", flavor_goal: "more fruit"})→ returns principles + a starting recipecreate_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
- Cloudflare Worker at
aidenmcp.ravenhoward.org - Streamable HTTP MCP transport — works with desktop and mobile Claude clients
- OAuth 2.0 authorization code grant with PKCE (the same flow major SaaS uses)
- Dynamic client registration — Claude auto-registers, you don't paste any keys
- Stateless: KV stores short-lived auth codes (10min) and access tokens (1hr); never passwords
- Talks to Fellow's private mobile-app API. Could break if Fellow changes their backend.