@setluca/mcp 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,24 @@ input schema, or changing what a tool does to a workspace.
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [0.6.0] - 2026-10-24
14
+
15
+ ### Breaking
16
+
17
+ - `luca_knowledge_approve_suggestion` is gone, which leaves 223 tools. Luca
18
+ made approving a profile suggestion session-only, because approval writes
19
+ the coach profile that every later draft reads and needs a person in the
20
+ loop. Since that release, every call from an API key or OAuth token got 403,
21
+ so no call that worked is lost. Coaches approve suggestions in the app;
22
+ `luca_knowledge_suggestions` lists them and
23
+ `luca_knowledge_reject_suggestion` still turns one down.
24
+
25
+ ### Changed
26
+
27
+ - Contracts are pinned to Luca `621b92a`, the v0.4.0 production release.
28
+ `luca_bookings_availability` and `luca_bookings_managed_availability`
29
+ document that `start` defaults to now and `end` to seven days after `start`.
30
+
13
31
  ## [0.5.2] - 2026-10-23
14
32
 
15
33
  ### Fixed
@@ -53,8 +53,8 @@ export const OPENAPI_INPUT_FIELDS = {
53
53
  "POST /api/review-queue/drafting/{turnId}/dismiss": Schema.Struct({ "turnId": Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" })) }).fields,
54
54
  "POST /api/review-queue/{id}/regenerate": Schema.Struct({ "id": Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" })), "body": Schema.optionalKey(Schema.Struct({ "hint": Schema.optionalKey(Schema.String.check(Schema.isMaxCodePoints(500).annotate({ "expected": "a string with at most 500 code points" }))) })) }).fields,
55
55
  "GET /api/bookings": Schema.Struct({ "query": Schema.optionalKey(Schema.Struct({ "limit": Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })).check(Schema.isLessThanOrEqualTo(100).annotate({ "expected": "a value less than or equal to 100" }))), "cursor": Schema.optionalKey(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))), "status": Schema.optionalKey(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))), "upcoming": Schema.optionalKey(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))), "leadId": Schema.optionalKey(Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" }))) })) }).fields,
56
- "GET /api/bookings/availability": Schema.Struct({ "query": Schema.optionalKey(Schema.Struct({ "provider": Schema.optionalKey(Schema.Literals(["manual", "calendly", "cal_com", "google_calendar", "iclosed", "gohighlevel"]).annotate({ "default": "calendly" })), "eventTypeId": Schema.optionalKey(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))), "calendarId": Schema.optionalKey(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))), "timezone": Schema.optionalKey(Schema.String.annotate({ "default": "UTC" }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))), "start": Schema.optionalKey(Schema.Union([Schema.String.check(Schema.isPattern(new RegExp("^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$", "u")).annotate({ "expected": "a string matching the RegExp ^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" })), Schema.Null]).annotate({ "format": "date-time" })), "end": Schema.optionalKey(Schema.Union([Schema.String.check(Schema.isPattern(new RegExp("^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$", "u")).annotate({ "expected": "a string matching the RegExp ^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" })), Schema.Null]).annotate({ "format": "date-time" })), "leadId": Schema.optionalKey(Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" }))) })) }).fields,
57
- "GET /api/bookings/managed-availability": Schema.Struct({ "query": Schema.Struct({ "bookingTypeId": Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" })), "timezone": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })), "start": Schema.optionalKey(Schema.Union([Schema.String.check(Schema.isPattern(new RegExp("^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$", "u")).annotate({ "expected": "a string matching the RegExp ^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" })), Schema.Null]).annotate({ "format": "date-time" })), "end": Schema.optionalKey(Schema.Union([Schema.String.check(Schema.isPattern(new RegExp("^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$", "u")).annotate({ "expected": "a string matching the RegExp ^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" })), Schema.Null]).annotate({ "format": "date-time" })) }) }).fields,
56
+ "GET /api/bookings/availability": Schema.Struct({ "query": Schema.optionalKey(Schema.Struct({ "provider": Schema.optionalKey(Schema.Literals(["manual", "calendly", "cal_com", "google_calendar", "iclosed", "gohighlevel"]).annotate({ "default": "calendly" })), "eventTypeId": Schema.optionalKey(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))), "calendarId": Schema.optionalKey(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))), "timezone": Schema.optionalKey(Schema.String.annotate({ "default": "UTC" }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))), "start": Schema.optionalKey(Schema.Union([Schema.String.check(Schema.isPattern(new RegExp("^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$", "u")).annotate({ "expected": "a string matching the RegExp ^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" })), Schema.Null]).annotate({ "description": "Start of the time range, inclusive. Defaults to now.", "format": "date-time" })), "end": Schema.optionalKey(Schema.Union([Schema.String.check(Schema.isPattern(new RegExp("^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$", "u")).annotate({ "expected": "a string matching the RegExp ^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" })), Schema.Null]).annotate({ "description": "End of the time range, exclusive. Defaults to 7 days after start.", "format": "date-time" })), "leadId": Schema.optionalKey(Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" }))) })) }).fields,
57
+ "GET /api/bookings/managed-availability": Schema.Struct({ "query": Schema.Struct({ "bookingTypeId": Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" })), "timezone": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })), "start": Schema.optionalKey(Schema.Union([Schema.String.check(Schema.isPattern(new RegExp("^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$", "u")).annotate({ "expected": "a string matching the RegExp ^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" })), Schema.Null]).annotate({ "description": "Start of the time range, inclusive. Defaults to now.", "format": "date-time" })), "end": Schema.optionalKey(Schema.Union([Schema.String.check(Schema.isPattern(new RegExp("^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$", "u")).annotate({ "expected": "a string matching the RegExp ^(?:\\d{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|\\d{4}-(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|\\d{4}-02-(?:0[1-9]|1\\d|2[0-8])|(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" })), Schema.Null]).annotate({ "description": "End of the time range, exclusive. Defaults to 7 days after start.", "format": "date-time" })) }) }).fields,
58
58
  "GET /api/bookings/types": Schema.Struct({}).fields,
59
59
  "GET /api/bookings/types/{id}/schedule": Schema.Struct({ "id": Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" })) }).fields,
60
60
  "GET /api/bookings/types/{id}/attendees": Schema.Struct({ "id": Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" })) }).fields,
@@ -187,7 +187,6 @@ export const OPENAPI_INPUT_FIELDS = {
187
187
  "GET /api/learning-proposals": Schema.Struct({ "query": Schema.optionalKey(Schema.Struct({ "eventTypes": Schema.optionalKey(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))), "activeOnly": Schema.optionalKey(Schema.Literals(["true", "false"]).annotate({ "default": "true" })) })) }).fields,
188
188
  "POST /api/learning-proposals/{id}/dismiss": Schema.Struct({ "id": Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" })) }).fields,
189
189
  "GET /api/knowledge/suggestions": Schema.Struct({ "query": Schema.optionalKey(Schema.Struct({ "status": Schema.optionalKey(Schema.Literals(["pending", "approved", "rejected"])) })) }).fields,
190
- "POST /api/knowledge/suggestions/{id}/approve": Schema.Struct({ "id": Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" })) }).fields,
191
190
  "POST /api/knowledge/suggestions/{id}/reject": Schema.Struct({ "id": Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" })) }).fields,
192
191
  "GET /api/knowledge/sources": Schema.Struct({}).fields,
193
192
  "POST /api/knowledge/sources/{id}/sync": Schema.Struct({ "id": Schema.String.annotate({ "format": "uuid" }).check(Schema.isPattern(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "u")).annotate({ "expected": "a string matching the RegExp ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" })) }).fields,
@@ -33527,73 +33527,6 @@ export const OPENAPI_OUTPUTS = {
33527
33527
  "suggestions"
33528
33528
  ]
33529
33529
  },
33530
- "POST /api/knowledge/suggestions/{id}/approve": {
33531
- "type": "object",
33532
- "properties": {
33533
- "suggestion": {
33534
- "type": "object",
33535
- "properties": {
33536
- "id": {
33537
- "type": "string",
33538
- "format": "uuid"
33539
- },
33540
- "sourceId": {
33541
- "type": "string",
33542
- "format": "uuid"
33543
- },
33544
- "fieldPath": {
33545
- "type": "string"
33546
- },
33547
- "currentValue": {},
33548
- "suggestedValue": {},
33549
- "evidence": {
33550
- "type": "object",
33551
- "properties": {
33552
- "excerpt": {
33553
- "type": "string"
33554
- },
33555
- "locator": {
33556
- "type": "string"
33557
- }
33558
- },
33559
- "required": [
33560
- "excerpt",
33561
- "locator"
33562
- ]
33563
- },
33564
- "status": {
33565
- "type": "string",
33566
- "enum": [
33567
- "pending",
33568
- "approved",
33569
- "rejected"
33570
- ]
33571
- },
33572
- "createdAt": {
33573
- "type": "string"
33574
- },
33575
- "resolvedAt": {
33576
- "type": [
33577
- "string",
33578
- "null"
33579
- ]
33580
- }
33581
- },
33582
- "required": [
33583
- "id",
33584
- "sourceId",
33585
- "fieldPath",
33586
- "evidence",
33587
- "status",
33588
- "createdAt",
33589
- "resolvedAt"
33590
- ]
33591
- }
33592
- },
33593
- "required": [
33594
- "suggestion"
33595
- ]
33596
- },
33597
33530
  "POST /api/knowledge/suggestions/{id}/reject": {
33598
33531
  "type": "object",
33599
33532
  "properties": {
@@ -1469,14 +1469,6 @@ export const ROUTE_CATALOG = {
1469
1469
  ],
1470
1470
  "idempotencyRequired": false
1471
1471
  },
1472
- "knowledge.approveSuggestion": {
1473
- "method": "POST",
1474
- "path": "/api/knowledge/suggestions/{id}/approve",
1475
- "scopes": [
1476
- "knowledge:write"
1477
- ],
1478
- "idempotencyRequired": true
1479
- },
1480
1472
  "knowledge.rejectSuggestion": {
1481
1473
  "method": "POST",
1482
1474
  "path": "/api/knowledge/suggestions/{id}/reject",
@@ -3,14 +3,7 @@ export const knowledgeOperations = [
3
3
  op({
4
4
  id: "knowledge.suggestions",
5
5
  title: "List knowledge suggestions",
6
- description: "List profile changes proposed from the coach's own knowledge sources, each with the excerpt it was drawn from and the value it would replace.",
7
- }),
8
- op({
9
- id: "knowledge.approveSuggestion",
10
- title: "Approve a knowledge suggestion",
11
- mutatesExisting: true,
12
- confirm: "always",
13
- description: "Approve a profile suggestion and write it into the coach's profile. Every later draft reads the result, so check the excerpt supports the change before approving.",
6
+ description: "List profile changes proposed from the coach's own knowledge sources, each with the excerpt it was drawn from and the value it would replace. Approving one is app-only, so a person checks each change before it reaches the profile; this lists them and luca_knowledge_reject_suggestion turns one down.",
14
7
  }),
15
8
  op({
16
9
  id: "knowledge.rejectSuggestion",
package/dist/version.js CHANGED
@@ -9,6 +9,6 @@
9
9
  *
10
10
  * Bump this in the same commit as package.json and server.json.
11
11
  */
12
- export const LUCA_MCP_VERSION = "0.5.2";
12
+ export const LUCA_MCP_VERSION = "0.6.0";
13
13
  /** The user-agent every outbound Luca API call identifies itself with. */
14
14
  export const LUCA_MCP_USER_AGENT = `luca-mcp/${LUCA_MCP_VERSION}`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@setluca/mcp",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "private": false,
5
5
  "description": "Connect SetLuca to Claude, ChatGPT, Cursor, or any MCP client to triage the review queue, look up leads, draft replies, and check campaigns.",
6
6
  "keywords": [