Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.setluca/luca-mcp

NPM · @SETLUCA/MCP · 2 COMPONENTS

SetLuca DM sales from any MCP client: 208 API tools and 15 task tools for leads, replies, calls.

0 this week 89 Trust /100

Last scanned (6 hours ago)

Scores higher than 93% of npm servers

Category CRM and Sales

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 0 of 4 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to setluca/luca-mcp). View diagnostics → Pass
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 11 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability75
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 39879 tokens (~176/item across 226 items; 223 tools + 3 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management62
  • Stability check failed: the tool surface changed between 0.2.1 and 0.6.0: 73 tool removals, 3 breaking changes, 98 additions. See how to fix → Fail
Tool Coverage92
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 74% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety98
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 13 of 14 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "luca_conversations_send_status" implies "send" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 225 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 25 Oct 26 +26
    • Malware scan: unverified → pass ▲ security
    • Known CVEs: unverified → pass ▲ security
    • Dependency health: unverified → 1.00 ▲ functional
  • 24 Oct 26 −12
    • Known CVEs: pass → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Dependency health: 1.00 → unverified ▼ functional
    • Package version: 0.5.2 → 0.6.0 functional
  • 23 Oct 26 −4
    • Malware scan: pass → unverified ▼ security
    • Known CVEs: unverified → pass ▲ security
    • Dependency health: unverified → 1.00 ▲ functional
    • Package version: 0.5.1 → 0.5.2 functional
  • 22 Oct 26 −6
    • Known CVEs: pass → unverified ▼ security
    • Stability: fail → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Source repository: fail → pass ▲ security
    • Schema quality: 35121 → 39994 ▼ functional
    • Schema quality: 35121 → 40034 ▼ functional
    • Dependency health: 1.00 → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Destructive annotations: 13 of 14 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "luca_conversations_send_status" implies "send" and declares readOnlyHint instead, contradicting what its own name says it does. functional
    • Package version: 0.4.0 → 0.5.1 functional
    • Package version: 0.4.0 → 0.5.0 functional
  • 19 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 60 to 63.

  • 17 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 53 to 56.

  • 15 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 46 to 50.

  • 14 Oct 26 +37
    • Stability: unverified → fail ▼ security
    • Injection markers: unverified → pass ▲ security
    • Judged manipulation: unverified → pass ▲ security
    • Schema quality: 151 → 170 ▼ functional
    • Tool coverage: 92% → 100% ▲ functional
    • Tool coverage: unverified → 100 ▲ functional
    • Schema quality: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • Package version: 0.2.1 → 0.4.0 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed npm/@setluca/mcp@0.6.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo setluca/luca-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/setluca/luca-mcp/.github/workflows/publish-mcp.yml@refs/tags/mcp-v0.6.0
Rekor log index 3437389699
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:8a88197a6a88d369331b3b23d0112097d6bd678e1a3823ca7a6158f079d41f81855c75cd0439b19d785eee85d3c80035ec73726dbd8d26231deecbc50

Background: How many MCP packages publish verified provenance →

Dependencies 4 packages
Packages resolved 4
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 223 exposed · ~39,605 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
luca_analytics_benchmark_consent ~141

The coach's cross-coach benchmark opt-in state (whether this workspace contributes to and sees anonymized niche cohort percentiles). Read-only; the opt-in is changed from the app, not through this key surface. Luca operation: GET /api/analytics/benchmark-consent Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_benchmarks ~164

This coach's own cross-coach benchmark percentiles (e.g. 'top 15% for response speed among fitness coaches'), never another coach's data. `comingSoon: true` with an empty metrics list is the honest, expected state until the cross-coach benchmark pipeline populates this coach's row — never a fabricated comparison. Luca operation: GET /api/analytics/benchmarks Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_call_intelligence ~157

Post-call intelligence for a period: show rate, close rate, average rating and rating distribution, call-to-close lag, repeat-call cohort, day-of-week and call-sequence show rates, and surprise patterns, derived from post-call events and coach-recorded outcomes. Luca operation: GET /api/analytics/call-intelligence Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_call_intelligence_calls ~133

Most recent completed calls with a generated summary, newest first: the coach-facing summary, attendance outcome, rating, and lead name. Luca operation: GET /api/analytics/call-intelligence/calls Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_analytics_content_attribution ~162

Per-content rollup (leads touched, qualified, booked, revenue) of attributed touches for a period. Content is attributed automatically from an Instagram comment or Story reply that carries a real media id, or tagged manually; an honest empty list means no content is attributed yet, not zero performance. Luca operation: GET /api/analytics/content-attribution Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_content_performance ~166

Per-post rollup (reach, engagement rate, likes/comments/saves/shares, attributed leads/bookings/revenue) for each Instagram post, reel, story, or carousel over a period. Insight fields stay null until the coach's account grants Instagram insights access — read that as not connected yet, not zero engagement. Luca operation: GET /api/analytics/content-performance Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_crm_sync_health ~149

Aggregate CRM-sync health for the coach's post-call summaries: counts of synced, pending, local-only, failed, and permanently-failed pushes. All zeros is the honest, expected state for a coach with no synced summaries yet — never a fabricated status. Luca operation: GET /api/analytics/crm-sync-health Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_deep_dive ~237

Answer a specific business question by composing all seven analytics reads in one call: pipeline funnel, revenue and ROI, response-speed impact, a point-in-time revenue forecast, call intelligence (show/close rates), ghosted-lead recovery, and coach trust/auto-send status. Use it when the coach asks a specific question that needs several of these numbers side by side, rather than the fixed weekly report. Example: call with {question: "why did close rate drop this month?", period: "this_month"}.

NameTypeReqDescription
periodstring–Period for the period-scoped reads (funnel, revenue, speedImpact, callIntelligence, ghostedLeads, trustScore). Forecast ignores this — it is always point-in-time. Defaults to this_month.
questionstring–Optional. The coach's question behind this investigation, e.g. 'why did close rate drop this month?'. Not sent to any API; it only records what the coach asked.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_analytics_forecast ~119

Point-in-time pipeline revenue forecast with on-track, optimistic, and conservative scenarios based on pipeline stage probabilities and historical conversion rates. Luca operation: GET /api/analytics/forecast Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_funnel ~127

Pipeline funnel stage counts with period and channel filters. Returns counts and conversion rates for each funnel stage plus period-over-period deltas. Luca operation: GET /api/analytics/funnel Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_ghosted_leads ~150

Summarize leads who stopped replying during a period, including their count, follow-up recovery rate, estimated lost revenue, and common reasons conversations stalled. This is an aggregate report, not a list of individual leads. Luca operation: GET /api/analytics/ghosted-leads Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_analytics_insights ~215

The coach's proactive-insights feed (metric drops/spikes, opportunities, risks, milestones) surfaced by the daily insight-detection cron, newest first. Optionally filter to one status via the status query param (e.g. unread). An empty items list is the honest, expected state for a coach nothing has been flagged for yet — never a fabricated alert. Luca operation: GET /api/insights Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
maxPagesinteger–Max pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_lead_score ~162

Predictive booking-likelihood score (0-100) for one lead from the coach's trained bucket-rate model, with a confidence tier and the top contributing features. Honest about insufficient data: an under-trained model returns a null score and low confidence instead of a fabricated number. Luca operation: GET /api/analytics/lead-score/{leadId} Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
leadIdstringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_learning_insights ~172

Read-only rollup of the agent-improvement signals mined from post-call feedback for a period: total/applied/pending signal counts, a per-type breakdown (qualification, objection handling, lead quality, general), and recent example notes. An empty rollup is the honest, expected state until the coach submits call feedback — never fabricated learning. Luca operation: GET /api/analytics/learning-insights Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_loss_reasons ~164

Category breakdown of automatic 'why you lost' analyses for a period: count and estimated lost revenue per category (price objection, ghosted after a call-to-action, competitor, slow reply, bad fit, other), derived from a per-lead loss analysis generated when a lead goes silent or lost. Luca operation: GET /api/analytics/loss-reasons Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_magic_monday ~99

Return the current week's business report (called Magic Monday in Luca): pipeline funnel, revenue and ROI, response-speed impact, a point-in-time revenue forecast, and call intelligence (show/close rates). Composes five analytics reads into a single call. Example: call with {} for the weekly report.

NameTypeReqDescription
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_objection_drilldown ~192

Per-conversation drilldown for one objection bucket: one row per matching conversation with the lead's display name, the verbatim objection quote, whether the draft was sent without an edit, and the lead's most recent call outcome. Bounded by a limit with a hasMore truncation flag; an empty list is the honest, expected state for a bucket with no conversations in the window. Luca operation: GET /api/analytics/objections/{type} Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
typestringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_analytics_objections ~182

Objection-bucket rollup over the review queue's qualifier signals for a period (price, timing, trust, fit, authority, smokescreen): per-bucket occurrence count, distinct leads, handled rate, wins, and up to three of the most frequent verbatim lead quotes. Filter by channel. An empty bucket list is the honest, expected state until objections are raised — never fabricated. Luca operation: GET /api/analytics/objections Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_analytics_recommendations ~154

The coach's active prescriptive recommendations for a week (what to change and why), generated weekly from detected insights and deduped by title. An empty list is the honest, expected state when nothing is recommended for the window — never a fabricated action. Luca operation: GET /api/analytics/recommendations Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_analytics_revenue ~123

Revenue attribution and plan ROI for a period. Returns total revenue, ROI, and a per-channel revenue breakdown. Luca operation: GET /api/analytics/revenue Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_rollup ~123

Roll up performance across the coach's campaigns (per-campaign analytics for up to 5 recent campaigns) and recent broadcasts. When one half fails to load, the other still comes back and failedSections names the one that is missing. Example: call with {} for the default rollup, or { campaignLimit: 3 }.

NameTypeReqDescription
campaignLimitinteger–How many recent campaigns to include (default 5).
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_speed_impact ~141

Fast-vs-slow first-reply booking-rate impact for a period. Returns fast- and slow-reply conversion rates, a lost-opportunity estimate, and the peak performance reply window. Luca operation: GET /api/analytics/speed-impact Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_topic_performance ~159

Weekly rollup by normalized content topic (post count, average engagement rate, attributed leads/bookings/revenue per theme). Defaults to the most recently computed week when weekStart is omitted; an empty items list is the honest, expected state until content topics are extracted, not zero performance. Luca operation: GET /api/analytics/topic-performance Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_trends ~153

The coach's weekly metrics as a trend series (leads, qualified, booked, revenue, and rates week over week) for charting direction of travel. An empty series is the honest, expected state until enough weeks of history accrue — never fabricated points. Luca operation: GET /api/analytics/trends Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_analytics_trust_score ~121

Draft approval, edit, and rejection rates plus the auto-send gate flag for a period. Luca operation: GET /api/analytics/trust-score Required scopes: analytics:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_approve_and_send ~240

Approve a pending review-queue draft and dispatch it through the lead's channel. THIS SENDS A REAL MESSAGE TO A REAL PERSON — only call it after a human has reviewed and intends to send. Pass confirm: true to proceed. Optional finalBody replaces the draft text before sending. Example: { reviewQueueId, confirm: true }.

NameTypeReqDescription
confirmboolean–This tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events…
finalBodystring–Optional edited body to send instead of the drafted text.
idempotencyKeystring–Reuse the same key when retrying this exact approval.
reviewQueueIdstringyesThe review-queue item to approve.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_book_call ~538

Book a call on the coach's calendar provider and have the provider invite the lead's email; the lead also gets Luca's booking confirmation. Works for call types on Calendly, Cal.com, or Google Calendar. Reads the open slots of the call type first and books the one that starts at slotAt. When that slot is taken it books nothing and returns the open slots instead, so pick one of them and call again. The answer is usually pending while the provider confirms; check it with luca_bookings_provider_requests_get. The booking puts an event on the coach's calendar and invites the lead, so pass confirm: true only after the coach approves this exact slot. If a retry answers slot_not_available, the first attempt may have taken the slot, so check luca_bookings_list before booking again. To record a call that is already on a calendar, use luca_bookings_create instead. Example: call with { leadId, bookingTypeId, slotAt: "2026-07-14T15:00:00Z", inviteeEmail: "sam@example.com", confirm: true } after the lead agreed to a time.

NameTypeReqDescription
bookingTypeIdstringyesThe call type to book, from luca_bookings_types_list. Its provider is the calendar the call lands on.
confirmboolean–This tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events…
idempotencyKeystring–Reuse the same key when retrying this exact booking, so a repeat of a request that already reached the API cannot book the call twice.
inviteeEmailstringyesThe lead's email. The provider sends the invite there.
inviteeNamestring–The lead's name as the invite should show it.
leadIdstringyesThe lead to book.
slotAtstringyesISO-8601 start time for the call, with an offset. It must be an open slot of the call type, as luca_bookings_managed_availability lists them.
timezonestring–IANA time zone the booking is shown in, such as Europe/Madrid. Defaults to UTC.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
result–yes–

No examples provided.

luca_bookings_availability ~117

List open slots the coach can actually be booked into. Check this before booking. Luca operation: GET /api/bookings/availability Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_brief ~124

Read the pre-call brief: who the lead is, what they want, and the objections to expect. Luca operation: GET /api/bookings/{id}/brief Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
idstringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_bookings_calendars_list ~114

List the calendars Luca reads for conflicts, and which one it writes new events to. Luca operation: GET /api/bookings/calendars Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_calendars_remove ~177

Stop using a calendar for conflict checks or as the booking destination. The calendar itself is left alone in Google; only Luca's selection changes. Luca operation: DELETE /api/bookings/calendars Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
bodyobjectyes–
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_calendars_select ~195

Add or update a calendar selection, either for conflict checks or as the destination new bookings are written to. The destination has to be writable: a read-only calendar returns 400, and a Google connection needing attention returns 409. Luca operation: PUT /api/bookings/calendars Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
bodyobjectyes–
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_cancel ~274

Cancel a booking. A Google Calendar or Cal.com booking is cancelled on that calendar too, and the calendar can email the lead about it. Luca operation: DELETE /api/bookings/{id} Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
confirmboolean–This tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events…
idstringyes–
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_bookings_create ~259

Create a provider-neutral booking record. Body requires leadId and slotAt. Luca operation: POST /api/bookings Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
bodyobjectyes–
confirmboolean–This tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events…
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_bookings_get ~114

Read one booking: its slot, status, provider, and lead. Luca operation: GET /api/bookings/{id} Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
idstringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_bookings_guest_links_create ~180

Mint revocable reschedule and cancel links for one booking, so a lead can move the call without an account. Luca operation: POST /api/bookings/{id}/guest-links Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
bodyobjectyes–
idstringyes–
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_guest_links_revoke ~162

Kill every outstanding guest link on a booking at once. Luca operation: DELETE /api/bookings/{id}/guest-links Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
idstringyes–
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_lifecycle_attention ~115

List bookings where Luca's record and the provider's disagree and a human has to decide. Luca operation: GET /api/bookings/lifecycle-attention Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_bookings_lifecycle_resolution ~284

Settle one booking whose record disagrees with the provider's: retry the sync, dismiss the duplicate, or keep Luca's version. Luca operation: POST /api/bookings/{id}/lifecycle-resolution Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
body–yes–
confirmboolean–This tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events…
idstringyes–
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_bookings_list ~154

List bookings. Query supports limit, cursor, status, and upcoming. Luca operation: GET /api/bookings Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
maxPagesinteger–Max pages the server auto-fetches and merges (default 10, hard cap 50). If more remain, the result is marked truncated with a nextCursor to continue.
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_bookings_managed_availability ~123

List open slots for one of Luca's own call types, with calendar conflicts already removed. Luca operation: GET /api/bookings/managed-availability Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobjectyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_needs_outcome ~115

List attended calls with no outcome recorded yet. The work list for closing revenue attribution. Luca operation: GET /api/bookings/needs-outcome Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: full_content Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_bookings_outcome_get ~124

Read where the sale stands on a booking, plus the version you send back to correct it. Luca operation: GET /api/bookings/{id}/outcome Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
idstringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_outcome_history ~125

Read every outcome ever recorded on a booking, in order. Corrections append rather than overwrite. Luca operation: GET /api/bookings/{id}/outcome/history Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
idstringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_outcome_reasons_create ~174

Add a lost-sale or cancellation reason in the workspace's own wording. A code already in use returns 409. Luca operation: POST /api/bookings/outcome-reasons Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
bodyobjectyes–
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_outcome_reasons_list ~129

List the reasons a sale can be lost or a call cancelled. Use one of these codes when recording an outcome. Luca operation: GET /api/bookings/outcome-reasons Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
queryobject––
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_outcome_reasons_update ~183

Rename, reorder, or archive an outcome reason. Archiving hides it from the picker and leaves recorded outcomes alone. Luca operation: PATCH /api/bookings/outcome-reasons/{id} Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
bodyobjectyes–
idstringyes–
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_outcome_record ~331

Record what the call was worth: won, lost with a reason, or still open. Won and lost outcomes can update a connected CRM deal stage, so pass confirm: true for those outcomes. To correct an earlier outcome send the expectedVersion you read; a stale version returns 409 with the current one. Luca operation: POST /api/bookings/{id}/outcome Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive when status is won or lost (can update a connected CRM deal): has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
body–yes–
confirmboolean–This tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events…
idstringyes–
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_provider_requests_create ~370

Book one exact slot from luca_bookings_managed_availability on the coach's Calendly, Cal.com, or Google Calendar, which sends the invite to the lead's email; the lead also gets Luca's booking confirmation. Pass the slot's id, startsAt, endsAt, and timezone as returned by a read of exactly that slot's window, since a slot id is tied to the window it was read in. The answer is usually pending while the provider confirms; read it again with luca_bookings_provider_requests_get. A slot taken in the meantime returns 409 slot_unavailable. Luca operation: POST /api/bookings/provider-requests Required scopes: bookings:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive: has a real-world side effect. You must pass confirm: true; the call is rejected without it. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
bodyobjectyes–
confirmboolean–This tool has a real-world side effect: it messages real leads, books, moves, or cancels a call, changes a lead's consent, imports leads, writes to a connected calendar or CRM, sends workspace events…
idempotencyKeystring–Stable key for safe retries. If omitted, the MCP server generates a unique key for this call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_bookings_provider_requests_get ~142

Read where a calendar booking request stands. pending_provider turns into confirmed, handoff_required, or failed once the provider answers, and a confirmed request carries the booking id and meeting link. Luca operation: GET /api/bookings/provider-requests/{id} Required scopes: bookings:read Required OAuth scope: luca:read; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
idstringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

Install

How do I install the io.github.setluca/luca-mcp server?

io.github.setluca/luca-mcp runs locally as an npm package, launched with npx -y @setluca/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @setluca/mcp

# add to Claude Code
claude mcp add setluca-luca-mcp -- npx -y @setluca/mcp
Common questions

What is the io.github.setluca/luca-mcp server?

io.github.setluca/luca-mcp is listed in the public MCP registry as io.github.setluca/luca-mcp. SetLuca DM sales from any MCP client: 208 API tools and 15 task tools for leads, replies, calls. This page covers its npm package (@setluca/mcp).

Is the io.github.setluca/luca-mcp server safe to use?

io.github.setluca/luca-mcp scores 89 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.setluca/luca-mcp server expose?

io.github.setluca/luca-mcp exposes 223 tools: luca_capabilities_get, luca_leads_list, luca_leads_get, luca_leads_explain, luca_leads_create, and 218 more. Their descriptions and schemas cost roughly 39,605 tokens of context every time the server is loaded.

Is the io.github.setluca/luca-mcp server still maintained?

io.github.setluca/luca-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.setluca/luca-mcp server under?

io.github.setluca/luca-mcp declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.