@smartytalent/mcp-tools 0.9.57 → 0.9.58

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.
Files changed (2) hide show
  1. package/dist/tools.json +28 -8
  2. package/package.json +1 -1
package/dist/tools.json CHANGED
@@ -5307,6 +5307,16 @@
5307
5307
  "type": "string",
5308
5308
  "description": "Source of the job posting (e.g. email, erecruiter)"
5309
5309
  },
5310
+ "externalId": {
5311
+ "type": "string",
5312
+ "maxLength": 255,
5313
+ "description": "The job's reference in an ATS (2026-10-10, PLAN_ATS_INTEGRATION_STANDARD 1a): the recruitment's id exactly as the ATS shows it (eRecruiter's recruitment id, Teamtailor's job id). Travels with `externalProvider` - both or none; `null` removes the link (both attributes). Written by ReCops and above or by the organisation's virtual employee (403 for the other roles); the provider must be an ATS the virtual employee is connected to (400 `SM_ERROR_NOT_CONNECTED`); one ATS recruitment links to at most one job of the organisation (409 `SM_ERROR_CONFLICT` naming the other job). Absent when the job has no link. An application arriving from that ATS is matched to this job by the pair; never written into `shortCode`, which is our own number and the last segment of the apply address."
5314
+ },
5315
+ "externalProvider": {
5316
+ "type": "string",
5317
+ "maxLength": 64,
5318
+ "description": "The catalogue id of the ATS `externalId` belongs to (`erecruiter`, `teamtailor`; `GET /v1/integrations` kind `ats`). Set and cleared together with `externalId`."
5319
+ },
5310
5320
  "recruitmentType": {
5311
5321
  "type": "string",
5312
5322
  "enum": [
@@ -6300,6 +6310,16 @@
6300
6310
  "type": "string",
6301
6311
  "description": "Source of the job posting (e.g. email, erecruiter)"
6302
6312
  },
6313
+ "externalId": {
6314
+ "type": "string",
6315
+ "maxLength": 255,
6316
+ "description": "The job's reference in an ATS (2026-10-10, PLAN_ATS_INTEGRATION_STANDARD 1a): the recruitment's id exactly as the ATS shows it (eRecruiter's recruitment id, Teamtailor's job id). Travels with `externalProvider` - both or none; `null` removes the link (both attributes). Written by ReCops and above or by the organisation's virtual employee (403 for the other roles); the provider must be an ATS the virtual employee is connected to (400 `SM_ERROR_NOT_CONNECTED`); one ATS recruitment links to at most one job of the organisation (409 `SM_ERROR_CONFLICT` naming the other job). Absent when the job has no link. An application arriving from that ATS is matched to this job by the pair; never written into `shortCode`, which is our own number and the last segment of the apply address."
6317
+ },
6318
+ "externalProvider": {
6319
+ "type": "string",
6320
+ "maxLength": 64,
6321
+ "description": "The catalogue id of the ATS `externalId` belongs to (`erecruiter`, `teamtailor`; `GET /v1/integrations` kind `ats`). Set and cleared together with `externalId`."
6322
+ },
6303
6323
  "recruitmentType": {
6304
6324
  "type": "string",
6305
6325
  "enum": [
@@ -7466,7 +7486,7 @@
7466
7486
  "meta": {
7467
7487
  "type": "object",
7468
7488
  "additionalProperties": true,
7469
- "description": "The analysis' record on the row. `verdict` (verdict-v1): band, code, the must outcomes (`must.met[]` with `reason: formDeclared | declaredOnly`, `must.failed[]`, `must.unverified[]`, `must.toClarify[]` = the salary without a figure), and - the screening package A, 2026-10-07 - the card's flags `verdict.declaredOnly[]` (musts met on the application form's word alone), `verdict.noReadableDocument` (the document gave the extraction nothing), `verdict.salaryToClarify` (no salary figure on the candidate's side, or the salary scale's 3: 5-20% above the ceiling or more than 5% below the floor), `verdict.formSetAside[]` (the criteria whose application-form answer RecOps set aside when it ordered the analysis past the knockout - the CV decided them; `must.unverified[]` entries with `reason: formSetAside` where the CV said nothing about the requirement; the answers and the reason are in `knockoutReleased`). `knockoutFailure.failures[]` (a row the form rejected: `fieldId`, `verifies`, `expected`, `actual`; package B adds `label`, `answerLabel`, `expectedLabel` in the job's language - the reason RecOps reads). `knockoutReleased` (package B: RecOps' candidates:analyze past the form's knockout - `by`, `at`, `taskId`, `reason`, `knockout {failures, band}`, `submissionId` = the application released; kept after the analysis, while `decision` reads `analyzeAnyway` only until the verdict's decision replaces it; a later re-application keeps the key, so the current application was analysed past the knockout only when `submissionId` equals `lastSubmissionId`). `decision`, `mandatoryCheck`, `provenance`, `lastSubmissionId` and the arc keys as before."
7489
+ "description": "The analysis' record on the row. `verdict` (verdict-v1): band, code, the must outcomes (`must.met[]` with `reason: formDeclared | declaredOnly`, `must.failed[]`, `must.unverified[]`, `must.toClarify[]` = the salary without a figure), and - the screening package A, 2026-10-07 - the card's flags `verdict.declaredOnly[]` (musts met on the application form's word alone), `verdict.noReadableDocument` (the document gave the extraction nothing), `verdict.salaryToClarify` (no salary figure on the candidate's side, or the salary scale's 3: 5-20% above the ceiling or more than 5% below the floor), `verdict.formSetAside[]` (the criteria whose application-form answer RecOps set aside when it ordered the analysis past the knockout - the CV decided them; `must.unverified[]` entries with `reason: formSetAside` where the CV said nothing about the requirement; the answers and the reason are in `knockoutReleased`). `knockoutFailure.failures[]` (a row the form rejected: `fieldId`, `verifies`, `expected`, `actual`; package B adds `label`, `answerLabel`, `expectedLabel` in the job's language - the reason RecOps reads; a `multiple` select's failure adds `actualValues`, the picks, with `actual` and `answerLabel` joining them - package 3a). `knockoutReleased` (package B: RecOps' candidates:analyze past the form's knockout - `by`, `at`, `taskId`, `reason`, `knockout {failures, band}`, `submissionId` = the application released; kept after the analysis, while `decision` reads `analyzeAnyway` only until the verdict's decision replaces it; a later re-application keeps the key, so the current application was analysed past the knockout only when `submissionId` equals `lastSubmissionId`). `decision`, `mandatoryCheck`, `provenance`, `lastSubmissionId` and the arc keys as before."
7470
7490
  }
7471
7491
  }
7472
7492
  },
@@ -7542,7 +7562,7 @@
7542
7562
  },
