@smartytalent/mcp-tools 0.9.7 → 0.9.9

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 +279 -6
  2. package/package.json +1 -1
package/dist/tools.json CHANGED
@@ -362,7 +362,7 @@
362
362
  },
363
363
  "limits": {
364
364
  "type": "object",
365
- "description": "Anti-abuse limits for the inbound-call channel (inbound-call arc). Declared ahead of enforcement so generated clients carry the key (the typed settings schema is a whitelist - undeclared keys are silently dropped by the SDK). Sysowner-only on PATCH (cost-protection config, the boeMetering precedent); values are inert until the P4 limiter ships.",
365
+ "description": "Anti-abuse limits for the inbound channels (inbound-call arc; email-intake daily budgets since EM-P1). Declared ahead of enforcement so generated clients carry the key (the typed settings schema is a whitelist - undeclared keys are silently dropped by the SDK). Sysowner-only on PATCH (cost-protection config, the boeMetering precedent); the call values are inert until the P4 limiter ships, the emailIntake* budgets are enforced by the inbound email Lambda.",
366
366
  "properties": {
367
367
  "callsPerCliHour": {
368
368
  "type": "integer",
@@ -392,6 +392,23 @@
392
392
  "type": "integer",
393
393
  "minimum": 1,
394
394
  "description": "Max outbound SMS to one number per day (phase-2 rails)"
395
+ },
396
+ "smsDailyBudget": {
397
+ "type": "integer",
398
+ "minimum": 1,
399
+ "description": "Daily outbound-SMS budget for the tenant across the inbound-call channel (2b rails; container default applies when unset)"
400
+ },
401
+ "emailIntakeRepliesDay": {
402
+ "type": "integer",
403
+ "minimum": 1,
404
+ "default": 200,
405
+ "description": "Budget of automated intake mails the email channel may handle on the tenant's behalf (EM-P1 guard 3, every tenant from day one - no opt-in flag). Enforced over a ROLLING 24 h window, not a UTC day - the door reopens 24 h after the oldest counted mail, not at midnight. Counted from `intake_admitted` signals (one per mail admitted to the classifier, so silent branches consume budget too); over budget = silence + `rejected_rate_limit` signal + one Google Chat alarm per 24 h. Code default applies when unset."
406
+ },
407
+ "emailIntakeSubmissionsDay": {
408
+ "type": "integer",
409
+ "minimum": 1,
410
+ "default": 50,
411
+ "description": "Budget of submissions the email intake may create for the tenant (EM-P1 guard 3). Enforced over a ROLLING 24 h window, not a UTC day. Counted from `intake_submitted` signals; over budget = silence + `rejected_rate_limit` signal. Code default applies when unset."
395
412
  }
396
413
  }
397
414
  }
@@ -882,7 +899,7 @@
882
899
  },
