Over the past few months, we built and published 10 MCP servers. They cover infrastructure management, developer tooling, SaaS integrations, and the MCP ecosystem itself. Nine are MIT licensed and fully open source. One (Token Meter) is free to use with a paid tier for teams. All are on npm and all 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.

The Servers

Infrastructure

tailscale-mcp is the largest of the ten. 52 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

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

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

Developer Tools

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

tokenmeter-mcp tracks LLM API costs across providers. Anthropic, OpenAI, Google, Mistral — see what you're spending, compare pricing across models, and set budget alerts. The community tier is free with no account required. Pro and Team tiers add trend analysis, anomaly detection, smart routing, and team spend management. Built alongside Token Meter, our unified cost tracking platform.

npx -y @yawlabs/tokenmeter-mcp

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

SaaS Integration

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

MCP Ecosystem

mcp-connect is an MCP orchestrator. Install it once, and it connects to all your MCP servers through mcp.hosting. Instead of configuring 10 servers locally, you configure one endpoint and manage the rest from the cloud.

npx -y @yawlabs/mcp-connect

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

vend-mcp adds license key gating and usage metering to any MCP server in two lines. If you're building a commercial MCP server and need authentication, rate limiting, or monetization, Vend handles it so you can focus on the tools themselves.

npx -y @yawlabs/vend-mcp

What We Learned

Tool descriptions are more important than tool implementations

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."

Return structured data, not messages

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.

Error responses need to be actionable

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.

Keep the tool count reasonable

tailscale-mcp has 52 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.

npx distribution is great for adoption, rough for cold starts

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.

Test against the spec, not just your client

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.

What's Next

We're continuing to maintain all 10 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 10 servers

Browse all servers: yaw.sh/mcp-servers

Published by Yaw Labs.

Related Articles

Interested in AI tools and developer workflows? Token Limit News is our weekly newsletter.