Skip to main content

Wrapping REST APIs as MCP Tools

· 8 min read
MCPBundles

Most APIs weren't built for AI agents. Stripe has 300+ endpoints. GitHub's API returns paginated results that change between requests. Slack rate-limits you after 20 calls per minute. None of them were designed for Claude to use directly.

We wrapped dozens of REST APIs into MCP tools and learned that a thin wrapper doesn't work. You need to rethink the interface completely—actions instead of CRUD, consolidated search instead of endless list endpoints, and server-side resilience for pagination and rate limits.

Here's what actually works.

Cartoon illustration of a person wrapping REST APIs as MCP tools, happy expression
We wrapped Stripe, GitHub, and Slack APIs into MCP tools. Here's what we learned about making REST APIs agent-friendly—what works and what doesn't.

Advanced MCP: Streaming and Approval Gates

· 7 min read
MCPBundles

Users would ask Claude to "set up all my integrations," and Claude would call our provisioning tool. Then nothing. Users waited 45 seconds staring at a spinner while our server created API keys, configured webhooks, and set up OAuth clients. Most users gave up after 15 seconds, thinking it failed.

Then someone asked Claude to "clean up old bundles," and Claude dutifully deleted everything from the last 6 months. Because we let it.

We needed streaming for long-running work, chunking for large operations, and approval gates for anything scary. Here's what works.

Cartoon illustration of a person using advanced MCP patterns with streaming and approval gates, happy expression
Tools that took 45 seconds and allowed data deletion. Here's how streaming, chunking, and approval gates solved it for production use.

MCP Performance: What Slow Tools Cost You

· 7 min read
MCPBundles

Our bundle search tool was taking 12 seconds at P95. Users would ask Claude to "find the Slack integration," watch nothing happen, then ask again. Claude would make the same call twice, wait 24 seconds total, and users would close the tab thinking our service was down.

The tool worked perfectly. It just worked slowly. And in the world of AI assistants, slow might as well be broken.

Cartoon illustration of a person monitoring MCP performance and observability, dashboard showing metrics, happy expression
Our MCP server's P95 latency was 12 seconds and users thought it was broken. Here's how we fixed it for fast agent interactions.

Integrating MCP into Our Django App

· 10 min read
MCPBundles

MCPs work like magic. Internally we use them relentlessly inside Cursor, for Linear issues in particular. We decided to ship an MCP server with MCP Bundles mainly because it made sense for us to have it on our own product for testing, before we even provided it to our customers. We built it quickly and made choices-of-least-resistance so there may be better ways to do everything. This is why we wanted to share our experience, would love to hear your feedback.

Cartoon illustration of a person integrating MCP into Django app, happy expression
How we integrated Model Context Protocol (MCP) into our Django application—practical patterns, lessons learned, and what actually works in production.

So the headline is we decided to implement an MCP server, Model Context Protocol (MCP), in our Django application, built on top of our existing API endpoints, and get it working with Cursor and Claude 3.7.

Writing great tool schemas for MCP

· 3 min read
MCPBundles

Here's the thing about schemas: they're basically the contract your model learns from. Get them right, and your tools are easy to find, hard to break, and simple to fix when something goes wrong.

Get them wrong, and you'll spend way too much time debugging why the model keeps calling your tool incorrectly.

Cartoon illustration of a person writing great tool schemas for MCP, happy expression
Learn JSON Schema patterns that make MCP tools discoverable, easy to use reliably, and help models recover from errors gracefully.

Claude Desktop MCP Setup: Config File Location & .mcpb Installation

· 11 min read
MCPBundles

I spent two hours staring at Claude Desktop wondering why my MCP server wouldn't connect. The config looked perfect. The server ran fine standalone. But Claude showed no tools. The problem? A single trailing comma in my JSON config that Claude silently ignored.

This is everything I wish the docs had told me upfront.

New to MCP? Start with Introduction to MCP to understand what it is and how it works.

Claude Desktop MCP setup guide with .mcpb file installation and manual config
Set up MCP servers with Claude Desktop using .mcpb files or manual config. Find locations, examples, and troubleshooting tips.

Setting Up Your First MCP Server

· 6 min read
MCPBundles

My first MCP server took three hours to get working because I made every possible mistake: no logging, broke stdio with print statements, forgot to restart Claude Desktop, and wondered why nothing worked. Your first one should take 30 minutes.

This is what actually works, with the debugging steps I wish I'd known upfront.

Cartoon illustration of a person setting up their first MCP server, happy expression
Build and test your first MCP server in 30 minutes—with hot reload, proper logging, and real Claude Desktop integration. Learn what actually works.

Introduction to MCP: What You Need to Know

· 5 min read
MCPBundles

I watched Claude hallucinate API endpoints that didn't exist, confidently call made-up functions, and crash our systems with broken JSON. Then we implemented the Model Context Protocol (MCP), and our error rate dropped from 28% to under 3%.

This is what I wish someone had told me when I started.

Cartoon illustration of a person learning about MCP Model Context Protocol introduction, happy expression
A practical introduction to the Model Context Protocol (MCP) with real examples, common pitfalls, and why it matters for building AI agents that actually work.