883
900
  "limits": {
884
901
  "type": "object",
885
- "description": "Anti-abuse limits for the inbound-call channel (inbound-call arc). Declared ahead of enforcement so generated clients carry the key (the typed settings schema is a whitelist - undeclared keys are silently dropped by the SDK). Sysowner-only on PATCH (cost-protection config, the boeMetering precedent); values are inert until the P4 limiter ships.",
902
+ "description": "Anti-abuse limits for the inbound channels (inbound-call arc; email-intake daily budgets since EM-P1). Declared ahead of enforcement so generated clients carry the key (the typed settings schema is a whitelist - undeclared keys are silently dropped by the SDK). Sysowner-only on PATCH (cost-protection config, the boeMetering precedent); the call values are inert until the P4 limiter ships, the emailIntake* budgets are enforced by the inbound email Lambda.",
886
903
  "properties": {
887
904
  "callsPerCliHour": {
888
905
  "type": "integer",
@@ -912,6 +929,23 @@
912
929
  "type": "integer",
913
930
  "minimum": 1,
914
931
  "description": "Max outbound SMS to one number per day (phase-2 rails)"
932
+ },
933
+ "smsDailyBudget": {
934
+ "type": "integer",
935
+ "minimum": 1,
936
+ "description": "Daily outbound-SMS budget for the tenant across the inbound-call channel (2b rails; container default applies when unset)"
937
+ },
938
+ "emailIntakeRepliesDay": {
939
+ "type": "integer",
940
+ "minimum": 1,
941
+ "default": 200,
942
+ "description": "Budget of automated intake mails the email channel may handle on the tenant's behalf (EM-P1 guard 3, every tenant from day one - no opt-in flag). Enforced over a ROLLING 24 h window, not a UTC day - the door reopens 24 h after the oldest counted mail, not at midnight. Counted from `intake_admitted` signals (one per mail admitted to the classifier, so silent branches consume budget too); over budget = silence + `rejected_rate_limit` signal + one Google Chat alarm per 24 h. Code default applies when unset."
943
+ },
944
+ "emailIntakeSubmissionsDay": {
945
+ "type": "integer",
946
+ "minimum": 1,
947
+ "default": 50,
948
+ "description": "Budget of submissions the email intake may create for the tenant (EM-P1 guard 3). Enforced over a ROLLING 24 h window, not a UTC day. Counted from `intake_submitted` signals; over budget = silence + `rejected_rate_limit` signal. Code default applies when unset."
915
949
  }
916
950
  }
917
951
  }
@@ -4732,6 +4766,10 @@
4732
4766
  "title"
4733
4767
  ],
4734
4768
  "properties": {
4769
+ "ownerId": {
4770
+ "type": "string",
4771
+ "description": "userId of the job owner (set server-side at create; the Boe user on workflow-built jobs). Read-only."
4772
+ },
4735
4773
  "title": {
4736
4774
  "title": "JobAttributesTitleSchema",
4737
4775
  "description": "The job title/position. Language-keyed object where keys are locale codes (e.g. en-US, pl-PL).",
@@ -5564,6 +5602,10 @@
5564
5602
  "title"
5565
5603
  ],
5566
5604
  "properties": {
5605
+ "ownerId": {
5606
+ "type": "string",
5607
+ "description": "userId of the job owner (set server-side at create; the Boe user on workflow-built jobs). Read-only."
5608
+ },
5567
5609
  "title": {
5568
5610
  "title": "JobAttributesTitleSchema",
5569
5611
  "description": "The job title/position. Language-keyed object where keys are locale codes (e.g. en-US, pl-PL).",
@@ -8331,6 +8373,28 @@
8331
8373
  }
8332
8374
  }
8333
8375
  },
8376
+ "labels": {
8377
+ "title": "EmailRelationshipsLabelsSchema",
8378
+ "description": "Labels (label service definitions) attached to this email. To-many; wire contract declared ahead of use (D-D, 2026-08-31) - always empty in EM-P1, the email-labels package stamps system labels later. Per-user manual labelling stays in /v1/states flags.labels and is NOT mirrored here.",
8379
+ "type": "object",
8380
+ "properties": {
8381
+ "data": {
8382
+ "type": "array",
8383
+ "items": {
8384
+ "title": "EmailRelationshipsLabelsDataSchema",
8385
+ "type": "object",
8386
+ "properties": {
8387
+ "type": {
8388
+ "type": "string"
8389
+ },
8390
+ "id": {
8391
+ "type": "string"
8392
+ }
8393
+ }
8394
+ }
8395
+ }
8396
+ }
8397
+ },
8334
8398
  "candidate": {
8335
8399
  "title": "EmailRelationshipsCandidateSchema",
8336
8400
  "type": "object",
@@ -8349,6 +8413,25 @@
8349
8413
  }
8350
8414
  }
8351
8415
  },
