@snokam/mcp-api 0.27.0 → 0.29.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": "0.27.0",
3
+ "version": "0.29.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": {
@@ -451,8 +451,8 @@
451
451
  "tags": [
452
452
  "Candidates"
453
453
  ],
454
- "summary": "Trigger automated onboarding for a given system",
455
- "description": "Dispatches to the right onboarding handler based on the system slug. Microsoft 365 is the primary target; other systems report 'not implemented' until their handler lands.",
454
+ "summary": "Trigger automated onboarding for a single chain step",
455
+ "description": "Re-runs one named onboarding step (slug matches the timeline step ids — e.g. 'microsoft-365', 'license-assignment', 'github-org-invite'). Used by the admin UI's per-step retry button when an earlier chain run partially failed.",
456
456
  "operationId": "OnboardCandidateSystem",
457
457
  "parameters": [
458
458
  {
@@ -515,6 +515,75 @@
515
515
  ]
516
516
  }
517
517
  },
518
+ "/v1.0/protected/candidates/{id}/offboard/{system}": {
519
+ "post": {
520
+ "tags": [
521
+ "Candidates"
522
+ ],
523
+ "summary": "Trigger automated offboarding for a single chain step",
524
+ "description": "Mirror of OnboardCandidateSystem for the offboarding chain. Re-runs one named offboarding step (e.g. 'microsoft-365-disable', 'license-revoke', 'github-org-remove').",
525
+ "operationId": "OffboardCandidateSystem",
526
+ "parameters": [
527
+ {
528
+ "name": "id",
529
+ "in": "path",
530
+ "required": true,
531
+ "schema": {
532
+ "type": "string"
533
+ },
534
+ "x-ms-summary": "Candidate Sanity id"
535
+ },
536
+ {
537
+ "name": "system",
538
+ "in": "path",
539
+ "required": true,
540
+ "schema": {
541
+ "type": "string"
542
+ },
543
+ "x-ms-summary": "Step slug (e.g. 'microsoft-365-disable')"
544
+ }
545
+ ],
546
+ "responses": {
547
+ "200": {
548
+ "description": "Uniform onboarding result with status + message",
549
+ "content": {
550
+ "application/json": {
551
+ "schema": {
552
+ "$ref": "#/components/schemas/onboardingResult"
553
+ }
554
+ }
555
+ },
556
+ "x-ms-summary": "Success"
557
+ },
558
+ "400": {
559
+ "description": "Payload of Object",
560
+ "content": {
561
+ "application/json": {
562
+ "schema": {
563
+ "type": "object"
564
+ }
565
+ }
566
+ },
567
+ "x-ms-summary": "Bad Request"
568
+ },
569
+ "401": {
570
+ "description": "No description",
571
+ "x-ms-summary": "Unauthorized"
572
+ },
573
+ "404": {
574
+ "description": "No description",
575
+ "x-ms-summary": "Not Found"
576
+ }
577
+ },
578
+ "security": [
579
+ {
580
+ "Implicit": [
581
+ "api://b9f9de6f-132f-4a9a-a583-e9054a46f2fa/.default"
582
+ ]
583
+ }
584
+ ]
585
+ }
586
+ },
518
587
  "/v1.0/protected/candidates/{id}/onboard-full/stream": {
519
588
  "post": {
520
589
  "tags": [
@@ -1464,20 +1533,15 @@
1464
1533
  "type": "string",
1465
1534
  "default": "CREATED"
1466
1535
  },
1467
- "track": {
1468
- "enum": [
1469
- "developer",
1470
- "data_engineer"
1471
- ],
1472
- "type": "string",
1473
- "default": "developer"
1474
- },
1475
1536
  "candidate": {
1476
1537
  "type": "string"
1477
1538
  },
1478
1539
  "email": {
1479
1540
  "type": "string"
1480
1541
  },
1542
+ "jobPositionId": {
1543
+ "type": "string"
1544
+ },
1481
1545
  "recruiter": {
1482
1546
  "type": "string"
1483
1547
  },
@@ -1510,6 +1574,24 @@
1510
1574
  }
1511
1575
  }
1512
1576
  },
