What works, what's rough, and what we'd do differently after building MCP servers for Tailscale, SSH, Caddy, npm, and more.
Over the past few months, we built and published 9 MCP servers. They cover the MCP ecosystem itself, developer tooling, infrastructure management, and SaaS integrations. All are MIT licensed and fully open source, on npm, and work with Claude Code, Cursor, and any other MCP client.
This is what we built, why we built it, and what we learned along the way.
mcph is an MCP orchestrator. Install it once, and it connects to all your MCP servers through mcp.hosting. Instead of configuring every server locally, you configure one endpoint and manage the rest from the cloud.
npx -y @yawlabs/mcph
ctxlint is a linter for AI context files. It validates your CLAUDE.md, .cursorrules, and other context files against your actual codebase. Catches broken paths, wrong commands, stale context, and token waste. Ships with a built-in MCP server so your agent can audit its own instructions.
npx -y @yawlabs/ctxlint
mcp-compliance is a test suite that validates any MCP server against the 2025-11-25 specification. Tool schemas, error handling, protocol behavior — it checks everything. We built this to test our own servers and opened it up because the ecosystem needs it. If you're building an MCP server, run your server through it before you ship.
npx -y @yawlabs/mcp-compliance
tailscale-mcp is the largest of the nine. 99 tools covering devices, ACLs, DNS, auth keys, users, webhooks, logging, network lock, and posture management. The Tailscale API is broad, and we wanted full coverage. The hardest part was ACL updates — Tailscale uses HuJSON (JSON with comments and trailing commas), and a naive implementation would strip comments on every write. We preserve formatting by round-tripping through HuJSON parsing and using ETag-based concurrency control so two agents can't stomp on each other's changes.
npx -y @yawlabs/tailscale-mcp
npmjs-mcp turns the npm registry into a tool your agent can query. Package search, security audits, dependency trees, download stats, version comparison, org management, and provenance checks. If you're evaluating a package or auditing your dependencies, the agent can pull the data directly instead of you switching to a browser.
npx -y @yawlabs/npmjs-mcp
ssh-mcp gives AI agents SSH access with built-in diagnostics. Run commands on remote hosts, transfer files, manage tunnels, and troubleshoot connectivity issues. When something fails, the server provides structured diagnostic output instead of a raw error, so the agent can actually fix the problem.
npx -y @yawlabs/ssh-mcp
electron-mcp gives AI assistants deep knowledge of Electron app internals. IPC scaffolding generators, security auditing for contextIsolation and sandbox settings, build tooling, and development intelligence. We built it while working on the Yaw Terminal itself — having an agent that understands Electron's main/renderer split, preload scripts, and node integration makes Electron work dramatically less painful. Pair it with electron-optimize, our drop-in utilities library for temp file cleanup, window bounds validation, startup timing, cache management, and power state handling.
npx -y @yawlabs/electron-mcp
caddy-mcp manages Caddy web servers via the admin API. Configure reverse proxies, manage TLS certificates, update routes. Caddy's admin API is clean and well-documented, which made this one of the faster servers to build.
npx -y @yawlabs/caddy-mcp
lemonsqueezy-mcp connects your LemonSqueezy store to AI assistants. Products, variants, orders, subscriptions, license keys, customers, discounts, webhooks, and checkout links. We use LemonSqueezy for yaw's licensing, so this server scratches our own itch.
npx -y @yawlabs/lemonsqueezy-mcp
The LLM decides which tool to call based on the name and description. If your description is ambiguous, the agent will pick the wrong tool. If it's too long, it wastes context. We spent more time writing and rewriting tool descriptions than we expected. A good rule: describe what the tool does, not what it is. "List all devices in the tailnet with their online status, IP addresses, and tags" beats "Get devices endpoint."
Early versions of our servers returned human-readable strings: "Successfully created auth key tskey-auth-abc123." That's fine for a chat response, but terrible for tool chaining. When the agent needs to use that key in the next step, it has to parse the string. Return structured JSON and let the agent decide how to present it.
When a Tailscale API call fails with a 403, don't just return "Forbidden." Return what permission is missing, what scope the current key has, and how to fix it. The agent can't fix problems it can't diagnose. Our ssh-mcp server was built around this principle — every failure includes structured diagnostics.
tailscale-mcp has 99 tools. That's a lot. Every tool description consumes context tokens, and some MCP clients struggle with large tool lists. If we were starting over, we'd consider grouping related operations into fewer tools with a action parameter. But for full API coverage, sometimes you need the granularity.
Publishing on npm with npx -y @yawlabs/server-name makes installation trivial. But the first run downloads and installs the package, which can take several seconds. Users expect MCP servers to start instantly. We're looking at pre-built binaries and better caching to address this.
We built mcp-compliance because we kept finding edge cases where our servers worked in Claude Code but broke in other clients. The MCP spec has nuances around error codes, pagination, and schema validation that are easy to get wrong. If your server only works in one client, it's not an MCP server — it's a plugin.
We're continuing to maintain all 9 servers and add coverage as APIs evolve. We're also building mcp.hosting as a platform for hosting, testing, and managing MCP servers at scale.
All servers are on our MCP Servers page with install commands, descriptions, and links to GitHub and npm.
Try any server in one command:
npx -y @yawlabs/tailscale-mcp # or any of the 9 servers
Browse all servers: yaw.sh/mcp-servers
Published by Yaw Labs.
Interested in AI tools and developer workflows? Token Limit News is our weekly newsletter.