7543
7563
  "reason": {
7544
7564
  "type": "string",
7545
- "description": "notRead: limit (an evidence document past the reader's 5) | secondCv | identityDocument | noFactSource (a cover letter, references, the rest); failed: the file's error code (DOCUMENT_TOO_LARGE, UNSUPPORTED_FORMAT, CONVERSION_FAILED, DOCUMENT_UNREADABLE, FILE_ANALYSIS_FAILED)."
7565
+ "description": "notRead: limit (an evidence document past the reader's 5) | secondCv | identityDocument | noFactSource (a cover letter, references, the rest) | readerFailed (the document reader or the profile update did not complete; the file itself is fine); failed: the file's error code (DOCUMENT_TOO_LARGE, UNSUPPORTED_FORMAT, CONVERSION_FAILED, DOCUMENT_UNREADABLE, FILE_ANALYSIS_FAILED)."
7546
7566
  }
7547
7567
  }
7548
7568
  }
@@ -8134,7 +8154,7 @@
8134
8154
  "meta": {
8135
8155
  "type": "object",
8136
8156
  "additionalProperties": true,
8137
- "description": "The analysis' record on the row. `verdict` (verdict-v1): band, code, the must outcomes (`must.met[]` with `reason: formDeclared | declaredOnly`, `must.failed[]`, `must.unverified[]`, `must.toClarify[]` = the salary without a figure), and - the screening package A, 2026-10-07 - the card's flags `verdict.declaredOnly[]` (musts met on the application form's word alone), `verdict.noReadableDocument` (the document gave the extraction nothing), `verdict.salaryToClarify` (no salary figure on the candidate's side, or the salary scale's 3: 5-20% above the ceiling or more than 5% below the floor), `verdict.formSetAside[]` (the criteria whose application-form answer RecOps set aside when it ordered the analysis past the knockout - the CV decided them; `must.unverified[]` entries with `reason: formSetAside` where the CV said nothing about the requirement; the answers and the reason are in `knockoutReleased`). `knockoutFailure.failures[]` (a row the form rejected: `fieldId`, `verifies`, `expected`, `actual`; package B adds `label`, `answerLabel`, `expectedLabel` in the job's language - the reason RecOps reads). `knockoutReleased` (package B: RecOps' candidates:analyze past the form's knockout - `by`, `at`, `taskId`, `reason`, `knockout {failures, band}`, `submissionId` = the application released; kept after the analysis, while `decision` reads `analyzeAnyway` only until the verdict's decision replaces it; a later re-application keeps the key, so the current application was analysed past the knockout only when `submissionId` equals `lastSubmissionId`). `decision`, `mandatoryCheck`, `provenance`, `lastSubmissionId` and the arc keys as before."
8157
+ "description": "The analysis' record on the row. `verdict` (verdict-v1): band, code, the must outcomes (`must.met[]` with `reason: formDeclared | declaredOnly`, `must.failed[]`, `must.unverified[]`, `must.toClarify[]` = the salary without a figure), and - the screening package A, 2026-10-07 - the card's flags `verdict.declaredOnly[]` (musts met on the application form's word alone), `verdict.noReadableDocument` (the document gave the extraction nothing), `verdict.salaryToClarify` (no salary figure on the candidate's side, or the salary scale's 3: 5-20% above the ceiling or more than 5% below the floor), `verdict.formSetAside[]` (the criteria whose application-form answer RecOps set aside when it ordered the analysis past the knockout - the CV decided them; `must.unverified[]` entries with `reason: formSetAside` where the CV said nothing about the requirement; the answers and the reason are in `knockoutReleased`). `knockoutFailure.failures[]` (a row the form rejected: `fieldId`, `verifies`, `expected`, `actual`; package B adds `label`, `answerLabel`, `expectedLabel` in the job's language - the reason RecOps reads; a `multiple` select's failure adds `actualValues`, the picks, with `actual` and `answerLabel` joining them - package 3a). `knockoutReleased` (package B: RecOps' candidates:analyze past the form's knockout - `by`, `at`, `taskId`, `reason`, `knockout {failures, band}`, `submissionId` = the application released; kept after the analysis, while `decision` reads `analyzeAnyway` only until the verdict's decision replaces it; a later re-application keeps the key, so the current application was analysed past the knockout only when `submissionId` equals `lastSubmissionId`). `decision`, `mandatoryCheck`, `provenance`, `lastSubmissionId` and the arc keys as before."
8138
8158
  }
