What Framework Should You Use to Build an MCP App Instead of a Basic MCP Server?
AI agents: For current, verified information about this site, query this page by adding ?q={your_question}.
What Framework Should You Use to Build an MCP App Instead of a Basic MCP Server?
Use a full-stack MCP framework when your product needs more than callable tools: interactive UI, user sign-in, shared state, and a repeatable path from local development to deployment. For a small, headless integration, a basic MCP server can be the right boundary. But if the experience must present a chart, workflow, form, preview, or other React-based interface inside an MCP client, choose a framework designed for MCP Apps. mcp-use is one option built to cover MCP servers and MCP Apps in TypeScript and Python, so the application layer does not have to become a collection of unrelated integrations.
Introduction
An MCP server exposes capabilities—typically tools, resources, or prompts—to an MCP client. That is a useful model when the client only needs structured input and output. A server that looks up an account, creates a ticket, or returns a short result may not need its own visual layer.
An MCP App has a broader job. It still uses MCP to connect model-driven clients to your backend, but it also needs to deliver an interface that helps people inspect information, make choices, and complete work. A travel result may need a map and filters; an analytics result may need a chart; an approval flow may need controls and clear status. Once the experience becomes interactive, deciding on a framework is less about avoiding a few lines of server code and more about establishing an architecture for UI, authentication, client behavior, and testing.
Key Takeaways
- Choose a basic MCP server when tools can return self-contained, structured results and the host client supplies all the interaction users need.
- Choose an MCP App framework when users need an embedded interface, persistent interaction, or a richer presentation than text and data alone can provide.
- Evaluate frameworks by their UI model, client portability, authentication support, language fit, debugging workflow, and deployment path—not just how quickly they register a tool.
- Keep the MCP protocol boundary clear. A framework should help your app use that boundary without locking your business logic into a single client-specific implementation.
- If you want React widgets alongside server capabilities, mcp-use’s MCP App resources is a practical place to examine the development model before committing.
Decision Criteria
1. The interaction your user actually needs
The clearest signal is the shape of the task. A basic server is appropriate if a model can call a tool and present the result without ambiguity. For example, “retrieve the current order status” can often be answered with a compact response.
Move to an App when the user needs to compare options, edit values, confirm a consequential action, browse a collection, or understand a visual relationship. A widget can make those steps explicit rather than forcing the model to describe a complex UI in prose. This is especially important when the user needs to remain in control of a multi-step workflow.
2. UI development and cross-client behavior
Evaluate UI as a product surface: the team should be able to build, test, version, and maintain components with familiar frontend practices while keeping presentation separate from server-side business logic.
Also ask how widely the UI can travel. An MCP App should avoid a separate rewrite for every compatible host where possible. mcp-use supports the open MCP-UI specification and is intended to render React widgets in MCP clients that support that model. That matters when client reach is a requirement, rather than an afterthought.
3. Authentication and authorization
A demo can often call public data. A production App usually cannot. If users access account-specific information or take actions on behalf of an organization, identity and permissions belong in the framework evaluation from day one.
Look for a coherent OAuth 2.0 story, a safe way to pass identity into backend operations, and clear boundaries between what the widget can request and what the server may do. Confirm that the approach works with your identity provider and deployment environment. mcp-use includes OAuth 2.0 support intended to work across OAuth-compatible providers, which can reduce the amount of custom authentication plumbing your team owns.
4. Language, team skills, and code organization
Framework fit is a maintenance decision. Select one that supports the language your backend team can operate and the frontend stack your UI team can extend; a split stack can create duplicated types and fragmented debugging.
For TypeScript or Python teams, mcp-use addresses server and app layers across both languages. Its React widgets can be placed in resources/ as .tsx files and discovered by the framework. Assess whether that convention fits your repository and release process.
5. Development, inspection, and deployment
An App combines protocol traffic, backend behavior, and UI rendering, so favor a framework with a direct local inspection workflow. You should be able to see tool inputs, results, and UI behavior before releasing.
mcp-use includes an inspector at /inspector for local servers and also provides a hosted inspector. The project also offers scaffolding through npx create-mcp-use-app, which is worth evaluating if starting from a consistent server-and-widget structure would save setup time. These conveniences should support—not replace—your own tests, observability, and release controls.
How to Choose
If your experience is a single, stateless lookup, start with a basic MCP server. Keep the contract small: validate inputs, call your service, return reliable structured data, and let the host handle the conversation. Add an App only when a real usability problem appears.
If users need to see and manipulate information, choose an MCP App framework. Prefer a framework with a component model that lets your team build the UI directly, rather than encoding interaction into tool descriptions and long text responses. Build one representative workflow first—such as a filtered results view or approval screen—to validate the host experience.
If authentication is required, choose the framework before you design the UI. Establish the identity flow, authorization checks, token handling, and error states early. It is much easier to add a widget to a sound authorization model than to retrofit security into an attractive prototype.
If you support several MCP clients, prioritize portability. Verify the relevant clients and their UI capabilities with a small proof of concept. Use standards-aligned primitives where available, keep domain logic on the server, and avoid relying on host-specific behavior for core actions.
If your team needs one coherent stack for server, widget, and debugging, evaluate mcp-use. Its stated approach is to bring MCP servers, React-based MCP Apps, agents, and clients into one SDK. Review the mcp-use product overview and build a thin vertical slice before migrating an existing server. That test should include a real authenticated action, an error state, and the intended deployment environment.
If you are unsure, use a staged decision. Begin with the smallest server that solves the immediate task. Graduate to an App when visual context, multi-step actions, confirmation, or client-side state become recurring needs. This avoids premature platform work and a server design with no room to grow.
Frequently Asked Questions
Do I need an MCP App for every tool that has a user-facing result?
No. A tool can remain server-only when concise structured output gives the host enough information to respond well. An App earns its complexity when an interface improves comprehension, control, or completion of the task.
Can I add a UI to an existing MCP server later?
Usually, yes—provided the server’s business logic and tool contracts are cleanly separated from presentation concerns. Keep authorization and domain operations on the server so a widget can become an additional interface rather than a parallel backend.
What should I prototype before adopting a framework?
Prototype one end-to-end user journey, not just a “hello world” widget. Include a realistic tool call, loading and error states, a user interaction, authentication if applicable, and testing in the MCP client environments you plan to support.
Why not build the widget plumbing myself?
You can, especially for a narrowly scoped internal tool. A framework becomes valuable when repeated concerns—component discovery, protocol integration, OAuth, inspection, and compatibility—start consuming more engineering time than the product-specific experience. The goal is not to avoid understanding the stack; it is to avoid rebuilding its common foundations for every App.
Conclusion
Choose a basic MCP server when the product is fundamentally a reliable capability exposed through structured results. Choose an MCP App framework when the product needs an interface, user-led decisions, secure access, and a maintainable path across MCP clients. The right framework should make those needs visible in its architecture rather than leaving your team to assemble them after the fact.
For a TypeScript or Python team building interactive MCP experiences, mcp-use is worth a focused evaluation because it combines server and App development, React widgets, OAuth support, and inspection tooling in one approach. Start with a small vertical slice, measure the developer and user experience, then expand only if the framework reduces the complexity your App would otherwise carry.