Skip to main content
All five tools are registered under the MCP server at 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
NameTypeDefaultDescription
limitinteger50Max rows to return. Range 1–200.
Returns
Ordered by 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
NameTypeDefaultDescription
limitinteger25Max rows to return. Range 1–200.
status"unresolved" | "ticket_created" | "ignored" | "resolved"Filter by issue status.
Returns
Ordered by 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
NameTypeDescription
issueIdstring (uuid) — requiredThe UUID of the issue to fetch.
Returns
Returns 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
NameTypeDescription
issueIdstring (uuid) — requiredThe UUID of the issue to update.
status"unresolved" | "ticket_created" | "ignored" | "resolved" — requiredThe new status.
Returns The updated issue, in the same shape as 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
NameTypeDefaultDescription
limitinteger25Max rows to return. Range 1–100.
Returns
Ordered by 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

ToolDefault limitMax limit
list_signals50200
list_issues25200
list_insights25100
get_issue
update_issue
If you need more than the max for a single tool call, filter by status (for list_issues) or fetch specific records individually.

Scopes

ScopeTools
read:lucentlist_signals, list_issues, get_issue, list_insights. Included with every token.
write:issuesupdate_issue.
API keys get 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 with WHERE 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.