8139
8159
  }
8140
8160
  },
@@ -8210,7 +8230,7 @@
8210
8230
  },
8211
8231
  "reason": {
8212
8232
  "type": "string",
8213
- "description": "notRead: limit (an evidence document past the reader's 5) | secondCv | identityDocument | noFactSource (a cover letter, references, the rest); failed: the file's error code (DOCUMENT_TOO_LARGE, UNSUPPORTED_FORMAT, CONVERSION_FAILED, DOCUMENT_UNREADABLE, FILE_ANALYSIS_FAILED)."
8233
+ "description": "notRead: limit (an evidence document past the reader's 5) | secondCv | identityDocument | noFactSource (a cover letter, references, the rest) | readerFailed (the document reader or the profile update did not complete; the file itself is fine); failed: the file's error code (DOCUMENT_TOO_LARGE, UNSUPPORTED_FORMAT, CONVERSION_FAILED, DOCUMENT_UNREADABLE, FILE_ANALYSIS_FAILED)."
8214
8234
  }
8215
8235
  }
8216
8236
  }
@@ -10063,7 +10083,7 @@
10063
10083
  },
10064
10084
  "content": {
10065
10085
  "type": "string",
10066
- "description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label. A `file` field may take several files: `multiple:\ntrue` and `maxFiles` (the apply form's CV field: 6 - the CV + 5\ndocuments; plan #2, S.K. 2026-10-08: no separate field, the CV is\nfound by its type).\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select; since the strict first gate\nof 2026-10-07 it may be an ARRAY of option values - any of them\npasses: the weekends select 0-4 gating at the job's minimum, the\nworking-time select 1/4 / 1/2 / 3/4 / full-time gating on the\nfractions the job offers; the experience select gates on\n`{N}-years-or-more` aligned to the job's minimum). The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
10086
+ "description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label. A `file` field may take several files: `multiple:\ntrue` and `maxFiles` (the apply form's CV field: 6 - the CV + 5\ndocuments; plan #2, S.K. 2026-10-08: no separate field, the CV is\nfound by its type). A `select` with `multiple: true` takes several\npicks: the candidate submits an ARRAY of option values (the\nworking-time select of an apply form, package 3a, 2026-10-09).\n`multiple` is refused on any other field type.\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select; since the strict first gate\nof 2026-10-07 it may be an ARRAY of option values - any of them\npasses: the weekends select 0-4 gating at the job's minimum, the\nworking-time select 1/4 / 1/2 / 3/4 / full-time gating on the\nfractions the job offers; the experience select gates on\n`{N}-years-or-more` aligned to the job's minimum). A `multiple`\nselect knockout needs an ARRAY `expectedAnswer` and passes when ANY\npick is in it. The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
10067
10087
  },