8416
+ "talent": {
8417
+ "title": "EmailRelationshipsTalentSchema",
8418
+ "description": "The Talent (durable person) this email belongs to. To-one, nullable. Stamped at create by email:persist_inbound / the inbound email Lambda when the sender resolved to a known talent or candidate; rows written before the talent existed (a guest's application mail, the consent ask, the YES) stay unlinked - the conversation owns the linkage (SPEC_TALENT_COMMS_OWNERSHIP). No filterTalent on listEmails yet: list a talent's mail through its conversations.",
8419
+ "type": "object",
8420
+ "properties": {
8421
+ "data": {
8422
+ "title": "EmailRelationshipsTalentDataSchema",
8423
+ "type": "object",
8424
+ "properties": {
8425
+ "type": {
8426
+ "type": "string"
8427
+ },
8428
+ "id": {
8429
+ "type": "string"
8430
+ }
8431
+ }
8432
+ }
8433
+ }
8434
+ },
8352
8435
  "conversations": {
8353
8436
  "title": "EmailRelationshipsConversationsSchema",
8354
8437
  "type": "object",
@@ -12457,7 +12540,7 @@
12457
12540
  },
12458
12541
  "meta": {
12459
12542
  "type": "object",
12460
- "description": "Free-form metadata. meta.external carries ATS import correlation ({source, jobShortCode, talentShortCode, applicationShortCode, ttl}); meta.userId is stamped server-side on create. CREATE-ONLY today: the update path ignores meta."
12543
+ "description": "Free-form metadata. meta.external carries ATS import correlation ({source, jobShortCode, talentShortCode, applicationShortCode, ttl}); meta.email carries email-intake correlation on channel='email' submissions ({conversationId, emailId (the application mail), consentEmailId (the YES), messageId, threadRef 'SMT-<consentAskedEmailId>', consentVerbatim (capped), consentAt, askEmailId, askTextVersion, yesS3Key, senderAuth}) - the consent proof, kept for the life of the row (no TTL); meta.userId is stamped server-side on create. CREATE-ONLY today: the update path ignores meta."
12461
12544
  },
12462
12545
  "timestamps": {
12463
12546
  "title": "ResourceTimestampsSchema",
@@ -12965,7 +13048,7 @@
12965
13048
  },
12966
13049
  "meta": {
12967
13050
  "type": "object",
12968
- "description": "Free-form metadata. meta.external carries ATS import correlation ({source, jobShortCode, talentShortCode, applicationShortCode, ttl}); meta.userId is stamped server-side on create. CREATE-ONLY today: the update path ignores meta."
13051
+ "description": "Free-form metadata. meta.external carries ATS import correlation ({source, jobShortCode, talentShortCode, applicationShortCode, ttl}); meta.email carries email-intake correlation on channel='email' submissions ({conversationId, emailId (the application mail), consentEmailId (the YES), messageId, threadRef 'SMT-<consentAskedEmailId>', consentVerbatim (capped), consentAt, askEmailId, askTextVersion, yesS3Key, senderAuth}) - the consent proof, kept for the life of the row (no TTL); meta.userId is stamped server-side on create. CREATE-ONLY today: the update path ignores meta."
12969
13052
  },
12970
13053
  "timestamps": {
12971
13054
  "title": "ResourceTimestampsSchema",
@@ -20526,7 +20609,8 @@
20526
20609
  },
20527
20610
  "meta": {
20528
20611
  "type": "object",
20529
- "additionalProperties": true
20612
+ "additionalProperties": true,
20613
+ "description": "Free-form metadata. meta.reference is the RFC 5322 Message-ID chain of the thread (appended by the conversation eventbus on email events; the outbound sender reads it for In-Reply-To/References). meta.intake marks an email-intake thread and is absent on every other conversation: {version, kind: job_application|talent_pool, status: awaiting_consent|submitted|incomplete|declined|expired, jobId|null, jobShort, jobTitle, formId, language, senderEmail, applicationEmailId, consentAskedEmailId|null, consentEmailId|null, submissionId|null, submittedAt|null, expiresAt, missingFields[] (incomplete), askTextVersion, consentQuestion, draft {answers, wire, cv {s3Key, filename, contentType, size}} (awaiting_consent only)} - written only by the inbound email Lambda; workflows never touch it. talentId/candidateId/jobId are NOT meta or attributes on the wire - read relationships.talent/candidate/job."
20530
20614
  },
