MCP Servers Should Be Organized by Function, Not by Integration
There's a better way to organize MCP servers that solves the context rot problem plaguing AI workflows everywhere.

Model Context Protocol
View All TagsThere's a better way to organize MCP servers that solves the context rot problem plaguing AI workflows everywhere.

OpenAI's Sora can generate videos from text prompts. Seriously impressive stuff. But the API's a bit clunky to work with directly.
That's why we built the Sora MCP bundle. 6 tools that let you create, remix, and manage AI-generated videos without touching code. Just tell the AI what you want and it handles the rest.
This video was generated using the Sora MCP bundle—we used our own tools to create it.
Anthropic's recent blog post about code execution with MCP got everyone excited about converting tool calls into code. But I think we're optimizing the wrong thing.

When you're building MCP tools, there's a moment where you realize something counterintuitive: the description field isn't just documentation—it's instruction. Every parameter description you write is a teaching moment where the AI learns not just what a parameter is, but when to use it, why it matters, and how it impacts the operation.
This shift in thinking—from documenting to teaching—changes how you design tools. Let me show you what that looks like in practice.

Here's a problem I kept running into: when you're building an MCP server, you face this weird tension between giving AI agents enough control and not drowning them in options. Build 20 different tools and you're burning context window on redundant functionality. Build 3 tools with no parameters and the AI can't do anything useful.
After shipping dozens of MCP integrations, I found something that actually works: six core tools that balance OpenAI's single-string requirements with rich, parameter-driven operations. It's not arbitrary—there's a reason this number keeps working.

When OpenAI integrated support for Anthropic's Model Context Protocol (MCP) into ChatGPT's deep research feature, they documented something elegant: a two-tool pattern that gives AI agents a consistent way to engage with any data source. If your MCP server implements search and fetch with their specific signatures, ChatGPT knows exactly how to explore your data without custom integration code.
Both tools accept only a single string parameter. That constraint isn't a limitation—it's what makes the pattern universal.

Weaviate is an open-source vector database that powers AI-native applications—RAG systems, semantic search, recommendation engines, and more. But how do you make a vector database accessible to AI agents? You can't just expose raw API endpoints and expect good results.
The answer: 6 focused tools organized around what developers actually do with vector databases. Not 20 tools covering every edge case. Not 3 tools that force you into awkward patterns. Just 6 tools that handle search, storage, browsing, and management—the core workflows every vector database application needs.

If you've ever installed an app on your computer—double-clicking a .dmg file on Mac or a .exe on Windows—you already understand .mcpb files.
Anthropic introduced the .mcpb extension (MCP Bundle) as the standard packaging format for distributing MCP servers. Think of it as the "app bundle" for AI tools: one file that contains everything needed to give your AI assistant new capabilities.

If you've used AI assistants, you've probably hit this frustration: you need to re-explain context every time you start a new conversation. That database schema you carefully described yesterday? Gone. The code snippet you asked about last week? You're pasting it in again.
MCP Resources solve this. They let you give your AI access to files and data that persist across conversations — like giving your assistant a file cabinet instead of asking them to memorize everything.
Following our prior post on wiring up an MCP server for our Django app — see How We Integrated Model Context Protocol (MCP) into Our Django App — we went back and revisited the architecture. "Too many tools" is still a huge problem for LLM productivity, which has continued into GPT5 and the latest Claude models so probably won't be solved toon. Cursor and Claude both work better when they have fewer tools to choose from, and our original setup exposed too many single-purpose GET tools. So we consolidated everything into a single, strongly-typed batch tool.

The result: one get tool, clearer schema, faster concurrent fetches, and less model confusion.