@smartytalent/mcp-tools 0.1.33-dev.26 → 0.1.33-dev.28

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 +738 -149
  2. package/package.json +1 -1
package/dist/tools.json CHANGED
@@ -10814,14 +10814,73 @@
10814
10814
  "inputSchema": {
10815
10815
  "type": "object",
10816
10816
  "properties": {
10817
- "filterStatus": {
10817
+ "filterFolder": {
10818
10818
  "type": "string",
10819
- "description": "Returns calls with the current status (active, archived). If not provided, the default value will be set to 'active'.",
10819
+ "description": "Filter by folder bucket. Mirrors the left-nav chips. Single-status\nfolders translate to filterStatus + filterDirection internally\n(drafts/scheduled/cancelled/archived/incoming/outgoing). Multi-\nstatus folders (active, missed) use a Scan path. Conflicts with\nexplicit filterStatus / filterDirection (request returns 400).",
10820
10820
  "enum": [
10821
+ "drafts",
10822
+ "scheduled",
10821
10823
  "active",
10824
+ "incoming",
10825
+ "outgoing",
10826
+ "missed",
10827
+ "cancelled",
10828
+ "archived"
10829
+ ]
10830
+ },
10831
+ "filterStatus": {
10832
+ "type": "string",
10833
+ "description": "Filter by status. Accepts single value or comma-separated list\n(e.g. `queued,ringing,in-progress`). Comma-list routes to the\nScan path (slower, no cursor pagination).",
10834
+ "enum": [
10835
+ "draft",
10836
+ "scheduled",
10837
+ "cancelled",
10838
+ "queued",
10839
+ "ringing",
10840
+ "in-progress",
10841
+ "completed",
10842
+ "failed",
10843
+ "no-answer",
10844
+ "busy",
10845
+ "voicemail",
10846
+ "abandoned",
10822
10847
  "archived"
10823
10848
  ]
10824
10849
  },
10850
+ "filterDirection": {
10851
+ "type": "string",
10852
+ "description": "Filter by direction (inbound or outbound).",
10853
+ "enum": [
10854
+ "inbound",
10855
+ "outbound"
10856
+ ]
10857
+ },
10858
+ "filterProtocol": {
10859
+ "type": "string",
10860
+ "description": "Filter by wire protocol. `phone` is PSTN via Twilio; `webrtc` reserved for the future recruiter Voice SDK.",
10861
+ "enum": [
10862
+ "phone",
10863
+ "webrtc"
10864
+ ]
10865
+ },
10866
+ "filterFromIdentifier": {
10867
+ "type": "string",
10868
+ "description": "Filter by caller's protocol-native handle (E.164 phone for PSTN). Indexed via FromIdentifierIndex GSI."
10869
+ },
10870
+ "filterConversationId": {
10871
+ "type": "string",
10872
+ "description": "Filter all calls in a conversation thread. Indexed via ConversationIdIndex GSI."
10873
+ },
10874
+ "filterIntent": {
10875
+ "type": "string",
10876
+ "description": "Filter by AI intent classifier output (inbound calls only). Post-filtered after pagination - acceptable while intent classification is small-scale.",
10877
+ "enum": [
10878
+ "brief_request",
10879
+ "sales_chat",
10880
+ "faq",
10881
+ "other"
10882
+ ]
10883
+ },
10825
10884
  "filterCreatedFrom": {
10826
10885
  "type": "string",
10827
10886
  "description": "Filters results to include only those created from the specified date and time. The value must be in ISO 8601 format."
@@ -10853,6 +10912,16 @@
10853
10912
  "pageBefore": {
10854
10913
  "type": "string",
10855
10914
  "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
10915
+ },
10916
+ "sort": {
10917
+ "type": "string",
10918
+ "description": "Sort order. Default `-created` (newest first). Currently\nsupports `-created`, `created`, `-modified`, `modified`. Sort\nby `-startedAt` / `-endedAt` / `-durationSec` deferred until\ncomposite GSIs land - see backend backlog #93.",
10919
+ "enum": [
10920
+ "-created",
10921
+ "created",
10922
+ "-modified",
10923
+ "modified"
10924
+ ]
10856
10925
  }
10857
10926
  }
10858
10927
  },
@@ -10889,104 +10958,296 @@
10889
10958
  "attributes": {
10890
10959
  "title": "CallAttributesSchema",
10891
10960
  "type": "object",
10961
+ "description": "Cross-protocol call attributes. Mirror of chat with voice-\nspecific extensions: lifecycle covers provider phases (queued\n-> ringing -> in-progress -> completed) plus the operator\nreview window (draft -> scheduled -> queued). aiMode toggles\nwhether the AI agent is the active speaker, a silent observer,\nor fully off. transcript + summary are multilingual dicts\nmirroring email/chat body shape; the call AI translate Step\nFunction fans them across tenant locales.",
10892
10962
  "properties": {
10893
- "name": {
10894
- "type": "string",
10895
- "description": "Call title, e.g. Inbound call from John"
10896
- },
10897
10963
  "direction": {
10898
10964
  "type": "string",
10899
10965
  "enum": [
10900
10966
  "inbound",
10901
- "outbound",
10902
- "ai-bot"
10967
+ "outbound"
10903
10968
  ],
10904
- "description": "Call direction"
10969
+ "description": "Call direction relative to boe (inbound = caller dialed boe; outbound = boe placed the call)."
10905
10970
  },
10906
- "callType": {
10971
+ "protocol": {
10907
10972
  "type": "string",
10908
10973
  "enum": [
10909
- "candidate-call",
10910
- "bot-setup",
10911
- "follow-up",
10912
- "screening",
10913
- "reference-check"
10974
+ "phone",
10975
+ "webrtc"
10914
10976
  ],
10915
- "description": "Type/purpose of the call"
10916
- },
10917
- "duration": {
10918
- "type": "integer",
10919
- "description": "Call duration in seconds"
10977
+ "description": "Wire protocol. Phone is PSTN via Twilio; WebRTC reserves the slot for the future recruiter Voice SDK in the admin web app."
10920
10978
  },
10921
- "outcome": {
10979
+ "status": {
10922
10980
  "type": "string",
10923
10981
  "enum": [
10924
- "connected",
10925
- "missed",
10926
- "voicemail",
10982
+ "draft",
10983
+ "scheduled",
10984
+ "cancelled",
10985
+ "queued",
10986
+ "ringing",
10987
+ "in-progress",
10988
+ "completed",
10989
+ "failed",
10927
10990
  "no-answer",
10928
- "busy"
10991
+ "busy",
10992
+ "voicemail",
10993
+ "abandoned",
10994
+ "archived"
10995
+ ],
10996
+ "description": "Lifecycle state. Outbound rows that go through an operator review window or explicit scheduling start at `draft` (editable) or `scheduled` (Schedule armed for fireAt); on Schedule fire they progress queued -> ringing -> in-progress -> completed (or failed / no-answer / busy / voicemail). `abandoned` covers inbound calls where the caller hung up before the AI answered. `cancelled` is operator hard-kill before dial. `archived` is a terminal soft-delete."
10997
+ },
10998
+ "fromIdentifier": {
10999
+ "type": "string",
11000
+ "description": "Caller's protocol-native handle (E.164 phone for PSTN, AAD object id for WebRTC)."
11001
+ },
11002
+ "fromName": {
11003
+ "type": "string",
11004
+ "description": "Display name of the caller at write time. Denormalised from the resolved principal."
11005
+ },
11006
+ "fromType": {
11007
+ "type": "string",
11008
+ "enum": [
11009
+ "user",
11010
+ "candidate",
11011
+ "talent",
11012
+ "guest"
10929
11013
  ],
10930
- "description": "Call outcome"
11014
+ "description": "Principal type of the caller."
10931
11015
  },
10932
- "callerNumber": {
11016
+ "toIdentifier": {
10933
11017
  "type": "string",
10934
- "description": "Caller phone number in E.164 format"
11018
+ "description": "Callee's protocol-native handle."
10935
11019
  },
10936
- "calledNumber": {
11020
+ "toName": {
10937
11021
  "type": "string",
10938
- "description": "Called phone number in E.164 format"
11022
+ "description": "Display name of the callee at write time."
10939
11023
  },
10940
- "callSid": {
11024
+ "toType": {
10941
11025
  "type": "string",
10942
- "description": "Twilio call SID"
11026
+ "enum": [
11027
+ "user",
11028
+ "candidate",
11029
+ "talent",
11030
+ "guest"
11031
+ ],
11032
+ "description": "Principal type of the callee."
10943
11033
  },
10944
11034
  "transcript": {
10945
11035
  "type": "object",
10946
- "description": "Localized transcript entries keyed by locale (e.g. en-US, pl-PL). Each value is an array of {speaker, speakerType, timestamp, endTimestamp, text}."
11036
+ "description": "Multilingual transcript keyed by BCP 47 locale (e.g. {`en-US`: `Hi`, `pl-PL`: `Cześć`}). Source locale is captured first; the AI translate Step Function fills in the rest of the tenant's active locales.",
11037
+ "additionalProperties": {
11038
+ "type": "string"
11039
+ }
10947
11040
  },
10948
- "speakerStats": {
10949
- "type": "array",
10950
- "description": "Speaker statistics with talk percentages and time segments",
10951
- "items": {
10952
- "type": "object"
11041
+ "summary": {
11042
+ "type": "object",
11043
+ "description": "Multilingual post-call summary keyed by BCP 47 locale. LLM-generated after call ends.",
11044
+ "additionalProperties": {
11045
+ "type": "string"
10953
11046
  }
10954
11047
  },
10955
- "recordingUrl": {
11048
+ "criteriaScoring": {
11049
+ "type": "object",
11050
+ "description": "Per-criterion scoring extracted from the transcript when the call is tied to a job (relationships.job). Map of criterion key -> {score, evidence, confidence}."
11051
+ },
11052
+ "startedAt": {
10956
11053
  "type": "string",
10957
- "description": "URL or S3 path to call recording"
11054
+ "description": "ISO 8601 timestamp when the call started (ringing began). Set on outbound dial or inbound webhook arrival."
10958
11055
  },
10959
- "hasRecording": {
10960
- "type": "boolean",
10961
- "description": "Whether a recording exists for this call"
11056
+ "answeredAt": {
11057
+ "type": "string",
11058
+ "description": "ISO 8601 timestamp when the call connected (recipient picked up)."
10962
11059
  },
10963
- "hasTranscript": {
11060
+ "endedAt": {
11061
+ "type": "string",
11062
+ "description": "ISO 8601 timestamp when the call ended (terminal status reached)."
11063
+ },
11064
+ "durationSec": {
11065
+ "type": "integer",
11066
+ "description": "Call duration in seconds (endedAt - answeredAt)."
11067
+ },
11068
+ "scheduledFireAt": {
11069
+ "type": "string",
11070
+ "description": "ISO 8601 timestamp at which the Schedule armed for this call will fire and place the outbound dial. Operators can PATCH to reschedule; the eventbus PATCHes the underlying Schedule row in lockstep. Mirror of email/chat scheduledFireAt."
11071
+ },
11072
+ "scheduleId": {
11073
+ "type": "string",
11074
+ "description": "FK denormalisation of relationships.schedule for cheap read paths."
11075
+ },
11076
+ "conferenceSid": {
11077
+ "type": "string",
11078
+ "description": "Twilio conference id when the call is a multi-party (3-way) conference. Null for 1:1."
11079
+ },
11080
+ "isConference": {
10964
11081
  "type": "boolean",
10965
- "description": "Whether a transcript exists for this call"
11082
+ "description": "True when the call is a multi-party conference (recruiter joining via Voice SDK + candidate + boe AI). False for 1:1."
11083
+ },
11084
+ "aiMode": {
11085
+ "type": "string",
11086
+ "enum": [
11087
+ "active",
11088
+ "observer",
11089
+ "silent"
11090
+ ],
11091
+ "description": "How the AI agent participates. `active` = AI speaks (default for boe ↔ candidate). `observer` = AI listens, transcribes, surfaces real-time suggestions to the recruiter UI but does not speak. `silent` = recording + post-call analysis only, no AI in the call."
10966
11092
  },
10967
- "attendees": {
11093
+ "plannedTopics": {
10968
11094
  "type": "array",
10969
- "description": "Call attendees with name and role",
11095
+ "description": "List of topic keys the AI agent should cover during the call (e.g. ['salary', 'experience', 'languagesSpoken']). Operator-editable in the review window before fire.",
10970
11096
  "items": {
10971
- "type": "object"
11097
+ "type": "string"
10972
11098
  }
10973
11099
  },
10974
- "aiNotes": {
11100
+ "systemPrompt": {
11101
+ "type": "string",
11102
+ "description": "Operator-editable agent instructions used as the OpenAI Realtime session's system prompt at fire time. Mirror of email body in the operator review window: edit before fire, the dialed call uses the latest version."
11103
+ },
11104
+ "recording": {
10975
11105
  "type": "object",
10976
- "description": "Localized AI-generated notes keyed by locale. Each value contains summary, keyNotes, topicsDiscussed, sentiment."
11106
+ "description": "Recording artifacts. Raw G.711 µ-law file is captured live; the audio convert Lambda emits the MP3 derivatives post-call.",
11107
+ "properties": {
11108
+ "type": {
11109
+ "type": "string",
11110
+ "enum": [
11111
+ "dual-channel",
11112
+ "mixed"
11113
+ ],
11114
+ "description": "Recording layout: dual-channel separates speakers per Twilio leg; mixed is single-track combined."
11115
+ },
11116
+ "rawUrl": {
11117
+ "type": "string",
11118
+ "description": "S3 URI to the raw G.711 µ-law audio."
11119
+ },
11120
+ "mixedMp3Url": {
11121
+ "type": "string",
11122
+ "description": "S3 URI to the mixed conversation MP3."
11123
+ },
11124
+ "humanOnlyMp3Url": {
11125
+ "type": "string",
11126
+ "description": "S3 URI to the human-only MP3 (silent during AI turns)."
11127
+ },
11128
+ "aiOnlyMp3Url": {
11129
+ "type": "string",
11130
+ "description": "S3 URI to the AI-only MP3 (silent during human turns)."
11131
+ }
11132
+ }
11133
+ },
11134
+ "languageCode": {
11135
+ "type": "string",
11136
+ "description": "BCP 47 locale of the call (the locale key initially populated in transcript). Detected from the caller's settings or call audio."
10977
11137
  },
10978
11138
  "shortCode": {
10979
11139
  "type": "string",
10980
- "description": "Short code identifier"
11140
+ "description": "Unique short identifier (provider/lookup correlation)."
10981
11141
  },
10982
- "status": {
11142
+ "transcriptSegments": {
11143
+ "type": "array",
11144
+ "description": "Structured transcript with timing. Each segment is one turn captured live by the Realtime API. Single shape (NOT translated); text is in `languageCode`. Drives the audio player's clickable speaker timeline.",
11145
+ "items": {
11146
+ "type": "object",
11147
+ "properties": {
11148
+ "startMs": {
11149
+ "type": "integer",
11150
+ "description": "Offset from call start in milliseconds when the speaker began this turn."
11151
+ },
11152
+ "endMs": {
11153
+ "type": "integer",
11154
+ "description": "Offset from call start in milliseconds when the speaker finished this turn."
11155
+ },
11156
+ "speakerType": {
11157
+ "type": "string",
11158
+ "enum": [
11159
+ "ai",
11160
+ "human"
11161
+ ],
11162
+ "description": "Which side spoke this turn."
11163
+ },
11164
+ "speakerName": {
11165
+ "type": "string",
11166
+ "description": "Display name of the speaker at write time."
11167
+ },
11168
+ "text": {
11169
+ "type": "string",
11170
+ "description": "What the speaker said, in `languageCode`."
11171
+ }
11172
+ }
11173
+ }
11174
+ },
11175
+ "speakerStats": {
11176
+ "type": "array",
11177
+ "description": "Per-speaker talk statistics computed once on call finalization. Used by the timeline UI to show talk-time bars.",
11178
+ "items": {
11179
+ "type": "object",
11180
+ "properties": {
11181
+ "speakerType": {
11182
+ "type": "string",
11183
+ "enum": [
11184
+ "ai",
11185
+ "human"
11186
+ ]
11187
+ },
11188
+ "speakerName": {
11189
+ "type": "string"
11190
+ },
11191
+ "talkPercentageBp": {
11192
+ "type": "integer",
11193
+ "description": "Talk-time percentage in basis points (10000 = 100.00%). Integer to avoid float rounding mismatches across clients."
11194
+ }
11195
+ }
11196
+ }
11197
+ },
11198
+ "keyNotes": {
11199
+ "type": "array",
11200
+ "description": "AI-generated bullet points distilled from the transcript. In `languageCode` (NOT multilingual - single shape; FE renders as-is).",
11201
+ "items": {
11202
+ "type": "string"
11203
+ }
11204
+ },
11205
+ "topicsDiscussed": {
11206
+ "type": "array",
11207
+ "description": "Stable facet keys (e.g. `salary`, `experience`, `languagesSpoken`) covered in the call. FE renders via shared `callTopics` dictionary for human-readable labels.",
11208
+ "items": {
11209
+ "type": "string"
11210
+ }
11211
+ },
11212
+ "sentiment": {
11213
+ "type": "string",
11214
+ "enum": [
11215
+ "positive",
11216
+ "neutral",
11217
+ "negative",
11218
+ "mixed"
11219
+ ],
11220
+ "description": "AI-derived sentiment of the conversation as a whole."
11221
+ },
11222
+ "summaryGeneratedAt": {
11223
+ "type": "string",
11224
+ "description": "ISO 8601 timestamp when the AI summary pipeline (keyNotes + topicsDiscussed + sentiment + summary) finalized. Null until the post-call AI Step Function completes."
11225
+ },
11226
+ "folder": {
10983
11227
  "type": "string",
10984
11228
  "enum": [
11229
+ "drafts",
11230
+ "scheduled",
10985
11231
  "active",
10986
- "draft",
10987
- "archived",
10988
- "failed"
10989
- ]
11232
+ "incoming",
11233
+ "outgoing",
11234
+ "missed",
11235
+ "cancelled",
11236
+ "archived"
11237
+ ],
11238
+ "description": "Server-derived bucket for the left-nav / filter chips, computed from (direction, status). Mirror of email/chat folder. UI uses this directly; do NOT compute on the client."
11239
+ },
11240
+ "isLive": {
11241
+ "type": "boolean",
11242
+ "description": "Server-derived: true when status is in {queued, ringing, in-progress}. Drives the live indicator + polling decision in the UI."
11243
+ },
11244
+ "hasRecording": {
11245
+ "type": "boolean",
11246
+ "description": "Server-derived: true when recording.mixedMp3Url is present. Lets the list page show a play icon without sending the heavy `recording` block."
11247
+ },
11248
+ "hasTranscript": {
11249
+ "type": "boolean",
11250
+ "description": "Server-derived: true when transcriptSegments has any entries OR transcript dict has any locale keys. Lets the list page show a transcript icon without sending the heavy `transcript`/`transcriptSegments` payload."
10990
11251
  },
10991
11252
  "timestamps": {
10992
11253
  "title": "ResourceTimestampsSchema",
@@ -11007,52 +11268,184 @@
11007
11268
  "relationships": {
11008
11269
  "title": "CallRelationshipsSchema",
11009
11270
  "type": "object",
11271
+ "description": "Relationship slots on the call resource. All to-one. Direction\n+ attributes.fromType / toType tell you which side of the\nconversation each principal occupies. Mirror of chat's slot\nset with two voice-specific additions: `job` (call about a\nspecific opening) and `brief` (call collecting / clarifying\na specific brief). `boeUser` is split from `user` so the AI\nagent has a dedicated slot - `user` is reserved for human\ncounterparties (3-way conference recruiter, future user-to-\nuser webapp/Teams chat).",
11010
11272
  "properties": {
11011
- "translations": {
11012
- "title": "CallRelationshipsTranslationsSchema",
11273
+ "conversation": {
11274
+ "title": "CallRelationshipsConversationSchema",
11275
+ "description": "Thread the call belongs to. Phone calls in the same workflow run share a conversation; per-thread queries via ConversationIdIndex.",
11013
11276
  "type": "object",
11014
11277
  "properties": {
11015
11278
  "data": {
11016
- "type": "array",
11017
- "items": {
11018
- "title": "CallRelationshipsTranslationsDataSchema",
11019
- "type": "object",
11020
- "properties": {
11021
- "type": {
11022
- "type": "string"
11023
- },
11024
- "id": {
11025
- "type": "string"
11026
- }
11279
+ "title": "CallRelationshipsConversationDataSchema",
11280
+ "type": "object",
11281
+ "properties": {
11282
+ "type": {
11283
+ "type": "string"
11284
+ },
11285
+ "id": {
11286
+ "type": "string"
11027
11287
  }
11028
11288
  }
11029
11289
  }
11030
11290
  }
11031
- }
11032
- }
11033
- }
11034
- }
11035
- }
11036
- }
11037
- },
11038
- "_meta": {
11039
- "method": "POST",
11040
- "path": "/v1/calls",
11041
- "operationId": "createCall"
11042
- }
11043
- },
11044
- {
11045
- "name": "calls_options",
11046
- "description": "Calls Options",
11047
- "inputSchema": {
11048
- "type": "object",
11049
- "properties": {}
11050
- },
11051
- "_meta": {
11052
- "method": "OPTIONS",
11053
- "path": "/v1/calls",
11054
- "operationId": "callsOptions"
11055
- }
11291
+ },
11292
+ "candidate": {
11293
+ "title": "CallRelationshipsCandidateSchema",
11294
+ "description": "External candidate principal. Set when fromType=candidate (inbound) or toType=candidate (outbound).",
11295
+ "type": "object",
11296
+ "properties": {
11297
+ "data": {
11298
+ "title": "CallRelationshipsCandidateDataSchema",
11299
+ "type": "object",
11300
+ "properties": {
11301
+ "type": {
11302
+ "type": "string"
11303
+ },
11304
+ "id": {
11305
+ "type": "string"
11306
+ }
11307
+ }
11308
+ }
11309
+ }
11310
+ },
11311
+ "talent": {
11312
+ "title": "CallRelationshipsTalentSchema",
11313
+ "description": "External talent principal. Set when fromType=talent (inbound) or toType=talent (outbound).",
11314
+ "type": "object",
11315
+ "properties": {
11316
+ "data": {
11317
+ "title": "CallRelationshipsTalentDataSchema",
11318
+ "type": "object",
11319
+ "properties": {
11320
+ "type": {
11321
+ "type": "string"
11322
+ },
11323
+ "id": {
11324
+ "type": "string"
11325
+ }
11326
+ }
11327
+ }
11328
+ }
11329
+ },
11330
+ "user": {
11331
+ "title": "CallRelationshipsUserSchema",
11332
+ "description": "Internal human user (employee). Reserved for 3-way conference recruiters (boe + recruiter + candidate). Today this is typically null on boe-mediated 1:1 calls - the boe AI agent goes in `boeUser`, not here.",
11333
+ "type": "object",
11334
+ "properties": {
11335
+ "data": {
11336
+ "title": "CallRelationshipsUserDataSchema",
11337
+ "type": "object",
11338
+ "properties": {
11339
+ "type": {
11340
+ "type": "string"
11341
+ },
11342
+ "id": {
11343
+ "type": "string"
11344
+ }
11345
+ }
11346
+ }
11347
+ }
11348
+ },
11349
+ "boeUser": {
11350
+ "title": "CallRelationshipsBoeUserSchema",
11351
+ "description": "Boe AI agent involved in the call. Mirror of tenant.relationships.boeUser - always populated when boe is on the call. Splitting this from the generic `user` slot keeps the semantics clean: `user` is for human counterparties, `boeUser` is the AI agent.",
11352
+ "type": "object",
11353
+ "properties": {
11354
+ "data": {
11355
+ "title": "CallRelationshipsBoeUserDataSchema",
11356
+ "type": "object",
11357
+ "properties": {
11358
+ "type": {
11359
+ "type": "string"
11360
+ },
11361
+ "id": {
11362
+ "type": "string"
11363
+ }
11364
+ }
11365
+ }
11366
+ }
11367
+ },
11368
+ "job": {
11369
+ "title": "CallRelationshipsJobSchema",
11370
+ "description": "Job opening this call is about. Set on screening calls + phone-brief outbound clarifications targeting a specific opening. Drives criteriaScoring against the job's criteria.",
11371
+ "type": "object",
11372
+ "properties": {
11373
+ "data": {
11374
+ "title": "CallRelationshipsJobDataSchema",
11375
+ "type": "object",
11376
+ "properties": {
11377
+ "type": {
11378
+ "type": "string"
11379
+ },
11380
+ "id": {
11381
+ "type": "string"
11382
+ }
11383
+ }
11384
+ }
11385
+ }
11386
+ },
11387
+ "brief": {
11388
+ "title": "CallRelationshipsBriefSchema",
11389
+ "description": "Brief this call is collecting / clarifying. Set on phone-brief discovery + clarification calls. Drives the `Calls for brief X` view in the operator UI.",
11390
+ "type": "object",
11391
+ "properties": {
11392
+ "data": {
11393
+ "title": "CallRelationshipsBriefDataSchema",
11394
+ "type": "object",
11395
+ "properties": {
11396
+ "type": {
11397
+ "type": "string"
11398
+ },
11399
+ "id": {
11400
+ "type": "string"
11401
+ }
11402
+ }
11403
+ }
11404
+ }
11405
+ },
11406
+ "schedule": {
11407
+ "title": "CallRelationshipsScheduleSchema",
11408
+ "description": "Schedule row armed for this call's outbound dial. Set when scheduledFireAt is populated; null on inbound rows or on outbound rows that bypass the review window. Operators reschedule/cancel via PATCH/DELETE on the call resource - the eventbus reflects those changes onto the Schedule row, never the other way around.",
11409
+ "type": "object",
11410
+ "properties": {
11411
+ "data": {
11412
+ "title": "CallRelationshipsScheduleDataSchema",
11413
+ "type": "object",
11414
+ "properties": {
11415
+ "type": {
11416
+ "type": "string"
11417
+ },
11418
+ "id": {
11419
+ "type": "string"
11420
+ }
11421
+ }
11422
+ }
11423
+ }
11424
+ }
11425
+ }
11426
+ }
11427
+ }
11428
+ }
11429
+ }
11430
+ },
11431
+ "_meta": {
11432
+ "method": "POST",
11433
+ "path": "/v1/calls",
11434
+ "operationId": "createCall"
11435
+ }
11436
+ },
11437
+ {
11438
+ "name": "calls_options",
11439
+ "description": "Calls Options",
11440
+ "inputSchema": {
11441
+ "type": "object",
11442
+ "properties": {}
11443
+ },
11444
+ "_meta": {
11445
+ "method": "OPTIONS",
11446
+ "path": "/v1/calls",
11447
+ "operationId": "callsOptions"
11448
+ }
11056
11449
  },
11057
11450
  {
11058
11451
  "name": "show_call",
@@ -11098,104 +11491,296 @@
11098
11491
  "attributes": {
11099
11492
  "title": "CallAttributesSchema",
11100
11493
  "type": "object",
11494
+ "description": "Cross-protocol call attributes. Mirror of chat with voice-\nspecific extensions: lifecycle covers provider phases (queued\n-> ringing -> in-progress -> completed) plus the operator\nreview window (draft -> scheduled -> queued). aiMode toggles\nwhether the AI agent is the active speaker, a silent observer,\nor fully off. transcript + summary are multilingual dicts\nmirroring email/chat body shape; the call AI translate Step\nFunction fans them across tenant locales.",
11101
11495
  "properties": {
11102
- "name": {
11103
- "type": "string",
11104
- "description": "Call title, e.g. Inbound call from John"
11105
- },
11106
11496
  "direction": {
11107
11497
  "type": "string",
11108
11498
  "enum": [
11109
11499
  "inbound",
11110
- "outbound",
11111
- "ai-bot"
11500
+ "outbound"
11112
11501
  ],
11113
- "description": "Call direction"
11502
+ "description": "Call direction relative to boe (inbound = caller dialed boe; outbound = boe placed the call)."
11114
11503
  },
11115
- "callType": {
11504
+ "protocol": {
11116
11505
  "type": "string",
11117
11506
  "enum": [
11118
- "candidate-call",
11119
- "bot-setup",
11120
- "follow-up",
11121
- "screening",
11122
- "reference-check"
11507
+ "phone",
11508
+ "webrtc"
11123
11509
  ],
11124
- "description": "Type/purpose of the call"
11510
+ "description": "Wire protocol. Phone is PSTN via Twilio; WebRTC reserves the slot for the future recruiter Voice SDK in the admin web app."
11125
11511
  },
11126
- "duration": {
11127
- "type": "integer",
11128
- "description": "Call duration in seconds"
11129
- },
11130
- "outcome": {
11512
+ "status": {
11131
11513
  "type": "string",
11132
11514
  "enum": [
11133
- "connected",
11134
- "missed",
11135
- "voicemail",
11515
+ "draft",
11516
+ "scheduled",
11517
+ "cancelled",
11518
+ "queued",
11519
+ "ringing",
11520
+ "in-progress",
11521
+ "completed",
11522
+ "failed",
11136
11523
  "no-answer",
11137
- "busy"
11524
+ "busy",
11525
+ "voicemail",
11526
+ "abandoned",
11527
+ "archived"
11138
11528
  ],
11139
- "description": "Call outcome"
11529
+ "description": "Lifecycle state. Outbound rows that go through an operator review window or explicit scheduling start at `draft` (editable) or `scheduled` (Schedule armed for fireAt); on Schedule fire they progress queued -> ringing -> in-progress -> completed (or failed / no-answer / busy / voicemail). `abandoned` covers inbound calls where the caller hung up before the AI answered. `cancelled` is operator hard-kill before dial. `archived` is a terminal soft-delete."
11530
+ },
11531
+ "fromIdentifier": {
11532
+ "type": "string",
11533
+ "description": "Caller's protocol-native handle (E.164 phone for PSTN, AAD object id for WebRTC)."
11534
+ },
11535
+ "fromName": {
11536
+ "type": "string",
11537
+ "description": "Display name of the caller at write time. Denormalised from the resolved principal."
11140
11538
  },
11141
- "callerNumber": {
11539
+ "fromType": {
11142
11540
  "type": "string",
11143
- "description": "Caller phone number in E.164 format"
11541
+ "enum": [
11542
+ "user",
11543
+ "candidate",
11544
+ "talent",
11545
+ "guest"
11546
+ ],
11547
+ "description": "Principal type of the caller."
11144
11548
  },
11145
- "calledNumber": {
11549
+ "toIdentifier": {
11146
11550
  "type": "string",
11147
- "description": "Called phone number in E.164 format"
11551
+ "description": "Callee's protocol-native handle."
11148
11552
  },
11149
- "callSid": {
11553
+ "toName": {
11150
11554
  "type": "string",
11151
- "description": "Twilio call SID"
11555
+ "description": "Display name of the callee at write time."
11556
+ },
11557
+ "toType": {
11558
+ "type": "string",
11559
+ "enum": [
11560
+ "user",
11561
+ "candidate",
11562
+ "talent",
11563
+ "guest"
11564
+ ],
11565
+ "description": "Principal type of the callee."
11152
11566
  },
11153
11567
  "transcript": {
11154
11568
  "type": "object",
11155
- "description": "Localized transcript entries keyed by locale (e.g. en-US, pl-PL). Each value is an array of {speaker, speakerType, timestamp, endTimestamp, text}."
11569
+ "description": "Multilingual transcript keyed by BCP 47 locale (e.g. {`en-US`: `Hi`, `pl-PL`: `Cześć`}). Source locale is captured first; the AI translate Step Function fills in the rest of the tenant's active locales.",
11570
+ "additionalProperties": {
11571
+ "type": "string"
11572
+ }
11156
11573
  },
11157
- "speakerStats": {
11158
- "type": "array",
11159
- "description": "Speaker statistics with talk percentages and time segments",
11160
- "items": {
11161
- "type": "object"
11574
+ "summary": {
11575
+ "type": "object",
11576
+ "description": "Multilingual post-call summary keyed by BCP 47 locale. LLM-generated after call ends.",
11577
+ "additionalProperties": {
11578
+ "type": "string"
11162
11579
  }
11163
11580
  },
11164
- "recordingUrl": {
11581
+ "criteriaScoring": {
11582
+ "type": "object",
11583
+ "description": "Per-criterion scoring extracted from the transcript when the call is tied to a job (relationships.job). Map of criterion key -> {score, evidence, confidence}."
11584
+ },
11585
+ "startedAt": {
11165
11586
  "type": "string",
11166
- "description": "URL or S3 path to call recording"
11587
+ "description": "ISO 8601 timestamp when the call started (ringing began). Set on outbound dial or inbound webhook arrival."
11167
11588
  },
11168
- "hasRecording": {
11169
- "type": "boolean",
11170
- "description": "Whether a recording exists for this call"
11589
+ "answeredAt": {
11590
+ "type": "string",
11591
+ "description": "ISO 8601 timestamp when the call connected (recipient picked up)."
11171
11592
  },
11172
- "hasTranscript": {
11593
+ "endedAt": {
11594
+ "type": "string",
11595
+ "description": "ISO 8601 timestamp when the call ended (terminal status reached)."
11596
+ },
11597
+ "durationSec": {
11598
+ "type": "integer",
11599
+ "description": "Call duration in seconds (endedAt - answeredAt)."
11600
+ },
11601
+ "scheduledFireAt": {
11602
+ "type": "string",
11603
+ "description": "ISO 8601 timestamp at which the Schedule armed for this call will fire and place the outbound dial. Operators can PATCH to reschedule; the eventbus PATCHes the underlying Schedule row in lockstep. Mirror of email/chat scheduledFireAt."
11604
+ },
11605
+ "scheduleId": {
11606
+ "type": "string",
11607
+ "description": "FK denormalisation of relationships.schedule for cheap read paths."
11608
+ },
11609
+ "conferenceSid": {
11610
+ "type": "string",
11611
+ "description": "Twilio conference id when the call is a multi-party (3-way) conference. Null for 1:1."
11612
+ },
11613
+ "isConference": {
11173
11614
  "type": "boolean",
11174
- "description": "Whether a transcript exists for this call"
11615
+ "description": "True when the call is a multi-party conference (recruiter joining via Voice SDK + candidate + boe AI). False for 1:1."
11616
+ },
11617
+ "aiMode": {
11618
+ "type": "string",
11619
+ "enum": [
11620
+ "active",
11621
+ "observer",
11622
+ "silent"
11623
+ ],
11624
+ "description": "How the AI agent participates. `active` = AI speaks (default for boe ↔ candidate). `observer` = AI listens, transcribes, surfaces real-time suggestions to the recruiter UI but does not speak. `silent` = recording + post-call analysis only, no AI in the call."
11175
11625
  },
11176
- "attendees": {
11626
+ "plannedTopics": {
11177
11627
  "type": "array",
11178
- "description": "Call attendees with name and role",
11628
+ "description": "List of topic keys the AI agent should cover during the call (e.g. ['salary', 'experience', 'languagesSpoken']). Operator-editable in the review window before fire.",
11179
11629
  "items": {
11180
- "type": "object"
11630
+ "type": "string"
11181
11631
  }
11182
11632
  },
11183
- "aiNotes": {
11633
+ "systemPrompt": {
11634
+ "type": "string",
11635
+ "description": "Operator-editable agent instructions used as the OpenAI Realtime session's system prompt at fire time. Mirror of email body in the operator review window: edit before fire, the dialed call uses the latest version."
11636
+ },
11637
+ "recording": {
11184
11638
  "type": "object",
11185
- "description": "Localized AI-generated notes keyed by locale. Each value contains summary, keyNotes, topicsDiscussed, sentiment."
11639
+ "description": "Recording artifacts. Raw G.711 µ-law file is captured live; the audio convert Lambda emits the MP3 derivatives post-call.",
11640
+ "properties": {
11641
+ "type": {
11642
+ "type": "string",
11643
+ "enum": [
11644
+ "dual-channel",
11645
+ "mixed"
11646
+ ],
11647
+ "description": "Recording layout: dual-channel separates speakers per Twilio leg; mixed is single-track combined."
11648
+ },
11649
+ "rawUrl": {
11650
+ "type": "string",
11651
+ "description": "S3 URI to the raw G.711 µ-law audio."
11652
+ },
11653
+ "mixedMp3Url": {
11654
+ "type": "string",
11655
+ "description": "S3 URI to the mixed conversation MP3."
11656
+ },
11657
+ "humanOnlyMp3Url": {
11658
+ "type": "string",
11659
+ "description": "S3 URI to the human-only MP3 (silent during AI turns)."
11660
+ },
11661
+ "aiOnlyMp3Url": {
11662
+ "type": "string",
11663
+ "description": "S3 URI to the AI-only MP3 (silent during human turns)."
11664
+ }
11665
+ }
11666
+ },
11667
+ "languageCode": {
11668
+ "type": "string",
11669
+ "description": "BCP 47 locale of the call (the locale key initially populated in transcript). Detected from the caller's settings or call audio."
11186
11670
  },
11187
11671
  "shortCode": {
11188
11672
  "type": "string",
11189
- "description": "Short code identifier"
11673
+ "description": "Unique short identifier (provider/lookup correlation)."
11190
11674
  },
11191
- "status": {
11675
+ "transcriptSegments": {
11676
+ "type": "array",
11677
+ "description": "Structured transcript with timing. Each segment is one turn captured live by the Realtime API. Single shape (NOT translated); text is in `languageCode`. Drives the audio player's clickable speaker timeline.",
11678
+ "items": {
11679
+ "type": "object",
11680
+ "properties": {
11681
+ "startMs": {
11682
+ "type": "integer",
11683
+ "description": "Offset from call start in milliseconds when the speaker began this turn."
11684
+ },
11685
+ "endMs": {
11686
+ "type": "integer",
11687
+ "description": "Offset from call start in milliseconds when the speaker finished this turn."
11688
+ },
11689
+ "speakerType": {
11690
+ "type": "string",
11691
+ "enum": [
11692
+ "ai",
11693
+ "human"
11694
+ ],
11695
+ "description": "Which side spoke this turn."
11696
+ },
11697
+ "speakerName": {
11698
+ "type": "string",
11699
+ "description": "Display name of the speaker at write time."
11700
+ },
11701
+ "text": {
11702
+ "type": "string",
11703
+ "description": "What the speaker said, in `languageCode`."
11704
+ }
11705
+ }
11706
+ }
11707
+ },
11708
+ "speakerStats": {
11709
+ "type": "array",
11710
+ "description": "Per-speaker talk statistics computed once on call finalization. Used by the timeline UI to show talk-time bars.",
11711
+ "items": {
11712
+ "type": "object",
11713
+ "properties": {
11714
+ "speakerType": {
11715
+ "type": "string",
11716
+ "enum": [
11717
+ "ai",
11718
+ "human"
11719
+ ]
11720
+ },
11721
+ "speakerName": {
11722
+ "type": "string"
11723
+ },
11724
+ "talkPercentageBp": {
11725
+ "type": "integer",
11726
+ "description": "Talk-time percentage in basis points (10000 = 100.00%). Integer to avoid float rounding mismatches across clients."
11727
+ }
11728
+ }
11729
+ }
11730
+ },
11731
+ "keyNotes": {
11732
+ "type": "array",
11733
+ "description": "AI-generated bullet points distilled from the transcript. In `languageCode` (NOT multilingual - single shape; FE renders as-is).",
11734
+ "items": {
11735
+ "type": "string"
11736
+ }
11737
+ },
11738
+ "topicsDiscussed": {
11739
+ "type": "array",
11740
+ "description": "Stable facet keys (e.g. `salary`, `experience`, `languagesSpoken`) covered in the call. FE renders via shared `callTopics` dictionary for human-readable labels.",
11741
+ "items": {
11742
+ "type": "string"
11743
+ }
11744
+ },
11745
+ "sentiment": {
11746
+ "type": "string",
11747
+ "enum": [
11748
+ "positive",
11749
+ "neutral",
11750
+ "negative",
11751
+ "mixed"
11752
+ ],
11753
+ "description": "AI-derived sentiment of the conversation as a whole."
11754
+ },
11755
+ "summaryGeneratedAt": {
11756
+ "type": "string",
11757
+ "description": "ISO 8601 timestamp when the AI summary pipeline (keyNotes + topicsDiscussed + sentiment + summary) finalized. Null until the post-call AI Step Function completes."
11758
+ },
11759
+ "folder": {
11192
11760
  "type": "string",
11193
11761
  "enum": [
11762
+ "drafts",
11763
+ "scheduled",
11194
11764
  "active",
11195
- "draft",
11196
- "archived",
11197
- "failed"
11198
- ]
11765
+ "incoming",
11766
+ "outgoing",
11767
+ "missed",
11768
+ "cancelled",
11769
+ "archived"
11770
+ ],
11771
+ "description": "Server-derived bucket for the left-nav / filter chips, computed from (direction, status). Mirror of email/chat folder. UI uses this directly; do NOT compute on the client."
11772
+ },
11773
+ "isLive": {
11774
+ "type": "boolean",
11775
+ "description": "Server-derived: true when status is in {queued, ringing, in-progress}. Drives the live indicator + polling decision in the UI."
11776
+ },
11777
+ "hasRecording": {
11778
+ "type": "boolean",
11779
+ "description": "Server-derived: true when recording.mixedMp3Url is present. Lets the list page show a play icon without sending the heavy `recording` block."
11780
+ },
11781
+ "hasTranscript": {
11782
+ "type": "boolean",
11783
+ "description": "Server-derived: true when transcriptSegments has any entries OR transcript dict has any locale keys. Lets the list page show a transcript icon without sending the heavy `transcript`/`transcriptSegments` payload."
11199
11784
  },
11200
11785
  "timestamps": {
11201
11786
  "title": "ResourceTimestampsSchema",
@@ -12480,6 +13065,8 @@
12480
13065
  "description": "Only return states for this resource type.",
12481
13066
  "enum": [
12482
13067
  "emails",
13068
+ "chats",
13069
+ "calls",
12483
13070
  "candidates",
12484
13071
  "conversations",
12485
13072
  "jobs",
@@ -12801,9 +13388,11 @@
12801
13388
  "properties": {
12802
13389
  "filterResourceType": {
12803
13390
  "type": "string",
12804
- "description": "Only return aggregates for this resource type (e.g. emails).",
13391
+ "description": "Only return aggregates for this resource type (e.g. emails, chats, calls).",
12805
13392
  "enum": [
12806
13393
  "emails",
13394
+ "chats",
13395
+ "calls",
12807
13396
  "candidates",
12808
13397
  "conversations",
12809
13398
  "jobs",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartytalent/mcp-tools",
3
- "version": "0.1.33-dev.26",
3
+ "version": "0.1.33-dev.28",
4
4
  "description": "MCP tool definitions for SmartyTalent API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",