Skip to main content
Apps are the organizational units for capabilities in FrontMCP. Each app groups related tools, resources, and prompts into a cohesive domain, along with providers, adapters, and plugins that support them.

Why Apps?

In FrontMCP, apps provide domain boundaries and enable multi-tenant architectures: Apps are ideal for:
  • 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

Add it to your server:

App options

Field descriptions: Scoping & auth
  • If the server uses splitByApp: true, each app is isolated and must configure its own auth (server-level auth is disallowed).
  • standalone: true makes the app expose its own scope/entry; 'includeInParent' lists it under the parent while keeping isolation.
Dependency resolution
  • 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 using App.remote():

Remote App Options

App.remote(url, options?) accepts the MCP server URL as the first argument and an optional options object:

Transport Options

Caching Remote Tools

Remote tools don’t have cache metadata, so use the toolPatterns option in CachePlugin:
See the Cache Plugin documentation for more details on pattern-based caching.

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

ESM Package Apps

Load npm packages at runtime and register their tools, resources, and prompts in-process — no HTTP proxy needed — using App.esm():
Unlike Remote Apps which proxy requests to external MCP servers over HTTP, ESM packages are fetched from a CDN, cached locally, and executed in-process. They support two-tier caching, background version polling with hot-reload, and private registry authentication.
See the full ESM Packages reference for App.esm() API, caching, authentication, and auto-update configuration.

Per-Primitive Loading

In addition to loading entire apps, you can load individual primitives (tools, resources, prompts, agents, skills, jobs) from npm packages or remote servers using static methods on each decorator:
Per-primitive loading gives you fine-grained control. Instead of importing an entire package’s tools, you can pick exactly the ones you need. See each component’s documentation page (Tools, Resources, Prompts, Agents, Skills, Jobs) for details.

Best Practices

Do:
  • Use descriptive id values that work as URL segments
  • Group related tools, resources, and prompts in the same app
  • Configure standalone: true when apps need isolated auth
  • Use adapters to generate tools from OpenAPI specs
Don’t:
  • Put unrelated functionality in the same app
  • Mix authentication strategies within a single app
  • Create apps with only one tool (use the server directly)
  • Use App.esm() for external MCP servers (use App.remote() instead)
Choosing between app types:
  • Local @App: First-party code you own and maintain
  • App.esm(): Community or internal packages distributed via npm
  • App.remote(): External MCP servers running as separate processes