1---2name: frontmcp-config3description: Use when configuring a FrontMCP server through frontmcp.config or the @FrontMcp options. Covers auth modes (public, transparent, local, remote), OAuth plus credential vault and secureStore, CORS, HTTP port / entry-path prefix / unix socket, security headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options), rate limiting / throttling / concurrency / timeout / IP filtering (GuardConfig), session storage (Redis, Vercel KV), client transport protocols (SSE, Streamable HTTP, stateless, protocol presets), elicitation, multi-target build config, and skillsConfig (HTTP catalog, caching, audit log, instruction injection). Triggers: configure auth, set up CORS, add rate limiting, throttle requests, manage sessions, choose transport, set HTTP options, configure JWT or OAuth. The skill for server CONFIGURATION.4license: Apache-2.05---67# FrontMCP Configuration Router89Entry point for configuring FrontMCP servers. This skill helps you find the right configuration reference (under `references/`) based on what aspect of your server you need to set up.1011## When to Use This Skill1213### Must Use1415- Setting up a new server and need to understand which configuration options exist16- Deciding between authentication modes, transport protocols, or storage backends17- Planning server configuration across transport, auth, throttling, and storage1819### Recommended2021- Looking up which reference covers a specific config option (CORS, rate limits, session TTL, etc.)22- Understanding how configuration layers work (server-level vs app-level vs tool-level)23- Reviewing the full configuration surface area before production deployment2425### Skip When2627- You already know which config area to change (go directly to `configure-transport`, `configure-auth`, etc.)28- You need to build components, not configure the server (see `frontmcp-development`)29- You need to deploy, not configure (see `frontmcp-deployment`)3031> **Decision:** Use this skill when you need to figure out WHAT to configure. Open the matching reference under `references/` directly when you already know.3233## Prerequisites3435- A FrontMCP project scaffolded with `frontmcp create` (see `frontmcp-setup`)36- Node.js 24+ and npm/yarn installed3738## Steps39401. Identify the configuration area you need using the Scenario Routing Table below412. Navigate to the specific configuration reference (e.g., `references/configure-transport.md`, `references/configure-auth.md`) for detailed instructions423. Apply the configuration in your `@FrontMcp` or `@App` decorator434. Verify using the Verification Checklist at the end of this skill4445## Scenario Routing Table4647| Scenario | Reference | Description |48| -------------------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------- |49| Choose between SSE, Streamable HTTP, or stdio | `configure-transport` | Transport protocol selection with distributed session options |50| Set up CORS, port, base path, or request limits | `configure-http` | HTTP server options for Streamable HTTP and SSE transports |51| Add rate limiting, concurrency, or IP filtering | `configure-throttle` | Server-level and per-tool throttle configuration |52| Enable tools to ask users for input | `configure-elicitation` | Elicitation schemas, stores, and multi-step flows |53| Set up authentication (public, transparent, local, remote) | `configure-auth` | OAuth flows, credential vault, multi-app auth |54| Configure session storage backends | `configure-session` | Memory, Redis, Vercel KV, and custom session stores |55| Add Redis for production storage | `setup-redis` | Docker Redis, Vercel KV, pub/sub for distributed subscriptions |56| Add SQLite for local development | `setup-sqlite` | SQLite with WAL mode, migration helpers |57| Understand auth mode details (public/transparent/local/remote) | `configure-auth-modes` | Authentication mode details (public, transparent, local, remote) |58| Fine-tune guard configuration for throttling | `configure-throttle-guard-config` | Advanced guard configuration for throttling |59| Use transport protocol presets | `configure-transport-protocol-presets` | Transport protocol preset configurations |60| Configure multi-target deployments and frontmcp.config.ts | `configure-deployment-targets` | Typed config with defineConfig(), 9 deployment targets, JSON schema |61| Add CSP, HSTS, X-Frame-Options, and other security headers | `configure-security-headers` | CSP directives, report-only mode, HSTS preload, custom headers |62| Configure skills HTTP, instructions injection, or audit log | `configure-skills-http` | Full `skillsConfig` reference: auth, cache, instructions, audit log |63| Split apps into separate scopes (`splitByApp`) | `decorators-guide` | Per-app scope and basePath isolation on `@FrontMcp` |64| Enable widget-to-host communication (ext-apps) | `decorators-guide` | `extApps` host capabilities, session validation, widget comms |65| Enable background jobs and workflows | `decorators-guide` | `jobs: { enabled: true, store? }` on `@FrontMcp` |66| Configure pagination for list operations | `decorators-guide` | `pagination` defaults for `tools/list` endpoint |67| Configure npm/ESM package loader for remote apps | `decorators-guide` | `loader` config for `App.esm()` / `App.remote()` resolution |6869## Configuration Layers7071FrontMCP configuration cascades through three layers:7273```text74Server (@FrontMcp) ← Global defaults75 └── App (@App) ← App-level overrides76 └── Tool (@Tool) ← Per-tool overrides77```7879| Setting | Server (`@FrontMcp`) | App (`@App`) | Tool (`@Tool`) |80| --------------------- | -------------------------------- | --------------------- | ------------------------------------------- |81| Transport | Yes | No | No |82| HTTP (CORS, port) | Yes | No | No |83| Throttle (rate limit) | Yes (`throttle` global defaults) | No | Yes (`rateLimit`, `concurrency`, `timeout`) |84| Auth mode | Yes | Yes (override) | No |85| Auth providers | No | Yes (`authProviders`) | Yes (`authProviders`) |86| Session store | Yes | No | No |87| Elicitation | Yes (enable: `elicitation`) | No | Yes (usage: `this.elicit()`) |88| ExtApps | Yes | No | No |89| Jobs / Workflows | Yes (`jobs: { enabled }`) | No | No |90| Pagination | Yes | No | No |91| SplitByApp | Yes | No | No |9293## Cross-Cutting Patterns9495| Pattern | Rule |96| ------------------- | ------------------------------------------------------------------------------------------------- |97| Auth + session | Auth mode determines session requirements: `remote` needs Redis/KV; `public` can use memory |98| Transport + storage | Stateless transports (serverless) require distributed storage; stateful (Node) can use in-process |99| Throttle scope | Server-level throttle applies to all tools; per-tool throttle overrides for specific tools |100| Environment config | Use environment variables for all secrets (API keys, Redis URLs, OAuth credentials) |101| Config validation | FrontMCP validates config at startup; invalid config throws before the server starts |102103## Common Patterns104105| Pattern | Correct | Incorrect | Why |106| -------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |107| Auth mode for dev | `auth: { mode: 'public' }` or `auth: { mode: 'transparent', provider: '...' }` locally | `auth: { mode: 'remote', ... }` with real OAuth in dev | Remote auth requires a running OAuth provider; public/transparent are simpler for local dev |108| Session store | Redis for production, memory for development | Memory for production | Memory sessions are lost on restart and don't work across serverless invocations |109| Rate limit placement | Server-level for global limits, per-tool for expensive operations | Only server-level | Some tools are cheap (list) and some are expensive (generate); per-tool limits prevent abuse of expensive tools |110| CORS config | Explicit allowed origins in production | `cors: { origin: '*' }` in production | Wildcard CORS allows any origin to call your server |111| Config secrets | `process.env.REDIS_URL` via environment variable | Hardcoded `redis://localhost:6379` in source | Hardcoded secrets leak to git and break in different environments |112113## Verification Checklist114115### Transport and HTTP116117- [ ] Transport protocol configured and server starts without errors118- [ ] CORS allows expected origins (test with browser or curl)119- [ ] Port and base path accessible from client120121### Authentication122123- [ ] Auth mode set appropriately for the environment (public/transparent for dev, remote for prod)124- [ ] OAuth credentials stored in environment variables, not source code125- [ ] Session store configured with appropriate backend (memory for dev, Redis for prod)126127### Throttle and Security128129- [ ] Global rate limit configured to prevent abuse130- [ ] Expensive tools have per-tool throttle overrides131- [ ] IP allow/deny lists configured if needed132133### Storage134135- [ ] Redis or SQLite configured and connectable136- [ ] Storage persists across server restarts (not memory in production)137138## Troubleshooting139140| Problem | Cause | Solution |141| --------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |142| Server fails to start with config error | Invalid or missing required config field | Check the error message; FrontMCP validates config at startup and reports the specific invalid field |143| CORS blocked in browser | Missing or incorrect CORS origin config | Add the client's origin to `http.cors.origin`; see `configure-http` |144| Rate limit too aggressive | Global limit applied to all tools | Add per-tool overrides for cheap tools with higher limits; see `configure-throttle` |145| Sessions lost on serverless | Using memory session store on stateless platform | Switch to Redis or Vercel KV; see `configure-session` |146| Auth callback fails | OAuth redirect URI mismatch | Ensure the redirect URI registered with your OAuth provider matches the server's `/oauth/callback` endpoint; see `configure-auth` |147148## Examples149150Each reference has matching examples under [`examples/<reference>/`](./examples/):151152### `configure-auth-modes`153154| Example | Level | Description |155| --------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------- |156| [`local-self-signed-tokens`](./examples/configure-auth-modes/local-self-signed-tokens.md) | Intermediate | Configure a server that signs its own JWT tokens with consent and incremental auth enabled. |157| [`remote-enterprise-oauth`](./examples/configure-auth-modes/remote-enterprise-oauth.md) | Advanced | Proxy auth to one mandatory upstream IdP, mint a FrontMCP session, read the upstream token. |158| [`transparent-jwt-validation`](./examples/configure-auth-modes/transparent-jwt-validation.md) | Basic | Validate externally-issued JWTs without managing token lifecycle on the server. |159160### `configure-auth`161162| Example | Level | Description |163| --------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |164| [`multi-app-auth`](./examples/configure-auth/multi-app-auth.md) | Advanced | Configure a single FrontMCP server with multiple apps, each using a different auth mode -- public for open endpoints and remote for admin endpoints. |165| [`public-mode-setup`](./examples/configure-auth/public-mode-setup.md) | Basic | Set up a FrontMCP server with public (unauthenticated) access and anonymous scopes. |166| [`remote-oauth-with-vault`](./examples/configure-auth/remote-oauth-with-vault.md) | Intermediate | Configure a FrontMCP server with remote OAuth 2.1 authentication and use the credential vault to call downstream APIs on behalf of the authenticated user. |167168### `configure-elicitation`169170| Example | Level | Description |171| ---------------------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------- |172| [`basic-confirmation-gate`](./examples/configure-elicitation/basic-confirmation-gate.md) | Basic | Request user confirmation before executing a destructive action. |173| [`distributed-elicitation-redis`](./examples/configure-elicitation/distributed-elicitation-redis.md) | Intermediate | Configure elicitation with Redis storage for multi-instance production deployments. |174175### `configure-http`176177| Example | Level | Description |178| ----------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------ |179| [`cors-restricted-origins`](./examples/configure-http/cors-restricted-origins.md) | Basic | Configure CORS to allow only specific frontend origins with credentials. |180| [`entry-path-reverse-proxy`](./examples/configure-http/entry-path-reverse-proxy.md) | Intermediate | Mount the MCP server under a URL prefix for reverse proxy or multi-service setups. |181| [`unix-socket-local`](./examples/configure-http/unix-socket-local.md) | Intermediate | Bind the server to a unix socket instead of a TCP port for local-only communication. |182183### `configure-session`184185| Example | Level | Description |186| ------------------------------------------------------------------------------------ | ------------ | -------------------------------------------------------------------------------- |187| [`multi-server-key-prefix`](./examples/configure-session/multi-server-key-prefix.md) | Intermediate | Use unique key prefixes when multiple FrontMCP servers share one Redis instance. |188| [`redis-session-store`](./examples/configure-session/redis-session-store.md) | Basic | Configure Redis-backed session storage for production deployments. |189| [`vercel-kv-session`](./examples/configure-session/vercel-kv-session.md) | Intermediate | Configure Vercel KV for session storage in serverless Vercel deployments. |190191### `configure-throttle-guard-config`192193| Example | Level | Description |194| -------------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------ |195| [`full-guard-config`](./examples/configure-throttle-guard-config/full-guard-config.md) | Advanced | Complete GuardConfig using every available field for maximum protection. |196| [`minimal-guard-config`](./examples/configure-throttle-guard-config/minimal-guard-config.md) | Basic | Enable throttle with just a global rate limit and default timeout. |197198### `configure-throttle`199200| Example | Level | Description |201| ------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------- |202| [`distributed-redis-throttle`](./examples/configure-throttle/distributed-redis-throttle.md) | Advanced | Configure Redis-backed rate limiting for multi-instance deployments behind a load balancer. |203| [`per-tool-rate-limit`](./examples/configure-throttle/per-tool-rate-limit.md) | Intermediate | Override server defaults with per-tool rate limits and concurrency caps. |204| [`server-level-rate-limit`](./examples/configure-throttle/server-level-rate-limit.md) | Basic | Configure global rate limits and IP filtering at the server level. |205206### `configure-transport-protocol-presets`207208| Example | Level | Description |209| --------------------------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------- |210| [`legacy-preset-nodejs`](./examples/configure-transport-protocol-presets/legacy-preset-nodejs.md) | Basic | Use the default legacy preset for maximum compatibility with all MCP clients. |211| [`stateless-api-serverless`](./examples/configure-transport-protocol-presets/stateless-api-serverless.md) | Intermediate | Use the stateless-api preset for Vercel, Lambda, or Cloudflare Workers. |212213### `configure-transport`214215| Example | Level | Description |216| -------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------- |217| [`custom-protocol-flags`](./examples/configure-transport/custom-protocol-flags.md) | Advanced | Override individual protocol flags instead of using a preset for fine-grained control. |218| [`distributed-sessions-redis`](./examples/configure-transport/distributed-sessions-redis.md) | Intermediate | Configure transport with Redis persistence for multi-instance load-balanced deployments. |219| [`stateless-serverless`](./examples/configure-transport/stateless-serverless.md) | Basic | Configure stateless transport for Vercel, Lambda, or Cloudflare deployments. |220221### `configure-deployment-targets`222223| Example | Level | Description |224| ----------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------- |225| [`multi-target-with-security`](./examples/configure-deployment-targets/multi-target-with-security.md) | Intermediate | Configure a FrontMCP project with node + distributed targets, CSP headers, and HSTS |226| [`distributed-ha-config`](./examples/configure-deployment-targets/distributed-ha-config.md) | Advanced | Configure a distributed deployment target with HA settings for heartbeat, session takeover, and Redis-backed session persistence |227| [`json-schema-ide-support`](./examples/configure-deployment-targets/json-schema-ide-support.md) | Basic | Use frontmcp.config.json with JSON Schema for VS Code and WebStorm autocomplete |228229### `configure-security-headers`230231| Example | Level | Description |232| --------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------- |233| [`csp-report-only`](./examples/configure-security-headers/csp-report-only.md) | Basic | Test CSP policies in report-only mode to identify violations before enforcement |234| [`full-production-headers`](./examples/configure-security-headers/full-production-headers.md) | Intermediate | Complete security headers configuration for production with CSP enforcement, HSTS preload, and clickjacking protection |235236## Accessing This Skill237238Skills are distributed as plain SKILL.md files plus a sibling `references/`239and `examples/` tree, so consumers can pick whichever access mode fits:240241| Mode | How it works |242| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |243| **Filesystem** | Read `libs/skills/catalog/frontmcp-config/` directly from a clone of the catalog repo, or from a published `@frontmcp/skills` install. SKILL.md is the entry point. |244| **`frontmcp` CLI** | `frontmcp skills list`, `frontmcp skills read frontmcp-config`, `frontmcp skills read frontmcp-config:references/<file>.md`, `frontmcp skills install frontmcp-config` — no server required. |245| **MCP `skill://`** | When a developer mounts this skill into their own FrontMCP server (`@FrontMcp({ skills: [...] })`), the SDK exposes it via SEP-2640 resources: `skill://frontmcp-config/SKILL.md`, `skill://frontmcp-config/references/{file}.md`, etc. The server’s `skill://index.json` returns the SEP-2640 discovery document for everything mounted on it. |246247The catalog itself is **not** an MCP server. The `skill://` URIs only resolve248when a server has been configured to host this skill.249250## Reference251252- [FrontMCP Overview](https://docs.agentfront.dev/frontmcp/fundamentals/overview)253- Related skills: `configure-transport`, `configure-http`, `configure-throttle`, `configure-elicitation`, `configure-auth`, `configure-session`, `setup-redis`, `setup-sqlite`