UNPKG

@ankimcp/anki-mcp-server

Version:

Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards

95 lines • 3.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.configSchema = exports.DEFAULT_ALLOWED_ORIGINS = void 0; exports.transformEnvToConfig = transformEnvToConfig; const zod_1 = require("zod"); const version_1 = require("../version.js"); exports.DEFAULT_ALLOWED_ORIGINS = [ "http://localhost:*", "http://127.0.0.1:*", "https://localhost:*", "https://127.0.0.1:*", ]; function emptyStringToUndefined(val) { if (typeof val === "string" && val.trim() === "") return undefined; return val; } function parseCsvList(val) { if (val === undefined || val === null) return undefined; if (Array.isArray(val)) return val; if (typeof val !== "string") return undefined; const items = val .split(",") .map((item) => item.trim()) .filter((item) => item.length > 0); return items; } exports.configSchema = zod_1.z.object({ port: zod_1.z.preprocess(emptyStringToUndefined, zod_1.z.coerce.number().int().positive().default(3000)), host: zod_1.z.preprocess(emptyStringToUndefined, zod_1.z.string().default("127.0.0.1")), nodeEnv: zod_1.z.enum(["development", "production", "test"]).default("development"), mcpServer: zod_1.z .object({ name: zod_1.z.string().default("anki-mcp-server"), version: zod_1.z.string().default(() => (0, version_1.getVersion)()), }) .prefault({}), allowedHosts: zod_1.z.preprocess(parseCsvList, zod_1.z.array(zod_1.z.string())).default([]), allowedOrigins: zod_1.z .preprocess(parseCsvList, zod_1.z.array(zod_1.z.string())) .default(exports.DEFAULT_ALLOWED_ORIGINS), ankiConnect: zod_1.z.object({ url: zod_1.z.preprocess(emptyStringToUndefined, zod_1.z.string().url().default("http://localhost:8765")), apiKey: zod_1.z.string().optional(), apiVersion: zod_1.z.preprocess(emptyStringToUndefined, zod_1.z.coerce.number().int().positive().default(6)), timeout: zod_1.z.preprocess(emptyStringToUndefined, zod_1.z.coerce.number().int().positive().default(5000)), }), auth: zod_1.z.object({ clientId: zod_1.z.string().default("ankimcp-cli"), }), tunnel: zod_1.z.object({ serverUrl: zod_1.z.preprocess(emptyStringToUndefined, zod_1.z.string().url().default("wss://tunnel.ankimcp.ai")), }), readOnly: zod_1.z .preprocess((val) => { if (val === "true" || val === "1") return true; if (val === "false" || val === "0" || val === undefined || val === "") return false; return val; }, zod_1.z.boolean()) .default(false), logLevel: zod_1.z.enum(["debug", "info", "warn", "error"]).default("info"), }); function transformEnvToConfig(env) { return { port: env.PORT, host: env.HOST, nodeEnv: env.NODE_ENV, mcpServer: { name: env.MCP_SERVER_NAME, version: env.MCP_SERVER_VERSION, }, allowedHosts: env.ALLOWED_HOSTS, allowedOrigins: env.ALLOWED_ORIGINS, ankiConnect: { url: env.ANKI_CONNECT_URL, apiKey: env.ANKI_CONNECT_API_KEY, apiVersion: env.ANKI_CONNECT_API_VERSION, timeout: env.ANKI_CONNECT_TIMEOUT, }, auth: { clientId: env.TUNNEL_AUTH_CLIENT_ID, }, tunnel: { serverUrl: env.TUNNEL_SERVER_URL, }, readOnly: env.READ_ONLY, logLevel: env.LOG_LEVEL, }; } //# sourceMappingURL=config.schema.js.map