MCP tool reference
All tools scope to the project the bearer token belongs to. Cross-project access is rejected at the store layer, not just the tool layer.
list_errors
Triage view: most-recent issues first, with status / type / counts but without stack traces or full payloads.
| Parameter | Type | Default | Notes |
|---|---|---|---|
status | string? | (any) | open / resolved / ignored. Omit for all. |
since | string? (ISO) | (no lower bound) | Absolute ISO-8601 timestamp. |
limit | number? | 50 | 1–200. |
cursor | string? | — | From the previous call's nextCursor. |
Returns a slim list ({id, title, type, status, eventCount, lastSeen, ...}) plus a nextCursor for paging.
get_error
Full picture for one issue: every field, the most recent N events, and (if a release is set and a sourcemap is uploaded) the resolved stack with original source positions.
| Parameter | Type | Default | Notes |
|---|---|---|---|
issue_id | number | — | Required. |
event_limit | number? | 5 | 1–50. Most recent events first. |
LLMs generally only need the last 1–3 events to triage. Bumping event_limit is for "this issue has been intermittent for a week, show me a wider sample."
mark_resolved
Close an issue and record the commit that fixed it.
| Parameter | Type | Default | Notes |
|---|---|---|---|
issue_id | number | — | Required. |
commit_sha | string | — | Required. Min 7 chars (a usable abbreviated SHA). |
note | string? | — | Free-form context for the human reviewer (what was wrong, what now). |
The commit SHA isn't validated against any actual repo — Kestrel doesn't have your git history. Treat it as documentation that survives in kestrel get_error forever.
mark_ignored
For issues that aren't bugs (third-party SDK noise, browser extension errors, etc.). Silences the issue without claiming it was fixed.
| Parameter | Type | Default | Notes |
|---|---|---|---|
issue_id | number | — | Required. |
reason | string? | — | Why we don't care about it. |
Reopening an ignored issue is just mark_resolved (with commit_sha if you actually fixed it) or another PATCH /issues/{id} setting status back to open from the web UI.
get_trend
Hourly event counts for one fingerprint over a configurable window. Used to answer "is this getting worse?" without dumping every event into the agent's context.
| Parameter | Type | Default | Notes |
|---|---|---|---|
fingerprint | string | — | Required. From a previous get_error. |
window_hours | number? | 24 | 1–168 (one week). |
Returns sparse buckets [{hourUnix, count}, ...] plus a total. Empty hours are not represented — the LLM (or chart code) can densify if it cares.
What you won't find here
- No
create_issue/delete_issue/set_priority/assign_to— Kestrel doesn't have those concepts. Issues exist because events arrived; they go away because retention expires their last event. - No
search—list_errorsplus filters covers ~all real queries; full-text search would be expensive on the raw payload column and isn't worth the index. - No
comment— thenotefield inmark_resolved/mark_ignoredis the closest thing, and it's a one-shot post, not a thread.