1577
+ "jobPositionReference": {
1578
+ "type": "object",
1579
+ "properties": {
1580
+ "sanityType": {
1581
+ "enum": [
1582
+ "reference"
1583
+ ],
1584
+ "type": "string",
1585
+ "default": "reference"
1586
+ },
1587
+ "sanityRef": {
1588
+ "type": "string"
1589
+ },
1590
+ "sanityWeak": {
1591
+ "type": "boolean"
1592
+ }
1593
+ }
1594
+ },
1513
1595
  "onboardingResult": {
1514
1596
  "type": "object",
1515
1597
  "properties": {
@@ -1533,6 +1615,30 @@
1533
1615
  }
1534
1616
  }
1535
1617
  },
1618
+ "pageMetaImage": {
1619
+ "type": "object",
1620
+ "properties": {
1621
+ "sanityType": {
1622
+ "enum": [
1623
+ "image"
1624
+ ],
1625
+ "type": "string",
1626
+ "default": "image"
1627
+ },
1628
+ "asset": {
1629
+ "$ref": "#/components/schemas/sanityImageAssetReference"
1630
+ },
1631
+ "crop": {
1632
+ "$ref": "#/components/schemas/sanityImageCrop"
1633
+ },
1634
+ "hotspot": {
1635
+ "$ref": "#/components/schemas/sanityImageHotspot"
1636
+ },
1637
+ "media": {
1638
+ "type": "object"
1639
+ }
1640
+ }
1641
+ },
1536
1642
  "sanityAssetSourceData": {
1537
1643
  "type": "object",
1538
1644
  "properties": {
@@ -1614,14 +1720,6 @@
1614
1720
  "type": "string",
1615
1721
  "default": "CREATED"
1616
1722
  },
1617
- "track": {
1618
- "enum": [
1619
- "data_engineer",
1620
- "developer"
1621
- ],
1622
- "type": "string",
1623
- "default": "data_engineer"
1624
- },
1625
1723
  "address": {
1626
1724
  "$ref": "#/components/schemas/sanityCandidateAddress"
1627
1725
  },
@@ -1658,6 +1756,9 @@
1658
1756
  "grades": {
1659
1757
  "$ref": "#/components/schemas/sanityCandidateGrades"
1660
1758
  },
1759
+ "jobPosition": {
1760
+ "$ref": "#/components/schemas/sanityCandidateJobPosition"
1761
+ },
1661
1762
  "offboardingChecklist": {
1662
1763
  "type": "array",
1663
1764
  "items": {
@@ -1707,6 +1808,9 @@
1707
1808
  "shortUrl": {
1708
1809
  "type": "string"
1709
1810
  },
1811
+ "slipperSize": {
1812
+ "type": "string"
1813
+ },
1710
1814
  "startDate": {
1711
1815
  "type": "string"
1712
1816
  },
@@ -1756,6 +1860,54 @@
1756
1860
  }
1757
1861
  }
1758
1862
  },
