Why Apps?
In FrontMCP, apps provide domain boundaries and enable multi-tenant architectures:| Aspect | App | Server | Tool |
|---|---|---|---|
| Purpose | Group capabilities | Host apps | Execute actions |
| Scope | Feature/domain boundary | Process entry point | Single operation |
| Contains | Tools, resources, prompts | Apps, global providers | Input → Output logic |
- Feature domains — billing, users, analytics as separate concerns
- Team boundaries — each team owns their app
- Multi-tenant — isolate per customer with
splitByApp: true - Third-party integrations — wrap OpenAPI adapters per service
Minimal App
App options
| Field | Description |
|---|---|
id | Unique identifier; used in URLs when splitByApp: true |
name | Human-readable display name |
description | Optional description for documentation |
providers | DI providers scoped to this app |
authProviders | Authentication providers for this app |
plugins | Plugins attached at app scope |
adapters | Adapters (e.g., OpenAPI) that generate tools/resources |
tools | Tool classes registered to this app |
resources | Resource classes registered to this app |
prompts | Prompt classes registered to this app |
auth | App-level auth config (overrides server auth) |
standalone | Isolation mode: true, false, or 'includeInParent' |
- If the server uses
splitByApp: true, each app is isolated and must configure its own auth (server-levelauthis disallowed). standalone: truemakes the app expose its own scope/entry;'includeInParent'lists it under the parent while keeping isolation.
- Providers resolve tool → app → server.
- Plugins/adapters attach at app scope; generated items inherit the app’s policies and provenance.
Example: app with adapter + providers
Remote Apps
Connect to external MCP servers and proxy their tools, resources, and prompts through your gateway:Remote App Options
| Option | Type | Description |
|---|---|---|
name | string | Unique identifier for the remote app |
urlType | 'url' | Must be 'url' for remote apps |
url | string | MCP server endpoint URL |
namespace | string | Prefix for tool/resource/prompt names (e.g., mintlify:SearchMintlify) |
transportOptions | object | Connection settings (timeout, retry attempts) |
standalone | boolean | If true, don’t merge with parent scope |
Transport Options
Caching Remote Tools
Remote tools don’t have cache metadata, so use thetoolPatterns option in CachePlugin:
Use Cases for Remote Apps
MCP Gateway
Aggregate multiple MCP servers behind a single endpoint with unified authentication
Service Mesh
Connect to internal microservices running as separate MCP servers
Third-Party Integration
Proxy external MCP services like Mintlify, adding caching and rate limiting
Development
Test against local MCP servers running on different ports
Best Practices
Do:- Use descriptive
idvalues that work as URL segments - Group related tools, resources, and prompts in the same app
- Configure
standalone: truewhen apps need isolated auth - Use adapters to generate tools from OpenAPI specs
- Put unrelated functionality in the same app
- Mix authentication strategies within a single app
- Create apps with only one tool (use the server directly)