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 (12 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_campaigns_set_status ~294

Pause, resume, or archive a campaign. A transition that does not make sense for the campaign's current state is rejected rather than forced through. Luca operation: POST /api/campaigns/{id}/status Required scopes: campaigns: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 published (resuming sends): 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…
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
result–yes–

No examples provided.

luca_campaigns_simulations_create ~168

Run a persisted dry-run simulation without sending messages. Luca operation: POST /api/campaigns/{id}/simulations Required scopes: campaigns: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. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

NameTypeReqDescription
bodyobject––
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_campaigns_simulations_get ~125

Get a campaign simulation run with trace. Luca operation: GET /api/campaigns/{id}/simulations/{simulationId} Required scopes: campaigns: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–
simulationIdstringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_campaigns_simulations_list ~161

List persisted campaign simulation runs. Luca operation: GET /api/campaigns/{id}/simulations Required scopes: campaigns: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–
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_campaigns_versions_list ~134

List a campaign's published version history. Published versions cannot change, so this is the record of what actually ran rather than what the draft says today. Luca operation: GET /api/campaigns/{id}/versions Required scopes: campaigns: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_capabilities_get ~129

Describe Luca's public API capabilities, scopes, and boundaries. Luca operation: GET /api/capabilities Required scopes: leads:read, conversations:read, bookings:read, campaigns:read, broadcasts:read, webhooks:read, integrations: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_channels_catalog ~113

List every channel Luca supports and whether it can be connected yet. Availability is per channel, not per coach. Luca operation: GET /api/channels/catalog Required scopes: channels: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_channels_features ~135

List what each provider supports, from sending media to interactive replies, and what still blocks a feature: a permission, a webhook field, or a provider approval. Check this before telling the coach a channel can do something. Luca operation: GET /api/channels/features Required scopes: channels: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_channels_get ~131

Read one channel account: status, health, cleanup state after a disconnect, and the actions the coach can take on it. Older rows stay readable by ID. Luca operation: GET /api/channels/{id} Required scopes: channels: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_channels_list ~134

List the coach's current channel accounts, one per provider account, with each one's status, health, and what the composer can send through it. Connecting, pausing, and repairing an account stay in the Luca app. Luca operation: GET /api/channels Required scopes: channels: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_channels_set_ai_dm_auto_send ~348

Turn Luca's DM auto-send on or off for one channel account. Off puts every Luca draft on that account in the review queue. On lets drafts that pass Luca's safety checks send without review, and also turns on the workspace switch, so every other account with its own switch on starts sending too. Campaign sends follow their own policy. WhatsApp and disconnected accounts answer 404. Luca operation: PATCH /api/channels/{id}/auto-send Required scopes: channels:write Required OAuth scope: luca:full; data sensitivity: redacted Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Destructive when enabled is true (lets Luca's replies reach leads without review): 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…
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_close_call_loop ~608

File what happened on a call and what it was worth, in one call. Reports attendance on the call event (completed, no_show, rescheduled, or cancelled) and, when an outcome is given, records the booking outcome: won with an amount, lost with a reason id from luca_bookings_outcome_reasons_list, or open with the next follow-up. This tool sends no message to the lead itself, but the records it files start work in the API. Reporting a no_show can start no-show recovery, which schedules a message to the lead when the booking type has recovery on. A completed call queues its summary, which can later sync to the connected CRM. A won or lost outcome queues a CRM deal-stage update, and lost also moves the lead to lost. Pass confirm: true before reporting a no_show or recording a won or lost outcome. Example: { bookingId, attendance: "completed", outcome: "won", amountMinor: 250000, currency: "USD", confirm: true }.

NameTypeReqDescription
amountMinorinteger–Deal value in minor units (cents) when outcome is won.
attendancestringyesWhat happened to the call itself.
bookingIdstringyesThe booking whose call just happened.
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…
currencystring–ISO-4217 currency for amountMinor, uppercase.
expectedVersioninteger–The outcome version you read, when correcting an earlier outcome. A stale version returns 409 with the current one.
followUpTimezonestring–Required when outcome is open: IANA timezone the follow-up is scheduled in.
idempotencyKeystring–Reuse the same key when retrying this exact report. Both writes are scoped by route, so one key covers the pair.
lossReasonDefinitionIdstring–Required when outcome is lost: a reason id from luca_bookings_outcome_reasons_list.
nextFollowUpAtstring–Required when outcome is open: ISO-8601 follow-up time.
notesstring–The coach's notes on the call, stored on the call event.
outcomestring–The revenue outcome. Leave it off to report attendance only and record the money later.
outcomeNotestring–Note stored on the revenue outcome, separate from notes.
ratinginteger–The coach's 1-5 rating of the call.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_coach_audit_log ~196

Read the coach-visible audit trail, newest first, filterable by actor type, action, action prefix, or target. It is the one read that spans every domain, so use it to check what a previous run actually did instead of replaying each list route. Luca operation: GET /api/audit-log Required scopes: coach: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_coach_niche ~110

Read the coach's canonical niche, the cohort key their benchmarks are compared against. Luca operation: GET /api/coaches/niche Required scopes: coach: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_coach_niche_profile ~130

Read the coach's offer, audience, price range, promised outcomes, disqualifiers, and FAQs. This is the context that decides whether a lead is a fit. Luca operation: GET /api/coaches/niche-profile Required scopes: coach: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
result–yes–

No examples provided.

luca_coach_objection_playbook ~124

Read how the coach wants each objection type handled — price, timing, trust, fit — before drafting a reply to one. Luca operation: GET /api/coaches/objection-playbook Required scopes: coach: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
result–yes–

No examples provided.

luca_coach_post_call_crm_mapping ~125

Read which CRM field each post-call value writes to. Check this before a CRM push to know what will land where. Luca operation: GET /api/coaches/post-call-crm-mapping Required scopes: coach: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_coach_post_call_deal_sync ~115

Read the CRM pipeline and the stage each call outcome moves a deal to. Luca operation: GET /api/coaches/post-call-deal-sync Required scopes: coach: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_coach_post_call_settings ~123

Read the coach's post-call preferences: what gets summarized, what gets pushed to the CRM, and what the coach fills in themselves. Luca operation: GET /api/coaches/post-call-settings Required scopes: coach: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_coach_profile ~127

Read the coach's account record: name, timezone, business hours, and tone slider. Use it to know when the coach is reachable and how formal they want to sound. Luca operation: GET /api/coaches/me Required scopes: coach: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_conversations_get ~109

Get a conversation with messages and lead context. Luca operation: GET /api/conversations/{id} Required scopes: conversations: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_conversations_list ~155

List recent conversations. Query supports limit, cursor, channel, and q. Luca operation: GET /api/conversations Required scopes: conversations: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_conversations_media_retry ~218

Queue another transcription attempt for a voice note in this conversation. Only re-transcribes; never drafts or sends. A refusal says why: a retry is already running, the limit is reached, or the audio is gone. Luca operation: POST /api/conversations/{id}/messages/{messageId}/media/{mediaId}/retry Required scopes: conversations: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.
mediaIdstringyes–
messageIdstringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_conversations_messages ~171

Page backward through a thread's older messages, for threads longer than the window the conversation read returns. Luca operation: GET /api/conversations/{id}/messages Required scopes: conversations: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–
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_conversations_partial_send_retry ~282

Retry only the parts of a partially sent message that are known not to have reached the provider. Luca operation: POST /api/conversations/{id}/messages/{messageId}/retry Required scopes: conversations: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
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.
messageIdstringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_conversations_reply_failure_dismiss ~152

Close a failed reply the coach has given up on, so it leaves the thread on every device. Sends nothing. Dismissing twice changes nothing. Luca operation: POST /api/conversations/{id}/reply-failures/{failureId}/dismiss Required scopes: conversations:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

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

No examples provided.

luca_conversations_reply_failure_retry ~269

Send a reply the coach wrote that failed to go out, under the key it first went out with, so the lead never gets it twice. Only a failure that is safe to repeat can be retried. Sends a real message. Luca operation: POST /api/conversations/{id}/reply-failures/{failureId}/retry Required scopes: conversations:write Required OAuth scope: luca:queue_ops; data sensitivity: redacted Does not require idempotency. 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…
failureIdstringyes–
idstringyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_conversations_send ~314

Send a message to the lead on their channel right away. This is the one conversation tool that reaches a real person without a reviewer seeing the message first, which is why it needs an explicit confirm. Prefer drafting into the review queue unless the coach has asked for this message to go out now. Luca operation: POST /api/conversations/{id}/send Required scopes: conversations: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…
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_conversations_send_status ~168

Look up a manual reply by the idempotency key it was sent with, to learn whether the API accepted it for sending before you send it again. accepted means it is queued to go out, not that it was delivered; not_found means no accepted send exists under that key. Luca operation: GET /api/conversations/{id}/send-status Required scopes: conversations: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–
queryobjectyes–
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
result–yes–

No examples provided.

luca_draft_reply ~178

Draft a reply for a lead, written the way the coach writes, and put it in the SetLuca review queue, where it waits for the coach to approve it. Drafting again replaces this lead's earlier unapproved draft from this tool. It never sends, whatever the channel's auto-send setting. Optional guidance steers tone or content. Example: call with { leadId, guidance: "keep it short and warm" }.

NameTypeReqDescription
guidancestring–Optional steer for tone or content of the draft.
idempotencyKeystring–Reuse the same key when retrying this exact draft.
leadIdstringyesThe lead to draft a reply for.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_find_leads ~125

Search the coach's leads by free-text query and optional channel. Use this to locate a lead before drafting, booking, or flagging. Example: call with { query: "maria instagram" } to find Maria's Instagram lead.

NameTypeReqDescription
channelstring–Optional channel filter.
limitinteger–Max results (default 10).
querystringyesFree-text search: name, handle, or keyword.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
provenanceobject––
resultobjectyes–

No examples provided.

luca_flag_for_human ~182

Add a note to a lead, tagged [needs-human], that the coach sees on the lead's timeline. This is an ordinary note with a prefix — it does not route, alert, or reprioritize anything. Use when a conversation needs judgment an agent should not exercise (payment claims, distress, legal), and tell the coach directly if it is urgent. Example: call with { leadId, reason: "lead mentioned a refund dispute" }.

NameTypeReqDescription
idempotencyKeystring–Reuse the same key when retrying this exact flag.
leadIdstringyesThe lead to flag.
reasonstringyesWhy a human should look — shown to the coach verbatim.
workspaceIdstring–Optional Luca workspace id override.
workspaceSlugstring–Optional Luca workspace slug override.
NameTypeReqDescription
resultobjectyes–

No examples provided.

luca_insights_dismiss ~170

Dismiss one insight the coach does not want to act on. Use this rather than leaving it unread forever. Luca operation: POST /api/insights/{id}/dismiss Required scopes: insights:write Required OAuth scope: luca:draft; 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_insights_mark_actioned ~173

Record that the thing an insight asked for was actually done. Use it after doing the work, not instead of it. Luca operation: POST /api/insights/{id}/action Required scopes: insights:write Required OAuth scope: luca:draft; 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_insights_mark_read ~165

Mark one insight read, so it stops coming back at the top of the feed. Luca operation: POST /api/insights/{id}/read Required scopes: insights:write Required OAuth scope: luca:draft; 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_insights_settings_get ~139

Read which insight alerts reach the coach and how. Before the coach changes anything this returns the defaults, so it never 404s. Check it before concluding a quiet feed means nothing is happening, since alerts may be muted. Luca operation: GET /api/insights/settings 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_insights_settings_update ~171

Merge-patch the coach's alert-delivery settings. Send only what you are changing; anything left out keeps its current value. Luca operation: PUT /api/insights/settings Required scopes: insights:write Required OAuth scope: luca:draft; 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_insights_unread_count ~117

How many insights the coach has not read yet. Cheap enough to poll before pulling the whole feed. Luca operation: GET /api/insights/unread-count 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_integrations_connectors_list ~107

List Zapier, Make, and CRM provider capabilities. Luca operation: GET /api/integrations/connectors Required scopes: integrations: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_integrations_crm_connections_create ~160

Create or update a workspace-scoped CRM connection. Luca operation: POST /api/integrations/crm/connections Required scopes: integrations:write Required OAuth scope: luca:full; 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_integrations_crm_connections_disconnect ~298

Disable a CRM connection and clear the credentials Luca holds, which stops every sync with that CRM until the coach connects it again. Saved mappings and event history stay. It does not revoke access on the CRM's side. Luca operation: POST /api/integrations/crm/connections/{id}/disconnect Required scopes: integrations:write Required OAuth scope: luca:full; 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
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_integrations_crm_connections_health ~159

Probe CRM provider health. Luca operation: POST /api/integrations/crm/connections/{id}/health Required scopes: integrations:write Required OAuth scope: luca:full; 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_integrations_crm_connections_list ~103

List CRM connections. Luca operation: GET /api/integrations/crm/connections Required scopes: integrations: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_integrations_crm_connections_schema ~115

Discover CRM provider schema. Luca operation: GET /api/integrations/crm/connections/{id}/schema Required scopes: integrations: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_integrations_crm_connections_webhooks_setup ~272

Configure CRM provider webhook status. Luca operation: POST /api/integrations/crm/connections/{id}/webhooks/setup Required scopes: integrations:write Required OAuth scope: luca:full; 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
bodyobject––
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_integrations_crm_mappings_confirm ~168

Confirm CRM field mappings. Luca operation: PUT /api/integrations/crm/connections/{id}/mappings Required scopes: integrations:write Required OAuth scope: luca:full; 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_integrations_crm_mappings_suggest ~164

Suggest CRM field mappings. Luca operation: POST /api/integrations/crm/connections/{id}/mappings/suggest Required scopes: integrations:write Required OAuth scope: luca:full; 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_integrations_crm_oauth_url ~131

Create a CRM provider OAuth URL and store its one-time state. Luca operation: GET /api/integrations/crm/providers/{provider}/oauth-url Required scopes: integrations:write Required OAuth scope: luca:full; data sensitivity: redacted Does not require idempotency. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

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

No examples provided.

luca_integrations_crm_sync_runs_create ~198

Record a dry-run preview of the changes a CRM sync would make, as a new sync run. Nothing is written to the CRM: the API refuses a live sync. Luca operation: POST /api/integrations/crm/connections/{id}/sync-runs Required scopes: integrations:write Required OAuth scope: luca:full; data sensitivity: full_content 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
bodyobject––
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_integrations_crm_sync_runs_list ~118

List CRM sync history. Luca operation: GET /api/integrations/crm/connections/{id}/sync-runs Required scopes: integrations: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.

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.