UNPKG

@ankimcp/anki-mcp-server

Version:

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

56 lines • 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@nestjs/core"); const mcp_nest_1 = require("@rekog/mcp-nest"); const app_module_1 = require("./app.module"); const bootstrap_1 = require("./bootstrap"); const cli_output_1 = require("./cli/cli-output"); const config_1 = require("./config"); function parseStdioArgs() { const args = process.argv.slice(2); let readOnly = false; let ankiConnect; for (let i = 0; i < args.length; i++) { if (args[i] === "--read-only") { readOnly = true; } else if (args[i] === "--anki-connect" || args[i] === "-a") { ankiConnect = args[i + 1]; i++; if (ankiConnect === "") { throw new Error("AnkiConnect URL cannot be empty. Omit --anki-connect/-a to use the default (http://localhost:8765) or the ANKI_CONNECT_URL env var."); } } } return { readOnly, ankiConnect }; } const cli = (0, cli_output_1.createCli)(false); async function bootstrap() { const cliOptions = parseStdioArgs(); const configInput = (0, config_1.buildConfigInput)({ ankiConnect: cliOptions.ankiConnect, readOnly: cliOptions.readOnly, }); const pinoLogger = (0, bootstrap_1.createPinoLogger)(bootstrap_1.LOG_DESTINATION.STDERR, configInput.LOG_LEVEL || "info"); const loggerService = (0, bootstrap_1.createLoggerService)(pinoLogger); const validatedConfig = config_1.configSchema.parse((0, config_1.transformEnvToConfig)(configInput)); const mcp = (0, bootstrap_1.createMcpStrategy)([new mcp_nest_1.StdioTransport()], validatedConfig.mcpServer); const app = await core_1.NestFactory.createMicroservice(app_module_1.AppModule.forStdio(mcp, configInput), { strategy: mcp, logger: loggerService, bufferLogs: true, }); await app.listen(); if (cliOptions.readOnly) { pinoLogger.info("MCP STDIO server started in READ-ONLY mode"); } else { pinoLogger.info("MCP STDIO server started successfully"); } await new Promise(() => { }); } bootstrap().catch((err) => { cli.error(`Failed to start MCP STDIO server: ${err instanceof Error ? err.message : String(err)}`, err instanceof Error ? err : undefined); process.exit(1); }); //# sourceMappingURL=main-stdio.js.map