@snokam/mcp-api 2.18.0 → 2.20.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snokam/mcp-api",
3
- "version": "2.18.0",
3
+ "version": "2.20.0",
4
4
  "description": "MCP server exposing Snokam backend APIs as tools for Claude Code and other MCP clients",
5
5
  "type": "module",
6
6
  "bin": {
@@ -86,45 +86,481 @@
86
86
  ]
87
87
  }
88
88
  },
89
- "/v1.0/cvs/{email}": {
89
+ "/v1.0/cvs/{slug}": {
90
90
  "get": {
91
91
  "tags": [
92
92
  "CV"
93
93
  ],
94
- "summary": "Gets CV data for a specific employee by email",
95
- "description": "Retrieves CV data for a specific consultant from CvPartner by their email address.",
96
- "operationId": "GetEmployeeCvByEmail",
94
+ "summary": "Gets CV data for a specific employee by slug",
95
+ "description": "Retrieves CV data for a specific consultant from CvPartner by their Sanity slug (e.g. 'hakon-grotte').",
96
+ "operationId": "GetEmployeeCvBySlug",
97
97
  "parameters": [
98
98
  {
99
- "name": "email",
99
+ "name": "slug",
100
100
  "in": "path",
101
- "description": "The email address of the consultant to retrieve CV data for",
102
101
  "required": true,
103
102
  "schema": {
104
103
  "type": "string"
105
- },
106
- "x-ms-summary": "The email address of the employee"
104
+ }
107
105
  }
108
106
  ],
109
107
  "responses": {
110
108
  "200": {
111
- "description": "Consultant CV profile retrieved successfully",
109
+ "description": "Payload of ConsultantCv",
112
110
  "content": {
113
111
  "application/json": {
114
112
  "schema": {
115
113
  "$ref": "#/components/schemas/consultantCv"
116
114
  }
117
115
  }
118
- },
119
- "x-ms-summary": "Success"
116
+ }
117
+ },
118
+ "404": {
119
+ "description": "No description"
120
+ }
121
+ },
122
+ "security": [
123
+ {
124
+ "Implicit": [
125
+ "api://1c7354b7-6006-4c53-9ba4-c277b2ba31bb/.default"
126
+ ]
127
+ }
128
+ ]
129
+ }
130
+ },
131
+ "/v1.0/me/cv/pdf": {
132
+ "get": {
133
+ "tags": [
134
+ "CV"
135
+ ],
136
+ "summary": "Downloads the authenticated user's CV as PDF",
137
+ "operationId": "GetMyCvPdf",
138
+ "responses": {
139
+ "200": {
140
+ "description": "Payload of Array of Byte",
141
+ "content": {
142
+ "application/pdf": {
143
+ "schema": {
144
+ "type": "string",
145
+ "format": "binary"
146
+ }
147
+ }
148
+ }
120
149
  },
121
150
  "401": {
122
- "description": "User is not authorized",
123
- "x-ms-summary": "Unauthorized"
151
+ "description": "No description"
124
152
  },
125
153
  "404": {
126
- "description": "Employee not found in CvPartner",
127
- "x-ms-summary": "Not Found"
154
+ "description": "No description"
155
+ }
156
+ },
157
+ "security": [
158
+ {
159
+ "Implicit": [
160
+ "api://1c7354b7-6006-4c53-9ba4-c277b2ba31bb/.default"
161
+ ]
162
+ }
163
+ ]
164
+ }
165
+ },
166
+ "/v1.0/cvs/{slug}/pdf": {
167
+ "get": {
168
+ "tags": [
169
+ "CV"
170
+ ],
171
+ "summary": "Downloads a specific consultant's CV as PDF by slug",
172
+ "operationId": "GetEmployeeCvPdfBySlug",
173
+ "parameters": [
174
+ {
175
+ "name": "slug",
176
+ "in": "path",
177
+ "required": true,
178
+ "schema": {
179
+ "type": "string"
180
+ }
181
+ }
182
+ ],
183
+ "responses": {
184
+ "200": {
185
+ "description": "Payload of Array of Byte",
186
+ "content": {
187
+ "application/pdf": {
188
+ "schema": {
189
+ "type": "string",
190
+ "format": "binary"
191
+ }
192
+ }
193
+ }
194
+ },
195
+ "401": {
196
+ "description": "No description"
197
+ },
198
+ "404": {
199
+ "description": "No description"
200
+ }
201
+ },
202
+ "security": [
203
+ {
204
+ "Implicit": [
205
+ "api://1c7354b7-6006-4c53-9ba4-c277b2ba31bb/.default"
206
+ ]
207
+ }
208
+ ]
209
+ }
210
+ },
211
+ "/v1.0/proposals": {
212
+ "post": {
213
+ "tags": [
214
+ "Proposals"
215
+ ],
216
+ "summary": "Create a Flowcase proposal",
217
+ "operationId": "CreateProposal",
218
+ "requestBody": {
219
+ "content": {
220
+ "application/json": {
221
+ "schema": {
222
+ "$ref": "#/components/schemas/createProposalRequest"
223
+ }
224
+ }
225
+ },
226
+ "required": true
227
+ },
228
+ "responses": {
229
+ "201": {
230
+ "description": "Payload of FlowcaseProposal",
231
+ "content": {
232
+ "application/json": {
233
+ "schema": {
234
+ "$ref": "#/components/schemas/flowcaseProposal"
235
+ }
236
+ }
237
+ }
238
+ }
239
+ },
240
+ "security": [
241
+ {
242
+ "Implicit": [
243
+ "api://1c7354b7-6006-4c53-9ba4-c277b2ba31bb/.default"
244
+ ]
245
+ }
246
+ ]
247
+ }
248
+ },
249
+ "/v1.0/proposals/{proposalId}": {
250
+ "get": {
251
+ "tags": [
252
+ "Proposals"
253
+ ],
254
+ "summary": "Get a Flowcase proposal by id",
255
+ "operationId": "GetProposal",
256
+ "parameters": [
257
+ {
258
+ "name": "proposalId",
259
+ "in": "path",
260
+ "required": true,
261
+ "schema": {
262
+ "type": "string"
263
+ }
264
+ }
265
+ ],
266
+ "responses": {
267
+ "200": {
268
+ "description": "Payload of FlowcaseProposal",
269
+ "content": {
270
+ "application/json": {
271
+ "schema": {
272
+ "$ref": "#/components/schemas/flowcaseProposal"
273
+ }
274
+ }
275
+ }
276
+ },
277
+ "404": {
278
+ "description": "No description"
279
+ }
280
+ },
281
+ "security": [
282
+ {
283
+ "Implicit": [
284
+ "api://1c7354b7-6006-4c53-9ba4-c277b2ba31bb/.default"
285
+ ]
286
+ }
287
+ ]
288
+ },
289
+ "patch": {
290
+ "tags": [
291
+ "Proposals"
292
+ ],
293
+ "summary": "Update / patch a Flowcase proposal",
294
+ "operationId": "UpdateProposal",
295
+ "parameters": [
296
+ {
297
+ "name": "proposalId",
298
+ "in": "path",
299
+ "required": true,
300
+ "schema": {
301
+ "type": "string"
302
+ }
303
+ }
304
+ ],
305
+ "requestBody": {
306
+ "content": {
307
+ "application/json": {
308
+ "schema": {
309
+ "$ref": "#/components/schemas/updateProposalRequest"
310
+ }
311
+ }
312
+ },
313
+ "required": true
314
+ },
315
+ "responses": {
316
+ "200": {
317
+ "description": "Payload of FlowcaseProposal",
318
+ "content": {
319
+ "application/json": {
320
+ "schema": {
321
+ "$ref": "#/components/schemas/flowcaseProposal"
322
+ }
323
+ }
324
+ }
325
+ }
326
+ },
327
+ "security": [
328
+ {
329
+ "Implicit": [
330
+ "api://1c7354b7-6006-4c53-9ba4-c277b2ba31bb/.default"
331
+ ]
332
+ }
333
+ ]
334
+ },
335
+ "delete": {
336
+ "tags": [
337
+ "Proposals"
338
+ ],
339
+ "summary": "Archive a proposal — Flowcase has no hard-delete; we PUT archived=true.",
340
+ "operationId": "ArchiveProposal",
341
+ "parameters": [
342
+ {
343
+ "name": "proposalId",
344
+ "in": "path",
345
+ "required": true,
346
+ "schema": {
347
+ "type": "string"
348
+ }
349
+ }
350
+ ],
351
+ "responses": {
352
+ "200": {
353
+ "description": "Payload of FlowcaseProposal",
354
+ "content": {
355
+ "application/json": {
356
+ "schema": {
357
+ "$ref": "#/components/schemas/flowcaseProposal"
358
+ }
359
+ }
360
+ }
361
+ }
362
+ },
363
+ "security": [
364
+ {
365
+ "Implicit": [
366
+ "api://1c7354b7-6006-4c53-9ba4-c277b2ba31bb/.default"
367
+ ]
368
+ }
369
+ ]
370
+ }
371
+ },
372
+ "/v1.0/proposals/{proposalId}/cvs": {
373
+ "post": {
374
+ "tags": [
375
+ "Proposals"
376
+ ],
377
+ "summary": "Attach a consultant's CV to a proposal; Flowcase copies the default CV into an editable tailored CV.",
378
+ "operationId": "AttachCvToProposal",
379
+ "parameters": [
380
+ {
381
+ "name": "proposalId",
382
+ "in": "path",
383
+ "required": true,
384
+ "schema": {
385
+ "type": "string"
386
+ }
387
+ }
388
+ ],
389
+ "requestBody": {
390
+ "content": {
391
+ "application/json": {
392
+ "schema": {
393
+ "$ref": "#/components/schemas/addCvToProposalRequest"
394
+ }
395
+ }
396
+ },
397
+ "required": true
398
+ },
399
+ "responses": {
400
+ "201": {
401
+ "description": "Payload of FlowcaseTailoredCv",
402
+ "content": {
403
+ "application/json": {
404
+ "schema": {
405
+ "$ref": "#/components/schemas/flowcaseTailoredCv"
406
+ }
407
+ }
408
+ }
409
+ }
410
+ },
411
+ "security": [
412
+ {
413
+ "Implicit": [
414
+ "api://1c7354b7-6006-4c53-9ba4-c277b2ba31bb/.default"
415
+ ]
416
+ }
417
+ ]
418
+ }
419
+ },
420
+ "/v1.0/proposals/{proposalId}/cvs/{tailoredCvId}": {
421
+ "delete": {
422
+ "tags": [
423
+ "Proposals"
424
+ ],
425
+ "summary": "Remove a tailored CV from a proposal.",
426
+ "operationId": "DetachCvFromProposal",
427
+ "parameters": [
428
+ {
429
+ "name": "proposalId",
430
+ "in": "path",
431
+ "required": true,
432
+ "schema": {
433
+ "type": "string"
434
+ }
435
+ },
436
+ {
437
+ "name": "tailoredCvId",
438
+ "in": "path",
439
+ "required": true,
440
+ "schema": {
441
+ "type": "string"
442
+ }
443
+ }
444
+ ],
445
+ "responses": {
446
+ "204": {
447
+ "description": "No description"
448
+ }
449
+ },
450
+ "security": [
451
+ {
452
+ "Implicit": [
453
+ "api://1c7354b7-6006-4c53-9ba4-c277b2ba31bb/.default"
454
+ ]
455
+ }
456
+ ]
457
+ }
458
+ },
459
+ "/v1.0/cvs/users/{userId}/{cvId}/pdf": {
460
+ "get": {
461
+ "tags": [
462
+ "Proposals"
463
+ ],
464
+ "summary": "Download any CV (including tailored CVs) as PDF by user_id + cv_id.",
465
+ "operationId": "DownloadTailoredCvPdf",
466
+ "parameters": [
467
+ {
468
+ "name": "userId",
469
+ "in": "path",
470
+ "required": true,
471
+ "schema": {
472
+ "type": "string"
473
+ }
474
+ },
475
+ {
476
+ "name": "cvId",
477
+ "in": "path",
478
+ "required": true,
479
+ "schema": {
480
+ "type": "string"
481
+ }
482
+ }
483
+ ],
484
+ "responses": {
485
+ "200": {
486
+ "description": "Payload of Array of Byte",
487
+ "content": {
488
+ "application/pdf": {
489
+ "schema": {
490
+ "type": "string",
491
+ "format": "binary"
492
+ }
493
+ }
494
+ }
495
+ },
496
+ "404": {
497
+ "description": "No description"
498
+ }
499
+ },
500
+ "security": [
501
+ {
502
+ "Implicit": [
503
+ "api://1c7354b7-6006-4c53-9ba4-c277b2ba31bb/.default"
504
+ ]
505
+ }
506
+ ]
507
+ }
508
+ },
509
+ "/v1.0/cvs/users/{userId}/{cvId}/sections/{sectionType}/{sectionId}": {
510
+ "put": {
511
+ "tags": [
512
+ "CV"
513
+ ],
514
+ "summary": "Edit a single CV section (PUT /v3/cvs/{user}/{cv}/{section_type}/{section_id}).",
515
+ "operationId": "UpdateCvSection",
516
+ "parameters": [
517
+ {
518
+ "name": "userId",
519
+ "in": "path",
520
+ "required": true,
521
+ "schema": {
522
+ "type": "string"
523
+ }
524
+ },
525
+ {
526
+ "name": "cvId",
527
+ "in": "path",
528
+ "required": true,
529
+ "schema": {
530
+ "type": "string"
531
+ }
532
+ },
533
+ {
534
+ "name": "sectionType",
535
+ "in": "path",
536
+ "required": true,
537
+ "schema": {
538
+ "type": "string"
539
+ }
540
+ },
541
+ {
542
+ "name": "sectionId",
543
+ "in": "path",
544
+ "required": true,
545
+ "schema": {
546
+ "type": "string"
547
+ }
548
+ }
549
+ ],
550
+ "requestBody": {
551
+ "description": "Section body — shape depends on section_type (see Flowcase CV API).",
552
+ "content": {
553
+ "application/json": {
554
+ "schema": {
555
+ "type": "object"
556
+ }
557
+ }
558
+ },
559
+ "required": true
560
+ },
561
+ "responses": {
562
+ "204": {
563
+ "description": "No description"
128
564
  }
129
565
  },
130
566
  "security": [
@@ -492,6 +928,19 @@
492
928
  },
493
929
  "components": {
494
930
  "schemas": {
931
+ "addCvToProposalRequest": {
932
+ "type": "object",
933
+ "properties": {
934
+ "user_id": {
935
+ "type": "string",
936
+ "nullable": true
937
+ },
938
+ "cv_id": {
939
+ "type": "string",
940
+ "nullable": true
941
+ }
942
+ }
943
+ },
495
944
  "commissionTierReference": {
496
945
  "type": "object",
497
946
  "properties": {
@@ -809,6 +1258,23 @@
809
1258
  }
810
1259
  }
811
1260
  },
1261
+ "createProposalRequest": {
1262
+ "type": "object",
1263
+ "properties": {
1264
+ "name": {
1265
+ "type": "string",
1266
+ "nullable": true
1267
+ },
1268
+ "owner_id": {
1269
+ "type": "string",
1270
+ "nullable": true
1271
+ },
1272
+ "status": {
1273
+ "type": "string",
1274
+ "nullable": true
1275
+ }
1276
+ }
1277
+ },
812
1278
  "employeeReference": {
813
1279
  "type": "object",
814
1280
  "properties": {
@@ -835,6 +1301,96 @@
835
1301
  }
836
1302
  }
837
1303
  },
1304
+ "flowcaseProposal": {
1305
+ "type": "object",
1306
+ "properties": {
1307
+ "id": {
1308
+ "type": "string",
1309
+ "nullable": true
1310
+ },
1311
+ "name": {
1312
+ "type": "string",
1313
+ "nullable": true
1314
+ },
1315
+ "api_owner_id": {
1316
+ "type": "string",
1317
+ "nullable": true
1318
+ },
1319
+ "api_owner_name": {
1320
+ "type": "string",
1321
+ "nullable": true
1322
+ },
1323
+ "owner_id": {
1324
+ "type": "string",
1325
+ "nullable": true
1326
+ },
1327
+ "owner_name": {
1328
+ "type": "string",
1329
+ "nullable": true
1330
+ },
1331
+ "status": {
1332
+ "type": "string",
1333
+ "nullable": true
1334
+ },
1335
+ "archived": {
1336
+ "type": "boolean",
1337
+ "nullable": true
1338
+ },
1339
+ "created_at": {
1340
+ "type": "string",
1341
+ "format": "date-time",
1342
+ "nullable": true
1343
+ },
1344
+ "updated_at": {
1345
+ "type": "string",
1346
+ "format": "date-time",
1347
+ "nullable": true
1348
+ }
1349
+ }
1350
+ },
1351
+ "flowcaseTailoredCv": {
1352
+ "type": "object",
1353
+ "properties": {
1354
+ "id": {
1355
+ "type": "string",
1356
+ "nullable": true
1357
+ },
1358
+ "user_id": {
1359
+ "type": "string",
1360
+ "nullable": true
1361
+ },
1362
+ "proposal_id": {
1363
+ "type": "string",
1364
+ "nullable": true
1365
+ },
1366
+ "name": {
1367
+ "type": "string",
1368
+ "nullable": true
1369
+ },
1370
+ "email": {
1371
+ "type": "string",
1372
+ "nullable": true
1373
+ },
1374
+ "title": {
1375
+ "type": "string",
1376
+ "nullable": true
1377
+ },
1378
+ "status": {
1379
+ "type": "string",
1380
+ "nullable": true
1381
+ },
1382
+ "created_at": {
1383
+ "type": "string",
1384
+ "format": "date-time",
1385
+ "nullable": true
1386
+ },
1387
+ "updated_at": {
1388
+ "type": "string",
1389
+ "format": "date-time",
1390
+ "nullable": true
1391
+ }
1392
+ }
1393
+ },
838
1394
  "gadgetBudget": {
839
1395
  "type": "object",
840
1396
  "properties": {
@@ -2271,6 +2827,23 @@
2271
2827
  "$ref": "#/components/schemas/tag"
2272
2828
  }
2273
2829
  }
2830
+ },
2831
+ "updateProposalRequest": {
2832
+ "type": "object",
2833
+ "properties": {
2834
+ "name": {
2835
+ "type": "string",
2836
+ "nullable": true
2837
+ },
2838
+ "archived": {
2839
+ "type": "boolean",
2840
+ "nullable": true
2841
+ },
2842
+ "status": {
2843
+ "type": "string",
2844
+ "nullable": true
2845
+ }
2846
+ }
2274
2847
  }
2275
2848
  },
2276
2849
  "securitySchemes": {