I Gave Claude Code Access to My Email

I’ve been running Claude Code as my primary development tool for months now. It writes code, reads docs, manages git — all from the terminal. But there’s always been a gap: it can’t see my email, my calendar, or my contacts. If I ask “what’s on this week?” it has to guess. If I need to draft a reply to someone, I’m switching to the browser. Fastmail MCP Server fills that gap. MCP (Model Context Protocol) is a standard that lets AI tools call external services through a uniform interface — the AI discovers available tools, calls them with structured inputs, and gets structured outputs back. An MCP server is just a process that exposes those tools. This one connects to Fastmail’s JMAP API and gives any MCP client access to 38 tools across email, contacts, and calendar. ...

March 16, 2026 · 4 min

Building a Self-Hosted Memory Layer for Claude Code

Most AI tools have some form of memory now — Claude Code has its CLAUDE.md files, ChatGPT remembers things between sessions, Cursor has rules files. But these memory systems are siloed to one tool, stored as flat text, and not searchable by meaning. You can’t query “what did I decide about authentication last month?” and get a useful answer. Your context doesn’t travel between tools, and there’s no structure beyond what you manually write. ...

March 4, 2026 · 8 min

LNbits Settings: The Database Always Wins

My LNbits instance stopped working. No config changes, no updates I’d triggered intentionally. Just VoidWallet errors where there used to be a functioning Lightning wallet. The fix took an embarrassingly long time to find, not because it was complicated, but because the failure mode was completely misleading. If you’re running LNbits in Docker with the Admin UI enabled, this will probably bite you too. The Symptom LNbits was falling back to VoidWallet on every startup: ...

February 21, 2026 · 4 min

My First Open Source Contribution: SimpleX Chat WebSocket Binding

This is a follow-on to my SimpleX CLI Docker Setup post. If you read that, you might remember the socat workaround I used to get around the WebSocket server only binding to localhost: command: > sh -c "socat TCP-LISTEN:5225,fork,bind=0.0.0.0 TCP:127.0.0.1:5226 & simplex-chat -p 5226" It worked, but it always felt like a hack. The underlying issue was that simplex-chat hardcodes the bind address to 127.0.0.1 when you use the -p flag. ...

February 1, 2026 · 2 min