@ttctl/mcp 0.1.0-rc.4 → 0.1.0-rc.5
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/dist/tools/interest_requests.d.ts +29 -0
- package/dist/tools/interest_requests.d.ts.map +1 -1
- package/dist/tools/interest_requests.js +175 -0
- package/dist/tools/interest_requests.js.map +1 -1
- package/dist/tools/profile/employment.d.ts.map +1 -1
- package/dist/tools/profile/employment.js +50 -12
- package/dist/tools/profile/employment.js.map +1 -1
- package/dist/tools/profile_skills_add.d.ts.map +1 -1
- package/dist/tools/profile_skills_add.js +51 -12
- package/dist/tools/profile_skills_add.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { applications } from "@ttctl/core";
|
|
2
3
|
import { type ToolRegistrationContext } from "./_shared.js";
|
|
3
4
|
/**
|
|
4
5
|
* Project an activity-item row into the trim "Interest Request" shape the
|
|
@@ -6,11 +7,28 @@ import { type ToolRegistrationContext } from "./_shared.js";
|
|
|
6
7
|
* to integer days. Returns the same `id` so callers can drill into
|
|
7
8
|
* `ttctl_applications_show` for the full detail view.
|
|
8
9
|
*
|
|
10
|
+
* **`fixedRate` (#410)**: surfaces the recruiter-pinned Fixed rate the
|
|
11
|
+
* Toptal portal renders next to the IR. Lifted from the row's
|
|
12
|
+
* `availabilityRequest.metadata.offeredHourlyRate` via the core
|
|
13
|
+
* `applications.list()` projection. `null` when the AR carries no
|
|
14
|
+
* Fixed-rate offer (defensive — every recruiter-initiated IR observed
|
|
15
|
+
* in the wild has carried one).
|
|
16
|
+
*
|
|
9
17
|
* @internal Exported for unit tests.
|
|
10
18
|
*/
|
|
11
19
|
export interface InterestRequestRow {
|
|
12
20
|
/** Activity-item id; pass to `ttctl_applications_show` for detail. */
|
|
13
21
|
id: string;
|
|
22
|
+
/**
|
|
23
|
+
* **AvailabilityRequest id** (#411). The handle the write-side IR
|
|
24
|
+
* mutations (`ttctl_interest_requests_accept` /
|
|
25
|
+
* `ttctl_interest_requests_reject`) require. Distinct from `id`
|
|
26
|
+
* above, which is the activity-item id used by `_show`. `null` when
|
|
27
|
+
* the activity row carries no AR (theoretically possible if a row
|
|
28
|
+
* is classified into `ON_RECRUITER_REVIEW` without an underlying AR,
|
|
29
|
+
* though every observed IR in the wild has carried one).
|
|
30
|
+
*/
|
|
31
|
+
availabilityRequestId: string | null;
|
|
14
32
|
/** Server-rendered status label (e.g. "Job Interest Request"). */
|
|
15
33
|
statusVerbose: string;
|
|
16
34
|
/** Underlying job title (may be null if the wire elided it). */
|
|
@@ -23,6 +41,13 @@ export interface InterestRequestRow {
|
|
|
23
41
|
lastUpdatedAt: string;
|
|
24
42
|
/** Whole days between `lastUpdatedAt` and `now`; null if unparseable. */
|
|
25
43
|
daysPending: number | null;
|
|
44
|
+
/**
|
|
45
|
+
* Recruiter-pinned Fixed rate (#410), in the standard Money shape.
|
|
46
|
+
* `null` when no Fixed-rate offer is present on the row. Use
|
|
47
|
+
* `fixedRate.decimal` for numeric comparison, `fixedRate.verbose` for
|
|
48
|
+
* pretty rendering (server-formatted, e.g. `"$77.00/hr"`).
|
|
49
|
+
*/
|
|
50
|
+
fixedRate: applications.FixedRate | null;
|
|
26
51
|
}
|
|
27
52
|
/**
|
|
28
53
|
* @internal Exported for unit tests.
|
|
@@ -40,6 +65,10 @@ export declare function projectRow(row: {
|
|
|
40
65
|
fullName: string | null;
|
|
41
66
|
} | null;
|
|
42
67
|
};
|
|
68
|
+
availabilityRequest: {
|
|
69
|
+
id: string;
|
|
70
|
+
} | null;
|
|
71
|
+
fixedRate: applications.FixedRate | null;
|
|
43
72
|
}, now: number): InterestRequestRow;
|
|
44
73
|
/**
|
|
45
74
|
* Register `ttctl_interest_requests_list` (#371) — a dedicated MCP affordance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interest_requests.d.ts","sourceRoot":"","sources":["../../src/tools/interest_requests.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"interest_requests.d.ts","sourceRoot":"","sources":["../../src/tools/interest_requests.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,OAAO,EAAuD,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAC;AA0CjH;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX;;;;;;;;OAQG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,yCAAyC;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,mDAAmD;IACnD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,EAAE,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE;IACH,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9F,mBAAmB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3C,SAAS,EAAE,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;CAC1C,EACD,GAAG,EAAE,MAAM,GACV,kBAAkB,CAgBpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,uBAAuB,GAAG,IAAI,CA6FnG"}
|
|
@@ -52,12 +52,14 @@ export function projectRow(row, now) {
|
|
|
52
52
|
: null;
|
|
53
53
|
return {
|
|
54
54
|
id: row.id,
|
|
55
|
+
availabilityRequestId: row.availabilityRequest?.id ?? null,
|
|
55
56
|
statusVerbose: row.statusV2.verbose,
|
|
56
57
|
jobTitle: row.job.title,
|
|
57
58
|
clientName: row.job.client?.fullName ?? null,
|
|
58
59
|
jobUrl: row.job.url,
|
|
59
60
|
lastUpdatedAt: row.lastUpdatedAt,
|
|
60
61
|
daysPending,
|
|
62
|
+
fixedRate: row.fixedRate,
|
|
61
63
|
};
|
|
62
64
|
}
|
|
63
65
|
/**
|
|
@@ -160,6 +162,179 @@ export function registerInterestRequestsTools(server, ctx) {
|
|
|
160
162
|
return mapInterestRequestsError(err);
|
|
161
163
|
}
|
|
162
164
|
});
|
|
165
|
+
// #411 — IR write surface. Three tools mirroring the talent-side
|
|
166
|
+
// ergonomic spec of #411: accept (→ confirm wire mutation), reject
|
|
167
|
+
// (→ reject wire mutation), reject-reasons (→ platform-config
|
|
168
|
+
// inventory). All three accept the **AvailabilityRequest id** as the
|
|
169
|
+
// handle (NOT the activity-item id); chain from
|
|
170
|
+
// `ttctl_interest_requests_list` rows via `availabilityRequestId`.
|
|
171
|
+
registerInterestRequestsAcceptTool(server, ctx);
|
|
172
|
+
registerInterestRequestsRejectTool(server, ctx);
|
|
173
|
+
registerInterestRequestsRejectReasonsTool(server, ctx);
|
|
174
|
+
}
|
|
175
|
+
function registerInterestRequestsAcceptTool(server, ctx) {
|
|
176
|
+
server.registerTool("ttctl_interest_requests_accept", {
|
|
177
|
+
title: "Accept an Interest Request",
|
|
178
|
+
description: [
|
|
179
|
+
"Accept (confirm) a Toptal Interest Request — the wire mutation",
|
|
180
|
+
"`ConfirmAvailabilityRequest` (mobile-gateway). Mirror of the",
|
|
181
|
+
'"View Job Interest Request → Respond" button on the Toptal portal.',
|
|
182
|
+
"",
|
|
183
|
+
"**DESTRUCTIVE** — accepting an IR transitions the AvailabilityRequest",
|
|
184
|
+
"from PENDING to CONFIRMED, creating a `JobApplication` for the underlying",
|
|
185
|
+
"job. There is no withdraw operation on the wire. Always preview with",
|
|
186
|
+
"`dryRun: true` first if uncertain.",
|
|
187
|
+
"",
|
|
188
|
+
"**Input id**: the `availabilityRequestId` from `ttctl_interest_requests_list`",
|
|
189
|
+
"rows (NOT the `id` field, which is the activity-item id used by `_show`).",
|
|
190
|
+
"Both ids are surfaced on the list output; pick `availabilityRequestId`.",
|
|
191
|
+
"",
|
|
192
|
+
"**Fields**:",
|
|
193
|
+
" - `id` (required): AvailabilityRequest id.",
|
|
194
|
+
" - `message` (optional): talent free-text accompanying the response.",
|
|
195
|
+
" Maps to the wire's `talentComment` field. Renders next to the",
|
|
196
|
+
' "Respond" button in the recruiter\'s portal view.',
|
|
197
|
+
" - `rate` (optional): requested hourly rate, decimal string (e.g.",
|
|
198
|
+
' `"80.00"`). Auto-filled from the AR\'s recruiter-pinned Fixed rate',
|
|
199
|
+
" when omitted. REQUIRED for FLEXIBLE / MARKETPLACE_FLEXIBLE ARs",
|
|
200
|
+
" (no recruiter-pinned rate to default to).",
|
|
201
|
+
" - `kind` (optional): AR kind (FIXED / FLEXIBLE / MARKETPLACE_FLEXIBLE).",
|
|
202
|
+
" Auto-detected from the AR's metadata `__typename` when omitted.",
|
|
203
|
+
"",
|
|
204
|
+
"Example user prompts:",
|
|
205
|
+
' - "Accept Interest Request <id>." (uses recruiter-pinned rate by default)',
|
|
206
|
+
' - "Accept IR <id> with the message \\"Available starting next Monday\\"."',
|
|
207
|
+
' - "Accept Interest Request <id> at $90/hr." (override the Fixed rate)',
|
|
208
|
+
].join("\n"),
|
|
209
|
+
inputSchema: {
|
|
210
|
+
id: z.string().describe("AvailabilityRequest id (NOT the activity-item id)"),
|
|
211
|
+
message: z.string().optional().describe("Optional talent free-text. Wire field: talentComment."),
|
|
212
|
+
rate: z
|
|
213
|
+
.string()
|
|
214
|
+
.optional()
|
|
215
|
+
.describe("Optional decimal hourly rate (e.g. '80.00'). Auto-filled from the AR's Fixed rate when omitted; required for FLEXIBLE / MARKETPLACE_FLEXIBLE ARs."),
|
|
216
|
+
kind: z
|
|
217
|
+
.enum([...applications.AVAILABILITY_REQUEST_KINDS])
|
|
218
|
+
.optional()
|
|
219
|
+
.describe("AR kind (auto-detected from metadata when omitted)"),
|
|
220
|
+
dryRun: DRY_RUN_FIELD,
|
|
221
|
+
},
|
|
222
|
+
}, async (args) => {
|
|
223
|
+
const auth = await ctx.resolveToolAuth();
|
|
224
|
+
if (!auth.ok)
|
|
225
|
+
return auth.response;
|
|
226
|
+
const input = {};
|
|
227
|
+
if (args.message !== undefined)
|
|
228
|
+
input.comment = args.message;
|
|
229
|
+
if (args.rate !== undefined)
|
|
230
|
+
input.requestedHourlyRate = args.rate;
|
|
231
|
+
if (args.kind !== undefined)
|
|
232
|
+
input.kind = args.kind;
|
|
233
|
+
try {
|
|
234
|
+
const outcome = await applications.confirm(auth.token, args.id, input, {
|
|
235
|
+
dryRun: args.dryRun === true,
|
|
236
|
+
});
|
|
237
|
+
if (outcome.kind === "preview") {
|
|
238
|
+
return dryRunResponse(outcome.preview);
|
|
239
|
+
}
|
|
240
|
+
return jsonResponse(outcome.result);
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
return mapInterestRequestsError(err);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
function registerInterestRequestsRejectTool(server, ctx) {
|
|
248
|
+
server.registerTool("ttctl_interest_requests_reject", {
|
|
249
|
+
title: "Reject an Interest Request",
|
|
250
|
+
description: [
|
|
251
|
+
"Reject (decline) a Toptal Interest Request — the wire mutation",
|
|
252
|
+
"`RejectAvailabilityRequest` (mobile-gateway). Mirror of the",
|
|
253
|
+
'"View Job Interest Request → Decline" form on the Toptal portal.',
|
|
254
|
+
"",
|
|
255
|
+
"**DESTRUCTIVE** — rejecting an IR transitions the AvailabilityRequest",
|
|
256
|
+
"to REJECTED (terminal, archived). No undo. Always preview with",
|
|
257
|
+
"`dryRun: true` first if uncertain.",
|
|
258
|
+
"",
|
|
259
|
+
"**Input id**: the `availabilityRequestId` from `ttctl_interest_requests_list`",
|
|
260
|
+
"rows (NOT the `id` field, which is the activity-item id used by `_show`).",
|
|
261
|
+
"",
|
|
262
|
+
"**Fields**:",
|
|
263
|
+
" - `id` (required): AvailabilityRequest id.",
|
|
264
|
+
" - `reason` (required): one of the `key` values from",
|
|
265
|
+
" `ttctl_interest_requests_reject_reasons`. The wire rejects unknown",
|
|
266
|
+
" keys with a top-level GraphQL error.",
|
|
267
|
+
" - `comment` (optional): accompanying free-text. Required when the",
|
|
268
|
+
" chosen reason has `isMandatory: true` on the inventory.",
|
|
269
|
+
"",
|
|
270
|
+
"Example user prompts:",
|
|
271
|
+
' - "Decline Interest Request <id> with reason rate_too_low."',
|
|
272
|
+
' - "Reject IR <id> as scope_mismatch, note: \\"Not aligned with my Python expertise.\\""',
|
|
273
|
+
].join("\n"),
|
|
274
|
+
inputSchema: {
|
|
275
|
+
id: z.string().describe("AvailabilityRequest id (NOT the activity-item id)"),
|
|
276
|
+
reason: z
|
|
277
|
+
.string()
|
|
278
|
+
.describe("Decline reason key (see ttctl_interest_requests_reject_reasons for the inventory)"),
|
|
279
|
+
comment: z.string().optional().describe("Optional accompanying free-text (required for mandatory reasons)"),
|
|
280
|
+
dryRun: DRY_RUN_FIELD,
|
|
281
|
+
},
|
|
282
|
+
}, async (args) => {
|
|
283
|
+
const auth = await ctx.resolveToolAuth();
|
|
284
|
+
if (!auth.ok)
|
|
285
|
+
return auth.response;
|
|
286
|
+
const input = { reason: args.reason };
|
|
287
|
+
if (args.comment !== undefined)
|
|
288
|
+
input.comment = args.comment;
|
|
289
|
+
try {
|
|
290
|
+
const outcome = await applications.reject(auth.token, args.id, input, {
|
|
291
|
+
dryRun: args.dryRun === true,
|
|
292
|
+
});
|
|
293
|
+
if (outcome.kind === "preview") {
|
|
294
|
+
return dryRunResponse(outcome.preview);
|
|
295
|
+
}
|
|
296
|
+
return jsonResponse(outcome.result);
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
return mapInterestRequestsError(err);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
function registerInterestRequestsRejectReasonsTool(server, ctx) {
|
|
304
|
+
server.registerTool("ttctl_interest_requests_reject_reasons", {
|
|
305
|
+
title: "List Interest Request decline-reason inventory",
|
|
306
|
+
description: [
|
|
307
|
+
"List the Interest Request decline-reason inventory — the `key` /",
|
|
308
|
+
"`value` / `isMandatory` rows the portal's Decline form uses. Pass one",
|
|
309
|
+
"of the surfaced `key` values to `ttctl_interest_requests_reject`.",
|
|
310
|
+
"",
|
|
311
|
+
"Returns `{ fixed: [...], flexible: [...] }` — the portal renders only",
|
|
312
|
+
"the slice matching the AR's `kind`, so clients should likewise pick",
|
|
313
|
+
"the slice that matches the AR being declined.",
|
|
314
|
+
"",
|
|
315
|
+
"Read-only, idempotent. Server-localised (the `value` text matches the",
|
|
316
|
+
"session's locale).",
|
|
317
|
+
"",
|
|
318
|
+
"Example user prompts:",
|
|
319
|
+
' - "What reasons can I decline Interest Requests with?"',
|
|
320
|
+
' - "Show me the reject-reason inventory for Fixed-kind IRs."',
|
|
321
|
+
].join("\n"),
|
|
322
|
+
inputSchema: { dryRun: DRY_RUN_FIELD },
|
|
323
|
+
}, async (args) => {
|
|
324
|
+
const auth = await ctx.resolveToolAuth();
|
|
325
|
+
if (!auth.ok)
|
|
326
|
+
return auth.response;
|
|
327
|
+
if (args.dryRun === true) {
|
|
328
|
+
return dryRunResponse(buildMcpDryRunPreview("AvailabilityRequestRejectReasons", "mobile-gateway", {}, auth.token));
|
|
329
|
+
}
|
|
330
|
+
try {
|
|
331
|
+
const reasons = await applications.rejectReasons(auth.token);
|
|
332
|
+
return jsonResponse(reasons);
|
|
333
|
+
}
|
|
334
|
+
catch (err) {
|
|
335
|
+
return mapInterestRequestsError(err);
|
|
336
|
+
}
|
|
337
|
+
});
|
|
163
338
|
}
|
|
164
339
|
function invalidOlderThanResponse(supplied) {
|
|
165
340
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interest_requests.js","sourceRoot":"","sources":["../../src/tools/interest_requests.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAGpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,YAAY,EAAgC,MAAM,cAAc,CAAC;AAEjH,MAAM,aAAa,GAAG,CAAC;KACpB,OAAO,EAAE;KACT,QAAQ,EAAE;KACV,QAAQ,CACP,+JAA+J,CAChK,CAAC;AAEJ;;;;;;;;;;;GAWG;AACH,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEjD,MAAM,cAAc,GAA2B;IAC7C,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE,GAAG,CAAC;CACV,CAAC;AAEF,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,QAAQ,GAAG,OAAO,CAAC;AAC5B,CAAC;
|
|
1
|
+
{"version":3,"file":"interest_requests.js","sourceRoot":"","sources":["../../src/tools/interest_requests.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"employment.d.ts","sourceRoot":"","sources":["../../../src/tools/profile/employment.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAyC,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAUpG;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,uBAAuB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"employment.d.ts","sourceRoot":"","sources":["../../../src/tools/profile/employment.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAyC,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAUpG;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,uBAAuB,GAAG,IAAI,CAgX7F"}
|
|
@@ -33,15 +33,30 @@ export function registerEmploymentTools(server, ctx) {
|
|
|
33
33
|
description: "Add a new employment entry (company + role, with optional start/end years and `current` flag). " +
|
|
34
34
|
"The `company` string is resolved to the server-side `employerId` via the employer-autocomplete catalog: " +
|
|
35
35
|
"0 matches or 2+ matches return a VALIDATION_ERROR with disambiguation guidance. Pass an explicit `employerId` to " +
|
|
36
|
-
"bypass autocomplete entirely.
|
|
36
|
+
"bypass autocomplete entirely. Set `noEmployer: true` for a custom (non-catalog) workplace — sends the free-text " +
|
|
37
|
+
"`company` with employerId:null and skips autocomplete (orthogonal to `website`; cannot be combined with `employerId`). " +
|
|
38
|
+
"`industryIds` (at least one required) attaches catalog industries to the entry — " +
|
|
39
|
+
"discover ids via `ttctl_profile_industries_autocomplete`. " +
|
|
40
|
+
"Dates accept ISO-8601 (YYYY-MM-DD) or year-only (YYYY); year only is stored.",
|
|
37
41
|
inputSchema: {
|
|
38
|
-
company: z
|
|
42
|
+
company: z
|
|
43
|
+
.string()
|
|
44
|
+
.min(1)
|
|
45
|
+
.describe("company / employer name (resolved to employerId via autocomplete unless noEmployer is set)"),
|
|
39
46
|
role: z.string().min(1).describe("job title (mapped to position)"),
|
|
40
47
|
employerId: z
|
|
41
48
|
.string()
|
|
42
49
|
.min(1)
|
|
43
50
|
.optional()
|
|
44
51
|
.describe("explicit employerId (bypasses autocomplete; use `ttctl_profile_employment_employer_autocomplete` to discover)"),
|
|
52
|
+
industryIds: z
|
|
53
|
+
.array(z.string())
|
|
54
|
+
.min(1)
|
|
55
|
+
.describe('Catalog Industry ids (at least one required). Discover via `ttctl_profile_industries_autocomplete` or `ttctl profile industries autocomplete "<query>"`.'),
|
|
56
|
+
noEmployer: z
|
|
57
|
+
.boolean()
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("custom (non-catalog) workplace: send the free-text `company` with employerId:null and skip the employer-autocomplete catalog. Orthogonal to `website`; cannot be combined with `employerId`."),
|
|
45
60
|
from: dateInput.optional().describe("start date — ISO-8601 or year"),
|
|
46
61
|
to: dateInput.optional().describe("end date — ISO-8601 or year"),
|
|
47
62
|
current: z.boolean().optional().describe("mark as current position (no end date)"),
|
|
@@ -59,10 +74,18 @@ export function registerEmploymentTools(server, ctx) {
|
|
|
59
74
|
const fields = {
|
|
60
75
|
company: input.company,
|
|
61
76
|
position: input.role,
|
|
77
|
+
// industryIds is required by the schema (zod `.min(1)`). The
|
|
78
|
+
// live `CreateEmployment` wire rejects a blank industry set
|
|
79
|
+
// (#395 cascade); surfacing it as a required parameter mirrors
|
|
80
|
+
// `portfolio_add` and fails fast before the wire.
|
|
81
|
+
industryIds: input.industryIds,
|
|
62
82
|
};
|
|
63
83
|
if (input.employerId !== undefined) {
|
|
64
84
|
fields.employerId = input.employerId;
|
|
65
85
|
}
|
|
86
|
+
if (input.noEmployer === true) {
|
|
87
|
+
fields.noEmployer = true;
|
|
88
|
+
}
|
|
66
89
|
try {
|
|
67
90
|
if (input.from !== undefined)
|
|
68
91
|
fields.startDate = parseDateInput(input.from, "from").year;
|
|
@@ -84,8 +107,10 @@ export function registerEmploymentTools(server, ctx) {
|
|
|
84
107
|
// Per-#395: dry-run path is delegated to the core service so the
|
|
85
108
|
// preview's `variables.input.employment.employerId` carries the
|
|
86
109
|
// resolved id (not the raw `company` string). The autocomplete
|
|
87
|
-
// read query fires in dry-run too — the
|
|
88
|
-
//
|
|
110
|
+
// read query fires in dry-run too — EXCEPT on the #401
|
|
111
|
+
// custom-workplace path (`noEmployer: true`), where core skips
|
|
112
|
+
// resolution entirely (zero network). The CreateEmployment
|
|
113
|
+
// mutation transport never fires in dry-run regardless.
|
|
89
114
|
try {
|
|
90
115
|
const outcome = await profile.employment.add(auth.token, fields, { dryRun: input.dryRun === true });
|
|
91
116
|
if (outcome.kind === "preview") {
|
|
@@ -99,7 +124,8 @@ export function registerEmploymentTools(server, ctx) {
|
|
|
99
124
|
});
|
|
100
125
|
server.registerTool("ttctl_profile_employment_update", {
|
|
101
126
|
title: "Update employment entry",
|
|
102
|
-
description: "Update an existing employment entry by id. At least one field must be supplied. `description` is multi-paragraph free-text and splits on blank lines."
|
|
127
|
+
description: "Update an existing employment entry by id. At least one field must be supplied. `description` is multi-paragraph free-text and splits on blank lines. " +
|
|
128
|
+
"`industryIds`, when supplied, replaces the entry's entire industry set (omit to preserve the current set) — discover ids via `ttctl_profile_industries_autocomplete`.",
|
|
103
129
|
inputSchema: {
|
|
104
130
|
id: z.string().min(1).describe("employment id (V1-Employment-NNN)"),
|
|
105
131
|
company: z.string().optional(),
|
|
@@ -110,6 +136,11 @@ export function registerEmploymentTools(server, ctx) {
|
|
|
110
136
|
website: z.url().optional(),
|
|
111
137
|
description: z.string().optional(),
|
|
112
138
|
highlight: z.boolean().optional(),
|
|
139
|
+
industryIds: z
|
|
140
|
+
.array(z.string())
|
|
141
|
+
.min(1)
|
|
142
|
+
.optional()
|
|
143
|
+
.describe("Catalog Industry ids — when supplied, replaces the entry's industry set (partial update; omit to preserve). Discover via `ttctl_profile_industries_autocomplete`."),
|
|
113
144
|
dryRun: DRY_RUN_FIELD,
|
|
114
145
|
},
|
|
115
146
|
}, async (input) => {
|
|
@@ -141,6 +172,11 @@ export function registerEmploymentTools(server, ctx) {
|
|
|
141
172
|
}
|
|
142
173
|
if (input.highlight !== undefined)
|
|
143
174
|
fields.highlight = input.highlight;
|
|
175
|
+
// Replace-on-supply: when present, the supplied catalog set wins
|
|
176
|
+
// over the merge placeholder (dry-run) / current-state projection
|
|
177
|
+
// (apply path, via `buildUpdateEmploymentInput`'s `...fields`).
|
|
178
|
+
if (input.industryIds !== undefined)
|
|
179
|
+
fields.industryIds = input.industryIds;
|
|
144
180
|
if (input.dryRun === true) {
|
|
145
181
|
// Dry-run preview shows the full merged shape — the wire-required
|
|
146
182
|
// fields the apply path injects from current state appear as
|
|
@@ -152,15 +188,17 @@ export function registerEmploymentTools(server, ctx) {
|
|
|
152
188
|
//
|
|
153
189
|
// Field set mirrors `buildUpdateEmploymentInput` in
|
|
154
190
|
// `services/profile/employment/index.ts`: GraphQL-required-non-null
|
|
155
|
-
// (
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
//
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
//
|
|
191
|
+
// (5: experienceItems, position, skills, showViaToptal, startDate
|
|
192
|
+
// — `position` added #407) + Rails `.blank?` gates (company,
|
|
193
|
+
// publicationPermit) + catalog refs (employerId, industryIds —
|
|
194
|
+
// both injected conditionally on current state in the apply path).
|
|
195
|
+
// The optional catalog refs (primaryGeographyId, reportingTo)
|
|
196
|
+
// appear in the preview only when the current row has them; here
|
|
197
|
+
// we surface them as placeholders so the preview is non-misleading
|
|
198
|
+
// about the potential shape.
|
|
162
199
|
const previewEmployment = {
|
|
163
200
|
experienceItems: profile.employment.DRY_RUN_EMPLOYMENT_MERGE_PLACEHOLDER,
|
|
201
|
+
position: profile.employment.DRY_RUN_EMPLOYMENT_MERGE_PLACEHOLDER,
|
|
164
202
|
skills: profile.employment.DRY_RUN_EMPLOYMENT_MERGE_PLACEHOLDER,
|
|
165
203
|
showViaToptal: profile.employment.DRY_RUN_EMPLOYMENT_MERGE_PLACEHOLDER,
|
|
166
204
|
startDate: profile.employment.DRY_RUN_EMPLOYMENT_MERGE_PLACEHOLDER,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"employment.js","sourceRoot":"","sources":["../../../src/tools/profile/employment.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"employment.js","sourceRoot":"","sources":["../../../src/tools/profile/employment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile_skills_add.d.ts","sourceRoot":"","sources":["../../src/tools/profile_skills_add.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,
|
|
1
|
+
{"version":3,"file":"profile_skills_add.d.ts","sourceRoot":"","sources":["../../src/tools/profile_skills_add.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,EAML,KAAK,uBAAuB,EAC7B,MAAM,cAAc,CAAC;AAkBtB,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,uBAAuB,GAAG,IAAI,CA6ElG"}
|
|
@@ -3,46 +3,85 @@
|
|
|
3
3
|
import { profile } from "@ttctl/core";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { ttctlErrorToToolResponseOrNull } from "../errors.js";
|
|
6
|
-
import {
|
|
6
|
+
import { domainErrorResponse, dryRunResponse, genericErrorResponse, isToolErrorResponse, jsonResponse, } from "./_shared.js";
|
|
7
7
|
const TOOL_NAME = "ttctl_profile_skills_add";
|
|
8
8
|
const DRY_RUN_FIELD = z
|
|
9
9
|
.boolean()
|
|
10
10
|
.optional()
|
|
11
11
|
.describe("Preview the request without executing. Returns `{ ok: true, dryRun: true, preview }` with operationName + variables + redacted bearer header. Default: false.");
|
|
12
|
+
// `ProficiencyRating` includes `NOVICE` as a read-accepted legacy value;
|
|
13
|
+
// for writes the user-visible Toptal UI exposes only the three values
|
|
14
|
+
// below (empirically verified via live UI inspection 2026-05-19). The MCP
|
|
15
|
+
// tool restricts writes to the documented three; if Toptal restores
|
|
16
|
+
// `NOVICE` as a write-acceptable value, this enum will need extension.
|
|
17
|
+
const PROFICIENCY_RATING = z.enum(["COMPETENT", "STRONG", "EXPERT"]);
|
|
12
18
|
export function registerProfileSkillsAddTool(server, ctx) {
|
|
13
19
|
server.registerTool(TOOL_NAME, {
|
|
14
20
|
title: "Add a skill to profile",
|
|
15
21
|
description: [
|
|
16
|
-
"Add a skill to the signed-in user's profile
|
|
17
|
-
"
|
|
22
|
+
"Add a skill to the signed-in user's profile.",
|
|
23
|
+
"Pass `name` to add a custom skill, or pair `name` with `skillId` (from `ttctl_profile_skills_autocomplete`) to bind to a catalog Skill.",
|
|
24
|
+
"Proficiency dimensions (`rating`, `experience`, `public`) all have sensible defaults — pass them only when overriding.",
|
|
25
|
+
"",
|
|
26
|
+
"Defaults applied when omitted:",
|
|
27
|
+
" - `rating`: COMPETENT (lowest user-visible rating)",
|
|
28
|
+
" - `experience`: 1",
|
|
29
|
+
" - `public`: false (private)",
|
|
18
30
|
"",
|
|
19
31
|
"Example user prompts that should map to this tool:",
|
|
20
|
-
' - "Add TypeScript to my Toptal skills."',
|
|
21
|
-
' - "Add PostgreSQL
|
|
32
|
+
' - "Add TypeScript to my Toptal skills." → `{ name: "TypeScript" }`',
|
|
33
|
+
' - "Add PostgreSQL at expert level with 5 years experience, public." → `{ name: "PostgreSQL", rating: "EXPERT", experience: 5, public: true }`',
|
|
22
34
|
].join("\n"),
|
|
23
35
|
inputSchema: {
|
|
24
36
|
name: z
|
|
25
37
|
.string()
|
|
26
38
|
.min(1)
|
|
27
|
-
.describe(
|
|
39
|
+
.describe("Skill name. Free-text creates a custom (non-catalog) Skill; pair with `skillId` to bind to a catalog Skill discovered via `ttctl_profile_skills_autocomplete`."),
|
|
40
|
+
rating: PROFICIENCY_RATING.optional().describe("Proficiency rating. One of COMPETENT | STRONG | EXPERT. Defaults to COMPETENT."),
|
|
41
|
+
experience: z
|
|
42
|
+
.number()
|
|
43
|
+
.int()
|
|
44
|
+
.min(0)
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Total experience on the skill (integer). Defaults to 1."),
|
|
47
|
+
public: z.boolean().optional().describe("Show the skill on the public profile. Defaults to false (private)."),
|
|
48
|
+
skillId: z
|
|
49
|
+
.string()
|
|
50
|
+
.min(1)
|
|
51
|
+
.optional()
|
|
52
|
+
.describe("Optional catalog Skill id (e.g., `V1-Skill-278891`) to bind this entry to a catalog skill. Discover via `ttctl_profile_skills_autocomplete`. Omit to create a custom (non-catalog) skill from `name`."),
|
|
28
53
|
dryRun: DRY_RUN_FIELD,
|
|
29
54
|
},
|
|
30
55
|
}, async (input) => {
|
|
31
56
|
const auth = await ctx.loadTokenForTool(TOOL_NAME);
|
|
32
57
|
if (isToolErrorResponse(auth))
|
|
33
58
|
return auth;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
59
|
+
const fields = { name: input.name };
|
|
60
|
+
if (input.rating !== undefined)
|
|
61
|
+
fields.rating = input.rating;
|
|
62
|
+
if (input.experience !== undefined)
|
|
63
|
+
fields.experience = input.experience;
|
|
64
|
+
if (input.public !== undefined)
|
|
65
|
+
fields.public = input.public;
|
|
66
|
+
if (input.skillId !== undefined)
|
|
67
|
+
fields.skillId = input.skillId;
|
|
37
68
|
try {
|
|
38
|
-
|
|
39
|
-
|
|
69
|
+
// Delegate to the core service for both dry-run and apply paths so
|
|
70
|
+
// the preview's wire shape is byte-for-byte the same as the live
|
|
71
|
+
// mutation would transmit (matches #395 employment.add pattern).
|
|
72
|
+
const outcome = await profile.skills.add(auth.token, fields, { dryRun: input.dryRun === true });
|
|
73
|
+
if (outcome.kind === "preview") {
|
|
74
|
+
return dryRunResponse(outcome.preview);
|
|
75
|
+
}
|
|
76
|
+
return jsonResponse(outcome.result);
|
|
40
77
|
}
|
|
41
78
|
catch (err) {
|
|
42
79
|
const typed = ttctlErrorToToolResponseOrNull(err);
|
|
43
80
|
if (typed !== null)
|
|
44
81
|
return typed;
|
|
45
|
-
|
|
82
|
+
// `extractProfileId` (apply path) throws `profile.basic.ProfileError`,
|
|
83
|
+
// not `SkillsError` — match the sibling skills tools' combined check.
|
|
84
|
+
if (err instanceof profile.skills.SkillsError || err instanceof profile.basic.ProfileError) {
|
|
46
85
|
return domainErrorResponse(TOOL_NAME, err);
|
|
47
86
|
}
|
|
48
87
|
return genericErrorResponse(TOOL_NAME, err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile_skills_add.js","sourceRoot":"","sources":["../../src/tools/profile_skills_add.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAGpC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"profile_skills_add.js","sourceRoot":"","sources":["../../src/tools/profile_skills_add.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ttctl/mcp",
|
|
3
|
-
"version": "0.1.0-rc.
|
|
3
|
+
"version": "0.1.0-rc.5",
|
|
4
4
|
"description": "TTCtl MCP server exposing Toptal Talent operations to AI assistants",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -30,14 +30,14 @@
|
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^25",
|
|
33
|
-
"eslint": "^10.
|
|
33
|
+
"eslint": "^10.4.0",
|
|
34
34
|
"typescript": "~6.0.3",
|
|
35
35
|
"vitest": "^4.1.1"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@modelcontextprotocol/sdk": "^1.28.0",
|
|
39
39
|
"zod": "^4.4.3",
|
|
40
|
-
"@ttctl/core": "^0.1.0-rc.
|
|
40
|
+
"@ttctl/core": "^0.1.0-rc.5"
|
|
41
41
|
},
|
|
42
42
|
"scripts": {
|
|
43
43
|
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|