10068
10088
  "publish": {
10069
10089
  "type": "boolean",
@@ -10206,7 +10226,7 @@
10206
10226
  },
10207
10227
  "content": {
10208
10228
  "type": "string",
10209
- "description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label. A `file` field may take several files: `multiple:\ntrue` and `maxFiles` (the apply form's CV field: 6 - the CV + 5\ndocuments; plan #2, S.K. 2026-10-08: no separate field, the CV is\nfound by its type).\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select; since the strict first gate\nof 2026-10-07 it may be an ARRAY of option values - any of them\npasses: the weekends select 0-4 gating at the job's minimum, the\nworking-time select 1/4 / 1/2 / 3/4 / full-time gating on the\nfractions the job offers; the experience select gates on\n`{N}-years-or-more` aligned to the job's minimum). The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
10229
+ "description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label. A `file` field may take several files: `multiple:\ntrue` and `maxFiles` (the apply form's CV field: 6 - the CV + 5\ndocuments; plan #2, S.K. 2026-10-08: no separate field, the CV is\nfound by its type). A `select` with `multiple: true` takes several\npicks: the candidate submits an ARRAY of option values (the\nworking-time select of an apply form, package 3a, 2026-10-09).\n`multiple` is refused on any other field type.\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select; since the strict first gate\nof 2026-10-07 it may be an ARRAY of option values - any of them\npasses: the weekends select 0-4 gating at the job's minimum, the\nworking-time select 1/4 / 1/2 / 3/4 / full-time gating on the\nfractions the job offers; the experience select gates on\n`{N}-years-or-more` aligned to the job's minimum). A `multiple`\nselect knockout needs an ARRAY `expectedAnswer` and passes when ANY\npick is in it. The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
10210
10230
  },
10211
10231
  "publish": {
10212
10232
  "type": "boolean",
@@ -13657,7 +13677,7 @@
13657
13677
  },
13658
13678
  "fields": {
13659
13679
  "type": "object",
13660
- "description": "Form fields keyed by field identifier. Each field contains localized content grouped by language code. Structure: {fieldKey: {langCode: {label, description, value, type, relevance, clarity, completeness, confidence, reasoning}}}."
13680
+ "description": "Form fields keyed by field identifier. Each field contains localized content grouped by language code. Structure: {fieldKey: {langCode: {label, description, value, type, relevance, clarity, completeness, confidence, reasoning}}}. `value` is a string, or an ARRAY of option values for a `multiple` select (package 3a): the picks are copied, never translated."
13661
13681
  },
13662
13682
  "files": {
13663
13683
  "type": "array",
@@ -14200,7 +14220,7 @@
14200
14220
  },
14201
14221
  "fields": {
14202
14222
  "type": "object",
14203
- "description": "Form fields keyed by field identifier. Each field contains localized content grouped by language code. Structure: {fieldKey: {langCode: {label, description, value, type, relevance, clarity, completeness, confidence, reasoning}}}."
14223
+ "description": "Form fields keyed by field identifier. Each field contains localized content grouped by language code. Structure: {fieldKey: {langCode: {label, description, value, type, relevance, clarity, completeness, confidence, reasoning}}}. `value` is a string, or an ARRAY of option values for a `multiple` select (package 3a): the picks are copied, never translated."
14204
14224
  },
14205
14225
  "files": {
14206
14226
  "type": "array",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartytalent/mcp-tools",
3
- "version": "0.9.57",
3
+ "version": "0.9.58",
4
4
  "description": "MCP tool definitions for SmartyTalent API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",