Configuration
Python NitroStack has no nitro.yaml. Configure with .env, process environment, and ServerConfig.
ConfigModule.for_root(env_file_path=".env", defaults={...}) plus ConfigService.get / get_or_throw.
Environment variables
| Variable | Description |
|---|---|
HOST | Bind address (default 127.0.0.1). Use 0.0.0.0 in containers. |
PORT / MCP_SERVER_PORT | HTTP port (default 3000). Overridden by --port. |
WIDGETS_DEV_PORT | Widget port (default 3001). Overridden by --widget. |
MCP_TRANSPORT_TYPE | stdio | http | dual |
NODE_ENV | production defaults transport to dual unless overridden |
MCP_STATELESS | true forces modern/stateless HTTP; false forces sessionful |
NITRO_MCP_PROTOCOL_VERSION | Protocol era (auto, modern, legacy, …) |
MCP_MAX_SESSIONS | Concurrent Streamable HTTP sessions; extra sessions get HTTP 429 |
MCP_SESSION_TIMEOUT_MS | Idle timeout for stateful HTTP sessions |
MCP_GRACEFUL_SHUTDOWN_TIMEOUT_MS | In-flight drain on shutdown (default 10000) |
MCP_ALLOWED_HOSTS / MCP_ALLOWED_ORIGINS | DNS-rebinding allow-lists when CORS is off |
TRUSTED_PROXIES / MCP_TRUSTED_PROXIES | Who may send X-Forwarded-Host / X-Forwarded-Proto |
NITROSTACK_APP_MODE | Widget mode: universal | openai | mcp-app |
NITROSTACK_LOG_FILE / NITROSTACK_LOG_LEVEL / NITROSTACK_LOG_TO_STDOUT | Logging |
NITROSTACK_HTTP_DEBUG | 1 logs every HTTP request to stderr |
OAUTH_REQUIRED | When unset, OAuthGuard may allow no-token (Studio mock) |
API_KEY / API_KEY_* | API key auth |
JWT_SECRET | HS256 JWT |
ServerConfig.protocol_era is used only when MCP_STATELESS and NITRO_MCP_PROTOCOL_VERSION are both unset.
Example
Python
from nitrostack import ServerConfig, mcp_app, module
server = ServerConfig(
name="my-server",
version="1.0.0",
transport_type="http",
max_sessions=100,
session_timeout_ms=1_800_000,
)