Skip to main content
Apps are how you group capabilities in FrontMCP. Each app can contribute tools, resources, prompts, plus providers, adapters, and plugins. Apps may run locally (in this process) or be remote (URL/worker).

Minimal local app

import { App } from '@frontmcp/sdk';

@App({
  id: 'hello',
  name: 'Hello App',
  tools: [],
})
export default class HelloApp {}
Add it to your server:
@FrontMcp({ info: { name: 'Demo', version: '0.1.0' }, apps: [HelloApp] })
export default class Server {}

Local app options

@App({
  id?: string,
  name: string,
  description?: string,
  providers?: ProviderType[],
  authProviders?: AuthProviderType[],
  plugins?: PluginType[],
  adapters?: AdapterType[],
  tools?: ToolType[],
  resources?: ResourceType[],
  prompts?: PromptType[],
  auth?: AuthOptions,                 // app‑default auth (overrides server auth)
  standalone?: 'includeInParent' | boolean, // isolate scope / expose separately
})
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.

Remote apps

Define an app that proxies to a worker file or a URL:
@App({
  name: 'Remote CRM',
  urlType: 'url',                // 'url' | 'worker'
  url: 'https://crm.example.com/mcp',
  auth: { type: 'remote', name: 'crm-idp', baseUrl: 'https://idp.example.com' },
  standalone: true,
})
export default class CrmApp {}
Fields
{
  id?: string;
  name: string;
  description?: string;
  urlType: 'worker' | 'url';
  url: string;
  auth?: AuthOptions;
  standalone?: 'includeInParent' | boolean;
}

Example: app with adapter + providers

@App({
  id: 'billing',
  name: 'Billing',
  providers: [DbProvider, CacheProvider],
  adapters: [
    // e.g. OpenAPI adapter that generates tools/resources from a spec
    BillingOpenApiAdapter,
  ],
})
export default class BillingApp {}