skillsConfig.enabled), FrontMCP supports four authentication modes to protect skill endpoints.
Auth Modes
| Mode | Header | Validation | Use Case |
|---|---|---|---|
inherit (default) | Same as parent server | Same as parent server | Reuse the server’s primary auth |
public | None | None | Development, internal networks |
api-key | X-API-Key or Authorization: ApiKey <key> | Timing-safe equality | Machine-to-machine, server-to-server |
bearer | Authorization: Bearer <jwt> | JWT signature via JWKS | User-scoped access, IdP integration |
Configuration
Public Mode
Disable authentication on skill endpoints regardless of the parent server’s auth.API Key Mode
API key comparison uses timing-safe equality to prevent timing attacks. All configured keys are checked even after a match is found to maintain constant-time behavior.
JWT Bearer Mode
{issuer}/.well-known/jwks.json).
Validation Result
The validator returns a structured result:Factory Function
UsecreateSkillHttpAuthValidator() to create a validator from skill config:
Tool Authorization Guard
When a skill session is active, the Tool Authorization Guard enforces which tools the skill is allowed to call. This prevents skill sessions from accessing tools outside their declared allowlist.Policy Modes
| Mode | Behavior |
|---|---|
strict | Tool must be in the skill’s allowlist. Denied tools throw ToolNotAllowedError. |
approval | Unlisted tools trigger an approval flow. Throws ToolApprovalRequiredError until approved. |
open | All tools are allowed (no enforcement). |
Usage
Error Types
ToolNotAllowedError
Thrown when a tool is not in the skill’s allowlist (strict mode).| Property | Type | Description |
|---|---|---|
toolName | string | The denied tool name |
skillId | string | undefined | Active skill session ID |
reason | string | One of: not_in_allowlist, denied, rate_limited, no_active_skill |
allowedTools | string[] | List of allowed tool names |
mcpErrorCode | number | MCP error code (INVALID_REQUEST) |
ToolApprovalRequiredError
Thrown when a tool requires approval but has not been approved yet.| Property | Type | Description |
|---|---|---|
toolName | string | The tool requiring approval |
skillId | string | undefined | Active skill session ID |
mcpErrorCode | number | MCP error code (INVALID_REQUEST) |