Config & Transport Reference
loadConfig(cwd?)
Find config file and merge with defaults. Priority: air.config.ts > air.config.json > package.json "air".
typescript
import { loadConfig } from '@airmcp-dev/core';
const config = await loadConfig(); // Load from cwd
const config = await loadConfig('/path/to'); // Specific directoryInternal steps:
air.config.ts→ ESM dynamic importair.config.json→ JSON.parsepackage.json"air"field- None found →
{ name: 'air-server' } - Deep merge with
DEFAULT_CONFIG
AirConfig
typescript
interface AirConfig {
name: string;
version?: string; // Default: '0.1.0'
description?: string;
transport?: TransportConfig;
storage?: StoreOptions;
meter?: MeterConfig;
logging?: {
level?: 'debug' | 'info' | 'warn' | 'error' | 'silent';
format?: 'json' | 'pretty';
};
dev?: {
hotReload?: boolean;
port?: number;
};
telemetry?: {
enabled?: boolean; // Default: false (opt-in)
endpoint?: string;
};
registry?: {
url?: string; // Default: 'https://plugins.airmcp.dev/api/v1'
apiKey?: string;
};
}DEFAULT_CONFIG
typescript
const DEFAULT_CONFIG = {
version: '0.1.0',
transport: { type: 'auto' },
storage: { type: 'memory' },
logging: { level: 'info', format: 'pretty' },
metrics: { enabled: true, layerClassification: false },
dev: { hotReload: true, port: 3100 },
};TransportConfig
typescript
interface TransportConfig {
type?: 'stdio' | 'sse' | 'http' | 'auto'; // Default: 'auto'
port?: number;
host?: string; // Default: 'localhost'
basePath?: string; // Default: '/'
}detectTransport(config?)
Auto-detect transport type based on environment.
typescript
import { detectTransport } from '@airmcp-dev/core';
detectTransport(); // Auto
detectTransport({ type: 'sse' }); // → 'sse'Detection order:
config.typeis not'auto'→ return as-isMCP_TRANSPORTenv variable (stdio/http/sse)process.stdin.isTTY:- Not TTY (piped) →
'stdio' - TTY (terminal) →
'http'
- Not TTY (piped) →
Port resolution
transport.port → dev.port → 3100MeterConfig
typescript
interface MeterConfig {
enabled?: boolean; // Default: true
classify?: boolean; // Default: true
trackCalls?: boolean; // Default: true
trackTokens?: boolean; // Default: false
budget?: {
dailyLimit?: number;
monthlyLimit?: number;
maxTokensPerCall?: number;
onExceed?: 'warn' | 'block';
};
}Full type exports
typescript
import type {
AirConfig, MeterConfig, TransportType, TransportConfig,
ParamShorthand, AirToolParams, AirToolHandler, AirToolContext, AirToolResponse, AirToolDef,
AirResourceDef, AirResourceContext, AirResourceContent,
AirPromptDef, AirPromptArg, AirPromptMessage,
MiddlewareContext, MiddlewareResult, AirMiddleware,
StorageAdapter, QueryOptions, StoreOptions,
AirPluginMeta, PluginHooks, PluginContext, AirPlugin, AirPluginFactory,
AirServerOptions, AirServer, AirServerStatus,
} from '@airmcp-dev/core';