@dizzlkheinz/ynab-mcpb 0.17.0 → 0.17.1
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/.env.example +33 -33
- package/.github/workflows/ci-tests.yml +45 -45
- package/.github/workflows/claude-code-review.yml +57 -57
- package/.github/workflows/claude.yml +50 -50
- package/.github/workflows/full-integration.yml +22 -22
- package/.github/workflows/publish.yml +11 -2
- package/CLAUDE.md +7 -6
- package/dist/bundle/index.cjs +52 -52
- package/dist/server/YNABMCPServer.d.ts +120 -54
- package/dist/server/securityMiddleware.d.ts +37 -8
- package/dist/tools/schemas/outputs/index.d.ts +2 -2
- package/dist/tools/schemas/outputs/index.js +2 -2
- package/dist/tools/schemas/outputs/utilityOutputs.d.ts +0 -15
- package/dist/tools/schemas/outputs/utilityOutputs.js +0 -9
- package/dist/tools/utilityTools.d.ts +0 -7
- package/dist/tools/utilityTools.js +1 -50
- package/docs/maintainers/npm-publishing.md +27 -0
- package/docs/reference/API.md +15 -70
- package/docs/technical/reconciliation-system-architecture.md +2251 -2251
- package/package.json +5 -5
- package/scripts/analyze-bundle.mjs +41 -41
- package/scripts/generate-mcpb.ps1 +95 -95
- package/scripts/watch-and-restart.ps1 +49 -49
- package/src/__tests__/comprehensive.integration.test.ts +0 -28
- package/src/__tests__/performance.test.ts +4 -12
- package/src/__tests__/setup.ts +45 -14
- package/src/__tests__/workflows.e2e.test.ts +0 -44
- package/src/server/__tests__/YNABMCPServer.test.ts +0 -1
- package/src/server/__tests__/toolRegistration.test.ts +2 -2
- package/src/tools/__tests__/transactionTools.integration.test.ts +63 -3
- package/src/tools/__tests__/utilityTools.integration.test.ts +1 -85
- package/src/tools/__tests__/utilityTools.test.ts +1 -123
- package/src/tools/schemas/outputs/index.ts +0 -3
- package/src/tools/schemas/outputs/utilityOutputs.ts +2 -43
- package/src/tools/toolCategories.ts +0 -1
- package/src/tools/utilityTools.ts +5 -76
- package/vitest.config.ts +2 -1
- package/.chunkhound.json +0 -11
- package/.code/agents/0098661e-0fa3-4990-beb9-c0cbf3f123aa/status.txt +0 -1
- package/.code/agents/01a13ef4-3f23-4f52-b33b-3585b73cfa60/error.txt +0 -3
- package/.code/agents/084fd32f-e298-4728-9103-a78d7dc39613/error.txt +0 -3
- package/.code/agents/0fed51e1-a943-4b97-a2a8-a6f0f27c844d/status.txt +0 -1
- package/.code/agents/1059b6bd-5ccd-4d83-a12c-7c9d89137399/error.txt +0 -5
- package/.code/agents/110/exec-call_F9BDNG7JfxKkq7Vc8ESAvdft.txt +0 -1569
- package/.code/agents/11ebcef3-b13f-4e44-ad80-d94a866804b7/error.txt +0 -3
- package/.code/agents/1324/exec-call_tIpx9uV1TpARbAMZonRQm8AO.txt +0 -757
- package/.code/agents/1398/exec-call_CjItcWMU1G6JoPshX62QvpaR.txt +0 -2832
- package/.code/agents/1398/exec-call_SUVq2ivmONQ5LMCmd7ngmOqr.txt +0 -2709
- package/.code/agents/1398/exec-call_SdNY4NOffdcC5pRYjVXHjPCK.txt +0 -2832
- package/.code/agents/1398/exec-call_qblJo9et1gsFFB63TtLOiji2.txt +0 -2832
- package/.code/agents/1398/exec-call_zaRrzlGz7GJcNzVfkAmML7Zg.txt +0 -2709
- package/.code/agents/1572/exec-call_GjVFBFOWcY7lE0idc5nWlLNh.txt +0 -781
- package/.code/agents/171834fd-5905-42fc-bbcc-2c755145b0fc/status.txt +0 -1
- package/.code/agents/1724/exec-call_HvHQe0w5CCG3T7Q3ULT6MO3g.txt +0 -5217
- package/.code/agents/1724/exec-call_QwUNESVzfxxk78K1frh1Vahb.txt +0 -2594
- package/.code/agents/1724/exec-call_aJ1Xwz71XmIpD4SBxSHERzLe.txt +0 -2594
- package/.code/agents/1846/exec-call_1YNAVD18RjrMN7JnfkkQhUP3.txt +0 -766
- package/.code/agents/1846/exec-call_lh3lDzE4WJAh1lFiomiiZ73D.txt +0 -766
- package/.code/agents/1d7d7ab7-7473-4b69-8b97-6e914f56056a/result.txt +0 -231
- package/.code/agents/2038/exec-call_DYwOukaYsL8VCONWmV2rUW5u.txt +0 -766
- package/.code/agents/2038/exec-call_c7fOQ7UrpVcTtvdfGBRM146V.txt +0 -652
- package/.code/agents/2038/exec-call_ySNyq9Mm55jWE480s54r5QcA.txt +0 -766
- package/.code/agents/210/exec-call_0tQCsKNJ1WTuIchb8wlcFJpW.txt +0 -2590
- package/.code/agents/210/exec-call_8ZlY9cUc8Ft1twi4ch8UJ6IN.txt +0 -5195
- package/.code/agents/2188/exec-call_5HqayBxIteJtoI8oPTiLWgvJ.txt +0 -286
- package/.code/agents/2188/exec-call_XRbBKBq3adZe6dcppAvQtM7G.txt +0 -218
- package/.code/agents/2188/exec-call_ehA0SjpYtrUi6GJXmibLjp4i.txt +0 -180
- package/.code/agents/21902821-ecaf-4759-bb9d-222b90921af5/error.txt +0 -3
- package/.code/agents/2256/exec-call_AtPcRWPmFPMcmX6qOFm1fCEY.txt +0 -766
- package/.code/agents/232073be-aa0e-46da-b478-5b64dbf03cf5/status.txt +0 -1
- package/.code/agents/234ff534-2336-4771-a8d9-aa04421a63be/result.txt +0 -747
- package/.code/agents/2454/exec-call_aFJpupwjfZeOBm7ixI5Vc8z2.txt +0 -766
- package/.code/agents/2454/exec-call_wogZ4HfXTodTEXvdgXlVUBpv.txt +0 -766
- package/.code/agents/253e2695-dc36-4022-b436-27655e0fc6c7/status.txt +0 -1
- package/.code/agents/2583/exec-call_M59I4eDjpjlBIWBiSxyS0YlJ.txt +0 -2594
- package/.code/agents/2583/exec-call_usLRGh7OhVHtsRBL4iUwRhjq.txt +0 -2594
- package/.code/agents/292aa3ff-dbab-470f-97c9-e7e8fd65e0db/result.txt +0 -144
- package/.code/agents/2e905864-aa07-4314-bcf9-c5b32277e4ac/result.txt +0 -36
- package/.code/agents/3073/exec-call_Peeagc9DxGYLgE6pNdMZhqIE.txt +0 -766
- package/.code/agents/3073/exec-call_d2YSE3hXF08KRSoUM3qd8Z3x.txt +0 -766
- package/.code/agents/3134/exec-call_IgCAMGx19lWfuo8zfYIt5FFC.txt +0 -416
- package/.code/agents/3134/exec-call_IxvLR2Oo7kba2QTsI1gHVko8.txt +0 -2590
- package/.code/agents/3134/exec-call_jYvc8hksZChSiysbzKjl2ZbB.txt +0 -2590
- package/.code/agents/329/exec-call_4QdP3SfSO7HGPCwVcqZIth6s.txt +0 -2590
- package/.code/agents/335aa031-466d-4fb7-925f-3cd864e264d0/result.txt +0 -191
- package/.code/agents/3364/exec-call_NbhIrsM5HhyDZDmJZG5CuCYL.txt +0 -766
- package/.code/agents/3364/exec-call_cKtJg0NrXiwXEFwlsE3uPZRA.txt +0 -766
- package/.code/agents/36d98414-5cde-4d9d-9a67-a240a18c1f07/result.txt +0 -189
- package/.code/agents/4604e866-b7b8-44f5-992f-2f683b0a523b/status.txt +0 -1
- package/.code/agents/472/exec-call_4AxzEEcWwkKhpqRB3bE8Ha4L.txt +0 -790
- package/.code/agents/472/exec-call_CB3LPYQA8QIZRi8I6kj4J17A.txt +0 -766
- package/.code/agents/472/exec-call_YeoUWvaFoktay2nqVUsa9KKX.txt +0 -790
- package/.code/agents/472/exec-call_jPWgKVquBBXTg0T3Lks5ZfkK.txt +0 -2594
- package/.code/agents/472/exec-call_qBkvunpGBDEHph2jPmTwtcsb.txt +0 -1000
- package/.code/agents/472/exec-call_v0ffRV1p0kTckBmJPzzHAEy0.txt +0 -3489
- package/.code/agents/472/exec-call_xAX5FXqWIlk02d9WubHbHWh8.txt +0 -766
- package/.code/agents/5346/exec-call_9q0muXUuLaucwEqI51Pt7idT.txt +0 -2594
- package/.code/agents/5346/exec-call_B2el3B79rVkq9LhWTI2VYlz7.txt +0 -2456
- package/.code/agents/5346/exec-call_BfX08f02qkZI9uJD5dvCvuoj.txt +0 -2594
- package/.code/agents/543328d0-61d6-4fd1-a723-bb168656e2e2/error.txt +0 -18
- package/.code/agents/5580c02c-1383-4d18-9cbd-cc8a06e3408d/result.txt +0 -48
- package/.code/agents/5f8dc01c-47b3-4163-b0b3-aa31be89fcdc/status.txt +0 -1
- package/.code/agents/60ce1a22-5126-44b2-b977-1d5b56142a7b/status.txt +0 -1
- package/.code/agents/6215d9db-7fa9-4429-aeec-3835c3212291/error.txt +0 -1
- package/.code/agents/6743db55-30e5-4b4e-9366-a8214fc7f714/error.txt +0 -1
- package/.code/agents/6bf9591b-b9c9-422c-b0a5-e968c7d8422a/status.txt +0 -1
- package/.code/agents/7/exec-call_HltHpkDox0Zm1vGEjdksUgpE.txt +0 -1120
- package/.code/agents/7/exec-call_LCATrOPPAgbxW9Q1z0XaVi2E.txt +0 -2646
- package/.code/agents/7/exec-call_W8DeRfNG9hvbgVFvf0clBf6R.txt +0 -2646
- package/.code/agents/7/exec-call_eww3GfdEiJZx61sJEQ9wNmt3.txt +0 -1271
- package/.code/agents/70/exec-call_owUtDMYiVgqDf8vsz1i32PFf.txt +0 -1570
- package/.code/agents/8/exec-call_UtrjAcLbhYLatxR4O97fZgnm.txt +0 -2590
- package/.code/agents/82490bc9-f34e-4b1b-8a8e-bccc2e6254f5/error.txt +0 -3
- package/.code/agents/841/exec-call_7nTNhSBCNjTDUIJv7py6CepO.txt +0 -3299
- package/.code/agents/841/exec-call_TLI0yUdUijuUAvI4o3DXEvHO.txt +0 -3299
- package/.code/agents/9/exec-call_XaABQT1hIlRpnKZ2uyBMWsTC.txt +0 -1882
- package/.code/agents/941/exec-call_GuGHRx7NNXWIDAnxUG2NEWPa.txt +0 -2594
- package/.code/agents/94a0ddf3-a304-4ec3-913e-3cceef509948/error.txt +0 -1
- package/.code/agents/95d9fbab-19a2-48af-83f9-c792566a347f/error.txt +0 -1
- package/.code/agents/b0098cb8-cb32-4ada-9bc4-37c587518896/result.txt +0 -170
- package/.code/agents/b4fe59a4-81df-42e2-a112-0153e504faca/error.txt +0 -1
- package/.code/agents/bf4ce152-f623-49d7-aa52-c18631625c3c/error.txt +0 -3
- package/.code/agents/d7d1db75-d7eb-468e-adea-4ef4d916d187/status.txt +0 -1
- package/.code/agents/e2baa9c8-bac3-49e3-a39d-024333e6a990/status.txt +0 -1
- package/.code/agents/e2c752b7-711d-423a-af57-f53c809deb84/result.txt +0 -160
- package/.code/agents/e350b8c3-8483-408c-b2bb-94515f492a11/error.txt +0 -3
- package/.code/agents/e63f9919-719f-4ad0-bccf-01b1a596e1e9/status.txt +0 -1
- package/.code/agents/e6601719-c31f-4a0e-8c71-d70787d0ab71/status.txt +0 -1
- package/.code/agents/e71695a8-3044-478d-8f12-ed13d02884c7/status.txt +0 -1
- package/.code/agents/f250b7ed-5bd5-4036-aa8c-ce63caee7d61/result.txt +0 -20
- package/.code/agents/f95b7464-3e25-4897-b153-c8dfd63fd605/error.txt +0 -5
- package/.code/agents/fa3c5ddf-cdf7-47a2-930a-b806c6363689/status.txt +0 -1
- package/AGENTS.md +0 -1
- package/NUL +0 -0
- package/package.json.tmp +0 -105
- package/temp-recon.ts +0 -126
- package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_09-04-53.json +0 -23
- package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_10-37-42.json +0 -23
- package/test-exports/ynab_account_e9ddc2a6_minimal_4items_2025-11-19_09-02-09.json +0 -44
- package/test-exports/ynab_account_e9ddc2a6_minimal_6items_2025-11-19_10-37-52.json +0 -58
- package/test-exports/ynab_since_2025-10-16_account_53298e13_238items_2025-11-28_13-46-20.json +0 -3662
- package/test-exports/ynab_since_2025-11-01_account_4c18e9f0_minimal_14items_2025-11-16_10-07-10.json +0 -115
|
@@ -33,39 +33,43 @@ export declare class YNABMCPServer {
|
|
|
33
33
|
private warmCacheForBudget;
|
|
34
34
|
handleListTools(): Promise<{
|
|
35
35
|
tools: {
|
|
36
|
-
name: string;
|
|
37
36
|
inputSchema: {
|
|
37
|
+
[x: string]: unknown;
|
|
38
38
|
type: "object";
|
|
39
|
-
required?: string[] | undefined;
|
|
40
39
|
properties?: {
|
|
41
40
|
[x: string]: object;
|
|
42
41
|
} | undefined;
|
|
42
|
+
required?: string[] | undefined;
|
|
43
43
|
};
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
} | undefined;
|
|
47
|
-
icons?: {
|
|
48
|
-
src: string;
|
|
49
|
-
mimeType?: string | undefined | undefined;
|
|
50
|
-
sizes?: string[] | undefined;
|
|
51
|
-
}[] | undefined;
|
|
52
|
-
title?: string | undefined | undefined;
|
|
53
|
-
description?: string | undefined | undefined;
|
|
44
|
+
name: string;
|
|
45
|
+
description?: string | undefined;
|
|
54
46
|
outputSchema?: {
|
|
47
|
+
[x: string]: unknown;
|
|
55
48
|
type: "object";
|
|
56
|
-
required?: string[] | undefined;
|
|
57
49
|
properties?: {
|
|
58
50
|
[x: string]: object;
|
|
59
51
|
} | undefined;
|
|
60
|
-
|
|
52
|
+
required?: string[] | undefined;
|
|
61
53
|
} | undefined;
|
|
62
54
|
annotations?: {
|
|
63
|
-
title?: string | undefined
|
|
64
|
-
readOnlyHint?: boolean | undefined
|
|
65
|
-
destructiveHint?: boolean | undefined
|
|
66
|
-
idempotentHint?: boolean | undefined
|
|
67
|
-
openWorldHint?: boolean | undefined
|
|
55
|
+
title?: string | undefined;
|
|
56
|
+
readOnlyHint?: boolean | undefined;
|
|
57
|
+
destructiveHint?: boolean | undefined;
|
|
58
|
+
idempotentHint?: boolean | undefined;
|
|
59
|
+
openWorldHint?: boolean | undefined;
|
|
68
60
|
} | undefined;
|
|
61
|
+
execution?: {
|
|
62
|
+
taskSupport?: "optional" | "forbidden" | "required" | undefined;
|
|
63
|
+
} | undefined;
|
|
64
|
+
_meta?: {
|
|
65
|
+
[x: string]: unknown;
|
|
66
|
+
} | undefined;
|
|
67
|
+
icons?: {
|
|
68
|
+
src: string;
|
|
69
|
+
mimeType?: string | undefined;
|
|
70
|
+
sizes?: string[] | undefined;
|
|
71
|
+
}[] | undefined;
|
|
72
|
+
title?: string | undefined;
|
|
69
73
|
}[];
|
|
70
74
|
}>;
|
|
71
75
|
handleListResources(): Promise<{
|
|
@@ -78,6 +82,11 @@ export declare class YNABMCPServer {
|
|
|
78
82
|
content: ({
|
|
79
83
|
type: "text";
|
|
80
84
|
text: string;
|
|
85
|
+
annotations?: {
|
|
86
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
87
|
+
priority?: number | undefined;
|
|
88
|
+
lastModified?: string | undefined;
|
|
89
|
+
} | undefined;
|
|
81
90
|
_meta?: {
|
|
82
91
|
[x: string]: unknown;
|
|
83
92
|
} | undefined;
|
|
@@ -85,6 +94,11 @@ export declare class YNABMCPServer {
|
|
|
85
94
|
type: "image";
|
|
86
95
|
data: string;
|
|
87
96
|
mimeType: string;
|
|
97
|
+
annotations?: {
|
|
98
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
99
|
+
priority?: number | undefined;
|
|
100
|
+
lastModified?: string | undefined;
|
|
101
|
+
} | undefined;
|
|
88
102
|
_meta?: {
|
|
89
103
|
[x: string]: unknown;
|
|
90
104
|
} | undefined;
|
|
@@ -92,47 +106,66 @@ export declare class YNABMCPServer {
|
|
|
92
106
|
type: "audio";
|
|
93
107
|
data: string;
|
|
94
108
|
mimeType: string;
|
|
109
|
+
annotations?: {
|
|
110
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
111
|
+
priority?: number | undefined;
|
|
112
|
+
lastModified?: string | undefined;
|
|
113
|
+
} | undefined;
|
|
95
114
|
_meta?: {
|
|
96
115
|
[x: string]: unknown;
|
|
97
116
|
} | undefined;
|
|
98
117
|
} | {
|
|
99
|
-
type: "resource_link";
|
|
100
|
-
name: string;
|
|
101
118
|
uri: string;
|
|
119
|
+
name: string;
|
|
120
|
+
type: "resource_link";
|
|
121
|
+
description?: string | undefined;
|
|
122
|
+
mimeType?: string | undefined;
|
|
123
|
+
annotations?: {
|
|
124
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
125
|
+
priority?: number | undefined;
|
|
126
|
+
lastModified?: string | undefined;
|
|
127
|
+
} | undefined;
|
|
102
128
|
_meta?: {
|
|
103
129
|
[x: string]: unknown;
|
|
104
130
|
} | undefined;
|
|
105
|
-
mimeType?: string | undefined | undefined;
|
|
106
131
|
icons?: {
|
|
107
132
|
src: string;
|
|
108
|
-
mimeType?: string | undefined
|
|
133
|
+
mimeType?: string | undefined;
|
|
109
134
|
sizes?: string[] | undefined;
|
|
110
135
|
}[] | undefined;
|
|
111
|
-
title?: string | undefined
|
|
112
|
-
description?: string | undefined | undefined;
|
|
136
|
+
title?: string | undefined;
|
|
113
137
|
} | {
|
|
114
138
|
type: "resource";
|
|
115
139
|
resource: {
|
|
116
140
|
uri: string;
|
|
117
141
|
text: string;
|
|
142
|
+
mimeType?: string | undefined;
|
|
118
143
|
_meta?: {
|
|
119
144
|
[x: string]: unknown;
|
|
120
145
|
} | undefined;
|
|
121
|
-
mimeType?: string | undefined | undefined;
|
|
122
146
|
} | {
|
|
123
147
|
uri: string;
|
|
124
148
|
blob: string;
|
|
149
|
+
mimeType?: string | undefined;
|
|
125
150
|
_meta?: {
|
|
126
151
|
[x: string]: unknown;
|
|
127
152
|
} | undefined;
|
|
128
|
-
mimeType?: string | undefined | undefined;
|
|
129
153
|
};
|
|
154
|
+
annotations?: {
|
|
155
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
156
|
+
priority?: number | undefined;
|
|
157
|
+
lastModified?: string | undefined;
|
|
158
|
+
} | undefined;
|
|
130
159
|
_meta?: {
|
|
131
160
|
[x: string]: unknown;
|
|
132
161
|
} | undefined;
|
|
133
162
|
})[];
|
|
134
163
|
_meta?: {
|
|
135
164
|
[x: string]: unknown;
|
|
165
|
+
"io.modelcontextprotocol/related-task"?: {
|
|
166
|
+
[x: string]: unknown;
|
|
167
|
+
taskId: string;
|
|
168
|
+
} | undefined;
|
|
136
169
|
} | undefined;
|
|
137
170
|
structuredContent?: {
|
|
138
171
|
[x: string]: unknown;
|
|
@@ -152,6 +185,11 @@ export declare class YNABMCPServer {
|
|
|
152
185
|
content: ({
|
|
153
186
|
type: "text";
|
|
154
187
|
text: string;
|
|
188
|
+
annotations?: {
|
|
189
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
190
|
+
priority?: number | undefined;
|
|
191
|
+
lastModified?: string | undefined;
|
|
192
|
+
} | undefined;
|
|
155
193
|
_meta?: {
|
|
156
194
|
[x: string]: unknown;
|
|
157
195
|
} | undefined;
|
|
@@ -159,6 +197,11 @@ export declare class YNABMCPServer {
|
|
|
159
197
|
type: "image";
|
|
160
198
|
data: string;
|
|
161
199
|
mimeType: string;
|
|
200
|
+
annotations?: {
|
|
201
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
202
|
+
priority?: number | undefined;
|
|
203
|
+
lastModified?: string | undefined;
|
|
204
|
+
} | undefined;
|
|
162
205
|
_meta?: {
|
|
163
206
|
[x: string]: unknown;
|
|
164
207
|
} | undefined;
|
|
@@ -166,47 +209,66 @@ export declare class YNABMCPServer {
|
|
|
166
209
|
type: "audio";
|
|
167
210
|
data: string;
|
|
168
211
|
mimeType: string;
|
|
212
|
+
annotations?: {
|
|
213
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
214
|
+
priority?: number | undefined;
|
|
215
|
+
lastModified?: string | undefined;
|
|
216
|
+
} | undefined;
|
|
169
217
|
_meta?: {
|
|
170
218
|
[x: string]: unknown;
|
|
171
219
|
} | undefined;
|
|
172
220
|
} | {
|
|
173
|
-
type: "resource_link";
|
|
174
|
-
name: string;
|
|
175
221
|
uri: string;
|
|
222
|
+
name: string;
|
|
223
|
+
type: "resource_link";
|
|
224
|
+
description?: string | undefined;
|
|
225
|
+
mimeType?: string | undefined;
|
|
226
|
+
annotations?: {
|
|
227
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
228
|
+
priority?: number | undefined;
|
|
229
|
+
lastModified?: string | undefined;
|
|
230
|
+
} | undefined;
|
|
176
231
|
_meta?: {
|
|
177
232
|
[x: string]: unknown;
|
|
178
233
|
} | undefined;
|
|
179
|
-
mimeType?: string | undefined | undefined;
|
|
180
234
|
icons?: {
|
|
181
235
|
src: string;
|
|
182
|
-
mimeType?: string | undefined
|
|
236
|
+
mimeType?: string | undefined;
|
|
183
237
|
sizes?: string[] | undefined;
|
|
184
238
|
}[] | undefined;
|
|
185
|
-
title?: string | undefined
|
|
186
|
-
description?: string | undefined | undefined;
|
|
239
|
+
title?: string | undefined;
|
|
187
240
|
} | {
|
|
188
241
|
type: "resource";
|
|
189
242
|
resource: {
|
|
190
243
|
uri: string;
|
|
191
244
|
text: string;
|
|
245
|
+
mimeType?: string | undefined;
|
|
192
246
|
_meta?: {
|
|
193
247
|
[x: string]: unknown;
|
|
194
248
|
} | undefined;
|
|
195
|
-
mimeType?: string | undefined | undefined;
|
|
196
249
|
} | {
|
|
197
250
|
uri: string;
|
|
198
251
|
blob: string;
|
|
252
|
+
mimeType?: string | undefined;
|
|
199
253
|
_meta?: {
|
|
200
254
|
[x: string]: unknown;
|
|
201
255
|
} | undefined;
|
|
202
|
-
mimeType?: string | undefined | undefined;
|
|
203
256
|
};
|
|
257
|
+
annotations?: {
|
|
258
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
259
|
+
priority?: number | undefined;
|
|
260
|
+
lastModified?: string | undefined;
|
|
261
|
+
} | undefined;
|
|
204
262
|
_meta?: {
|
|
205
263
|
[x: string]: unknown;
|
|
206
264
|
} | undefined;
|
|
207
265
|
})[];
|
|
208
266
|
_meta?: {
|
|
209
267
|
[x: string]: unknown;
|
|
268
|
+
"io.modelcontextprotocol/related-task"?: {
|
|
269
|
+
[x: string]: unknown;
|
|
270
|
+
taskId: string;
|
|
271
|
+
} | undefined;
|
|
210
272
|
} | undefined;
|
|
211
273
|
structuredContent?: {
|
|
212
274
|
[x: string]: unknown;
|
|
@@ -214,39 +276,43 @@ export declare class YNABMCPServer {
|
|
|
214
276
|
isError?: boolean | undefined;
|
|
215
277
|
} | import("./prompts.js").PromptResponse | {
|
|
216
278
|
tools: {
|
|
217
|
-
name: string;
|
|
218
279
|
inputSchema: {
|
|
280
|
+
[x: string]: unknown;
|
|
219
281
|
type: "object";
|
|
220
|
-
required?: string[] | undefined;
|
|
221
282
|
properties?: {
|
|
222
283
|
[x: string]: object;
|
|
223
284
|
} | undefined;
|
|
285
|
+
required?: string[] | undefined;
|
|
224
286
|
};
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
} | undefined;
|
|
228
|
-
icons?: {
|
|
229
|
-
src: string;
|
|
230
|
-
mimeType?: string | undefined | undefined;
|
|
231
|
-
sizes?: string[] | undefined;
|
|
232
|
-
}[] | undefined;
|
|
233
|
-
title?: string | undefined | undefined;
|
|
234
|
-
description?: string | undefined | undefined;
|
|
287
|
+
name: string;
|
|
288
|
+
description?: string | undefined;
|
|
235
289
|
outputSchema?: {
|
|
290
|
+
[x: string]: unknown;
|
|
236
291
|
type: "object";
|
|
237
|
-
required?: string[] | undefined;
|
|
238
292
|
properties?: {
|
|
239
293
|
[x: string]: object;
|
|
240
294
|
} | undefined;
|
|
241
|
-
|
|
295
|
+
required?: string[] | undefined;
|
|
242
296
|
} | undefined;
|
|
243
297
|
annotations?: {
|
|
244
|
-
title?: string | undefined
|
|
245
|
-
readOnlyHint?: boolean | undefined
|
|
246
|
-
destructiveHint?: boolean | undefined
|
|
247
|
-
idempotentHint?: boolean | undefined
|
|
248
|
-
openWorldHint?: boolean | undefined
|
|
298
|
+
title?: string | undefined;
|
|
299
|
+
readOnlyHint?: boolean | undefined;
|
|
300
|
+
destructiveHint?: boolean | undefined;
|
|
301
|
+
idempotentHint?: boolean | undefined;
|
|
302
|
+
openWorldHint?: boolean | undefined;
|
|
303
|
+
} | undefined;
|
|
304
|
+
execution?: {
|
|
305
|
+
taskSupport?: "optional" | "forbidden" | "required" | undefined;
|
|
306
|
+
} | undefined;
|
|
307
|
+
_meta?: {
|
|
308
|
+
[x: string]: unknown;
|
|
249
309
|
} | undefined;
|
|
310
|
+
icons?: {
|
|
311
|
+
src: string;
|
|
312
|
+
mimeType?: string | undefined;
|
|
313
|
+
sizes?: string[] | undefined;
|
|
314
|
+
}[] | undefined;
|
|
315
|
+
title?: string | undefined;
|
|
250
316
|
}[];
|
|
251
317
|
description: string;
|
|
252
318
|
messages: {
|
|
@@ -24,6 +24,11 @@ export declare function withSecurityWrapper<T extends Record<string, unknown>>(t
|
|
|
24
24
|
content: ({
|
|
25
25
|
type: "text";
|
|
26
26
|
text: string;
|
|
27
|
+
annotations?: {
|
|
28
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
29
|
+
priority?: number | undefined;
|
|
30
|
+
lastModified?: string | undefined;
|
|
31
|
+
} | undefined;
|
|
27
32
|
_meta?: {
|
|
28
33
|
[x: string]: unknown;
|
|
29
34
|
} | undefined;
|
|
@@ -31,6 +36,11 @@ export declare function withSecurityWrapper<T extends Record<string, unknown>>(t
|
|
|
31
36
|
type: "image";
|
|
32
37
|
data: string;
|
|
33
38
|
mimeType: string;
|
|
39
|
+
annotations?: {
|
|
40
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
41
|
+
priority?: number | undefined;
|
|
42
|
+
lastModified?: string | undefined;
|
|
43
|
+
} | undefined;
|
|
34
44
|
_meta?: {
|
|
35
45
|
[x: string]: unknown;
|
|
36
46
|
} | undefined;
|
|
@@ -38,47 +48,66 @@ export declare function withSecurityWrapper<T extends Record<string, unknown>>(t
|
|
|
38
48
|
type: "audio";
|
|
39
49
|
data: string;
|
|
40
50
|
mimeType: string;
|
|
51
|
+
annotations?: {
|
|
52
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
53
|
+
priority?: number | undefined;
|
|
54
|
+
lastModified?: string | undefined;
|
|
55
|
+
} | undefined;
|
|
41
56
|
_meta?: {
|
|
42
57
|
[x: string]: unknown;
|
|
43
58
|
} | undefined;
|
|
44
59
|
} | {
|
|
45
|
-
type: "resource_link";
|
|
46
|
-
name: string;
|
|
47
60
|
uri: string;
|
|
61
|
+
name: string;
|
|
62
|
+
type: "resource_link";
|
|
63
|
+
description?: string | undefined;
|
|
64
|
+
mimeType?: string | undefined;
|
|
65
|
+
annotations?: {
|
|
66
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
67
|
+
priority?: number | undefined;
|
|
68
|
+
lastModified?: string | undefined;
|
|
69
|
+
} | undefined;
|
|
48
70
|
_meta?: {
|
|
49
71
|
[x: string]: unknown;
|
|
50
72
|
} | undefined;
|
|
51
|
-
mimeType?: string | undefined | undefined;
|
|
52
73
|
icons?: {
|
|
53
74
|
src: string;
|
|
54
|
-
mimeType?: string | undefined
|
|
75
|
+
mimeType?: string | undefined;
|
|
55
76
|
sizes?: string[] | undefined;
|
|
56
77
|
}[] | undefined;
|
|
57
|
-
title?: string | undefined
|
|
58
|
-
description?: string | undefined | undefined;
|
|
78
|
+
title?: string | undefined;
|
|
59
79
|
} | {
|
|
60
80
|
type: "resource";
|
|
61
81
|
resource: {
|
|
62
82
|
uri: string;
|
|
63
83
|
text: string;
|
|
84
|
+
mimeType?: string | undefined;
|
|
64
85
|
_meta?: {
|
|
65
86
|
[x: string]: unknown;
|
|
66
87
|
} | undefined;
|
|
67
|
-
mimeType?: string | undefined | undefined;
|
|
68
88
|
} | {
|
|
69
89
|
uri: string;
|
|
70
90
|
blob: string;
|
|
91
|
+
mimeType?: string | undefined;
|
|
71
92
|
_meta?: {
|
|
72
93
|
[x: string]: unknown;
|
|
73
94
|
} | undefined;
|
|
74
|
-
mimeType?: string | undefined | undefined;
|
|
75
95
|
};
|
|
96
|
+
annotations?: {
|
|
97
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
98
|
+
priority?: number | undefined;
|
|
99
|
+
lastModified?: string | undefined;
|
|
100
|
+
} | undefined;
|
|
76
101
|
_meta?: {
|
|
77
102
|
[x: string]: unknown;
|
|
78
103
|
} | undefined;
|
|
79
104
|
})[];
|
|
80
105
|
_meta?: {
|
|
81
106
|
[x: string]: unknown;
|
|
107
|
+
"io.modelcontextprotocol/related-task"?: {
|
|
108
|
+
[x: string]: unknown;
|
|
109
|
+
taskId: string;
|
|
110
|
+
} | undefined;
|
|
82
111
|
} | undefined;
|
|
83
112
|
structuredContent?: {
|
|
84
113
|
[x: string]: unknown;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { GetUserOutputSchema, type GetUserOutput,
|
|
2
|
-
export { UserSchema,
|
|
1
|
+
export { GetUserOutputSchema, type GetUserOutput, GetDefaultBudgetOutputSchema, type GetDefaultBudgetOutput, SetDefaultBudgetOutputSchema, type SetDefaultBudgetOutput, ClearCacheOutputSchema, type ClearCacheOutput, SetOutputFormatOutputSchema, type SetOutputFormatOutput, DiagnosticInfoOutputSchema, type DiagnosticInfoOutput, GetBudgetOutputSchema, type GetBudgetOutput, } from './utilityOutputs.js';
|
|
2
|
+
export { UserSchema, DateFormatSchema, CurrencyFormatSchema, BudgetDetailSchema, ServerInfoSchema, MemoryInfoSchema, EnvironmentInfoSchema, CacheInfoSchema, DeltaInfoSchema, } from './utilityOutputs.js';
|
|
3
3
|
export { ListBudgetsOutputSchema, type ListBudgetsOutput, BudgetSummarySchema, type BudgetSummary, } from './budgetOutputs.js';
|
|
4
4
|
export { ListAccountsOutputSchema, type ListAccountsOutput, GetAccountOutputSchema, type GetAccountOutput, AccountSchema, type Account, } from './accountOutputs.js';
|
|
5
5
|
export { ListTransactionsOutputSchema, type ListTransactionsOutput, GetTransactionOutputSchema, type GetTransactionOutput, TransactionSchema, type Transaction, TransactionPreviewSchema, type TransactionPreview, } from './transactionOutputs.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { GetUserOutputSchema,
|
|
2
|
-
export { UserSchema,
|
|
1
|
+
export { GetUserOutputSchema, GetDefaultBudgetOutputSchema, SetDefaultBudgetOutputSchema, ClearCacheOutputSchema, SetOutputFormatOutputSchema, DiagnosticInfoOutputSchema, GetBudgetOutputSchema, } from './utilityOutputs.js';
|
|
2
|
+
export { UserSchema, DateFormatSchema, CurrencyFormatSchema, BudgetDetailSchema, ServerInfoSchema, MemoryInfoSchema, EnvironmentInfoSchema, CacheInfoSchema, DeltaInfoSchema, } from './utilityOutputs.js';
|
|
3
3
|
export { ListBudgetsOutputSchema, BudgetSummarySchema, } from './budgetOutputs.js';
|
|
4
4
|
export { ListAccountsOutputSchema, GetAccountOutputSchema, AccountSchema, } from './accountOutputs.js';
|
|
5
5
|
export { ListTransactionsOutputSchema, GetTransactionOutputSchema, TransactionSchema, TransactionPreviewSchema, } from './transactionOutputs.js';
|
|
@@ -8,21 +8,6 @@ export declare const GetUserOutputSchema: z.ZodObject<{
|
|
|
8
8
|
}, z.core.$strip>;
|
|
9
9
|
}, z.core.$strip>;
|
|
10
10
|
export type GetUserOutput = z.infer<typeof GetUserOutputSchema>;
|
|
11
|
-
export declare const ConversionSchema: z.ZodObject<{
|
|
12
|
-
original_amount: z.ZodNumber;
|
|
13
|
-
converted_amount: z.ZodNumber;
|
|
14
|
-
to_milliunits: z.ZodBoolean;
|
|
15
|
-
description: z.ZodString;
|
|
16
|
-
}, z.core.$strip>;
|
|
17
|
-
export declare const ConvertAmountOutputSchema: z.ZodObject<{
|
|
18
|
-
conversion: z.ZodObject<{
|
|
19
|
-
original_amount: z.ZodNumber;
|
|
20
|
-
converted_amount: z.ZodNumber;
|
|
21
|
-
to_milliunits: z.ZodBoolean;
|
|
22
|
-
description: z.ZodString;
|
|
23
|
-
}, z.core.$strip>;
|
|
24
|
-
}, z.core.$strip>;
|
|
25
|
-
export type ConvertAmountOutput = z.infer<typeof ConvertAmountOutputSchema>;
|
|
26
11
|
export declare const GetDefaultBudgetOutputSchema: z.ZodObject<{
|
|
27
12
|
default_budget_id: z.ZodNullable<z.ZodString>;
|
|
28
13
|
has_default: z.ZodBoolean;
|
|
@@ -6,15 +6,6 @@ export const UserSchema = z.object({
|
|
|
6
6
|
export const GetUserOutputSchema = z.object({
|
|
7
7
|
user: UserSchema,
|
|
8
8
|
});
|
|
9
|
-
export const ConversionSchema = z.object({
|
|
10
|
-
original_amount: z.number(),
|
|
11
|
-
converted_amount: z.number(),
|
|
12
|
-
to_milliunits: z.boolean(),
|
|
13
|
-
description: z.string(),
|
|
14
|
-
});
|
|
15
|
-
export const ConvertAmountOutputSchema = z.object({
|
|
16
|
-
conversion: ConversionSchema,
|
|
17
|
-
});
|
|
18
9
|
export const GetDefaultBudgetOutputSchema = z.object({
|
|
19
10
|
default_budget_id: z.string().nullable(),
|
|
20
11
|
has_default: z.boolean(),
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import * as ynab from 'ynab';
|
|
3
|
-
import { z } from 'zod/v4';
|
|
4
3
|
import type { ToolFactory } from '../types/toolRegistration.js';
|
|
5
|
-
export declare const ConvertAmountSchema: z.ZodObject<{
|
|
6
|
-
amount: z.ZodNumber;
|
|
7
|
-
to_milliunits: z.ZodBoolean;
|
|
8
|
-
}, z.core.$strict>;
|
|
9
|
-
export type ConvertAmountParams = z.infer<typeof ConvertAmountSchema>;
|
|
10
4
|
export declare function handleGetUser(ynabAPI: ynab.API): Promise<CallToolResult>;
|
|
11
|
-
export declare function handleConvertAmount(_ynabAPI: ynab.API, params: ConvertAmountParams): Promise<CallToolResult>;
|
|
12
5
|
export declare const registerUtilityTools: ToolFactory;
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
import { z } from 'zod/v4';
|
|
2
1
|
import { responseFormatter } from '../server/responseFormatter.js';
|
|
3
2
|
import { withToolErrorHandling } from '../types/index.js';
|
|
4
3
|
import { createAdapters } from './adapters.js';
|
|
5
4
|
import { emptyObjectSchema } from './schemas/common.js';
|
|
6
5
|
import { ToolAnnotationPresets } from './toolCategories.js';
|
|
7
|
-
export const ConvertAmountSchema = z
|
|
8
|
-
.object({
|
|
9
|
-
amount: z.number().finite(),
|
|
10
|
-
to_milliunits: z.boolean(),
|
|
11
|
-
})
|
|
12
|
-
.strict();
|
|
13
6
|
export async function handleGetUser(ynabAPI) {
|
|
14
7
|
return await withToolErrorHandling(async () => {
|
|
15
8
|
const response = await ynabAPI.user.getUser();
|
|
@@ -27,38 +20,8 @@ export async function handleGetUser(ynabAPI) {
|
|
|
27
20
|
};
|
|
28
21
|
}, 'ynab:get_user', 'getting user information');
|
|
29
22
|
}
|
|
30
|
-
export async function handleConvertAmount(_ynabAPI, params) {
|
|
31
|
-
return await withToolErrorHandling(async () => {
|
|
32
|
-
const { amount, to_milliunits } = params;
|
|
33
|
-
let result;
|
|
34
|
-
let description;
|
|
35
|
-
if (to_milliunits) {
|
|
36
|
-
result = Math.round(amount * 1000);
|
|
37
|
-
description = `$${amount.toFixed(2)} = ${result} milliunits`;
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
result = amount / 1000;
|
|
41
|
-
description = `${amount} milliunits = $${result.toFixed(2)}`;
|
|
42
|
-
}
|
|
43
|
-
return {
|
|
44
|
-
content: [
|
|
45
|
-
{
|
|
46
|
-
type: 'text',
|
|
47
|
-
text: responseFormatter.format({
|
|
48
|
-
conversion: {
|
|
49
|
-
original_amount: amount,
|
|
50
|
-
converted_amount: result,
|
|
51
|
-
to_milliunits,
|
|
52
|
-
description,
|
|
53
|
-
},
|
|
54
|
-
}),
|
|
55
|
-
},
|
|
56
|
-
],
|
|
57
|
-
};
|
|
58
|
-
}, 'ynab:convert_amount', 'converting amount');
|
|
59
|
-
}
|
|
60
23
|
export const registerUtilityTools = (registry, context) => {
|
|
61
|
-
const {
|
|
24
|
+
const { adaptNoInput } = createAdapters(context);
|
|
62
25
|
registry.register({
|
|
63
26
|
name: 'get_user',
|
|
64
27
|
description: 'Get information about the authenticated user',
|
|
@@ -71,16 +34,4 @@ export const registerUtilityTools = (registry, context) => {
|
|
|
71
34
|
},
|
|
72
35
|
},
|
|
73
36
|
});
|
|
74
|
-
registry.register({
|
|
75
|
-
name: 'convert_amount',
|
|
76
|
-
description: 'Convert between dollars and milliunits with integer arithmetic for precision',
|
|
77
|
-
inputSchema: ConvertAmountSchema,
|
|
78
|
-
handler: adapt(handleConvertAmount),
|
|
79
|
-
metadata: {
|
|
80
|
-
annotations: {
|
|
81
|
-
...ToolAnnotationPresets.UTILITY_LOCAL,
|
|
82
|
-
title: 'YNAB: Convert Amount',
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
});
|
|
86
37
|
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# npm publishing (maintainers)
|
|
2
|
+
|
|
3
|
+
This repo publishes the package `@dizzlkheinz/ynab-mcpb` to the public npm registry via GitHub Actions (`.github/workflows/publish.yml`).
|
|
4
|
+
|
|
5
|
+
## Trusted publishing (OIDC)
|
|
6
|
+
|
|
7
|
+
This package is configured as a **Trusted Publisher** on npm (OIDC). With that enabled, the publish workflow does **not** need an npm token and can still work even if the package is set to “disallow tokens”.
|
|
8
|
+
|
|
9
|
+
Note: `npm whoami` will still fail in CI under OIDC; authentication happens only during `npm publish`.
|
|
10
|
+
|
|
11
|
+
## Common failure: `npm ERR! need auth`
|
|
12
|
+
|
|
13
|
+
This error means the runner has no valid auth for `https://registry.npmjs.org/`.
|
|
14
|
+
|
|
15
|
+
Checklist:
|
|
16
|
+
|
|
17
|
+
- The Trusted Publisher entry matches exactly (repo, workflow filename `publish.yml`, and environment `npm-publish`).
|
|
18
|
+
- The workflow has `permissions: id-token: write`.
|
|
19
|
+
- You’re using a recent npm CLI (the workflow uses Node `24`).
|
|
20
|
+
- For first-time scoped publishes, the workflow uses `npm publish --access public`.
|
|
21
|
+
|
|
22
|
+
## Local manual publish (optional)
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm adduser
|
|
26
|
+
npm publish --access public
|
|
27
|
+
```
|