@ankimcp/anki-mcp-server 0.18.4-tunnel → 0.18.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/bin/ankimcp.js +1 -10
  2. package/dist/anki-config.service.d.ts +11 -0
  3. package/dist/anki-config.service.js +46 -0
  4. package/dist/anki-config.service.js.map +1 -0
  5. package/dist/app.module.d.ts +2 -4
  6. package/dist/app.module.js +11 -99
  7. package/dist/app.module.js.map +1 -1
  8. package/dist/bootstrap.d.ts +1 -6
  9. package/dist/bootstrap.js +2 -7
  10. package/dist/bootstrap.js.map +1 -1
  11. package/dist/cli.d.ts +0 -4
  12. package/dist/cli.js +6 -20
  13. package/dist/cli.js.map +1 -1
  14. package/dist/http/guards/origin-validation.guard.d.ts +0 -1
  15. package/dist/http/guards/origin-validation.guard.js +3 -5
  16. package/dist/http/guards/origin-validation.guard.js.map +1 -1
  17. package/dist/main-http.js +10 -20
  18. package/dist/main-http.js.map +1 -1
  19. package/dist/main-stdio.js +9 -9
  20. package/dist/main-stdio.js.map +1 -1
  21. package/dist/mcp/primitives/essential/index.d.ts +0 -1
  22. package/dist/mcp/primitives/essential/index.js +1 -8
  23. package/dist/mcp/primitives/essential/index.js.map +1 -1
  24. package/dist/mcp/primitives/essential/tools/add-note.tool.d.ts +1 -1
  25. package/dist/mcp/primitives/gui/index.d.ts +0 -1
  26. package/dist/mcp/primitives/gui/index.js +1 -8
  27. package/dist/mcp/primitives/gui/index.js.map +1 -1
  28. package/dist/services/ngrok.service.d.ts +0 -1
  29. package/dist/services/ngrok.service.js +3 -5
  30. package/dist/services/ngrok.service.js.map +1 -1
  31. package/dist/test-fixtures/mock-data.d.ts +0 -8
  32. package/dist/test-fixtures/mock-data.js +0 -8
  33. package/dist/test-fixtures/mock-data.js.map +1 -1
  34. package/dist/tsconfig.build.tsbuildinfo +1 -1
  35. package/package.json +2 -6
  36. package/dist/app-config.service.d.ts +0 -22
  37. package/dist/app-config.service.js +0 -79
  38. package/dist/app-config.service.js.map +0 -1
  39. package/dist/cli/__tests__/cli-output.manual.d.ts +0 -2
  40. package/dist/cli/__tests__/cli-output.manual.js +0 -13
  41. package/dist/cli/__tests__/cli-output.manual.js.map +0 -1
  42. package/dist/cli/cli-output.d.ts +0 -20
  43. package/dist/cli/cli-output.js +0 -69
  44. package/dist/cli/cli-output.js.map +0 -1
  45. package/dist/cli/index.d.ts +0 -1
  46. package/dist/cli/index.js +0 -18
  47. package/dist/cli/index.js.map +0 -1
  48. package/dist/config/config.factory.d.ts +0 -13
  49. package/dist/config/config.factory.js +0 -32
  50. package/dist/config/config.factory.js.map +0 -1
  51. package/dist/config/config.schema.d.ts +0 -33
  52. package/dist/config/config.schema.js +0 -58
  53. package/dist/config/config.schema.js.map +0 -1
  54. package/dist/config/index.d.ts +0 -3
  55. package/dist/config/index.js +0 -11
  56. package/dist/config/index.js.map +0 -1
  57. package/dist/main-tunnel.d.ts +0 -1
  58. package/dist/main-tunnel.js +0 -26
  59. package/dist/main-tunnel.js.map +0 -1
  60. package/dist/tunnel/commands/index.d.ts +0 -3
  61. package/dist/tunnel/commands/index.js +0 -10
  62. package/dist/tunnel/commands/index.js.map +0 -1
  63. package/dist/tunnel/commands/login.command.d.ts +0 -1
  64. package/dist/tunnel/commands/login.command.js +0 -108
  65. package/dist/tunnel/commands/login.command.js.map +0 -1
  66. package/dist/tunnel/commands/logout.command.d.ts +0 -1
  67. package/dist/tunnel/commands/logout.command.js +0 -26
  68. package/dist/tunnel/commands/logout.command.js.map +0 -1
  69. package/dist/tunnel/commands/tunnel.command.d.ts +0 -1
  70. package/dist/tunnel/commands/tunnel.command.js +0 -185
  71. package/dist/tunnel/commands/tunnel.command.js.map +0 -1
  72. package/dist/tunnel/credentials.service.d.ts +0 -23
  73. package/dist/tunnel/credentials.service.js +0 -152
  74. package/dist/tunnel/credentials.service.js.map +0 -1
  75. package/dist/tunnel/device-flow.service.d.ts +0 -46
  76. package/dist/tunnel/device-flow.service.js +0 -237
  77. package/dist/tunnel/device-flow.service.js.map +0 -1
  78. package/dist/tunnel/in-memory.transport.d.ts +0 -14
  79. package/dist/tunnel/in-memory.transport.js +0 -63
  80. package/dist/tunnel/in-memory.transport.js.map +0 -1
  81. package/dist/tunnel/index.d.ts +0 -6
  82. package/dist/tunnel/index.js +0 -31
  83. package/dist/tunnel/index.js.map +0 -1
  84. package/dist/tunnel/tunnel-mcp.service.d.ts +0 -15
  85. package/dist/tunnel/tunnel-mcp.service.js +0 -100
  86. package/dist/tunnel/tunnel-mcp.service.js.map +0 -1
  87. package/dist/tunnel/tunnel.client.d.ts +0 -60
  88. package/dist/tunnel/tunnel.client.js +0 -386
  89. package/dist/tunnel/tunnel.client.js.map +0 -1
  90. package/dist/tunnel/tunnel.protocol.d.ts +0 -68
  91. package/dist/tunnel/tunnel.protocol.js +0 -26
  92. package/dist/tunnel/tunnel.protocol.js.map +0 -1
  93. package/dist/version.d.ts +0 -2
  94. package/dist/version.js +0 -21
  95. package/dist/version.js.map +0 -1
