lokalise-mcp
Version:
The Lokalise MCP Server brings Lokalise's localization power to Claude and AI assistants—manage projects, keys, and translations by chat.
150 lines (149 loc) • 4.45 kB
JavaScript
/**
* Configuration Schema
* Strongly-typed configuration validation using Zod
*
* This schema defines all environment variables and configuration options
* used by the Lokalise MCP server, sourced from:
* - manifest.json (DXT package configuration)
* - .env and .env.example files
* - smithery.yaml (Smithery configuration)
* - Runtime environment variables
*/
import { z } from "zod";
/**
* Transport mode for the MCP server
*/
export const TransportModeSchema = z.enum(["stdio", "http"]).default("stdio");
/**
* Node environment
*/
export const NodeEnvSchema = z
.enum(["development", "test", "production"])
.optional();
/**
* HTTP Query Configuration Schema
* Configuration that can be passed via HTTP query parameters (Smithery)
*/
export const HttpQueryConfigSchema = z
.object({
LOKALISE_API_KEY: z.string().optional(),
LOKALISE_API_HOSTNAME: z.string().url().optional(),
debug_mode: z.boolean().optional(),
})
.passthrough(); // Allow additional fields for future expansion
/**
* Smithery Configuration Schema
* Configuration passed via base64-encoded config parameter from Smithery
*/
export const SmitheryConfigSchema = z.object({
LOKALISE_API_KEY: z.string(),
LOKALISE_API_HOSTNAME: z
.string()
.url()
.default("https://api.lokalise.com/api2/"),
debug_mode: z.boolean().default(false),
});
/**
* MCP Initialization Configuration Schema
* Configuration passed during MCP client initialization
*/
export const McpInitConfigSchema = z
.object({
LOKALISE_API_KEY: z.string().optional(),
LOKALISE_API_HOSTNAME: z.string().url().optional(),
DEBUG: z.union([z.boolean(), z.string()]).optional(),
debug_mode: z.boolean().optional(),
})
.passthrough();
/**
* Main Runtime Configuration Schema
* Complete configuration for the Lokalise MCP server
*/
export const RuntimeConfigSchema = z.object({
// Core Lokalise Configuration (Required)
LOKALISE_API_KEY: z
.string()
.min(1, "LOKALISE_API_KEY is required")
.describe("Your Lokalise API token"),
// Lokalise API Configuration (Optional)
LOKALISE_API_HOSTNAME: z
.string()
.url()
.default("https://api.lokalise.com/api2/")
.describe("Custom Lokalise API endpoint for enterprise deployments"),
// Server Configuration
TRANSPORT_MODE: TransportModeSchema.describe("Transport mode for MCP server: stdio or http"),
PORT: z
.number()
.int()
.min(1)
.max(65535)
.default(3000)
.describe("HTTP server port (only used in http transport mode)"),
// Debug and Development
DEBUG: z
.union([
z.boolean(),
z.string(), // Can be a pattern like "mcp:*" or "controllers/*"
])
.default(false)
.describe("Debug mode or debug pattern for selective logging"),
debug_mode: z
.boolean()
.default(false)
.describe("Alternative debug flag (from manifest.json)"),
// Environment and Runtime
NODE_ENV: NodeEnvSchema.describe("Node environment (development, test, production)"),
MCP_SERVER_MODE: z
.boolean()
.default(false)
.describe("Indicates if running as MCP server (vs CLI mode)"),
});
/**
* Partial configuration for updates
*/
export const PartialRuntimeConfigSchema = RuntimeConfigSchema.partial();
/**
* Configuration validation functions
*/
/**
* Validate and parse runtime configuration
*/
export function validateRuntimeConfig(config) {
return RuntimeConfigSchema.parse(config);
}
/**
* Safely parse runtime configuration (returns result object)
*/
export function safeValidateRuntimeConfig(config) {
return RuntimeConfigSchema.safeParse(config);
}
/**
* Validate HTTP query configuration
*/
export function validateHttpQueryConfig(config) {
return HttpQueryConfigSchema.parse(config);
}
/**
* Validate Smithery configuration
*/
export function validateSmitheryConfig(config) {
return SmitheryConfigSchema.parse(config);
}
/**
* Validate MCP initialization configuration
*/
export function validateMcpInitConfig(config) {
return McpInitConfigSchema.parse(config);
}
/**
* Default configuration values
*/
export const DEFAULT_CONFIG = {
LOKALISE_API_HOSTNAME: "https://api.lokalise.com/api2/",
TRANSPORT_MODE: "stdio",
PORT: 3000,
DEBUG: false,
debug_mode: false,
MCP_SERVER_MODE: false,
};