1863
+ "sanityCandidateJobPosition": {
1864
+ "type": "object",
1865
+ "properties": {
1866
+ "sanityType": {
1867
+ "enum": [
1868
+ "jobPosition"
1869
+ ],
1870
+ "type": "string",
1871
+ "default": "jobPosition"
1872
+ },
1873
+ "askForGrades": {
1874
+ "type": "boolean"
1875
+ },
1876
+ "deadline": {
1877
+ "type": "string"
1878
+ },
1879
+ "description": {
1880
+ "type": "array",
1881
+ "items": {
1882
+ "$ref": "#/components/schemas/sanitySystemsInnerDescriptionInner"
1883
+ }
1884
+ },
1885
+ "image": {
1886
+ "$ref": "#/components/schemas/pageMetaImage"
1887
+ },
1888
+ "metaDescription": {
1889
+ "type": "string"
1890
+ },
1891
+ "sanityCreatedAt": {
1892
+ "type": "string"
1893
+ },
1894
+ "sanityId": {
1895
+ "type": "string"
1896
+ },
1897
+ "sanityRev": {
1898
+ "type": "string"
1899
+ },
1900
+ "sanityUpdatedAt": {
1901
+ "type": "string"
1902
+ },
1903
+ "slug": {
1904
+ "$ref": "#/components/schemas/slug"
1905
+ },
1906
+ "title": {
1907
+ "type": "string"
1908
+ }
1909
+ }
1910
+ },
1759
1911
  "sanityCandidateOffboardingChecklistInner": {
1760
1912
  "type": "object",
1761
1913
  "properties": {
@@ -2175,15 +2327,6 @@
2175
2327
  "default": "CREATED",
2176
2328
  "nullable": true
2177
2329
  },
2178
- "track": {
2179
- "enum": [
2180
- "developer",
2181
- "data_engineer"
2182
- ],
2183
- "type": "string",
2184
- "default": "developer",
2185
- "nullable": true
2186
- },
2187
2330
  "address": {
2188
2331
  "$ref": "#/components/schemas/sanityPatchCandidateAddress"
2189
2332
  },
@@ -2221,6 +2364,9 @@
2221
2364
  "grades": {
2222
2365
  "$ref": "#/components/schemas/sanityPatchCandidateApplicationLetter"
2223
2366
  },
2367
+ "jobPosition": {
2368
+ "$ref": "#/components/schemas/jobPositionReference"
2369
+ },
2224
2370
  "offboardingChecklist": {
2225
2371
  "type": "array",
2226
2372
  "items": {
@@ -2259,6 +2405,9 @@
2259
2405
  "shortUrl": {
2260
2406
  "type": "string"
2261
2407
  },
2408
+ "slipperSize": {
2409
+ "type": "string"
2410
+ },
2262
2411
  "startDate": {
2263
2412
  "type": "string"
2264
2413
  },
@@ -18875,12 +18875,6 @@
18875
18875
  },
18876
18876
  "type": "array"
18877
18877
  },
18878
- "availableSize": {
18879
- "items": {
18880
- "type": "string"
18881
- },
18882
- "type": "array"
18883
- },
18884
18878
  "availableVariants": {
18885
18879
  "items": {
18886
18880
  "properties": {
@@ -26915,12 +26909,6 @@
26915
26909
  },
26916
26910
  "type": "array"
26917
26911
  },
26918
- "availableSize": {
26919
- "items": {
26920
- "type": "string"
26921
- },
26922
- "type": "array"
26923
- },
26924
26912
  "availableVariants": {
26925
26913
  "items": {
26926
26914
  "properties": {
@@ -27338,13 +27326,6 @@
27338
27326
  "type": "array",
27339
27327
  "nullable": true
27340
27328
  },
27341
- "availableSize": {
27342
- "items": {
27343
- "type": "string"
27344
- },
27345
- "type": "array",
27346
- "nullable": true
27347
- },
27348
27329
  "availableSex": {
27349
27330
  "items": {
27350
27331
  "type": "string"
@@ -29942,6 +29923,9 @@
29942
29923
  "type": "object",
29943
29924
  "nullable": true
29944
29925
  },
29926
+ "slipperSize": {
29927
+ "type": "string"
29928
+ },
29945
29929
  "githubUsername": {
29946
29930
  "type": "string"
29947
29931
  },
@@ -30552,6 +30536,185 @@
30552
30536
  },
30553
30537
  "type": "array"
30554
30538
  },
30539
+ "jobPosition": {
30540
+ "properties": {
30541
+ "askForGrades": {
30542
+ "type": "boolean"
30543
+ },
30544
+ "description": {
30545
+ "items": {
30546
+ "properties": {
30547
+ "sanityKey": {
30548
+ "type": "string"
30549
+ },
30550
+ "sanityType": {
30551
+ "type": "string",
30552
+ "enum": [
30553
+ "block"
30554
+ ],
30555
+ "nullable": false
30556
+ },
30557
+ "level": {
30558
+ "type": "number",
30559
+ "format": "double"
30560
+ },
30561
+ "markDefs": {
30562
+ "items": {
30563
+ "properties": {
30564
+ "sanityKey": {
30565
+ "type": "string"
30566
+ },
30567
+ "sanityType": {
30568
+ "type": "string",
30569
+ "enum": [
30570
+ "link"
30571
+ ],
30572
+ "nullable": false
30573
+ },
30574
+ "href": {
30575
+ "type": "string"
30576
+ }
30577
+ },
30578
+ "required": [
30579
+ "sanityKey",
30580
+ "sanityType"
30581
+ ],
30582
+ "type": "object"
30583
+ },
30584
+ "type": "array"
30585
+ },
30586
+ "listItem": {
30587
+ "type": "string",
30588
+ "enum": [
30589
+ "bullet",
30590
+ "number"
30591
+ ]
30592
+ },
30593
+ "style": {
30594
+ "type": "string",
30595
+ "enum": [
30596
+ "blockquote",
30597
+ "h1",
30598
+ "h2",
30599
+ "h3",
30600
+ "h4",
30601
+ "h5",
30602
+ "h6",
30603
+ "normal"
30604
+ ]
30605
+ },
30606
+ "children": {
30607
+ "items": {
30608
+ "properties": {
30609
+ "sanityKey": {
30610
+ "type": "string"
30611
+ },
30612
+ "sanityType": {
30613
+ "type": "string",
30614
+ "enum": [
30615
+ "span"
30616
+ ],
30617
+ "nullable": false
30618
+ },
30619
+ "text": {
30620
+ "type": "string"
30621
+ },
30622
+ "marks": {
30623
+ "items": {
30624
+ "type": "string"
30625
+ },
30626
+ "type": "array"
30627
+ }
30628
+ },
30629
+ "required": [
30630
+ "sanityKey",
30631
+ "sanityType"
30632
+ ],
30633
+ "type": "object"
30634
+ },
30635
+ "type": "array"
30636
+ }
30637
+ },
30638
+ "required": [
30639
+ "sanityKey",
30640
+ "sanityType"
30641
+ ],
30642
+ "type": "object"
30643
+ },
30644
+ "type": "array"
30645
+ },
30646
+ "deadline": {
30647
+ "type": "string"
30648
+ },
30649
+ "image": {
30650
+ "properties": {
30651
+ "sanityType": {
30652
+ "type": "string",
30653
+ "enum": [
30654
+ "image"
30655
+ ],
30656
+ "nullable": false
30657
+ },
30658
+ "crop": {
30659
+ "$ref": "#/components/schemas/SanityImageCrop"
30660
+ },
30661
+ "hotspot": {
30662
+ "$ref": "#/components/schemas/SanityImageHotspot"
30663
+ },
30664
+ "media": {},
30665
+ "asset": {
30666
+ "$ref": "#/components/schemas/SanityImageAssetReference"
30667
+ }
30668
+ },
30669
+ "required": [
30670
+ "sanityType"
30671
+ ],
30672
+ "type": "object"
30673
+ },
30674
+ "metaDescription": {
30675
+ "type": "string"
30676
+ },
30677
+ "slug": {
30678
+ "$ref": "#/components/schemas/Slug"
30679
+ },
30680
+ "title": {
30681
+ "type": "string"
30682
+ },
30683
+ "sanityRev": {
30684
+ "type": "string"
30685
+ },
30686
+ "sanityUpdatedAt": {
30687
+ "type": "string"
30688
+ },
30689
+ "sanityCreatedAt": {
30690
+ "type": "string"
30691
+ },
30692
+ "sanityType": {
30693
+ "type": "string",
30694
+ "enum": [
30695
+ "jobPosition"
30696
+ ],
30697
+ "nullable": false
30698
+ },
30699
+ "sanityId": {
30700
+ "type": "string"
30701
+ }
30702
+ },
30703
+ "required": [
30704
+ "askForGrades",
30705
+ "description",
30706
+ "metaDescription",
30707
+ "slug",
30708
+ "title",
30709
+ "sanityRev",
30710
+ "sanityUpdatedAt",
30711
+ "sanityCreatedAt",
30712
+ "sanityType",
30713
+ "sanityId"
30714
+ ],
30715
+ "type": "object",
30716
+ "nullable": true
30717
+ },
30555
30718
  "applicationOther": {
30556
30719
  "type": "string"
30557
30720
  },
@@ -30861,13 +31024,6 @@
30861
31024
  "telephone": {
30862
31025
  "type": "string"
30863
31026
  },
30864
- "track": {
30865
- "type": "string",
30866
- "enum": [
30867
- "data_engineer",
30868
- "developer"
30869
- ]
30870
- },
30871
31027
  "fromApplication": {
30872
31028
  "type": "boolean"
30873
31029
  },
@@ -30916,10 +31072,10 @@
30916
31072
  "systemsActive",
30917
31073
  "buddy",
30918
31074
  "recruiter",
31075
+ "jobPosition",
30919
31076
  "grades",
30920
31077
  "cv",
30921
31078
  "applicationLetter",
30922
- "track",
30923
31079
  "status",
30924
31080
  "candidate",
30925
31081
  "sanityRev",
@@ -31023,6 +31179,28 @@
31023
31179
  ],
31024
31180
  "type": "object"
31025
31181
  },
31182
+ "JobPositionReference": {
31183
+ "properties": {
31184
+ "sanityWeak": {
31185
+ "type": "boolean"
31186
+ },
31187
+ "sanityType": {
31188
+ "type": "string",
31189
+ "enum": [
31190
+ "reference"
31191
+ ],
31192
+ "nullable": false
31193
+ },
31194
+ "sanityRef": {
31195
+ "type": "string"
31196
+ }
31197
+ },
31198
+ "required": [
31199
+ "sanityType",
31200
+ "sanityRef"
31201
+ ],
31202
+ "type": "object"
31203
+ },
31026
31204
  "SystemReference": {
31027
31205
  "properties": {
31028
31206
  "sanityWeak": {
@@ -31117,15 +31295,6 @@
31117
31295
  "type": "boolean",
31118
31296
  "nullable": true
31119
31297
  },
31120
- "track": {
31121
- "type": "string",
31122
- "enum": [
31123
- "developer",
31124
- "data_engineer",
31125
- null
31126
- ],
31127
- "nullable": true
31128
- },
31129
31298
  "applicationLetter": {
31130
31299
  "properties": {
31131
31300
  "sanityType": {
@@ -31190,6 +31359,14 @@
31190
31359
  "type": "string",
31191
31360
  "nullable": true
31192
31361
  },
31362
+ "jobPosition": {
31363
+ "allOf": [
31364
+ {
31365
+ "$ref": "#/components/schemas/JobPositionReference"
31366
+ }
31367
+ ],
31368
+ "nullable": true
31369
+ },
31193
31370
  "references": {
31194
31371
  "items": {
31195
31372
  "properties": {
@@ -31357,6 +31534,10 @@
31357
31534
  "githubUsername": {
31358
31535
  "type": "string",
31359
31536
  "nullable": true
31537
+ },
31538
+ "slipperSize": {
31539
+ "type": "string",
31540
+ "nullable": true
31360
31541
  }
31361
31542
  },
31362
31543
  "type": "object",
@@ -31375,13 +31556,6 @@
31375
31556
  "REJECTED"
31376
31557
  ]
31377
31558
  },
31378
- "CreateCandidateTrack": {
31379
- "type": "string",
31380
- "enum": [
31381
- "developer",
31382
- "data_engineer"
31383
- ]
31384
- },
31385
31559
  "CreateCandidateInput": {
31386
31560
  "properties": {
31387
31561
  "candidate": {
@@ -31390,9 +31564,6 @@
31390
31564
  "status": {
31391
31565
  "$ref": "#/components/schemas/CreateCandidateStatus"
31392
31566
  },
31393
- "track": {
31394
- "$ref": "#/components/schemas/CreateCandidateTrack"
31395
- },
31396
31567
  "email": {
31397
31568
  "type": "string"
31398
31569
  },
@@ -31402,12 +31573,15 @@
31402
31573
  "recruiter": {
31403
31574
  "type": "string",
31404
31575
  "description": "Sanity id of the employee to set as recruiter on the new candidate."
31576
+ },
31577
+ "jobPositionId": {
31578
+ "type": "string",
31579
+ "description": "Sanity id of the job position the candidate is being created for.\nOptional for admin-created candidates that aren't tied to a posting;\npublic applications go through PostJobApplication where it's required."
31405
31580
  }
31406
31581
  },
31407
31582
  "required": [
31408
31583
  "candidate",
31409
- "status",
31410
- "track"
31584
+ "status"
31411
31585
  ],
31412
31586
  "type": "object",
31413
31587
  "additionalProperties": true
@@ -31450,6 +31624,10 @@
31450
31624
  },
31451
31625
  "JobApplicationFormData": {
31452
31626
  "properties": {
31627
+ "jobPositionId": {
31628
+ "type": "string",
31629
+ "description": "Sanity id of the job position the candidate applied to. Used to set\nthe `candidate.jobPosition` reference and denormalize the position's\ntrack onto the candidate."
31630
+ },
31453
31631
  "other": {
31454
31632
  "type": "string"
31455
31633
  },
@@ -31476,6 +31654,7 @@
31476
31654
  }
31477
31655
  },
31478
31656
  "required": [
31657
+ "jobPositionId",
31479
31658
  "cv",
31480
31659
  "askForGrades",
31481
31660
  "applicationLetter",