Skip to Content

Settings

Configure your server via constructor options or environment variables.

For most , pass options directly to ArcadeMCP. Use MCPSettings only when you need to share configuration across multiple servers or load from a config file.

Quick Start

TypeScript
import { ArcadeMCP } from 'arcade-mcp-server'; const app = new ArcadeMCP({ name: 'my-server', version: '1.0.0', logLevel: 'DEBUG', });

Environment Variables

The SDK reads these environment variables as defaults. Constructor options take precedence.

Server Configuration

VariableMaps toExample
MCP_SERVER_NAMEname"My Server"
MCP_SERVER_VERSIONversion"1.0.0"
MCP_SERVER_TITLEtitle"My Tools"
MCP_SERVER_INSTRUCTIONSinstructions"Use these tools to..."
MCP_DEBUGdebugtrue, false

Runtime Configuration

These override app.run() options:

VariableMaps toExample
ARCADE_SERVER_TRANSPORTtransportstdio, http
ARCADE_SERVER_HOSThost0.0.0.0
ARCADE_SERVER_PORTport8080
ARCADE_SERVER_RELOADreload0, 1

Middleware Configuration

VariableMaps toExample
MCP_MIDDLEWARE_LOG_LEVELlogLevelDEBUG, INFO, WARNING, ERROR, CRITICAL
MCP_MIDDLEWARE_ENABLE_LOGGINGenableLoggingtrue, false
MCP_MIDDLEWARE_ENABLE_ERROR_HANDLINGenableErrorHandlingtrue, false
MCP_MIDDLEWARE_MASK_ERROR_DETAILSmaskErrorDetailstrue, false

Transport Configuration

VariableMaps toExample
MCP_TRANSPORT_SESSION_TIMEOUT_SECONDSsessionTimeoutSeconds300
MCP_TRANSPORT_CLEANUP_INTERVAL_SECONDScleanupIntervalSeconds10
MCP_TRANSPORT_MAX_SESSIONSmaxSessions1000
MCP_TRANSPORT_MAX_QUEUE_SIZEmaxQueueSize1000

Notification Configuration

VariableMaps toExample
MCP_NOTIFICATION_RATE_LIMIT_PER_MINUTErateLimitPerMinute60
MCP_NOTIFICATION_DEFAULT_DEBOUNCE_MSdefaultDebounceMs100
MCP_NOTIFICATION_MAX_QUEUED_NOTIFICATIONSmaxQueuedNotifications1000

Arcade Integration

VariableMaps toExample
ARCADE_API_KEYapiKeyarc_...
ARCADE_API_URLapiUrlhttps://api.arcade.dev
ARCADE_AUTH_DISABLEDauthDisabledtrue, false
ARCADE_WORKER_SECRETserverSecret"secret_..."
ARCADE_ENVIRONMENTenvironmentdev, prod
ARCADE_USER_IDuserId"user_123"

Access environment variables with Bun.env:

TypeScript
const debug = Bun.env.MCP_DEBUG === 'true'; const port = Number(Bun.env.ARCADE_SERVER_PORT) || 8000;

MCPSettings

For advanced configuration, use the MCPSettings class:

TypeScript
import { MCPSettings } from 'arcade-mcp-server'; // Load from environment variables const settings = MCPSettings.fromEnv();

Or construct with explicit options:

TypeScript
import { MCPSettings } from 'arcade-mcp-server'; const settings = new MCPSettings({ debug: true, server: { name: 'My MCP Server', version: '1.0.0', title: 'My Tools', instructions: 'Use these tools to manage documents.', }, middleware: { enableLogging: true, enableErrorHandling: true, logLevel: 'DEBUG', maskErrorDetails: false, }, transport: { sessionTimeoutSeconds: 300, cleanupIntervalSeconds: 10, maxSessions: 1000, maxQueueSize: 1000, }, arcade: { apiKey: Bun.env.ARCADE_API_KEY, apiUrl: 'https://api.arcade.dev', authDisabled: false, environment: 'dev', }, notification: { rateLimitPerMinute: 60, defaultDebounceMs: 100, maxQueuedNotifications: 1000, }, toolEnvironment: { // Additional secrets available to tools DATABASE_URL: Bun.env.DATABASE_URL, REDIS_URL: Bun.env.REDIS_URL, }, });

Using with MCPServer

TypeScript
import { MCPServer, MCPSettings, ToolCatalog } from 'arcade-mcp-server'; const settings = MCPSettings.fromEnv(); const server = new MCPServer({ catalog: new ToolCatalog(), settings, });

Getting Tool Secrets

TypeScript
const settings = MCPSettings.fromEnv(); // Get all secrets available to tools const secrets = settings.toolSecrets(); // => { DATABASE_URL: '...', REDIS_URL: '...', ... }

Settings Reference

MCPSettings

TypeScript
interface MCPSettings { /** Enable debug mode (verbose logging, stack traces) */ debug?: boolean; /** Server configuration */ server?: ServerSettings; /** Middleware configuration */ middleware?: MiddlewareSettings; /** Transport configuration (session/connection management) */ transport?: TransportSettings; /** Arcade API configuration */ arcade?: ArcadeSettings; /** Notification settings */ notification?: NotificationSettings; /** Tool environment / secrets */ toolEnvironment?: ToolEnvironmentSettings; }

ServerSettings

TypeScript
interface ServerSettings { /** Server name shown to AI clients */ name: string; /** Server version */ version: string; /** Human-readable title */ title?: string; /** Usage instructions for AI clients */ instructions?: string; }

MiddlewareSettings

TypeScript
interface MiddlewareSettings { /** Enable request logging (default: true) */ enableLogging?: boolean; /** Enable error handling middleware (default: true) */ enableErrorHandling?: boolean; /** Log level (default: 'INFO') */ logLevel?: 'DEBUG' | 'INFO' | 'WARNING' | 'ERROR' | 'CRITICAL'; /** Hide stack traces in error responses (default: false) */ maskErrorDetails?: boolean; }

TransportSettings

Session and connection management for HTTP transport:

TypeScript
interface TransportSettings { /** Session timeout in seconds (default: 300) */ sessionTimeoutSeconds?: number; /** Cleanup interval for expired sessions in seconds (default: 10) */ cleanupIntervalSeconds?: number; /** Maximum concurrent sessions (default: 1000) */ maxSessions?: number; /** Maximum queue size per session (default: 1000) */ maxQueueSize?: number; }

Transport type (stdio or http), host, and port are passed to app.run(), not stored in settings. TransportSettings controls session behavior, not connection parameters.

ArcadeSettings

TypeScript
interface ArcadeSettings { /** Arcade API key for auth and tool hosting */ apiKey?: string; /** Arcade API URL (default: 'https://api.arcade.dev') */ apiUrl?: string; /** Disable authentication (default: false) */ authDisabled?: boolean; /** Server secret for worker endpoints (required to enable worker routes) */ serverSecret?: string; /** Environment: 'dev' or 'prod' (default: 'dev') */ environment?: 'dev' | 'prod'; /** User ID for Arcade environment */ userId?: string; }

NotificationSettings

Rate limiting and queuing for client notifications:

TypeScript
interface NotificationSettings { /** Maximum notifications per minute per client (default: 60) */ rateLimitPerMinute?: number; /** Default debounce time in milliseconds (default: 100) */ defaultDebounceMs?: number; /** Maximum queued notifications per client (default: 1000) */ maxQueuedNotifications?: number; }

ToolEnvironmentSettings

Environment variables available as secrets to :

TypeScript
interface ToolEnvironmentSettings { /** Key-value pairs of secrets */ [key: string]: string | undefined; }

Any environment variable not prefixed with MCP_ or starting with _ is automatically available as a secret via getSecret().

Configuration Precedence

Settings are resolved in this order (first wins):

  1. Constructor options / app.run() options
  2. MCPSettings object
  3. Environment variables
  4. Default values

Configuration Patterns

Development vs Production

TypeScript
import { ArcadeMCP } from 'arcade-mcp-server'; const isDev = Bun.env.NODE_ENV !== 'production'; const app = new ArcadeMCP({ name: 'my-server', logLevel: isDev ? 'DEBUG' : 'INFO', // In development, show full error details // ErrorHandlingMiddleware reads this internally }); app.run({ transport: 'http', host: isDev ? '127.0.0.1' : '0.0.0.0', port: Number(Bun.env.PORT) || 8000, reload: isDev, });

Loading from Config File

TypeScript
import { MCPSettings } from 'arcade-mcp-server'; // Load from JSON file const configFile = Bun.file('./config.json'); const config = await configFile.json(); const settings = new MCPSettings(config);

Validating Configuration at Startup

TypeScript
import { ArcadeMCP } from 'arcade-mcp-server'; const requiredEnvVars = ['ARCADE_API_KEY', 'DATABASE_URL']; for (const envVar of requiredEnvVars) { if (!Bun.env[envVar]) { throw new Error(`Missing required environment variable: ${envVar}`); } } const app = new ArcadeMCP({ name: 'my-server' });

Type-Safe Configuration

Use TypeScript’s satisfies for type-checked config objects:

TypeScript
import type { ArcadeMCPOptions } from 'arcade-mcp-server'; const config = { name: 'my-server', version: '1.0.0', logLevel: 'DEBUG', } satisfies ArcadeMCPOptions; const app = new ArcadeMCP(config);
Last updated on

Settings - Arcade MCP TypeScript Reference | Arcade Docs