@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
JavaScript
;
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