UNPKG

tak-server-mcp-skyfi

Version:

Model Context Protocol (MCP) server for TAK Server integration with geospatial support

100 lines 4.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getConfig = getConfig; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const joi_1 = __importDefault(require("joi")); const configSchema = joi_1.default.object({ takServer: joi_1.default.object({ url: joi_1.default.string().uri().required(), apiToken: joi_1.default.string().optional(), clientCert: joi_1.default.string().optional(), clientKey: joi_1.default.string().optional(), verifySsl: joi_1.default.boolean().default(true) }).required(), mcp: joi_1.default.object({ transport: joi_1.default.string().valid('stdio', 'http', 'sse').default('stdio'), port: joi_1.default.number().port().when('transport', { is: joi_1.default.string().valid('http', 'sse'), then: joi_1.default.required(), otherwise: joi_1.default.optional() }), auth: joi_1.default.object({ enabled: joi_1.default.boolean().default(false), method: joi_1.default.string().valid('oauth2', 'apikey', 'basic').optional(), oauth: joi_1.default.object({ clientId: joi_1.default.string().required(), clientSecret: joi_1.default.string().required(), authorizationUrl: joi_1.default.string().uri().optional(), tokenUrl: joi_1.default.string().uri().optional(), scope: joi_1.default.string().optional() }).optional() }).optional() }).required(), tools: joi_1.default.object({ enabledTools: joi_1.default.array().items(joi_1.default.string()).optional(), geospatial: joi_1.default.object({ defaultRadius: joi_1.default.number().default(1000), coordinateSystem: joi_1.default.string().valid('wgs84', 'mgrs').default('wgs84'), h3Resolution: joi_1.default.number().min(0).max(15).default(9) }).default(), cache: joi_1.default.object({ enabled: joi_1.default.boolean().default(true), ttl: joi_1.default.number().default(3600), maxSize: joi_1.default.number().default(1000) }).default() }).default() }); function getConfig() { let config = {}; // Load from config file if exists const configPath = process.env.TAK_MCP_CONFIG || path_1.default.join(process.cwd(), 'config.json'); if (fs_1.default.existsSync(configPath)) { try { const fileConfig = JSON.parse(fs_1.default.readFileSync(configPath, 'utf-8')); config = { ...config, ...fileConfig }; } catch (error) { console.error(`Failed to load config from ${configPath}:`, error); } } // Override with environment variables config.takServer = { ...config.takServer, url: process.env.TAK_SERVER_URL || config.takServer?.url || '', apiToken: process.env.TAK_SERVER_API_TOKEN || config.takServer?.apiToken, clientCert: process.env.TAK_SERVER_CLIENT_CERT || config.takServer?.clientCert, clientKey: process.env.TAK_SERVER_CLIENT_KEY || config.takServer?.clientKey, verifySsl: process.env.TAK_SERVER_VERIFY_SSL !== 'false' }; config.mcp = { ...config.mcp, transport: process.env.MCP_TRANSPORT || config.mcp?.transport || 'stdio', port: process.env.MCP_PORT ? parseInt(process.env.MCP_PORT) : config.mcp?.port }; if (process.env.MCP_AUTH_ENABLED === 'true') { config.mcp.auth = { enabled: true, method: process.env.MCP_AUTH_METHOD || config.mcp?.auth?.method || 'apikey' }; if (config.mcp.auth.method === 'oauth2') { config.mcp.auth.oauth = { clientId: process.env.MCP_OAUTH_CLIENT_ID || config.mcp.auth.oauth?.clientId || '', clientSecret: process.env.MCP_OAUTH_CLIENT_SECRET || config.mcp.auth.oauth?.clientSecret || '', authorizationUrl: process.env.MCP_OAUTH_AUTH_URL || config.mcp.auth.oauth?.authorizationUrl, tokenUrl: process.env.MCP_OAUTH_TOKEN_URL || config.mcp.auth.oauth?.tokenUrl, scope: process.env.MCP_OAUTH_SCOPE || config.mcp.auth.oauth?.scope }; } } // Validate configuration const { error, value } = configSchema.validate(config); if (error) { throw new Error(`Invalid configuration: ${error.message}`); } return value; } //# sourceMappingURL=index.js.map