@dizzlkheinz/ynab-mcpb 0.18.4 → 0.19.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/CLAUDE.md +87 -8
- package/bin/ynab-mcp-server.cjs +2 -2
- package/bin/ynab-mcp-server.js +3 -3
- package/biome.json +39 -0
- package/dist/bundle/index.cjs +67 -67
- package/dist/index.d.ts +1 -1
- package/dist/index.js +27 -27
- package/dist/server/YNABMCPServer.d.ts +3 -4
- package/dist/server/YNABMCPServer.js +111 -116
- package/dist/server/budgetResolver.d.ts +6 -5
- package/dist/server/budgetResolver.js +46 -36
- package/dist/server/cacheKeys.js +6 -6
- package/dist/server/cacheManager.js +14 -11
- package/dist/server/completions.d.ts +2 -2
- package/dist/server/completions.js +20 -15
- package/dist/server/config.d.ts +10 -5
- package/dist/server/config.js +24 -7
- package/dist/server/deltaCache.d.ts +2 -2
- package/dist/server/deltaCache.js +22 -16
- package/dist/server/deltaCache.merge.d.ts +2 -2
- package/dist/server/diagnostics.d.ts +4 -4
- package/dist/server/diagnostics.js +38 -32
- package/dist/server/errorHandler.d.ts +5 -12
- package/dist/server/errorHandler.js +219 -217
- package/dist/server/prompts.d.ts +2 -2
- package/dist/server/prompts.js +45 -45
- package/dist/server/rateLimiter.js +4 -4
- package/dist/server/requestLogger.d.ts +1 -1
- package/dist/server/requestLogger.js +40 -35
- package/dist/server/resources.d.ts +3 -3
- package/dist/server/resources.js +55 -52
- package/dist/server/responseFormatter.js +6 -6
- package/dist/server/securityMiddleware.d.ts +2 -2
- package/dist/server/securityMiddleware.js +22 -20
- package/dist/server/serverKnowledgeStore.js +1 -1
- package/dist/server/toolRegistry.d.ts +3 -3
- package/dist/server/toolRegistry.js +47 -40
- package/dist/tools/__tests__/deltaTestUtils.d.ts +3 -3
- package/dist/tools/__tests__/deltaTestUtils.js +2 -2
- package/dist/tools/accountTools.d.ts +9 -8
- package/dist/tools/accountTools.js +47 -47
- package/dist/tools/adapters.d.ts +13 -8
- package/dist/tools/adapters.js +21 -11
- package/dist/tools/budgetTools.d.ts +8 -7
- package/dist/tools/budgetTools.js +22 -22
- package/dist/tools/categoryTools.d.ts +9 -8
- package/dist/tools/categoryTools.js +68 -59
- package/dist/tools/compareTransactions/formatter.d.ts +3 -3
- package/dist/tools/compareTransactions/formatter.js +9 -9
- package/dist/tools/compareTransactions/index.d.ts +6 -6
- package/dist/tools/compareTransactions/index.js +58 -43
- package/dist/tools/compareTransactions/matcher.d.ts +1 -1
- package/dist/tools/compareTransactions/matcher.js +28 -15
- package/dist/tools/compareTransactions/parser.d.ts +2 -2
- package/dist/tools/compareTransactions/parser.js +144 -138
- package/dist/tools/compareTransactions/types.d.ts +4 -4
- package/dist/tools/compareTransactions.d.ts +1 -1
- package/dist/tools/compareTransactions.js +1 -1
- package/dist/tools/deltaFetcher.d.ts +2 -2
- package/dist/tools/deltaFetcher.js +16 -15
- package/dist/tools/deltaSupport.d.ts +4 -4
- package/dist/tools/deltaSupport.js +35 -41
- package/dist/tools/exportTransactions.d.ts +5 -4
- package/dist/tools/exportTransactions.js +61 -59
- package/dist/tools/monthTools.d.ts +7 -6
- package/dist/tools/monthTools.js +31 -29
- package/dist/tools/payeeTools.d.ts +7 -6
- package/dist/tools/payeeTools.js +28 -28
- package/dist/tools/reconcileAdapter.d.ts +2 -2
- package/dist/tools/reconcileAdapter.js +19 -12
- package/dist/tools/reconciliation/analyzer.d.ts +4 -4
- package/dist/tools/reconciliation/analyzer.js +73 -59
- package/dist/tools/reconciliation/csvParser.d.ts +3 -3
- package/dist/tools/reconciliation/csvParser.js +128 -104
- package/dist/tools/reconciliation/executor.d.ts +4 -4
- package/dist/tools/reconciliation/executor.js +148 -109
- package/dist/tools/reconciliation/index.d.ts +10 -10
- package/dist/tools/reconciliation/index.js +96 -83
- package/dist/tools/reconciliation/matcher.d.ts +3 -3
- package/dist/tools/reconciliation/matcher.js +17 -16
- package/dist/tools/reconciliation/payeeNormalizer.js +19 -8
- package/dist/tools/reconciliation/recommendationEngine.d.ts +1 -1
- package/dist/tools/reconciliation/recommendationEngine.js +40 -40
- package/dist/tools/reconciliation/reportFormatter.d.ts +2 -2
- package/dist/tools/reconciliation/reportFormatter.js +59 -58
- package/dist/tools/reconciliation/signDetector.d.ts +1 -1
- package/dist/tools/reconciliation/types.d.ts +16 -16
- package/dist/tools/reconciliation/ynabAdapter.d.ts +2 -2
- package/dist/tools/schemas/common.d.ts +1 -1
- package/dist/tools/schemas/common.js +1 -1
- package/dist/tools/schemas/outputs/accountOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/accountOutputs.js +24 -18
- package/dist/tools/schemas/outputs/budgetOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/budgetOutputs.js +14 -11
- package/dist/tools/schemas/outputs/categoryOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/categoryOutputs.js +49 -29
- package/dist/tools/schemas/outputs/comparisonOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/comparisonOutputs.js +12 -12
- package/dist/tools/schemas/outputs/index.d.ts +14 -14
- package/dist/tools/schemas/outputs/index.js +14 -14
- package/dist/tools/schemas/outputs/monthOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/monthOutputs.js +56 -41
- package/dist/tools/schemas/outputs/payeeOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/payeeOutputs.js +10 -10
- package/dist/tools/schemas/outputs/reconciliationOutputs.d.ts +2 -2
- package/dist/tools/schemas/outputs/reconciliationOutputs.js +45 -45
- package/dist/tools/schemas/outputs/transactionMutationOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/transactionMutationOutputs.js +28 -22
- package/dist/tools/schemas/outputs/transactionOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/transactionOutputs.js +43 -35
- package/dist/tools/schemas/outputs/utilityOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/utilityOutputs.js +5 -3
- package/dist/tools/schemas/shared/commonOutputs.d.ts +1 -1
- package/dist/tools/schemas/shared/commonOutputs.js +15 -9
- package/dist/tools/transactionReadTools.d.ts +11 -0
- package/dist/tools/transactionReadTools.js +202 -0
- package/dist/tools/transactionSchemas.d.ts +7 -7
- package/dist/tools/transactionSchemas.js +77 -57
- package/dist/tools/transactionTools.d.ts +6 -24
- package/dist/tools/transactionTools.js +7 -1499
- package/dist/tools/transactionUtils.d.ts +6 -6
- package/dist/tools/transactionUtils.js +78 -63
- package/dist/tools/transactionWriteTools.d.ts +20 -0
- package/dist/tools/transactionWriteTools.js +1342 -0
- package/dist/tools/utilityTools.d.ts +5 -4
- package/dist/tools/utilityTools.js +11 -11
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.js +6 -6
- package/dist/types/reconciliation.d.ts +1 -1
- package/dist/types/toolRegistration.d.ts +14 -12
- package/dist/utils/amountUtils.js +1 -1
- package/dist/utils/dateUtils.js +4 -4
- package/dist/utils/errors.d.ts +3 -3
- package/dist/utils/errors.js +4 -4
- package/dist/utils/money.d.ts +2 -2
- package/dist/utils/money.js +8 -8
- package/dist/utils/validationError.d.ts +1 -1
- package/dist/utils/validationError.js +1 -1
- package/docs/assets/examples/reconciliation-with-recommendations.json +66 -66
- package/docs/assets/schemas/reconciliation-v2.json +360 -336
- package/esbuild.config.mjs +53 -50
- package/meta.json +12548 -12548
- package/package.json +98 -111
- package/scripts/analyze-bundle.mjs +33 -30
- package/scripts/create-pr-description.js +169 -120
- package/scripts/run-all-tests.js +178 -169
- package/scripts/run-domain-integration-tests.js +28 -18
- package/scripts/run-generate-mcpb.js +19 -17
- package/scripts/run-throttled-integration-tests.js +92 -83
- package/scripts/test-delta-params.mjs +149 -120
- package/scripts/test-recommendations.ts +36 -32
- package/scripts/tmpTransaction.ts +80 -43
- package/scripts/validate-env.js +98 -91
- package/scripts/verify-build.js +78 -76
- package/src/__tests__/comprehensive.integration.test.ts +1281 -1154
- package/src/__tests__/performance.test.ts +723 -671
- package/src/__tests__/setup.ts +442 -395
- package/src/__tests__/smoke.e2e.test.ts +41 -39
- package/src/__tests__/testRunner.ts +314 -295
- package/src/__tests__/testUtils.ts +456 -364
- package/src/__tests__/tools/reconciliation/csvParser.integration.test.ts +109 -107
- package/src/__tests__/tools/reconciliation/real-world.integration.test.ts +41 -41
- package/src/index.ts +68 -59
- package/src/server/CLAUDE.md +480 -0
- package/src/server/YNABMCPServer.ts +821 -794
- package/src/server/__tests__/YNABMCPServer.integration.test.ts +929 -893
- package/src/server/__tests__/YNABMCPServer.test.ts +903 -899
- package/src/server/__tests__/budgetResolver.test.ts +466 -423
- package/src/server/__tests__/cacheManager.test.ts +891 -874
- package/src/server/__tests__/completions.integration.test.ts +115 -106
- package/src/server/__tests__/completions.test.ts +334 -313
- package/src/server/__tests__/config.test.ts +98 -86
- package/src/server/__tests__/deltaCache.merge.test.ts +774 -703
- package/src/server/__tests__/deltaCache.swr.test.ts +198 -153
- package/src/server/__tests__/deltaCache.test.ts +946 -759
- package/src/server/__tests__/diagnostics.test.ts +825 -792
- package/src/server/__tests__/errorHandler.integration.test.ts +512 -462
- package/src/server/__tests__/errorHandler.test.ts +402 -397
- package/src/server/__tests__/prompts.test.ts +424 -347
- package/src/server/__tests__/rateLimiter.test.ts +313 -309
- package/src/server/__tests__/requestLogger.test.ts +443 -403
- package/src/server/__tests__/resources.template.test.ts +196 -185
- package/src/server/__tests__/resources.test.ts +294 -288
- package/src/server/__tests__/security.integration.test.ts +487 -421
- package/src/server/__tests__/securityMiddleware.test.ts +519 -444
- package/src/server/__tests__/server-startup.integration.test.ts +509 -490
- package/src/server/__tests__/serverKnowledgeStore.test.ts +174 -173
- package/src/server/__tests__/toolRegistration.test.ts +239 -210
- package/src/server/__tests__/toolRegistry.test.ts +907 -845
- package/src/server/budgetResolver.ts +221 -181
- package/src/server/cacheKeys.ts +6 -6
- package/src/server/cacheManager.ts +498 -484
- package/src/server/completions.ts +267 -243
- package/src/server/config.ts +35 -14
- package/src/server/deltaCache.merge.ts +146 -128
- package/src/server/deltaCache.ts +352 -309
- package/src/server/diagnostics.ts +257 -242
- package/src/server/errorHandler.ts +747 -744
- package/src/server/prompts.ts +181 -176
- package/src/server/rateLimiter.ts +131 -129
- package/src/server/requestLogger.ts +350 -322
- package/src/server/resources.ts +442 -374
- package/src/server/responseFormatter.ts +41 -37
- package/src/server/securityMiddleware.ts +223 -205
- package/src/server/serverKnowledgeStore.ts +67 -67
- package/src/server/toolRegistry.ts +508 -474
- package/src/tools/CLAUDE.md +604 -0
- package/src/tools/__tests__/accountTools.delta.integration.test.ts +128 -111
- package/src/tools/__tests__/accountTools.integration.test.ts +129 -111
- package/src/tools/__tests__/accountTools.test.ts +685 -638
- package/src/tools/__tests__/adapters.test.ts +142 -108
- package/src/tools/__tests__/budgetTools.delta.integration.test.ts +73 -73
- package/src/tools/__tests__/budgetTools.integration.test.ts +132 -124
- package/src/tools/__tests__/budgetTools.test.ts +442 -413
- package/src/tools/__tests__/categoryTools.delta.integration.test.ts +76 -68
- package/src/tools/__tests__/categoryTools.integration.test.ts +314 -288
- package/src/tools/__tests__/categoryTools.test.ts +656 -625
- package/src/tools/__tests__/compareTransactions/formatter.test.ts +535 -462
- package/src/tools/__tests__/compareTransactions/index.test.ts +378 -358
- package/src/tools/__tests__/compareTransactions/matcher.test.ts +497 -398
- package/src/tools/__tests__/compareTransactions/parser.test.ts +765 -747
- package/src/tools/__tests__/compareTransactions.test.ts +352 -332
- package/src/tools/__tests__/compareTransactions.window.test.ts +150 -146
- package/src/tools/__tests__/deltaFetcher.scheduled.integration.test.ts +69 -65
- package/src/tools/__tests__/deltaFetcher.test.ts +325 -265
- package/src/tools/__tests__/deltaSupport.test.ts +211 -184
- package/src/tools/__tests__/deltaTestUtils.ts +37 -33
- package/src/tools/__tests__/exportTransactions.test.ts +205 -200
- package/src/tools/__tests__/monthTools.delta.integration.test.ts +68 -68
- package/src/tools/__tests__/monthTools.integration.test.ts +178 -166
- package/src/tools/__tests__/monthTools.test.ts +561 -512
- package/src/tools/__tests__/payeeTools.delta.integration.test.ts +68 -68
- package/src/tools/__tests__/payeeTools.integration.test.ts +158 -142
- package/src/tools/__tests__/payeeTools.test.ts +486 -434
- package/src/tools/__tests__/transactionSchemas.test.ts +1202 -1186
- package/src/tools/__tests__/transactionTools.integration.test.ts +875 -825
- package/src/tools/__tests__/transactionTools.test.ts +4923 -4366
- package/src/tools/__tests__/transactionUtils.test.ts +1004 -977
- package/src/tools/__tests__/utilityTools.integration.test.ts +32 -32
- package/src/tools/__tests__/utilityTools.test.ts +68 -58
- package/src/tools/accountTools.ts +293 -271
- package/src/tools/adapters.ts +120 -63
- package/src/tools/budgetTools.ts +121 -116
- package/src/tools/categoryTools.ts +379 -339
- package/src/tools/compareTransactions/formatter.ts +131 -119
- package/src/tools/compareTransactions/index.ts +249 -214
- package/src/tools/compareTransactions/matcher.ts +259 -209
- package/src/tools/compareTransactions/parser.ts +517 -487
- package/src/tools/compareTransactions/types.ts +38 -38
- package/src/tools/compareTransactions.ts +1 -1
- package/src/tools/deltaFetcher.ts +281 -260
- package/src/tools/deltaSupport.ts +264 -259
- package/src/tools/exportTransactions.ts +230 -218
- package/src/tools/monthTools.ts +180 -165
- package/src/tools/payeeTools.ts +152 -140
- package/src/tools/reconcileAdapter.ts +297 -252
- package/src/tools/reconciliation/CLAUDE.md +506 -0
- package/src/tools/reconciliation/__tests__/adapter.causes.test.ts +133 -124
- package/src/tools/reconciliation/__tests__/adapter.test.ts +249 -230
- package/src/tools/reconciliation/__tests__/analyzer.test.ts +408 -400
- package/src/tools/reconciliation/__tests__/csvParser.test.ts +71 -69
- package/src/tools/reconciliation/__tests__/executor.integration.test.ts +348 -323
- package/src/tools/reconciliation/__tests__/executor.progress.test.ts +503 -457
- package/src/tools/reconciliation/__tests__/executor.test.ts +898 -831
- package/src/tools/reconciliation/__tests__/matcher.test.ts +667 -663
- package/src/tools/reconciliation/__tests__/payeeNormalizer.test.ts +296 -276
- package/src/tools/reconciliation/__tests__/recommendationEngine.integration.test.ts +692 -624
- package/src/tools/reconciliation/__tests__/recommendationEngine.test.ts +1008 -989
- package/src/tools/reconciliation/__tests__/reconciliation.delta.integration.test.ts +187 -146
- package/src/tools/reconciliation/__tests__/reportFormatter.test.ts +583 -533
- package/src/tools/reconciliation/__tests__/scenarios/adapterCurrency.scenario.test.ts +75 -74
- package/src/tools/reconciliation/__tests__/scenarios/extremes.scenario.test.ts +70 -62
- package/src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts +102 -88
- package/src/tools/reconciliation/__tests__/schemaUrl.test.ts +56 -55
- package/src/tools/reconciliation/__tests__/signDetector.test.ts +209 -206
- package/src/tools/reconciliation/__tests__/ynabAdapter.test.ts +66 -60
- package/src/tools/reconciliation/analyzer.ts +564 -504
- package/src/tools/reconciliation/csvParser.ts +656 -609
- package/src/tools/reconciliation/executor.ts +1290 -1128
- package/src/tools/reconciliation/index.ts +580 -528
- package/src/tools/reconciliation/matcher.ts +256 -240
- package/src/tools/reconciliation/payeeNormalizer.ts +92 -78
- package/src/tools/reconciliation/recommendationEngine.ts +357 -345
- package/src/tools/reconciliation/reportFormatter.ts +343 -307
- package/src/tools/reconciliation/signDetector.ts +89 -83
- package/src/tools/reconciliation/types.ts +164 -159
- package/src/tools/reconciliation/ynabAdapter.ts +17 -15
- package/src/tools/schemas/CLAUDE.md +546 -0
- package/src/tools/schemas/common.ts +1 -1
- package/src/tools/schemas/outputs/__tests__/accountOutputs.test.ts +410 -409
- package/src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts +305 -299
- package/src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts +431 -430
- package/src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts +510 -495
- package/src/tools/schemas/outputs/__tests__/dateValidation.test.ts +179 -153
- package/src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts +293 -254
- package/src/tools/schemas/outputs/__tests__/monthOutputs.test.ts +457 -457
- package/src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts +362 -356
- package/src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts +402 -399
- package/src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts +225 -211
- package/src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts +457 -454
- package/src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts +316 -315
- package/src/tools/schemas/outputs/accountOutputs.ts +40 -34
- package/src/tools/schemas/outputs/budgetOutputs.ts +24 -19
- package/src/tools/schemas/outputs/categoryOutputs.ts +76 -56
- package/src/tools/schemas/outputs/comparisonOutputs.ts +192 -169
- package/src/tools/schemas/outputs/index.ts +163 -163
- package/src/tools/schemas/outputs/monthOutputs.ts +95 -80
- package/src/tools/schemas/outputs/payeeOutputs.ts +18 -18
- package/src/tools/schemas/outputs/reconciliationOutputs.ts +386 -373
- package/src/tools/schemas/outputs/transactionMutationOutputs.ts +259 -231
- package/src/tools/schemas/outputs/transactionOutputs.ts +81 -71
- package/src/tools/schemas/outputs/utilityOutputs.ts +90 -84
- package/src/tools/schemas/shared/commonOutputs.ts +27 -19
- package/src/tools/toolCategories.ts +114 -114
- package/src/tools/transactionReadTools.ts +327 -0
- package/src/tools/transactionSchemas.ts +322 -291
- package/src/tools/transactionTools.ts +84 -2246
- package/src/tools/transactionUtils.ts +507 -422
- package/src/tools/transactionWriteTools.ts +2110 -0
- package/src/tools/utilityTools.ts +46 -41
- package/src/types/CLAUDE.md +477 -0
- package/src/types/__tests__/index.test.ts +51 -51
- package/src/types/index.ts +43 -39
- package/src/types/integration-tests.d.ts +26 -26
- package/src/types/reconciliation.ts +29 -29
- package/src/types/toolAnnotations.ts +30 -30
- package/src/types/toolRegistration.ts +43 -32
- package/src/utils/CLAUDE.md +508 -0
- package/src/utils/__tests__/dateUtils.test.ts +174 -168
- package/src/utils/__tests__/money.test.ts +193 -187
- package/src/utils/amountUtils.ts +5 -5
- package/src/utils/baseError.ts +5 -5
- package/src/utils/dateUtils.ts +29 -26
- package/src/utils/errors.ts +14 -14
- package/src/utils/money.ts +66 -52
- package/src/utils/validationError.ts +1 -1
- package/tsconfig.json +29 -29
- package/tsconfig.prod.json +16 -16
- package/vitest-reporters/split-json-reporter.ts +247 -204
- package/vitest.config.ts +99 -95
- package/.prettierignore +0 -10
- package/.prettierrc.json +0 -10
- package/eslint.config.js +0 -49
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { CallToolResult } from
|
|
2
|
-
import * as ynab from
|
|
3
|
-
import type {
|
|
4
|
-
|
|
1
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type * as ynab from "ynab";
|
|
3
|
+
import type { ErrorHandler } from "../server/errorHandler.js";
|
|
4
|
+
import type { ToolFactory } from "../types/toolRegistration.js";
|
|
5
|
+
export declare function handleGetUser(ynabAPI: ynab.API, errorHandler?: ErrorHandler): Promise<CallToolResult>;
|
|
5
6
|
export declare const registerUtilityTools: ToolFactory;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { responseFormatter } from
|
|
2
|
-
import { withToolErrorHandling } from
|
|
3
|
-
import { createAdapters } from
|
|
4
|
-
import { emptyObjectSchema } from
|
|
5
|
-
import { ToolAnnotationPresets } from
|
|
6
|
-
export async function handleGetUser(ynabAPI) {
|
|
1
|
+
import { responseFormatter } from "../server/responseFormatter.js";
|
|
2
|
+
import { withToolErrorHandling } from "../types/index.js";
|
|
3
|
+
import { createAdapters } from "./adapters.js";
|
|
4
|
+
import { emptyObjectSchema } from "./schemas/common.js";
|
|
5
|
+
import { ToolAnnotationPresets } from "./toolCategories.js";
|
|
6
|
+
export async function handleGetUser(ynabAPI, errorHandler) {
|
|
7
7
|
return await withToolErrorHandling(async () => {
|
|
8
8
|
const response = await ynabAPI.user.getUser();
|
|
9
9
|
const userInfo = response.data.user;
|
|
@@ -13,24 +13,24 @@ export async function handleGetUser(ynabAPI) {
|
|
|
13
13
|
return {
|
|
14
14
|
content: [
|
|
15
15
|
{
|
|
16
|
-
type:
|
|
16
|
+
type: "text",
|
|
17
17
|
text: responseFormatter.format({ user }),
|
|
18
18
|
},
|
|
19
19
|
],
|
|
20
20
|
};
|
|
21
|
-
},
|
|
21
|
+
}, "ynab:get_user", "getting user information", errorHandler);
|
|
22
22
|
}
|
|
23
23
|
export const registerUtilityTools = (registry, context) => {
|
|
24
24
|
const { adaptNoInput } = createAdapters(context);
|
|
25
25
|
registry.register({
|
|
26
|
-
name:
|
|
27
|
-
description:
|
|
26
|
+
name: "get_user",
|
|
27
|
+
description: "Get information about the authenticated user",
|
|
28
28
|
inputSchema: emptyObjectSchema,
|
|
29
29
|
handler: adaptNoInput(handleGetUser),
|
|
30
30
|
metadata: {
|
|
31
31
|
annotations: {
|
|
32
32
|
...ToolAnnotationPresets.READ_ONLY_EXTERNAL,
|
|
33
|
-
title:
|
|
33
|
+
title: "YNAB: Get User Information",
|
|
34
34
|
},
|
|
35
35
|
},
|
|
36
36
|
});
|
package/dist/types/index.d.ts
CHANGED
|
@@ -12,10 +12,10 @@ export declare class AuthenticationError extends Error {
|
|
|
12
12
|
export declare class ConfigurationError extends Error {
|
|
13
13
|
constructor(message: string);
|
|
14
14
|
}
|
|
15
|
-
export { ErrorHandler, YNABAPIError, ValidationError, YNABErrorCode, SecurityErrorCode, type ErrorResponse, handleToolError, withToolErrorHandling, } from
|
|
16
|
-
export { RateLimiter, RateLimitError, globalRateLimiter, type RateLimitConfig, type RateLimitInfo, } from
|
|
17
|
-
export { RequestLogger, globalRequestLogger, type LogEntry, type LoggerConfig, } from
|
|
18
|
-
export { SecurityMiddleware, withSecurityWrapper, type SecurityContext, } from
|
|
19
|
-
export type { MCPToolAnnotations } from
|
|
20
|
-
export type { ToolDefinition } from
|
|
21
|
-
export type { ToolContext, ToolFactory, BudgetIdResolverFactory } from
|
|
15
|
+
export { ErrorHandler, YNABAPIError, ValidationError, YNABErrorCode, SecurityErrorCode, type ErrorResponse, handleToolError, withToolErrorHandling, } from "../server/errorHandler.js";
|
|
16
|
+
export { RateLimiter, RateLimitError, globalRateLimiter, type RateLimitConfig, type RateLimitInfo, } from "../server/rateLimiter.js";
|
|
17
|
+
export { RequestLogger, globalRequestLogger, type LogEntry, type LoggerConfig, } from "../server/requestLogger.js";
|
|
18
|
+
export { SecurityMiddleware, withSecurityWrapper, type SecurityContext, } from "../server/securityMiddleware.js";
|
|
19
|
+
export type { MCPToolAnnotations } from "./toolAnnotations.js";
|
|
20
|
+
export type { ToolDefinition } from "../server/toolRegistry.js";
|
|
21
|
+
export type { ToolContext, ToolFactory, BudgetIdResolverFactory, } from "./toolRegistration.js";
|
package/dist/types/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
export class AuthenticationError extends Error {
|
|
2
2
|
constructor(message) {
|
|
3
3
|
super(message);
|
|
4
|
-
this.name =
|
|
4
|
+
this.name = "AuthenticationError";
|
|
5
5
|
}
|
|
6
6
|
}
|
|
7
7
|
export class ConfigurationError extends Error {
|
|
8
8
|
constructor(message) {
|
|
9
9
|
super(message);
|
|
10
|
-
this.name =
|
|
10
|
+
this.name = "ConfigurationError";
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
export { ErrorHandler, YNABAPIError, ValidationError, handleToolError, withToolErrorHandling, } from
|
|
14
|
-
export { RateLimiter, RateLimitError, globalRateLimiter, } from
|
|
15
|
-
export { RequestLogger, globalRequestLogger, } from
|
|
16
|
-
export { SecurityMiddleware, withSecurityWrapper, } from
|
|
13
|
+
export { ErrorHandler, YNABAPIError, ValidationError, YNABErrorCode, SecurityErrorCode, handleToolError, withToolErrorHandling, } from "../server/errorHandler.js";
|
|
14
|
+
export { RateLimiter, RateLimitError, globalRateLimiter, } from "../server/rateLimiter.js";
|
|
15
|
+
export { RequestLogger, globalRequestLogger, } from "../server/requestLogger.js";
|
|
16
|
+
export { SecurityMiddleware, withSecurityWrapper, } from "../server/securityMiddleware.js";
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type { CallToolResult } from
|
|
2
|
-
import * as ynab from
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
7
|
-
import type {
|
|
8
|
-
import type {
|
|
1
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type * as ynab from "ynab";
|
|
3
|
+
import type { CacheManager } from "../server/cacheManager.js";
|
|
4
|
+
import type { DeltaCache } from "../server/deltaCache.js";
|
|
5
|
+
import type { DiagnosticManager } from "../server/diagnostics.js";
|
|
6
|
+
import type { ErrorHandler } from "../server/errorHandler.js";
|
|
7
|
+
import type { ServerKnowledgeStore } from "../server/serverKnowledgeStore.js";
|
|
8
|
+
import type { DefaultArgumentResolver, ToolExecutionPayload, ToolRegistry } from "../server/toolRegistry.js";
|
|
9
|
+
import type { DeltaFetcher } from "../tools/deltaFetcher.js";
|
|
9
10
|
export interface ToolContext {
|
|
10
11
|
ynabAPI: ynab.API;
|
|
11
12
|
deltaFetcher: DeltaFetcher;
|
|
@@ -14,14 +15,15 @@ export interface ToolContext {
|
|
|
14
15
|
getDefaultBudgetId: () => string | undefined;
|
|
15
16
|
setDefaultBudget: (budgetId: string) => void;
|
|
16
17
|
cacheManager: CacheManager;
|
|
18
|
+
errorHandler: ErrorHandler;
|
|
17
19
|
diagnosticManager?: DiagnosticManager;
|
|
18
20
|
}
|
|
19
21
|
export type ToolFactory = (registry: ToolRegistry, context: ToolContext) => void;
|
|
20
22
|
export type Adapter<TInput extends Record<string, unknown>> = (payload: ToolExecutionPayload<TInput>) => Promise<CallToolResult>;
|
|
21
|
-
export type Handler<TInput extends Record<string, unknown>> = (api: ynab.API, params: TInput) => Promise<CallToolResult>;
|
|
22
|
-
export type DeltaHandler<TInput extends Record<string, unknown>> = (api: ynab.API, deltaFetcher: DeltaFetcher, params: TInput) => Promise<CallToolResult>;
|
|
23
|
-
export type WriteHandler<TInput extends Record<string, unknown>> = (api: ynab.API, deltaCache: DeltaCache, serverKnowledgeStore: ServerKnowledgeStore, params: TInput) => Promise<CallToolResult>;
|
|
24
|
-
export type NoInputHandler = (api: ynab.API) => Promise<CallToolResult>;
|
|
23
|
+
export type Handler<TInput extends Record<string, unknown>> = (api: ynab.API, params: TInput, errorHandler?: ErrorHandler) => Promise<CallToolResult>;
|
|
24
|
+
export type DeltaHandler<TInput extends Record<string, unknown>> = (api: ynab.API, deltaFetcher: DeltaFetcher, params: TInput, errorHandler?: ErrorHandler) => Promise<CallToolResult>;
|
|
25
|
+
export type WriteHandler<TInput extends Record<string, unknown>> = (api: ynab.API, deltaCache: DeltaCache, serverKnowledgeStore: ServerKnowledgeStore, params: TInput, errorHandler?: ErrorHandler) => Promise<CallToolResult>;
|
|
26
|
+
export type NoInputHandler = (api: ynab.API, errorHandler?: ErrorHandler) => Promise<CallToolResult>;
|
|
25
27
|
export type BudgetIdResolverFactory = <TInput extends {
|
|
26
28
|
budget_id?: string | undefined;
|
|
27
29
|
}>() => DefaultArgumentResolver<TInput>;
|
|
@@ -4,7 +4,7 @@ export function milliunitsToAmount(milliunits) {
|
|
|
4
4
|
export function amountToMilliunits(amount) {
|
|
5
5
|
return Math.round(amount * 1000);
|
|
6
6
|
}
|
|
7
|
-
export function formatAmount(milliunits, currencySymbol =
|
|
7
|
+
export function formatAmount(milliunits, currencySymbol = "$") {
|
|
8
8
|
const amount = milliunitsToAmount(milliunits);
|
|
9
9
|
return `${currencySymbol}${amount.toFixed(2)}`;
|
|
10
10
|
}
|
package/dist/utils/dateUtils.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { format,
|
|
1
|
+
import { format, isValid, parse, subMonths } from "date-fns";
|
|
2
2
|
export function formatYNABMonth(date) {
|
|
3
3
|
return format(date, "yyyy-MM-'01'");
|
|
4
4
|
}
|
|
5
5
|
export function formatISODate(date) {
|
|
6
|
-
return format(date,
|
|
6
|
+
return format(date, "yyyy-MM-dd");
|
|
7
7
|
}
|
|
8
8
|
export function getCurrentMonth() {
|
|
9
9
|
return formatYNABMonth(new Date());
|
|
@@ -25,7 +25,7 @@ export function isValidISODate(dateString) {
|
|
|
25
25
|
if (!/^\d{4}-\d{2}-\d{2}$/.test(dateString)) {
|
|
26
26
|
return false;
|
|
27
27
|
}
|
|
28
|
-
const parsed = parse(dateString,
|
|
28
|
+
const parsed = parse(dateString, "yyyy-MM-dd", new Date());
|
|
29
29
|
return isValid(parsed);
|
|
30
30
|
}
|
|
31
31
|
export function isValidYNABMonth(monthString) {
|
|
@@ -37,7 +37,7 @@ export function isValidYNABMonth(monthString) {
|
|
|
37
37
|
}
|
|
38
38
|
export function yearMonthToYNABMonth(yearMonth) {
|
|
39
39
|
if (!/^\d{4}-\d{2}$/.test(yearMonth)) {
|
|
40
|
-
throw new Error(
|
|
40
|
+
throw new Error("Invalid year-month format. Expected YYYY-MM");
|
|
41
41
|
}
|
|
42
42
|
return `${yearMonth}-01`;
|
|
43
43
|
}
|
package/dist/utils/errors.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { BaseError } from
|
|
2
|
-
export { ValidationError } from
|
|
3
|
-
import { BaseError } from
|
|
1
|
+
export { BaseError } from "./baseError.js";
|
|
2
|
+
export { ValidationError } from "./validationError.js";
|
|
3
|
+
import { BaseError } from "./baseError.js";
|
|
4
4
|
export declare class ConfigurationError extends BaseError {
|
|
5
5
|
}
|
|
6
6
|
export declare class AuthenticationError extends BaseError {
|
package/dist/utils/errors.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { BaseError } from
|
|
2
|
-
export { ValidationError } from
|
|
3
|
-
import { BaseError } from
|
|
1
|
+
export { BaseError } from "./baseError.js";
|
|
2
|
+
export { ValidationError } from "./validationError.js";
|
|
3
|
+
import { BaseError } from "./baseError.js";
|
|
4
4
|
export class ConfigurationError extends BaseError {
|
|
5
5
|
}
|
|
6
6
|
export class AuthenticationError extends BaseError {
|
|
7
7
|
}
|
|
8
8
|
export class YNABRequestError extends BaseError {
|
|
9
9
|
constructor(status, statusText, ynabErrorId) {
|
|
10
|
-
super(`YNAB API request failed: ${status} ${statusText}${ynabErrorId ? ` (Error ID: ${ynabErrorId})` :
|
|
10
|
+
super(`YNAB API request failed: ${status} ${statusText}${ynabErrorId ? ` (Error ID: ${ynabErrorId})` : ""}`);
|
|
11
11
|
this.status = status;
|
|
12
12
|
this.statusText = statusText;
|
|
13
13
|
this.ynabErrorId = ynabErrorId;
|
package/dist/utils/money.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as ynab from
|
|
1
|
+
import * as ynab from "ynab";
|
|
2
2
|
export type Milli = number;
|
|
3
|
-
export type MoneyDirection =
|
|
3
|
+
export type MoneyDirection = "credit" | "debit" | "balanced";
|
|
4
4
|
export interface MoneyValue {
|
|
5
5
|
value_milliunits: Milli;
|
|
6
6
|
value: number;
|
package/dist/utils/money.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as ynab from
|
|
2
|
-
const DEFAULT_CURRENCY =
|
|
1
|
+
import * as ynab from "ynab";
|
|
2
|
+
const DEFAULT_CURRENCY = "USD";
|
|
3
3
|
const DEFAULT_DECIMAL_DIGITS = 2;
|
|
4
4
|
export const getDecimalDigits = (currencyFormat) => {
|
|
5
5
|
return currencyFormat?.decimal_digits ?? DEFAULT_DECIMAL_DIGITS;
|
|
@@ -18,24 +18,24 @@ export const toMilli = (x) => {
|
|
|
18
18
|
export const fromMilli = (m, decimalDigits = DEFAULT_DECIMAL_DIGITS) => {
|
|
19
19
|
return ynab.utils.convertMilliUnitsToCurrencyAmount(m, decimalDigits);
|
|
20
20
|
};
|
|
21
|
-
export const assertMilli = (m, msg =
|
|
21
|
+
export const assertMilli = (m, msg = "Expected safe integer milliunits") => {
|
|
22
22
|
if (!Number.isSafeInteger(m))
|
|
23
23
|
throw new Error(msg);
|
|
24
24
|
};
|
|
25
25
|
export const addMilli = (a, b) => {
|
|
26
26
|
const s = a + b;
|
|
27
27
|
if (!Number.isSafeInteger(s))
|
|
28
|
-
throw new Error(
|
|
28
|
+
throw new Error("Milliunit sum overflow");
|
|
29
29
|
return s;
|
|
30
30
|
};
|
|
31
31
|
export const inWindow = (iso, start = undefined, end = undefined) => (!start || iso >= start) && (!end || iso <= end);
|
|
32
32
|
export const moneyDirection = (value) => {
|
|
33
33
|
if (value === 0)
|
|
34
|
-
return
|
|
35
|
-
return value > 0 ?
|
|
34
|
+
return "balanced";
|
|
35
|
+
return value > 0 ? "credit" : "debit";
|
|
36
36
|
};
|
|
37
|
-
const makeFormatter = (currency, decimalDigits = DEFAULT_DECIMAL_DIGITS) => new Intl.NumberFormat(
|
|
38
|
-
style:
|
|
37
|
+
const makeFormatter = (currency, decimalDigits = DEFAULT_DECIMAL_DIGITS) => new Intl.NumberFormat("en-US", {
|
|
38
|
+
style: "currency",
|
|
39
39
|
currency,
|
|
40
40
|
minimumFractionDigits: decimalDigits,
|
|
41
41
|
maximumFractionDigits: decimalDigits,
|
|
@@ -1,68 +1,68 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
2
|
+
"version": "2.0",
|
|
3
|
+
"schema_url": "https://raw.githubusercontent.com/dizzlkheinz/ynab-mcp-mcpb/master/docs/schemas/reconciliation-v2.json",
|
|
4
|
+
"timestamp": "2024-01-31T10:30:00Z",
|
|
5
|
+
"data": {
|
|
6
|
+
"balance_info": {
|
|
7
|
+
"current_cleared": {
|
|
8
|
+
"value": 100.0,
|
|
9
|
+
"value_display": "$100.00",
|
|
10
|
+
"currency": "USD",
|
|
11
|
+
"direction": "debit"
|
|
12
|
+
},
|
|
13
|
+
"target_statement": {
|
|
14
|
+
"value": 122.22,
|
|
15
|
+
"value_display": "$122.22",
|
|
16
|
+
"currency": "USD",
|
|
17
|
+
"direction": "debit"
|
|
18
|
+
},
|
|
19
|
+
"discrepancy": {
|
|
20
|
+
"value": 22.22,
|
|
21
|
+
"value_display": "$22.22",
|
|
22
|
+
"currency": "USD",
|
|
23
|
+
"direction": "debit"
|
|
24
|
+
},
|
|
25
|
+
"on_track": false
|
|
26
|
+
},
|
|
27
|
+
"insights": [
|
|
28
|
+
{
|
|
29
|
+
"id": "insight-1",
|
|
30
|
+
"type": "near_match",
|
|
31
|
+
"severity": "high",
|
|
32
|
+
"title": "Unmatched Transaction Found",
|
|
33
|
+
"description": "Transaction 'EvoCarShare' for $22.22 has no match in YNAB"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"recommendations": [
|
|
37
|
+
{
|
|
38
|
+
"id": "rec-abc123",
|
|
39
|
+
"action_type": "create_transaction",
|
|
40
|
+
"priority": "high",
|
|
41
|
+
"confidence": 0.95,
|
|
42
|
+
"message": "Create transaction for EvoCarShare",
|
|
43
|
+
"reason": "Transaction appears on bank statement but not in YNAB",
|
|
44
|
+
"estimated_impact": {
|
|
45
|
+
"value": 22.22,
|
|
46
|
+
"value_display": "$22.22",
|
|
47
|
+
"currency": "USD",
|
|
48
|
+
"direction": "debit"
|
|
49
|
+
},
|
|
50
|
+
"account_id": "account-xyz",
|
|
51
|
+
"source_insight_id": "insight-1",
|
|
52
|
+
"metadata": {
|
|
53
|
+
"version": "1.0",
|
|
54
|
+
"created_at": "2024-01-31T10:30:00Z"
|
|
55
|
+
},
|
|
56
|
+
"parameters": {
|
|
57
|
+
"account_id": "account-xyz",
|
|
58
|
+
"date": "2024-01-15",
|
|
59
|
+
"amount": 22.22,
|
|
60
|
+
"payee_name": "EvoCarShare",
|
|
61
|
+
"memo": "Car rental",
|
|
62
|
+
"cleared": "cleared",
|
|
63
|
+
"approved": true
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
68
|
}
|