@setluca/mcp 0.3.5 → 0.3.7

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,26 @@ input schema, or changing what a tool does to a workspace.
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [0.3.7] - 2026-10-13
14
+
15
+ ### Fixed
16
+
17
+ - Describe what `luca_book_call` does: it records a booked call in Luca, but it
18
+ doesn't create a calendar event or send the lead an invite. Its description
19
+ said it booked a slot the provider confirmed.
20
+ - Describe which bookings `luca_reschedule_call` can move. Manual bookings move
21
+ in Luca. Cal.com and Google Calendar bookings also move on that calendar.
22
+ Calendly, GoHighLevel and iClosed bookings are refused, and so is a provider
23
+ booking with no calendar event.
24
+
25
+ ## [0.3.6] - 2026-10-13
26
+
27
+ ### Fixed
28
+
29
+ - Accept requests from Claude's custom connector at `mcp.setluca.com`. Its
30
+ `https://claude.ai` origin got a 403 before sign-in instead of the 401 OAuth
31
+ challenge, so connecting from Claude failed.
32
+
13
33
  ## [0.3.5] - 2026-10-06
14
34
 
15
35
  ### Fixed
@@ -118,7 +118,7 @@ function slotNotAvailable(key) {
118
118
  const bookCall = taskTool({
119
119
  name: "luca_book_call",
120
120
  title: "Book a call with a lead",
121
- description: 'Book a lead into a slot the provider confirms is open. Checks availability first, against the schedule of the booking type when bookingTypeId is given, and returns the open slots instead of booking when the requested one is taken. A call with an idempotencyKey skips that check so a retry gets the original result back. Booking moves the lead to booked and notifies the coach\'s webhook subscribers, so pass confirm: true only after the coach approves this exact slot. Example: call with { leadId, slotAt: "2026-07-14T15:00:00Z", confirm: true } after the lead agreed to a time.',
121
+ description: "Record a booked call for a lead in Luca. This does not create an event on the coach's calendar or send the lead an invite: book the call with the provider too, or have the lead book through the coach's booking link. Checks availability first, against the schedule of the booking type when bookingTypeId is given, and returns the open slots instead of booking when the requested one is taken. A call with an idempotencyKey skips that check so a retry gets the original result back. Booking moves the lead to booked and notifies the coach's webhook subscribers, so pass confirm: true only after the coach approves this exact slot. Example: call with { leadId, slotAt: \"2026-07-14T15:00:00Z\", confirm: true } after the lead agreed to a time.",
122
122
  inputSchema: {
123
123
  ...WORKSPACE_INPUT_FIELDS,
124
124
  leadId: NonEmptyString.annotate({ description: "The lead to book." }),
@@ -176,7 +176,7 @@ const DEFAULT_GUEST_LINK_HOURS = 168;
176
176
  const rescheduleCall = taskTool({
177
177
  name: "luca_reschedule_call",
178
178
  title: "Move a call to a new time",
179
- description: 'Move a booked call to a new time and hand back a fresh reschedule link for the lead. Checks the new slot is open first, against the schedule of its booking type when it has one, and returns the open slots instead of moving the call when it is taken. A call with an idempotencyKey skips that check so a retry gets the original result back. Moving the call updates the connected calendar and re-arms the lead\'s reminder for the new time, so pass confirm: true only after the coach approves the move. Example: call with { bookingId, slotAt: "2026-07-16T15:00:00Z", confirm: true } after the lead asked to push the call. No message about the move is sent: send the lead the link yourself, or draft the message through the review queue.',
179
+ description: 'Move a booked call to a new time and hand back a fresh reschedule link for the lead. Checks the new slot is open first, against the schedule of its booking type when it has one, and returns the open slots instead of moving the call when it is taken. A call with an idempotencyKey skips that check so a retry gets the original result back. A manual booking moves in Luca only. A Cal.com or Google Calendar booking moves on that calendar too. A Calendly, GoHighLevel or iClosed booking is refused so the coach can move it with the provider, and so is a provider booking with no calendar event, such as one from luca_book_call. Moving the call re-arms the lead\'s reminder for the new time, so pass confirm: true only after the coach approves the move. Example: call with { bookingId, slotAt: "2026-07-16T15:00:00Z", confirm: true } after the lead asked to push the call. No message about the move is sent: send the lead the link yourself, or draft the message through the review queue.',
180
180
  inputSchema: {
181
181
  ...WORKSPACE_INPUT_FIELDS,
182
182
  bookingId: NonEmptyString.annotate({ description: "The booking to move." }),
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.3.5";
12
+ export const LUCA_MCP_VERSION = "0.3.7";
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.3.5",
3
+ "version": "0.3.7",
4
4
  "private": false,
5
5
  "description": "Let your AI assistant help with Luca conversations, leads, replies, campaigns, and bookings.",
6
6
  "keywords": [