creditkarma-mcp 1.2.0 → 2.0.0

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.
package/dist/bundle.js CHANGED
@@ -10505,7 +10505,6 @@ ZodNaN.create = (params) => {
10505
10505
  ...processCreateParams(params)
10506
10506
  });
10507
10507
  };
10508
- var BRAND = Symbol("zod_brand");
10509
10508
  var ZodBranded = class extends ZodType {
10510
10509
  _parse(input) {
10511
10510
  const { ctx } = this._processInputParams(input);
@@ -10730,7 +10729,6 @@ function $constructor(name, initializer3, params) {
10730
10729
  Object.defineProperty(_, "name", { value: name });
10731
10730
  return _;
10732
10731
  }
10733
- var $brand = Symbol("zod_brand");
10734
10732
  var $ZodAsyncError = class extends Error {
10735
10733
  constructor() {
10736
10734
  super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
@@ -10877,7 +10875,7 @@ function floatSafeRemainder2(val, step) {
10877
10875
  const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", ""));
10878
10876
  return valInt % stepInt / 10 ** decCount;
10879
10877
  }
10880
- var EVALUATING = Symbol("evaluating");
10878
+ var EVALUATING = /* @__PURE__ */ Symbol("evaluating");
10881
10879
  function defineLazy(object3, key, getter) {
10882
10880
  let value = void 0;
10883
10881
  Object.defineProperty(object3, key, {
@@ -14404,8 +14402,6 @@ function en_default2() {
14404
14402
 
14405
14403
  // node_modules/zod/v4/core/registries.js
14406
14404
  var _a;
14407
- var $output = Symbol("ZodOutput");
14408
- var $input = Symbol("ZodInput");
14409
14405
  var $ZodRegistry = class {
14410
14406
  constructor() {
14411
14407
  this._map = /* @__PURE__ */ new WeakMap();
@@ -17549,10 +17545,9 @@ var ProgressTokenSchema = union([string2(), number2().int()]);
17549
17545
  var CursorSchema = string2();
17550
17546
  var TaskCreationParamsSchema = looseObject({
17551
17547
  /**
17552
- * Time in milliseconds to keep task results available after completion.
17553
- * If null, the task has unlimited lifetime until manually cleaned up.
17548
+ * Requested duration in milliseconds to retain task from creation.
17554
17549
  */
17555
- ttl: union([number2(), _null3()]).optional(),
17550
+ ttl: number2().optional(),
17556
17551
  /**
17557
17552
  * Time in milliseconds to wait between task status requests.
17558
17553
  */
@@ -17852,7 +17847,11 @@ var ClientCapabilitiesSchema = object2({
17852
17847
  /**
17853
17848
  * Present if the client supports task creation.
17854
17849
  */
17855
- tasks: ClientTasksCapabilitySchema.optional()
17850
+ tasks: ClientTasksCapabilitySchema.optional(),
17851
+ /**
17852
+ * Extensions that the client supports. Keys are extension identifiers (vendor-prefix/extension-name).
17853
+ */
17854
+ extensions: record(string2(), AssertObjectSchema).optional()
17856
17855
  });
17857
17856
  var InitializeRequestParamsSchema = BaseRequestParamsSchema.extend({
17858
17857
  /**
@@ -17913,7 +17912,11 @@ var ServerCapabilitiesSchema = object2({
17913
17912
  /**
17914
17913
  * Present if the server supports task creation.
17915
17914
  */
17916
- tasks: ServerTasksCapabilitySchema.optional()
17915
+ tasks: ServerTasksCapabilitySchema.optional(),
17916
+ /**
17917
+ * Extensions that the server supports. Keys are extension identifiers (vendor-prefix/extension-name).
17918
+ */
17919
+ extensions: record(string2(), AssertObjectSchema).optional()
17917
17920
  });
17918
17921
  var InitializeResultSchema = ResultSchema.extend({
17919
17922
  /**
@@ -18105,6 +18108,12 @@ var ResourceSchema = object2({
18105
18108
  * The MIME type of this resource, if known.
18106
18109
  */
18107
18110
  mimeType: optional(string2()),
18111
+ /**
18112
+ * The size of the raw resource content, in bytes (i.e., before base64 encoding or any tokenization), if known.
18113
+ *
18114
+ * This can be used by Hosts to display file sizes and estimate context window usage.
18115
+ */
18116
+ size: optional(number2()),
18108
18117
  /**
18109
18118
  * Optional annotations for the client.
18110
18119
  */
@@ -19050,9 +19059,6 @@ function isTerminal(status) {
19050
19059
  return status === "completed" || status === "failed" || status === "cancelled";
19051
19060
  }
19052
19061
 
19053
- // node_modules/zod-to-json-schema/dist/esm/Options.js
19054
- var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
19055
-
19056
19062
  // node_modules/zod-to-json-schema/dist/esm/parsers/string.js
19057
19063
  var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
19058
19064
 
@@ -19289,6 +19295,10 @@ var Protocol = class {
19289
19295
  this._progressHandlers.clear();
19290
19296
  this._taskProgressTokens.clear();
19291
19297
  this._pendingDebouncedNotifications.clear();
19298
+ for (const info of this._timeoutInfo.values()) {
19299
+ clearTimeout(info.timeoutId);
19300
+ }
19301
+ this._timeoutInfo.clear();
19292
19302
  for (const controller of this._requestHandlerAbortControllers.values()) {
19293
19303
  controller.abort();
19294
19304
  }
@@ -19419,7 +19429,9 @@ var Protocol = class {
19419
19429
  await capturedTransport?.send(errorResponse);
19420
19430
  }
19421
19431
  }).catch((error2) => this._onerror(new Error(`Failed to send response: ${error2}`))).finally(() => {
19422
- this._requestHandlerAbortControllers.delete(request.id);
19432
+ if (this._requestHandlerAbortControllers.get(request.id) === abortController) {
19433
+ this._requestHandlerAbortControllers.delete(request.id);
19434
+ }
19423
19435
  });
19424
19436
  }
19425
19437
  _onprogress(notification) {
@@ -21512,10 +21524,10 @@ var sqlToolDefinitions = [
21512
21524
  ];
21513
21525
 
21514
21526
  // src/index.ts
21527
+ var __dirname = dirname4(fileURLToPath2(import.meta.url));
21515
21528
  try {
21516
21529
  const { config: config2 } = await import("dotenv");
21517
- const __dirname2 = dirname4(fileURLToPath2(import.meta.url));
21518
- config2({ path: join3(__dirname2, "..", ".env"), override: false });
21530
+ config2({ path: join3(__dirname, "..", ".env"), override: false });
21519
21531
  } catch {
21520
21532
  }
21521
21533
  var allTools = [
@@ -21546,7 +21558,7 @@ async function main() {
21546
21558
  mcpJsonPath
21547
21559
  };
21548
21560
  const server = new Server(
21549
- { name: "creditkarma-mcp", version: "1.1.0" },
21561
+ { name: "creditkarma-mcp", version: "2.0.0" },
21550
21562
  { capabilities: { tools: {} } }
21551
21563
  );
21552
21564
  server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: allTools }));
package/dist/index.js CHANGED
@@ -4,21 +4,21 @@ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprot
4
4
  import { homedir } from 'os';
5
5
  import { join, dirname } from 'path';
6
6
  import { fileURLToPath } from 'url';
7
+ import { CreditKarmaClient } from './client.js';
8
+ import { initDb } from './db.js';
9
+ import { authToolDefinitions, handleSetSession } from './tools/auth.js';
10
+ import { syncToolDefinitions, handleSyncTransactions } from './tools/sync.js';
11
+ import { queryToolDefinitions, handleListTransactions, handleGetRecentTransactions, handleGetSpendingByCategory, handleGetSpendingByMerchant, handleGetAccountSummary } from './tools/query.js';
12
+ import { sqlToolDefinitions, handleQuerySql } from './tools/sql.js';
13
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
14
  // Load .env for local dev; silently skip if dotenv is unavailable (e.g. mcpb bundle)
8
15
  try {
9
16
  const { config } = await import('dotenv');
10
- const __dirname = dirname(fileURLToPath(import.meta.url));
11
17
  config({ path: join(__dirname, '..', '.env'), override: false });
12
18
  }
13
19
  catch {
14
20
  // not available — rely on process.env (mcpb sets credentials via mcp_config.env)
15
21
  }
16
- import { CreditKarmaClient } from './client.js';
17
- import { initDb } from './db.js';
18
- import { authToolDefinitions, handleSetSession } from './tools/auth.js';
19
- import { syncToolDefinitions, handleSyncTransactions } from './tools/sync.js';
20
- import { queryToolDefinitions, handleListTransactions, handleGetRecentTransactions, handleGetSpendingByCategory, handleGetSpendingByMerchant, handleGetAccountSummary } from './tools/query.js';
21
- import { sqlToolDefinitions, handleQuerySql } from './tools/sql.js';
22
22
  const allTools = [
23
23
  ...authToolDefinitions,
24
24
  ...syncToolDefinitions,
@@ -47,7 +47,7 @@ async function main() {
47
47
  db: initDb(dbPath),
48
48
  mcpJsonPath
49
49
  };
50
- const server = new Server({ name: 'creditkarma-mcp', version: '1.1.0' }, { capabilities: { tools: {} } });
50
+ const server = new Server({ name: 'creditkarma-mcp', version: '2.0.0' }, { capabilities: { tools: {} } });
51
51
  server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: allTools }));
52
52
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
53
53
  const { name, arguments: args = {} } = request.params;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "creditkarma-mcp",
3
- "version": "1.2.0",
3
+ "version": "2.0.0",
4
4
  "description": "MCP server for Credit Karma — natural-language access to your transactions, spending, and accounts",
5
5
  "author": "Claude Sonnet 4.6 (AI) <https://www.anthropic.com/claude>",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "https://github.com/chrischall/creditkarma-mcp"
8
+ "url": "git+https://github.com/chrischall/creditkarma-mcp.git"
9
9
  },
10
10
  "type": "module",
11
11
  "bin": {
@@ -25,14 +25,14 @@
25
25
  "test:coverage": "vitest run --coverage"
26
26
  },
27
27
  "dependencies": {
28
- "@modelcontextprotocol/sdk": "^1.27.1",
29
- "dotenv": "^17.3.1"
28
+ "@modelcontextprotocol/sdk": "^1.29.0",
29
+ "dotenv": "^17.4.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@types/node": "^24.12.0",
33
- "@vitest/coverage-v8": "^4.1.0",
34
- "esbuild": "^0.25.0",
35
- "typescript": "^5.8.0",
36
- "vitest": "^4.1.0"
32
+ "@types/node": "^25.5.2",
33
+ "@vitest/coverage-v8": "^4.1.2",
34
+ "esbuild": "^0.27.0",
35
+ "typescript": "^6.0.2",
36
+ "vitest": "^4.1.2"
37
37
  }
38
38
  }