20531
20615
  "timestamps": {
20532
20616
  "title": "ResourceTimestampsSchema",
@@ -20650,6 +20734,28 @@
20650
20734
  }
20651
20735
  }
20652
20736
  },
20737
+ "labels": {
20738
+ "title": "ConversationRelationshipsLabelsSchema",
20739
+ "description": "Labels (label service definitions) attached to this conversation. To-many; wire contract declared ahead of use (D-D, 2026-08-31) - always empty in EM-P1, the email-labels package stamps system labels later. Not PATCH-mergeable (the conversation update door merges to-one keys only); per-user manual labelling stays in /v1/states flags.labels.",
20740
+ "type": "object",
20741
+ "properties": {
20742
+ "data": {
20743
+ "type": "array",
20744
+ "items": {
20745
+ "title": "ConversationRelationshipsLabelsDataSchema",
20746
+ "type": "object",
20747
+ "properties": {
20748
+ "type": {
20749
+ "type": "string"
20750
+ },
20751
+ "id": {
20752
+ "type": "string"
20753
+ }
20754
+ }
20755
+ }
20756
+ }
20757
+ }
20758
+ },
20653
20759
  "talent": {
20654
20760
  "title": "ConversationRelationshipsTalentSchema",
20655
20761
  "type": "object",
@@ -20807,7 +20913,8 @@
20807
20913
  },
20808
20914
  "meta": {
20809
20915
  "type": "object",
20810
- "additionalProperties": true
20916
+ "additionalProperties": true,
20917
+ "description": "Free-form metadata. meta.reference is the RFC 5322 Message-ID chain of the thread (appended by the conversation eventbus on email events; the outbound sender reads it for In-Reply-To/References). meta.intake marks an email-intake thread and is absent on every other conversation: {version, kind: job_application|talent_pool, status: awaiting_consent|submitted|incomplete|declined|expired, jobId|null, jobShort, jobTitle, formId, language, senderEmail, applicationEmailId, consentAskedEmailId|null, consentEmailId|null, submissionId|null, submittedAt|null, expiresAt, missingFields[] (incomplete), askTextVersion, consentQuestion, draft {answers, wire, cv {s3Key, filename, contentType, size}} (awaiting_consent only)} - written only by the inbound email Lambda; workflows never touch it. talentId/candidateId/jobId are NOT meta or attributes on the wire - read relationships.talent/candidate/job."
20811
20918
  },
20812
20919
  "timestamps": {
20813
20920
  "title": "ResourceTimestampsSchema",
@@ -20824,6 +20931,172 @@
20824
20931
  }
20825
20932
  }
20826
20933
  }
