Building an MCP server with TypeScript
A step-by-step guide to building your own Model Context Protocol server in TypeScript to give AI assistants access to custom tools.
Thoughts on AI tooling, Linux, developer workflows, and whatever else I find interesting.
115 posts · 111,000+ words · ~9 hours of reading
The Self-Hosting Journey
From why to how. Setting up and running your own services at home.
8 parts
Docker Fundamentals
From first container to production-ready images.
4 parts
The Linux Switch
Making the move from Windows to a full Linux development workflow.
6 parts
Running AI Locally
Setting up and using large language models on your own hardware.
5 parts
A step-by-step guide to building your own Model Context Protocol server in TypeScript to give AI assistants access to custom tools.
Why I self-host services instead of relying on SaaS, what I run, and an honest look at the tradeoffs involved.
An introduction to homelabs, what they are, why developers and tech enthusiasts build them, and how to get started without spending a fortune.
An honest comparison of the AI coding tools I have used, what each does well, and which one fits different workflows.
How Meshtastic turns cheap LoRa hardware into a mesh communication network that works without cell towers, Wi-Fi, or internet, and why it is perfect for outdoor adventures.
Green checkmarks are not observability. Here is what I learned building a real monitoring stack.
Agentic coding changed how I build software. Not in the way the hype suggests.
What Hermes Agent is, how it compares to OpenClaw on security and usability, and why it earned my trust.
A technical breakdown of how a middleware ad layer for LLM APIs could work, why the economics demand it, and whether it should exist at all.
I got tired of copy-pasting query results between DataGrip and AI agents. So I built an MCP server that gives AI agents secure, direct access to any database.
What delta libraries do, how diff algorithms work under the hood, and a practical comparison of the most popular options in the JavaScript ecosystem.
Building apps that work without internet is one of those things that seems straightforward until you actually try it. Here is what makes it hard and how to approach it.
How to build a retrieval-augmented generation pipeline using local models and your own documents, without sending data to cloud APIs.
How OpenRouter gives you a single API to access models from OpenAI, Anthropic, Google, and others without managing multiple accounts.
How the Starlink Mini changed how I think about working remotely and adventuring in places with no cell coverage.
What agent skills are, how they extend AI coding assistants with reusable workflows, and why they matter for developer productivity.
How I use AI tools to review code before committing, catch bugs early, and maintain consistency across projects.
An introduction to the Model Context Protocol, what MCP servers are, and how they let AI assistants interact with external tools and data.
How Meshtastic turns cheap LoRa hardware into a mesh communication network that works without cell towers, Wi-Fi, or internet, and why it is perfect for outdoor adventures.
Techniques for getting LLMs to return JSON, typed objects, and other structured formats reliably, from prompt engineering to constrained decoding.
A look at OpenCode, an open-source terminal-based AI coding tool, and how it fits into my development workflow.
A practical introduction to fine-tuning small LLMs for domain-specific tasks using tools like Unsloth and LoRA.
How Kiwix lets you download entire knowledge bases for offline access, and why I keep it on my devices for travel and remote adventures.
How Coolify turns your VPS into a Heroku-like platform for deploying apps, databases, and services with a clean web UI.
An honest comparison of the AI coding tools I have used, what each does well, and which one fits different workflows.
How to run local LLMs on your own machine with Ollama and put a clean web interface on top with Open WebUI.
An introduction to LoRa radio technology, how it enables long-range communication without cellular or Wi-Fi, and why it is gaining traction with outdoor enthusiasts and tinkerers.
The actual tools, terminal setup, and configuration I use for web development on Linux.
A step-by-step guide to building your own Model Context Protocol server in TypeScript to give AI assistants access to custom tools.
My case for using Linux as a web development environment, and the practical advantages it has over Windows.
What makes shadcn/ui different from traditional component libraries, and why copying components into your project is actually the better approach.
How I use n8n as a self-hosted alternative to Zapier for connecting services and automating repetitive tasks.
I thought HuggingFace was just GitHub for AI models, but that comparison sells it way short.
How Railway makes deploying web applications simple without giving up control, and why I use it for side projects.
What you need to run large language models locally, which models fit on consumer hardware, and how to get the best performance.
Vercel is great, but Cloudflare Pages with OpenNext gives me more control, better pricing, and no vendor lock-in for my Next.js apps.
What makes Pop!_OS stand out as a Linux distribution for developers, and why I chose it over Ubuntu, Fedora, and Arch.
Why I use TrueNAS for network storage in my homelab, how to set it up, and the features that make it worth running over a simple file share.
Why I use Proxmox Backup Server for my homelab backups, how incremental backups save massive amounts of storage, and how to set it up.
Most side projects die. Here is what I have learned about why, and the few things that actually help.
How AdGuard Home compares to Pi-hole for network-wide ad blocking, and why I switched to it for my homelab.
How WebSockets work, when to use them over regular HTTP, and a practical example of adding real-time updates to a web app.
How the PMTiles format enables offline-capable maps by serving vector tiles from a single static file, and how I use it in Landbound.
Practical git strategies for when you are the only developer on a project, without the overhead of team-oriented workflows.
A look back at every service I ran on my own hardware in 2023, what stuck, what I dropped, and what surprised me.
The practical reasons pnpm replaced npm as my default package manager, and why the switch was easier than expected.
When GraphQL is worth the complexity and when REST is the better choice, based on using both in real projects.
What I got right and wrong when building my first homelab, and what I would do differently starting over.
A deep dive into Docker image layers, union filesystems, content-addressable storage, copy-on-write, and why understanding this stuff makes you better at writing Dockerfiles.
B-trees, query plans, and why adding an index does not always make things faster.
The practical benefits of TypeScript over plain JavaScript, and why the initial learning curve pays for itself quickly.
A practical explanation of reverse proxies, why they matter for self-hosting, and how they route traffic to your services.
What CORS actually is, why browsers enforce it, and how to fix the errors without just slapping a wildcard on everything.
DNS, CDN, Pages, Workers, and a free tier that is hard to beat. Here is why Cloudflare has become my default for almost everything web-related.