package/bin/ankimcp.js CHANGED
@@ -16,21 +16,12 @@ if (
16
16
  process.exit(1);
17
17
  }
18
18
 
19
- // Determine mode based on CLI flags
19
+ // Check if --stdio flag is present
20
20
  const isStdioMode = process.argv.includes('--stdio');
21
- const isTunnelMode = process.argv.some(arg =>
22
- arg === '--tunnel' ||
23
- arg.startsWith('--tunnel=') ||
24
- arg === '--login' ||
25
- arg === '--logout'
26
- );
27
21
 
28
22
  if (isStdioMode) {
29
23
  // STDIO mode - for MCP clients like Cursor, Cline, Zed, etc.
30
24
  require('../dist/main-stdio.js');
31
- } else if (isTunnelMode) {
32
- // Tunnel mode - for remote MCP access via tunnel service
33
- require('../dist/main-tunnel.js');
34
25
  } else {
35
26
  // HTTP mode (default) - for web-based AI assistants
36
27
  require('../dist/main-http.js');
@@ -0,0 +1,11 @@
1
+ import { ConfigService } from "@nestjs/config";
2
+ import { IAnkiConfig } from "./mcp/config/anki-config.interface";
3
+ export declare class AnkiConfigService implements IAnkiConfig {
4
+ private configService;
5
+ constructor(configService: ConfigService);
6
+ get ankiConnectUrl(): string;
7
+ get ankiConnectApiVersion(): number;
8
+ get ankiConnectApiKey(): string | undefined;
9
+ get ankiConnectTimeout(): number;
10
+ get readOnly(): boolean;
11
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AnkiConfigService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const config_1 = require("@nestjs/config");
15
+ const mcpb_workarounds_1 = require("./mcp/utils/mcpb-workarounds");
16
+ let AnkiConfigService = class AnkiConfigService {
17
+ configService;
18
+ constructor(configService) {
19
+ this.configService = configService;
20
+ }
21
+ get ankiConnectUrl() {
22
+ return this.configService.get("ANKI_CONNECT_URL", "http://localhost:8765");
23
+ }
24
+ get ankiConnectApiVersion() {
25
+ const version = this.configService.get("ANKI_CONNECT_API_VERSION", "6");
26
+ return parseInt(version, 10);
27
+ }
28
+ get ankiConnectApiKey() {
29
+ const apiKey = this.configService.get("ANKI_CONNECT_API_KEY");
30
+ return (0, mcpb_workarounds_1.sanitizeMcpbConfigValue)(apiKey);
31
+ }
32
+ get ankiConnectTimeout() {
33
+ const timeout = this.configService.get("ANKI_CONNECT_TIMEOUT", "5000");
34
+ return parseInt(timeout, 10);
35
+ }
36
+ get readOnly() {
37
+ const readOnly = this.configService.get("READ_ONLY", "false");
38
+ return readOnly === "true" || readOnly === "1";
39
+ }
40
+ };
41
+ exports.AnkiConfigService = AnkiConfigService;
42
+ exports.AnkiConfigService = AnkiConfigService = __decorate([
43
+ (0, common_1.Injectable)(),
44
+ __metadata("design:paramtypes", [config_1.ConfigService])
45
+ ], AnkiConfigService);
46
+ //# sourceMappingURL=anki-config.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anki-config.service.js","sourceRoot":"","sources":["../src/anki-config.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA+C;AAE/C,mEAAuE;AAMhE,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACR;IAApB,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAEpD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAC3B,kBAAkB,EAClB,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CACpC,0BAA0B,EAC1B,GAAG,CACJ,CAAC;QACF,OAAO,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,iBAAiB;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,sBAAsB,CAAC,CAAC;QACtE,OAAO,IAAA,0CAAuB,EAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,kBAAkB;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CACpC,sBAAsB,EACtB,MAAM,CACP,CAAC;QACF,OAAO,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,QAAQ;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,WAAW,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,GAAG,CAAC;IACjD,CAAC;CACF,CAAA;AAnCY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAEwB,sBAAa;GADrC,iBAAiB,CAmC7B"}
@@ -1,7 +1,5 @@
1
1
  import { DynamicModule } from "@nestjs/common";
2
- import { ConfigInput, CliOverrides } from "./config";
3
2
  export declare class AppModule {
4
- static forStdio(configInput: ConfigInput): DynamicModule;
5
- static forHttp(configInput: ConfigInput): DynamicModule;
6
- static forTunnel(cliOverrides?: CliOverrides): DynamicModule;
3
+ static forStdio(): DynamicModule;
4
+ static forHttp(): DynamicModule;
7
5
  }
@@ -13,20 +13,17 @@ const config_1 = require("@nestjs/config");
13
13
  const mcp_nest_1 = require("@rekog/mcp-nest");
14
14
  const essential_1 = require("./mcp/primitives/essential");
15
15
  const gui_1 = require("./mcp/primitives/gui");
16
- const app_config_service_1 = require("./app-config.service");
17
- const config_2 = require("./config");
16
+ const anki_config_service_1 = require("./anki-config.service");
18
17
  const mcp_icons_1 = require("./mcp/mcp-icons");
19
- const tunnel_mcp_service_1 = require("./tunnel/tunnel-mcp.service");
20
18
  let AppModule = AppModule_1 = class AppModule {
21
- static forStdio(configInput) {
22
- const validatedConfig = config_2.configSchema.parse((0, config_2.transformEnvToConfig)(configInput));
19
+ static forStdio() {
23
20
  return {
24
21
  module: AppModule_1,
25
22
  imports: [
26
23
  config_1.ConfigModule.forRoot({
27
24
  isGlobal: true,
28
25
  cache: true,
29
- load: [() => validatedConfig],
26
+ envFilePath: [".env.local", ".env"],
30
27
  }),
31
28
  mcp_nest_1.McpModule.forRoot({
32
29
  name: process.env.MCP_SERVER_NAME || "anki-mcp-server",
@@ -37,45 +34,27 @@ let AppModule = AppModule_1 = class AppModule {
37
34
  essential_1.McpPrimitivesAnkiEssentialModule.forRoot({
38
35
  ankiConfigProvider: {
39
36
  provide: essential_1.ANKI_CONFIG,
40
- useClass: app_config_service_1.AppConfigService,
41
- },
42
- appConfigProvider: {
43
- provide: config_2.APP_CONFIG,
44
- useValue: validatedConfig,
37
+ useClass: anki_config_service_1.AnkiConfigService,
45
38
  },
46
39
  }),
47
40
  gui_1.McpPrimitivesAnkiGuiModule.forRoot({
48
41
  ankiConfigProvider: {
49
42
  provide: essential_1.ANKI_CONFIG,
50
- useClass: app_config_service_1.AppConfigService,
51
- },
52
- appConfigProvider: {
53
- provide: config_2.APP_CONFIG,
54
- useValue: validatedConfig,
43
+ useClass: anki_config_service_1.AnkiConfigService,
55
44
  },
56
45
  }),
57
46
  ],
58
- providers: [
59
- {
60
- provide: config_2.APP_CONFIG,
61
- useValue: validatedConfig,
62
- },
63
- app_config_service_1.AppConfigService,
64
- ...essential_1.ESSENTIAL_MCP_TOOLS,
65
- ...gui_1.GUI_MCP_TOOLS,
66
- ],
67
- exports: [config_2.APP_CONFIG, app_config_service_1.AppConfigService],
47
+ providers: [anki_config_service_1.AnkiConfigService, ...essential_1.ESSENTIAL_MCP_TOOLS, ...gui_1.GUI_MCP_TOOLS],
68
48
  };
69
49
  }
70
- static forHttp(configInput) {
71
- const validatedConfig = config_2.configSchema.parse((0, config_2.transformEnvToConfig)(configInput));
50
+ static forHttp() {
72
51
  return {
73
52
  module: AppModule_1,
74
53
  imports: [
75
54
  config_1.ConfigModule.forRoot({
76
55
  isGlobal: true,
77
56
  cache: true,
78
- load: [() => validatedConfig],
57
+ envFilePath: [".env.local", ".env"],
79
58
  }),
80
59
  mcp_nest_1.McpModule.forRoot({
81
60
  name: process.env.MCP_SERVER_NAME || "anki-mcp-server",
@@ -87,84 +66,17 @@ let AppModule = AppModule_1 = class AppModule {
87
66
  essential_1.McpPrimitivesAnkiEssentialModule.forRoot({
88
67
  ankiConfigProvider: {
89
68
  provide: essential_1.ANKI_CONFIG,
90
- useClass: app_config_service_1.AppConfigService,
91
- },
92
- appConfigProvider: {
93
- provide: config_2.APP_CONFIG,
94
- useValue: validatedConfig,
95
- },
96
- }),
97
- gui_1.McpPrimitivesAnkiGuiModule.forRoot({
98
- ankiConfigProvider: {
99
- provide: essential_1.ANKI_CONFIG,
100
- useClass: app_config_service_1.AppConfigService,
101
- },
102
- appConfigProvider: {
103
- provide: config_2.APP_CONFIG,
104
- useValue: validatedConfig,
105
- },
106
- }),
107
- ],
108
- providers: [
109
- {
110
- provide: config_2.APP_CONFIG,
111
- useValue: validatedConfig,
112
- },
113
- app_config_service_1.AppConfigService,
114
- ...essential_1.ESSENTIAL_MCP_TOOLS,
115
- ...gui_1.GUI_MCP_TOOLS,
116
- ],
117
- exports: [config_2.APP_CONFIG, app_config_service_1.AppConfigService],
118
- };
119
- }
120
- static forTunnel(cliOverrides) {
121
- const validatedConfig = (0, config_2.loadValidatedConfig)(cliOverrides);
122
- return {
123
- module: AppModule_1,
124
- imports: [
125
- config_1.ConfigModule.forRoot({
126
- isGlobal: true,
127
- cache: true,
128
- load: [() => validatedConfig],
129
- }),
130
- mcp_nest_1.McpModule.forRoot({
131
- name: process.env.MCP_SERVER_NAME || "anki-mcp-server",
132
- version: process.env.MCP_SERVER_VERSION || "1.0.0",
133
- transport: [],
134
- icons: mcp_icons_1.MCP_ICONS,
135
- }),
136
- essential_1.McpPrimitivesAnkiEssentialModule.forRoot({
137
- ankiConfigProvider: {
138
- provide: essential_1.ANKI_CONFIG,
139
- useClass: app_config_service_1.AppConfigService,
140
- },
141
- appConfigProvider: {
142
- provide: config_2.APP_CONFIG,
143
- useValue: validatedConfig,
69
+ useClass: anki_config_service_1.AnkiConfigService,
144
70
  },
145
71
  }),
146
72
  gui_1.McpPrimitivesAnkiGuiModule.forRoot({
147
73
  ankiConfigProvider: {
148
74
  provide: essential_1.ANKI_CONFIG,
149
- useClass: app_config_service_1.AppConfigService,
150
- },
151
- appConfigProvider: {
152
- provide: config_2.APP_CONFIG,
153
- useValue: validatedConfig,
75
+ useClass: anki_config_service_1.AnkiConfigService,
154
76
  },
155
77
  }),
156
78
  ],
157
- providers: [
158
- {
159
- provide: config_2.APP_CONFIG,
160
- useValue: validatedConfig,
161
- },
162
- app_config_service_1.AppConfigService,
163
- tunnel_mcp_service_1.TunnelMcpService,
164
- ...essential_1.ESSENTIAL_MCP_TOOLS,
165
- ...gui_1.GUI_MCP_TOOLS,
166
- ],
167
- exports: [config_2.APP_CONFIG, app_config_service_1.AppConfigService, tunnel_mcp_service_1.TunnelMcpService],
79
+ providers: [anki_config_service_1.AnkiConfigService, ...essential_1.ESSENTIAL_MCP_TOOLS, ...gui_1.GUI_MCP_TOOLS],
168
80
  };
169
81
  }
170
82
  };
@@ -1 +1 @@
1
- {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,2CAA8C;AAC9C,8CAA8D;AAC9D,0DAIoC;AACpC,8CAG8B;AAC9B,+DAA0D;AAC1D,+CAA4C;AAGrC,IAAM,SAAS,iBAAf,MAAM,SAAS;IAIpB,MAAM,CAAC,QAAQ;QACb,OAAO;YACL,MAAM,EAAE,WAAS;YACjB,OAAO,EAAE;gBAEP,qBAAY,CAAC,OAAO,CAAC;oBACnB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,IAAI;oBACX,WAAW,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;iBACpC,CAAC;gBAGF,oBAAS,CAAC,OAAO,CAAC;oBAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,iBAAiB;oBACtD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO;oBAClD,SAAS,EAAE,2BAAgB,CAAC,KAAK;oBACjC,KAAK,EAAE,qBAAS;iBACjB,CAAC;gBAGF,4CAAgC,CAAC,OAAO,CAAC;oBACvC,kBAAkB,EAAE;wBAClB,OAAO,EAAE,uBAAW;wBACpB,QAAQ,EAAE,uCAAiB;qBAC5B;iBACF,CAAC;gBAGF,gCAA0B,CAAC,OAAO,CAAC;oBACjC,kBAAkB,EAAE;wBAClB,OAAO,EAAE,uBAAW;wBACpB,QAAQ,EAAE,uCAAiB;qBAC5B;iBACF,CAAC;aACH;YAED,SAAS,EAAE,CAAC,uCAAiB,EAAE,GAAG,+BAAmB,EAAE,GAAG,mBAAa,CAAC;SACzE,CAAC;IACJ,CAAC;IAKD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,MAAM,EAAE,WAAS;YACjB,OAAO,EAAE;gBAEP,qBAAY,CAAC,OAAO,CAAC;oBACnB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,IAAI;oBACX,WAAW,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;iBACpC,CAAC;gBAGF,oBAAS,CAAC,OAAO,CAAC;oBAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,iBAAiB;oBACtD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO;oBAClD,SAAS,EAAE,2BAAgB,CAAC,eAAe;oBAC3C,WAAW,EAAE,GAAG;oBAChB,KAAK,EAAE,qBAAS;iBACjB,CAAC;gBAGF,4CAAgC,CAAC,OAAO,CAAC;oBACvC,kBAAkB,EAAE;wBAClB,OAAO,EAAE,uBAAW;wBACpB,QAAQ,EAAE,uCAAiB;qBAC5B;iBACF,CAAC;gBAGF,gCAA0B,CAAC,OAAO,CAAC;oBACjC,kBAAkB,EAAE;wBAClB,OAAO,EAAE,uBAAW;wBACpB,QAAQ,EAAE,uCAAiB;qBAC5B;iBACF,CAAC;aACH;YAED,SAAS,EAAE,CAAC,uCAAiB,EAAE,GAAG,+BAAmB,EAAE,GAAG,mBAAa,CAAC;SACzE,CAAC;IACJ,CAAC;CACF,CAAA;AAvFY,8BAAS;oBAAT,SAAS;IADrB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,SAAS,CAuFrB"}
@@ -1,8 +1,3 @@
1
1
  import { LoggerService } from "@nestjs/common";
2
- export declare const LOG_DESTINATION: {
3
- readonly STDOUT: 1;
4
- readonly STDERR: 2;
5
- };
6
- export type LogDestination = (typeof LOG_DESTINATION)[keyof typeof LOG_DESTINATION];
7
- export declare function createPinoLogger(destination: LogDestination, logLevel?: string): import("pino").Logger<never, boolean>;
2
+ export declare function createPinoLogger(destination: 1 | 2): import("pino").Logger<never, boolean>;
8
3
  export declare function createLoggerService(pinoLogger: any): LoggerService;
package/dist/bootstrap.js CHANGED
@@ -1,16 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LOG_DESTINATION = void 0;
4
3
  exports.createPinoLogger = createPinoLogger;
5
4
  exports.createLoggerService = createLoggerService;
6
5
  const pino_1 = require("pino");
7
- exports.LOG_DESTINATION = {
8
- STDOUT: 1,
9
- STDERR: 2,
10
- };
11
- function createPinoLogger(destination, logLevel = "info") {
6
+ function createPinoLogger(destination) {
12
7
  return (0, pino_1.pino)({
13
- level: logLevel,
8
+ level: process.env.LOG_LEVEL || "info",
14
9
  transport: {
15
10
  target: "pino-pretty",
16
11
  options: {
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":";;;AAuBA,4CAgBC;AAQD,kDAkBC;AAhED,+BAA4B;AAKf,QAAA,eAAe,GAAG;IAE7B,MAAM,EAAE,CAAC;IAET,MAAM,EAAE,CAAC;CACD,CAAC;AAYX,SAAgB,gBAAgB,CAC9B,WAA2B,EAC3B,WAAmB,MAAM;IAEzB,OAAO,IAAA,WAAI,EAAC;QACV,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE;YACT,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,WAAW;gBACX,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,YAAY;gBAC3B,MAAM,EAAE,cAAc;aACvB;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAQD,SAAgB,mBAAmB,CAAC,UAAe;IACjD,OAAO;QACL,GAAG,EAAE,CAAC,OAAY,EAAE,OAAgB,EAAE,EAAE;YACtC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,EAAE,CAAC,OAAY,EAAE,KAAc,EAAE,OAAgB,EAAE,EAAE;YACxD,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,EAAE,CAAC,OAAY,EAAE,OAAgB,EAAE,EAAE;YACvC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,EAAE,CAAC,OAAY,EAAE,OAAgB,EAAE,EAAE;YACxC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,CAAC,OAAY,EAAE,OAAgB,EAAE,EAAE;YAC1C,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":";;AASA,4CAaC;AAQD,kDAkBC;AA/CD,+BAA4B;AAQ5B,SAAgB,gBAAgB,CAAC,WAAkB;IACjD,OAAO,IAAA,WAAI,EAAC;QACV,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACtC,SAAS,EAAE;YACT,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,WAAW;gBACX,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,YAAY;gBAC3B,MAAM,EAAE,cAAc;aACvB;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAQD,SAAgB,mBAAmB,CAAC,UAAe;IACjD,OAAO;QACL,GAAG,EAAE,CAAC,OAAY,EAAE,OAAgB,EAAE,EAAE;YACtC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,EAAE,CAAC,OAAY,EAAE,KAAc,EAAE,OAAgB,EAAE,EAAE;YACxD,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,EAAE,CAAC,OAAY,EAAE,OAAgB,EAAE,EAAE;YACvC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,EAAE,CAAC,OAAY,EAAE,OAAgB,EAAE,EAAE;YACxC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,CAAC,OAAY,EAAE,OAAgB,EAAE,EAAE;YAC1C,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/cli.d.ts CHANGED
@@ -4,10 +4,6 @@ export interface CliOptions {
4
4
  ankiConnect: string;
5
5
  ngrok: boolean;
6
6
  readOnly: boolean;
7
- login: string | boolean;
8
- logout: boolean;
9
- tunnel: string | boolean;
10
- debug: boolean;
11
7
  }
12
8
  export declare function checkForUpdates(): void;
13
9
  export declare function parseCliArgs(): CliOptions;
package/dist/cli.js CHANGED
@@ -10,8 +10,6 @@ const commander_1 = require("commander");
10
10
  const fs_1 = require("fs");
11
11
  const path_1 = require("path");
12
12
  const update_notifier_1 = __importDefault(require("update-notifier"));
13
- const cli_output_1 = require("./cli/cli-output");
14
- const version_1 = require("./version");
15
13
  function getPackageJson() {
16
14
  try {
17
15
  return JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, "../package.json"), "utf-8"));
@@ -20,6 +18,9 @@ function getPackageJson() {
20
18
  return { version: "0.0.0", name: "ankimcp" };
21
19
  }
22
20
  }
21
+ function getVersion() {
22
+ return getPackageJson().version;
23
+ }
23
24
  function checkForUpdates() {
24
25
  (0, update_notifier_1.default)({ pkg: getPackageJson() }).notify();
25
26
  }
@@ -28,17 +29,13 @@ function parseCliArgs() {
28
29
  program
29
30
  .name("ankimcp")
30
31
  .description("AnkiMCP Server - Model Context Protocol server for Anki")
31
- .version((0, version_1.getVersion)())
32
+ .version(getVersion())
32
33
  .option("--stdio", "Run in STDIO mode (for MCP clients like Cursor, Cline, Zed)")
33
34
  .option("-p, --port <number>", "Port to listen on (HTTP mode)", "3000")
34
35
  .option("-h, --host <address>", "Host to bind to (HTTP mode)", "127.0.0.1")
35
36
  .option("-a, --anki-connect <url>", "AnkiConnect URL", "http://localhost:8765")
36
37
  .option("--ngrok", "Start ngrok tunnel (requires global ngrok installation)")
37
38
  .option("--read-only", "Run in read-only mode (blocks all write operations)")
38
- .option("--login [url]", "Authenticate with tunnel service")
39
- .option("--logout", "Clear tunnel credentials")
40
- .option("--tunnel [url]", "Connect to tunnel server (default: ws://localhost:3004/tunnel)")
41
- .option("-d, --debug", "Enable debug logging (shows stack traces)")
42
39
  .addHelpText("after", `
43
40
  Transport Modes:
44
41
  HTTP Mode (default): For web-based AI assistants (ChatGPT, Claude.ai)
@@ -77,13 +74,6 @@ Ngrok Setup (one-time):
77
74
  2. Get auth token from: https://dashboard.ngrok.com/get-started/your-authtoken
78
75
  3. Setup: ngrok config add-authtoken <your-token>
79
76
  4. Run: ankimcp --ngrok
80
-
81
- Tunnel Mode:
82
- $ ankimcp --login # Login to default tunnel service
83
- $ ankimcp --login wss://custom.server.com/tunnel # Login to custom server
84
- $ ankimcp --logout # Clear saved credentials
85
- $ ankimcp --tunnel # Connect to localhost:3004
86
- $ ankimcp --tunnel wss://tunnel.ankimcp.ai/tunnel # Production tunnel
87
77
  `);
88
78
  program.parse();
89
79
  const options = program.opts();
@@ -93,21 +83,17 @@ Tunnel Mode:
93
83
  ankiConnect: options.ankiConnect,
94
84
  ngrok: options.ngrok || false,
95
85
  readOnly: options.readOnly || false,
96
- login: options.login ?? false,
97
- logout: options.logout || false,
98
- tunnel: options.tunnel ?? false,
99
- debug: options.debug || false,
100
86
  };
101
87
  }
102
88
  function displayStartupBanner(options, ngrokUrl) {
103
- const version = (0, version_1.getVersion)();
89
+ const version = getVersion();
104
90
  const title = `AnkiMCP HTTP Server v${version}`;
105
91
  const padding = Math.floor((64 - title.length) / 2);
106
92
  const paddedTitle = " ".repeat(padding) + title + " ".repeat(64 - padding - title.length);
107
93
  const readOnlyWarning = options.readOnly
108
94
  ? "\n\n** READ-ONLY MODE ENABLED **\nContent modifications (addNote, deleteNotes, createDeck, etc.) are blocked.\nReview operations (sync, answerCards, suspend) remain available."
109
95
  : "";
110
- cli_output_1.cli.info(`
96
+ console.log(`
111
97
  ╔════════════════════════════════════════════════════════════════╗
112
98
  ║${paddedTitle}║
113
99
  ╚════════════════════════════════════════════════════════════════╝${readOnlyWarning}
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { CanActivate, ExecutionContext } from "@nestjs/common";
2
2
  export declare class OriginValidationGuard implements CanActivate {
3
- private readonly logger;
4
3
  private readonly allowedOrigins;
5
4
  constructor();
6
5
  canActivate(context: ExecutionContext): boolean;
@@ -8,12 +8,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
- var OriginValidationGuard_1;
12
11
  Object.defineProperty(exports, "__esModule", { value: true });
13
12
  exports.OriginValidationGuard = void 0;
14
13
  const common_1 = require("@nestjs/common");
15
- let OriginValidationGuard = OriginValidationGuard_1 = class OriginValidationGuard {
16
- logger = new common_1.Logger(OriginValidationGuard_1.name);
14
+ let OriginValidationGuard = class OriginValidationGuard {
17
15
  allowedOrigins;
18
16
  constructor() {
19
17
  const defaultOrigins = "http://localhost:*,http://127.0.0.1:*,https://localhost:*,https://127.0.0.1:*";
@@ -28,7 +26,7 @@ let OriginValidationGuard = OriginValidationGuard_1 = class OriginValidationGuar
28
26
  }
29
27
  const isAllowed = this.allowedOrigins.some((allowedOrigin) => this.matchesPattern(origin, allowedOrigin));
30
28
  if (!isAllowed) {
31
- this.logger.warn(`Rejected request from unauthorized origin: ${origin}`);
29
+ console.warn(`[OriginValidationGuard] Rejected request from unauthorized origin: ${origin}`);
32
30
  }
33
31
  return isAllowed;
34
32
  }
@@ -47,7 +45,7 @@ let OriginValidationGuard = OriginValidationGuard_1 = class OriginValidationGuar
47
45
  }
48
46
  };
49
47
  exports.OriginValidationGuard = OriginValidationGuard;
50
- exports.OriginValidationGuard = OriginValidationGuard = OriginValidationGuard_1 = __decorate([
48
+ exports.OriginValidationGuard = OriginValidationGuard = __decorate([
51
49
  (0, common_1.Injectable)(),
52
50
  __metadata("design:paramtypes", [])
53
51
  ], OriginValidationGuard);
@@ -1 +1 @@
1
- {"version":3,"file":"origin-validation.guard.js","sourceRoot":"","sources":["../../../src/http/guards/origin-validation.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAKwB;AAiBjB,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IACf,MAAM,GAAG,IAAI,eAAM,CAAC,uBAAqB,CAAC,IAAI,CAAC,CAAC;IAChD,cAAc,CAAW;IAE1C;QACE,MAAM,cAAc,GAClB,+EAA+E,CAAC;QAClF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,cAAc,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,WAAW,CAAC,OAAyB;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAW,CAAC;QAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAGjE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAC3D,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,CAC3C,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IASO,cAAc,CAAC,MAAc,EAAE,OAAe;QAEpD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,OAAO;iBACzB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;iBACrB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AAxDY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;;GACA,qBAAqB,CAwDjC"}
1
+ {"version":3,"file":"origin-validation.guard.js","sourceRoot":"","sources":["../../../src/http/guards/origin-validation.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2E;AAiBpE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACf,cAAc,CAAW;IAE1C;QACE,MAAM,cAAc,GAClB,+EAA+E,CAAC;QAClF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,cAAc,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,WAAW,CAAC,OAAyB;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAW,CAAC;QAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAGjE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAC3D,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,CAC3C,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CACV,sEAAsE,MAAM,EAAE,CAC/E,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IASO,cAAc,CAAC,MAAc,EAAE,OAAe;QAEpD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,OAAO;iBACzB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;iBACrB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AAzDY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;;GACA,qBAAqB,CAyDjC"}
package/dist/main-http.js CHANGED
@@ -5,25 +5,17 @@ const app_module_1 = require("./app.module");
5
5
  const bootstrap_1 = require("./bootstrap");
6
6
  const origin_validation_guard_1 = require("./http/guards/origin-validation.guard");
7
7
  const cli_1 = require("./cli");
8
- const cli_output_1 = require("./cli/cli-output");
9
8
  const ngrok_service_1 = require("./services/ngrok.service");
10
- const config_1 = require("./config");
11
9
  async function bootstrap() {
12
10
  (0, cli_1.checkForUpdates)();
13
11
  const options = (0, cli_1.parseCliArgs)();
14
- (0, cli_output_1.setDebugMode)(options.debug);
15
- const configInput = (0, config_1.buildConfigInput)({
16
- port: options.port,
17
- host: options.host,
18
- ankiConnect: options.ankiConnect,
19
- readOnly: options.readOnly,
20
- tunnel: options.tunnel,
21
- ngrok: options.ngrok,
22
- debug: options.debug,
23
- });
24
- const pinoLogger = (0, bootstrap_1.createPinoLogger)(bootstrap_1.LOG_DESTINATION.STDOUT, configInput.LOG_LEVEL || "info");
12
+ process.env.PORT = options.port.toString();
13
+ process.env.HOST = options.host;
14
+ process.env.ANKI_CONNECT_URL = options.ankiConnect;
15
+ process.env.READ_ONLY = options.readOnly ? "true" : "false";
16
+ const pinoLogger = (0, bootstrap_1.createPinoLogger)(1);
25
17
  const loggerService = (0, bootstrap_1.createLoggerService)(pinoLogger);
26
- const app = await core_1.NestFactory.create(app_module_1.AppModule.forHttp(configInput), {
18
+ const app = await core_1.NestFactory.create(app_module_1.AppModule.forHttp(), {
27
19
  logger: loggerService,
28
20
  bufferLogs: true,
29
21
  });
@@ -37,17 +29,15 @@ async function bootstrap() {
37
29
  ngrokUrl = tunnelInfo.publicUrl;
38
30
  }
39
31
  catch (err) {
40
- cli_output_1.cli.blank();
41
- cli_output_1.cli.error(`Failed to start ngrok: ${err instanceof Error ? err.message : String(err)}`, err instanceof Error ? err : undefined);
42
- cli_output_1.cli.blank();
43
- cli_output_1.cli.info("Server is still running locally without tunnel.");
44
- cli_output_1.cli.blank();
32
+ console.error("\n❌ Failed to start ngrok:");
33
+ console.error(err instanceof Error ? err.message : String(err));
34
+ console.error("\nServer is still running locally without tunnel.\n");
45
35
  }
46
36
  }
47
37
  (0, cli_1.displayStartupBanner)(options, ngrokUrl);
48
38
  }
49
39
  bootstrap().catch((err) => {
50
- cli_output_1.cli.error(`Failed to start MCP HTTP server: ${err instanceof Error ? err.message : String(err)}`, err instanceof Error ? err : undefined);
40
+ console.error("Failed to start MCP HTTP server:", err);
51
41
  process.exit(1);
52
42
  });
53
43
  //# sourceMappingURL=main-http.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"main-http.js","sourceRoot":"","sources":["../src/main-http.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,6CAAyC;AACzC,2CAIqB;AACrB,mFAA8E;AAC9E,+BAA4E;AAC5E,iDAAqD;AACrD,4DAAwD;AACxD,qCAA4C;AAE5C,KAAK,UAAU,SAAS;IAEtB,IAAA,qBAAe,GAAE,CAAC;IAElB,MAAM,OAAO,GAAG,IAAA,kBAAY,GAAE,CAAC;IAG/B,IAAA,yBAAY,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAG5B,MAAM,WAAW,GAAG,IAAA,yBAAgB,EAAC;QACnC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAIH,MAAM,UAAU,GAAG,IAAA,4BAAgB,EACjC,2BAAe,CAAC,MAAM,EACtB,WAAW,CAAC,SAAS,IAAI,MAAM,CAChC,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,+BAAmB,EAAC,UAAU,CAAC,CAAC;IAGtD,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;QACnE,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAGH,GAAG,CAAC,eAAe,CAAC,IAAI,+CAAqB,EAAE,CAAC,CAAC;IAEjD,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAG7C,IAAI,QAA4B,CAAC;IACjC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,4BAAY,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gBAAG,CAAC,KAAK,EAAE,CAAC;YACZ,gBAAG,CAAC,KAAK,CACP,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAC5E,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CACvC,CAAC;YACF,gBAAG,CAAC,KAAK,EAAE,CAAC;YACZ,gBAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC5D,gBAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAGD,IAAA,0BAAoB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACxB,gBAAG,CAAC,KAAK,CACP,oCAAoC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACtF,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CACvC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"main-http.js","sourceRoot":"","sources":["../src/main-http.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,6CAAyC;AACzC,2CAAoE;AACpE,mFAA8E;AAC9E,+BAA4E;AAC5E,4DAAwD;AAExD,KAAK,UAAU,SAAS;IAEtB,IAAA,qBAAe,GAAE,CAAC;IAElB,MAAM,OAAO,GAAG,IAAA,kBAAY,GAAE,CAAC;IAG/B,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAG5D,MAAM,UAAU,GAAG,IAAA,4BAAgB,EAAC,CAAC,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAA,+BAAmB,EAAC,UAAU,CAAC,CAAC;IAGtD,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,OAAO,EAAE,EAAE;QACxD,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAGH,GAAG,CAAC,eAAe,CAAC,IAAI,+CAAqB,EAAE,CAAC,CAAC;IAEjD,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAG7C,IAAI,QAA4B,CAAC;IACjC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,4BAAY,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAGD,IAAA,0BAAoB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -3,8 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const core_1 = require("@nestjs/core");
4
4
  const app_module_1 = require("./app.module");
5
5
  const bootstrap_1 = require("./bootstrap");
6
- const cli_output_1 = require("./cli/cli-output");
7
- const config_1 = require("./config");
8
6
  function parseStdioArgs() {
9
7
  const args = process.argv.slice(2);
10
8
  let readOnly = false;
@@ -22,13 +20,15 @@ function parseStdioArgs() {
22
20
  }
23
21
  async function bootstrap() {
24
22
  const cliOptions = parseStdioArgs();
25
- const configInput = (0, config_1.buildConfigInput)({
26
- ankiConnect: cliOptions.ankiConnect,
27
- readOnly: cliOptions.readOnly,
28
- });
29
- const pinoLogger = (0, bootstrap_1.createPinoLogger)(bootstrap_1.LOG_DESTINATION.STDERR, configInput.LOG_LEVEL || "info");
23
+ if (cliOptions.readOnly) {
24
+ process.env.READ_ONLY = "true";
25
+ }
26
+ if (cliOptions.ankiConnect) {
27
+ process.env.ANKI_CONNECT_URL = cliOptions.ankiConnect;
28
+ }
29
+ const pinoLogger = (0, bootstrap_1.createPinoLogger)(2);
30
30
  const loggerService = (0, bootstrap_1.createLoggerService)(pinoLogger);
31
- await core_1.NestFactory.createApplicationContext(app_module_1.AppModule.forStdio(configInput), {
31
+ await core_1.NestFactory.createApplicationContext(app_module_1.AppModule.forStdio(), {
32
32
  logger: loggerService,
33
33
  bufferLogs: true,
34
34
  });
@@ -41,7 +41,7 @@ async function bootstrap() {
41
41
  await new Promise(() => { });
42
42
  }
43
43
  bootstrap().catch((err) => {
44
- cli_output_1.cli.error(`Failed to start MCP STDIO server: ${err instanceof Error ? err.message : String(err)}`, err instanceof Error ? err : undefined);
44
+ console.error("Failed to start MCP STDIO server:", err);
45
45
  process.exit(1);
46
46
  });
47
47
  //# sourceMappingURL=main-stdio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"main-stdio.js","sourceRoot":"","sources":["../src/main-stdio.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,6CAAyC;AACzC,2CAIqB;AACrB,iDAAuC;AACvC,qCAA4C;AAM5C,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,WAA+B,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;YAC9B,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5D,WAAW,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,SAAS;IAEtB,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IAGpC,MAAM,WAAW,GAAG,IAAA,yBAAgB,EAAC;QACnC,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ;KAC9B,CAAC,CAAC;IAIH,MAAM,UAAU,GAAG,IAAA,4BAAgB,EACjC,2BAAe,CAAC,MAAM,EACtB,WAAW,CAAC,SAAS,IAAI,MAAM,CAChC,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,+BAAmB,EAAC,UAAU,CAAC,CAAC;IAGtD,MAAM,kBAAW,CAAC,wBAAwB,CAAC,sBAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QAC1E,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAGD,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACxB,gBAAG,CAAC,KAAK,CACP,qCAAqC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACvF,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CACvC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"main-stdio.js","sourceRoot":"","sources":["../src/main-stdio.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,6CAAyC;AACzC,2CAAoE;AAMpE,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,WAA+B,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;YAC9B,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5D,WAAW,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,SAAS;IAEtB,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IAGpC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;IACjC,CAAC;IACD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,UAAU,CAAC,WAAW,CAAC;IACxD,CAAC;IAGD,MAAM,UAAU,GAAG,IAAA,4BAAgB,EAAC,CAAC,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAA,+BAAmB,EAAC,UAAU,CAAC,CAAC;IAGtD,MAAM,kBAAW,CAAC,wBAAwB,CAAC,sBAAS,CAAC,QAAQ,EAAE,EAAE;QAC/D,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAGD,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -75,7 +75,6 @@ import { SystemInfoResource } from "./resources/system-info.resource";
75
75
  export declare const ESSENTIAL_MCP_TOOLS: (typeof SyncTool | typeof GetDueCardsTool | typeof GetCardsTool | typeof PresentCardTool | typeof RateCardTool | typeof ModelNamesTool | typeof ModelFieldNamesTool | typeof ModelStylingTool | typeof CreateModelTool | typeof UpdateModelStylingTool | typeof AddNoteTool | typeof AddNotesTool | typeof FindNotesTool | typeof NotesInfoTool | typeof UpdateNoteFieldsTool | typeof DeleteNotesTool | typeof GetTagsTool | typeof ListDecksTool | typeof DeckStatsTool | typeof CreateDeckTool | typeof ChangeDeckTool | typeof RetrieveMediaFileTool | typeof GetMediaFilesNamesTool | typeof StoreMediaFileTool | typeof DeleteMediaFileTool | typeof AddTagsTool | typeof RemoveTagsTool | typeof ReplaceTagsTool | typeof ClearUnusedTagsTool | typeof CollectionStatsTool | typeof ReviewStatsTool | typeof ReviewSessionPrompt | typeof TwentyRulesPrompt | typeof SystemInfoResource)[];
76
76
  export interface McpPrimitivesAnkiEssentialModuleOptions {
77
77
  ankiConfigProvider: Provider;
78
- appConfigProvider?: Provider;
79
78
  }
80
79
  export declare class McpPrimitivesAnkiEssentialModule {
81
80
  static forRoot(options: McpPrimitivesAnkiEssentialModuleOptions): DynamicModule;
@@ -173,16 +173,9 @@ exports.ESSENTIAL_MCP_TOOLS = [
173
173
  const ESSENTIAL_MCP_PRIMITIVES = [anki_connect_client_2.AnkiConnectClient, ...exports.ESSENTIAL_MCP_TOOLS];
174
174
  let McpPrimitivesAnkiEssentialModule = McpPrimitivesAnkiEssentialModule_1 = class McpPrimitivesAnkiEssentialModule {
175
175
  static forRoot(options) {
176
- const providers = [
177
- options.ankiConfigProvider,
178
- ...ESSENTIAL_MCP_PRIMITIVES,
179
- ];
180
- if (options.appConfigProvider) {
181
- providers.push(options.appConfigProvider);
182
- }
183
176
  return {
184
177
  module: McpPrimitivesAnkiEssentialModule_1,
185
- providers,
178
+ providers: [options.ankiConfigProvider, ...ESSENTIAL_MCP_PRIMITIVES],
186
179
  exports: ESSENTIAL_MCP_PRIMITIVES,
187
180
  };
188
181
  }