20934
+ },
20935
+ "relationships": {
20936
+ "title": "ConversationRelationshipsSchema",
20937
+ "type": "object",
20938
+ "properties": {
20939
+ "candidate": {
20940
+ "title": "ConversationRelationshipsCandidateSchema",
20941
+ "type": "object",
20942
+ "properties": {
20943
+ "data": {
20944
+ "title": "ConversationRelationshipsCandidateDataSchema",
20945
+ "type": "object",
20946
+ "properties": {
20947
+ "type": {
20948
+ "type": "string"
20949
+ },
20950
+ "id": {
20951
+ "type": "string"
20952
+ }
20953
+ }
20954
+ }
20955
+ }
20956
+ },
20957
+ "emails": {
20958
+ "title": "ConversationRelationshipsEmailsSchema",
20959
+ "type": "object",
20960
+ "properties": {
20961
+ "data": {
20962
+ "type": "array",
20963
+ "items": {
20964
+ "title": "ConversationRelationshipsEmailsDataSchema",
20965
+ "type": "object",
20966
+ "properties": {
20967
+ "type": {
20968
+ "type": "string"
20969
+ },
20970
+ "id": {
20971
+ "type": "string"
20972
+ }
20973
+ }
20974
+ }
20975
+ }
20976
+ }
20977
+ },
20978
+ "chats": {
20979
+ "title": "ConversationRelationshipsChatsSchema",
20980
+ "type": "object",
20981
+ "properties": {
20982
+ "data": {
20983
+ "type": "array",
20984
+ "items": {
20985
+ "title": "ConversationRelationshipsChatsDataSchema",
20986
+ "type": "object",
20987
+ "properties": {
20988
+ "type": {
20989
+ "type": "string"
20990
+ },
20991
+ "id": {
20992
+ "type": "string"
20993
+ }
20994
+ }
20995
+ }
20996
+ }
20997
+ }
20998
+ },
20999
+ "calls": {
21000
+ "title": "ConversationRelationshipsCallsSchema",
21001
+ "type": "object",
21002
+ "properties": {
21003
+ "data": {
21004
+ "type": "array",
21005
+ "items": {
21006
+ "title": "ConversationRelationshipsCallsDataSchema",
21007
+ "type": "object",
21008
+ "properties": {
21009
+ "type": {
21010
+ "type": "string"
21011
+ },
21012
+ "id": {
21013
+ "type": "string"
21014
+ }
21015
+ }
21016
+ }
21017
+ }
21018
+ }
21019
+ },
21020
+ "meetings": {
21021
+ "title": "ConversationRelationshipsMeetingsSchema",
21022
+ "type": "object",
21023
+ "properties": {
21024
+ "data": {
21025
+ "type": "array",
21026
+ "items": {
21027
+ "title": "ConversationRelationshipsMeetingsDataSchema",
21028
+ "type": "object",
21029
+ "properties": {
21030
+ "type": {
21031
+ "type": "string"
21032
+ },
21033
+ "id": {
21034
+ "type": "string"
21035
+ }
21036
+ }
21037
+ }
21038
+ }
21039
+ }
21040
+ },
21041
+ "labels": {
21042
+ "title": "ConversationRelationshipsLabelsSchema",
21043
+ "description": "Labels (label service definitions) attached to this conversation. To-many; wire contract declared ahead of use (D-D, 2026-08-31) - always empty in EM-P1, the email-labels package stamps system labels later. Not PATCH-mergeable (the conversation update door merges to-one keys only); per-user manual labelling stays in /v1/states flags.labels.",
21044
+ "type": "object",
21045
+ "properties": {
21046
+ "data": {
21047
+ "type": "array",
21048
+ "items": {
21049
+ "title": "ConversationRelationshipsLabelsDataSchema",
21050
+ "type": "object",
21051
+ "properties": {
21052
+ "type": {
21053
+ "type": "string"
21054
+ },
21055
+ "id": {
21056
+ "type": "string"
21057
+ }
21058
+ }
21059
+ }
21060
+ }
21061
+ }
21062
+ },
21063
+ "talent": {
21064
+ "title": "ConversationRelationshipsTalentSchema",
21065
+ "type": "object",
21066
+ "properties": {
21067
+ "data": {
21068
+ "title": "ConversationRelationshipsTalentDataSchema",
21069
+ "type": "object",
21070
+ "properties": {
21071
+ "type": {
21072
+ "type": "string"
21073
+ },
21074
+ "id": {
21075
+ "type": "string"
21076
+ }
21077
+ }
21078
+ }
21079
+ }
21080
+ },
21081
+ "job": {
21082
+ "title": "ConversationRelationshipsJobSchema",
21083
+ "type": "object",
21084
+ "properties": {
21085
+ "data": {
21086
+ "title": "ConversationRelationshipsJobDataSchema",
21087
+ "type": "object",
21088
+ "properties": {
21089
+ "type": {
21090
+ "type": "string"
21091
+ },
21092
+ "id": {
21093
+ "type": "string"
21094
+ }
21095
+ }
21096
+ }
21097
+ }
21098
+ }
21099
+ }
20827
21100
  }
20828
21101
  }
20829
21102
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartytalent/mcp-tools",
3
- "version": "0.9.7",
3
+ "version": "0.9.9",
4
4
  "description": "MCP tool definitions for SmartyTalent API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",