Back to Fastmcp

Settings

docs/more/settings.mdx

4.0.0a111.7 KB
Original Source

FastMCP uses pydantic-settings for configuration. Every setting is available as an environment variable with a FASTMCP_ prefix. Settings are loaded from environment variables and from a .env file (see the Tasks (Docket) section for a caveat about nested settings in .env files).

bash
# Set via environment
export FASTMCP_LOG_LEVEL=DEBUG
export FASTMCP_PORT=3000

# Or use a .env file (loaded automatically)
echo "FASTMCP_LOG_LEVEL=DEBUG" >> .env

You can change which .env file is loaded by setting the FASTMCP_ENV_FILE environment variable (defaults to .env). Because this controls which file is loaded, it must be set as an environment variable — it cannot be set inside a .env file itself.

Logging

Environment VariableTypeDefaultDescription
FASTMCP_LOG_LEVELLiteral["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]INFOLog level for FastMCP's own logging output. Case-insensitive.
FASTMCP_LOG_ENABLEDbooltrueEnable or disable FastMCP logging entirely.
FASTMCP_CLIENT_LOG_LEVELLiteral["debug", "info", "notice", "warning", "error", "critical", "alert", "emergency"]NoneDefault minimum log level for messages sent to MCP clients via context.log(). When set, messages below this level are suppressed. Individual clients can override this per-session using the MCP logging/setLevel request.
FASTMCP_ENABLE_RICH_LOGGINGbooltrueUse rich formatting for log output. Set to false for plain Python logging.
FASTMCP_ENABLE_RICH_TRACEBACKSbooltrueUse rich tracebacks for errors.
FASTMCP_DEPRECATION_WARNINGSbooltrueShow deprecation warnings.
FASTMCP_MCP_CAMELCASE_COMPATbooltrueBridge legacy camelCase reads on MCP SDK objects (e.g. tool.inputSchema, result.isError) to their snake_case fields after the SDK v2 rename. Each bridged read emits a FastMCPDeprecationWarning. Set to false to disable the shims, in which case only the snake_case names resolve.

Transport & HTTP

These control how the server listens when running with an HTTP transport.

Environment VariableTypeDefaultDescription
FASTMCP_TRANSPORTLiteral["stdio", "http", "sse", "streamable-http"]stdioDefault transport.
FASTMCP_HOSTstr127.0.0.1Host to bind to.
FASTMCP_PORTint8000Port to bind to.
FASTMCP_SSE_PATHstr/ssePath for SSE endpoint.
FASTMCP_MESSAGE_PATHstr/messages/Path for SSE message endpoint.
FASTMCP_STREAMABLE_HTTP_PATHstr/mcpPath for Streamable HTTP endpoint.
FASTMCP_STATELESS_HTTPboolfalseEnable stateless HTTP mode (new transport per request). Useful for multi-worker deployments.
FASTMCP_JSON_RESPONSEboolfalseUse JSON responses instead of SSE for Streamable HTTP.
FASTMCP_HTTP_HOST_ORIGIN_PROTECTIONbool | "auto"falseValidate Host and browser Origin headers for Streamable HTTP requests. auto protects localhost-bound servers and explicit host/origin allowlists.
FASTMCP_HTTP_ALLOWED_HOSTSlist[str] | nullnullAdditional trusted hostnames when Host and Origin protection is enabled. Use a JSON array, such as ["mcp.example.com"].
FASTMCP_HTTP_ALLOWED_ORIGINSlist[str] | nullnullBrowser origins trusted when Host and Origin protection is enabled. Configure CORS separately for cross-origin browser reads. Use a JSON array, such as ["https://app.example.com"].
FASTMCP_HTTP_SESSION_IDLE_TIMEOUTfloat | nullnullSeconds a Streamable HTTP session may remain idle before it is terminated. The deadline resets on every request. When null, sessions never expire from inactivity. Not supported in stateless mode.
FASTMCP_DEBUGboolfalseEnable debug mode.

Error Handling

Environment VariableTypeDefaultDescription
FASTMCP_MASK_ERROR_DETAILSboolfalseMask error details before sending to clients. When enabled, only messages from explicitly raised ToolError, ResourceError, or PromptError are included in responses.
FASTMCP_STRICT_INPUT_VALIDATIONboolfalseStrictly validate tool inputs against the JSON schema. When disabled, compatible inputs are coerced (e.g., the string "10" becomes the integer 10).
FASTMCP_MOUNTED_COMPONENTS_RAISE_ON_LOAD_ERRORboolfalseRaise errors when loading mounted components instead of logging warnings.

Client

Environment VariableTypeDefaultDescription
FASTMCP_CLIENT_INIT_TIMEOUTfloat | NoneNoneTimeout in seconds for the client initialization handshake. Set to 0 or leave unset to disable.
FASTMCP_CLIENT_DISCONNECT_TIMEOUTfloat5Maximum time in seconds to wait for a clean disconnect before giving up.
FASTMCP_CLIENT_TASK_POLL_INTERVALfloat0.5Ceiling in seconds for the fallback poll backoff while waiting on a background task. Applies only when the server does not advertise its own pollInterval: in that case Task.wait() starts polling fast (~20ms) and doubles up to this ceiling rather than polling at a fixed cadence. When the server advertises a pollInterval, that interval is honored exactly and this setting is ignored.
FASTMCP_CLIENT_RAISE_FIRST_EXCEPTIONGROUP_ERRORbooltrueWhen an ExceptionGroup is raised, re-raise the first error directly instead of the group. Simplifies debugging but may mask secondary errors.

CLI & Display

Environment VariableTypeDefaultDescription
FASTMCP_SHOW_SERVER_BANNERbooltrueShow the server banner on startup. Also controllable via --no-banner or server.run(show_banner=False).
FASTMCP_CHECK_FOR_UPDATESLiteral["stable", "prerelease", "off"]stableUpdate checking on CLI startup. stable checks stable releases only, prerelease includes pre-releases, off disables checking.

Telemetry

Environment VariableTypeDefaultDescription
FASTMCP_ENABLE_TELEMETRYbooltrueWhether FastMCP's native OpenTelemetry instrumentation is active. Enabled by default; FastMCP uses only the OpenTelemetry API, so span creation is a no-op with negligible overhead unless an OpenTelemetry SDK and exporter are configured. Set to false to turn instrumentation off entirely, in which case no FastMCP spans are created even when an SDK is configured.

Tasks (Docket)

These configure the Docket task queue used by server tasks. All use the FASTMCP_DOCKET_ prefix.

<Warning> When setting Docket values in a `.env` file, use a **double** underscore: `FASTMCP_DOCKET__URL` (not `FASTMCP_DOCKET_URL`). This is because `.env` values are resolved through the parent `Settings` class, which uses `__` as its nested delimiter. As regular environment variables (e.g., `export`), the single-underscore form `FASTMCP_DOCKET_URL` works fine. </Warning>
Environment VariableTypeDefaultDescription
FASTMCP_DOCKET_NAMEstrfastmcpQueue name. Servers and workers sharing the same name and backend URL share a task queue.
FASTMCP_DOCKET_URLstrmemory://Backend URL. Use memory:// for single-process or redis://host:port/db for distributed workers.
FASTMCP_DOCKET_WORKER_NAMEstr | NoneNoneWorker name. Auto-generated if unset.
FASTMCP_DOCKET_CONCURRENCYint10Maximum concurrent tasks per worker.
FASTMCP_DOCKET_REDELIVERY_TIMEOUTtimedelta300sIf a worker doesn't complete a task within this time, it's redelivered to another worker.
FASTMCP_DOCKET_RECONNECTION_DELAYtimedelta5sDelay between reconnection attempts when the worker loses its backend connection.
FASTMCP_DOCKET_MINIMUM_CHECK_INTERVALtimedelta50msHow frequently the worker polls for new tasks. Lower values reduce latency at the cost of more CPU usage.

Security

These control FastMCP's SSRF protection for the outbound fetches it makes during authentication (OAuth client metadata and JWKS).

Environment VariableTypeDefaultDescription
FASTMCP_SSRF_TRUST_PROXYboolfalseTrust an outbound HTTP proxy for SSRF-protected fetches. When false, FastMCP resolves the target hostname itself and refuses to connect if it maps to a private, loopback, link-local, or reserved IP. When true, FastMCP routes auth metadata and JWKS fetches through the configured HTTPS_PROXY/ALL_PROXY and does not honor NO_PROXY; if no proxy is configured the fetch is refused.

By default, FastMCP protects its OAuth and JWKS fetches against SSRF by resolving the target hostname, rejecting any address that maps to a private, loopback, link-local, or reserved IP, and then pinning the connection to that validated IP.

This breaks when a corporate CONNECT proxy is the only egress path: the container often cannot resolve external DNS at all (only the proxy can), and even when it can, pinning to the IP makes TLS verification fail because public certificates list hostnames, not IP addresses.

Set FASTMCP_SSRF_TRUST_PROXY=true when a trusted proxy is your mandated egress. FastMCP then skips DNS resolution and the IP blocklist entirely and makes a single request to the hostname URL, explicitly routed through the proxy named by the standard HTTPS_PROXY / ALL_PROXY environment variables (checked in that order). The HTTPS-only and hostname checks still apply.

<Warning> This is a deliberate trust shift: the IP blocklist cannot be enforced through a proxy (the proxy does its own DNS, so an address FastMCP resolved is not the one the proxy dials). Only enable it when the proxy itself is trusted to mediate egress.

FastMCP reads the proxy URL from the environment and passes it to the HTTP client explicitly, with the client's own environment-based proxy routing turned off — so the request either goes through that exact proxy or fails outright, with no routing decision left for the client to make on its own. One consequence: NO_PROXY is not honored in this mode. A host that NO_PROXY would otherwise exclude is still routed through the configured proxy rather than fetched direct with the IP blocklist disabled — the safer of the two options, since the blocklist cannot apply to a direct fetch here anyway. If you set FASTMCP_SSRF_TRUST_PROXY=true but neither HTTPS_PROXY nor ALL_PROXY is present in the server process's environment (an HTTP_PROXY alone never routes these HTTPS-only fetches), the request would otherwise go out direct with the IP blocklist disabled — no SSRF protection at all. Rather than send it, FastMCP refuses the fetch and raises SSRFError with an actionable message. The contract is crisp: proxy-trust mode delegates SSRF protection to the proxy, and with no proxy configured the fetch cannot proceed. Enable this setting only together with an active proxy that routes your auth endpoints. </Warning>

Advanced

Environment VariableTypeDefaultDescription
FASTMCP_HOMEPathPlatform defaultData directory for FastMCP. Defaults to the platform-specific user data directory.
FASTMCP_ENV_FILEstr.envPath to the .env file to load settings from. Must be set as an environment variable (see above).
FASTMCP_SERVER_DEPENDENCIESlist[str][]Additional dependencies to install in the server environment.
FASTMCP_TEST_MODEboolfalseEnable test mode.