https://app.lucenthq.com/api/mcp and scoped automatically to the
organization that owns the bearer token. There is no way to pass an
orgId argument — your token IS the scope.
Every tool returns a single JSON-stringified payload in a text content
block. The shapes below are what you’ll see once the client parses that
JSON.
Every tool also accepts an optional prompt argument: the user request
that caused the tool call. Clients should pass it through when they can —
it gives the audit trail context for why an agent read or changed
something.
list_signals
List signals configured for the organization, with match counts and
last-match timestamps.
Arguments
| Name | Type | Default | Description |
|---|---|---|---|
limit | integer | 50 | Max rows to return. Range 1–200. |
createdAt descending. matchCount is a LEFT JOIN count of
rows in signal_instances; lastMatchAt is the most recent instance
timestamp or null if the signal has never matched.
list_issues
List issues for the organization, optionally filtered by status.
Arguments
| Name | Type | Default | Description |
|---|---|---|---|
limit | integer | 25 | Max rows to return. Range 1–200. |
status | "unresolved" | "ticket_created" | "ignored" | "resolved" | — | Filter by issue status. |
createdAt descending. sessionCount is the number of session
replays that triggered this issue. linearIssueUrl and
linearIssueIdentifier are populated when the issue has been promoted to
a Linear ticket, otherwise null.
get_issue
Fetch a single issue by ID, scoped to the organization.
Arguments
| Name | Type | Description |
|---|---|---|
issueId | string (uuid) — required | The UUID of the issue to fetch. |
isError: true with a “No issue found with id ” message
if the issue doesn’t exist or belongs to a different organization.
Unlike list_issues, get_issue includes stepsToReplicate and
aiVerified — heavier fields that aren’t worth returning in bulk.
update_issue
Update an issue’s status — mark it resolved after a fix ships, ignore a
false positive, or reopen a regression. This is the only write tool, and
the only one that requires the write:issues scope.
Arguments
| Name | Type | Description |
|---|---|---|
issueId | string (uuid) — required | The UUID of the issue to update. |
status | "unresolved" | "ticket_created" | "ignored" | "resolved" — required | The new status. |
get_issue.
Returns isError: true with Missing required scope: write:issues if the
token lacks the scope, or No issue found with id {issueId} if the issue
doesn’t exist or belongs to a different organization.
The same operation is available over REST as
PATCH /api/v1/issues/{issueId}.
list_insights
List the most recent insights (periodic session summaries) for the
organization.
Arguments
| Name | Type | Default | Description |
|---|---|---|---|
limit | integer | 25 | Max rows to return. Range 1–100. |
createdAt descending. Each row covers the window from
intervalStart to intervalEnd and summarizes sessionsCount sessions
that completed in that window. The content field is the structured AI
summary — shape varies by insight type.
Limits and defaults
| Tool | Default limit | Max limit |
|---|---|---|
list_signals | 50 | 200 |
list_issues | 25 | 200 |
list_insights | 25 | 100 |
get_issue | — | — |
update_issue | — | — |
status
(for list_issues) or fetch specific records individually.
Scopes
| Scope | Tools |
|---|---|
read:lucent | list_signals, list_issues, get_issue, list_insights. Included with every token. |
write:issues | update_issue. |
write:issues by checking Allow issue status updates at
creation; keys without it can use the four read tools but update_issue
returns a missing-scope error. OAuth clients must request write:issues
explicitly — the default OAuth scope is read:lucent.
Organization isolation
Every tool call compiles to a SQL query withWHERE org_id = ? where
org_id comes exclusively from the bearer token’s auth context. No
tool accepts an organization argument from the client, and get_issue
compounds the ID check with the org check so an issue UUID from another
organization will never resolve.
If you need access to a different organization, sign in to that
organization in the dashboard and mint a new token there.