Skip to main content
All four 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.

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
[
  {
    "id": "d3f0a2c4-...",
    "name": "Empty cart after checkout",
    "prompt": "Flag any session where the cart empties unexpectedly...",
    "runMode": "ongoing",
    "status": "active",
    "createdAt": "2026-03-14T22:10:04.512Z",
    "matchCount": 17,
    "lastMatchAt": "2026-04-14T08:41:22.103Z"
  }
]
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" | "resolved"Filter by issue status.
Returns
[
  {
    "id": "87b3a6b6-5af5-438b-a39c-eff148a68ccb",
    "title": "Payment processing fails with generic server error message during checkout",
    "description": "Users are unable to complete the booking process...",
    "status": "unresolved",
    "priority": "critical",
    "previewUrl": "https://.../issue-screenshots/87b3a6b6.png",
    "createdAt": "2026-02-24T10:32:19.066Z",
    "sessionCount": 1,
    "linearIssueUrl": null,
    "linearIssueIdentifier": null
  }
]
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
{
  "id": "87b3a6b6-5af5-438b-a39c-eff148a68ccb",
  "title": "Payment processing fails with generic server error message during checkout",
  "description": "Users are unable to complete the booking process...",
  "stepsToReplicate": "1. Add a listing to the cart\n2. Proceed to checkout\n3. Fill in valid payment details\n4. Click 'Complete booking'\n...",
  "status": "unresolved",
  "priority": "critical",
  "previewUrl": "https://.../issue-screenshots/87b3a6b6.png",
  "aiVerified": true,
  "createdAt": "2026-02-24T10:32:19.066Z",
  "updatedAt": "2026-02-24T10:32:19.066Z",
  "linearIssueUrl": null,
  "linearIssueIdentifier": null
}
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.

list_insights

List the most recent insights (periodic session summaries) for the organization. Arguments
NameTypeDefaultDescription
limitinteger25Max rows to return. Range 1–100.
Returns
[
  {
    "id": "f2b1c0e8-...",
    "createdAt": "2026-04-14T00:00:00.000Z",
    "intervalStart": "2026-04-07T00:00:00.000Z",
    "intervalEnd": "2026-04-14T00:00:00.000Z",
    "sessionsCount": 342,
    "content": {
      "positive": [...],
      "negative": [...]
    }
  }
]
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
If you need more than the max for a single tool call, filter by status (for list_issues) or fetch specific records individually.

Scopes

All tokens currently use a single read:lucent scope — every tool is available to every token minted from your org. Finer-grained scopes may come later if tools diverge in sensitivity.

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.