Skip to main content
Glama
HieuAnh87

selfhosted-sentry-mcp

by HieuAnh87

selfhosted-sentry-mcp

npm version License: MIT Model Context Protocol

MCP server that gives AI coding agents token-efficient access to a self-hosted Sentry instance.

Why this exists

A single Sentry event endpoint can return well over 100,000 tokens — more than most models can hold, let alone reason about. Pointing an agent at the raw Sentry API usually ends in a blown context window.

This server is built around that problem:

  • Compact by default. get_sentry_issue returns essential fields only; list_issue_events, list_error_events and get_release_details return summaries unless you pass full: true. get_sentry_event_details returns 5 prioritized entries by default and strips heavy blocks (sdk, packages, contexts, user, request, environment), flagging each removal.

  • A token budget. List and detail tools measure their responses against a 50,000-token budget (MAX_TOKENS in src/config.ts) and truncate oversized ones with a hint instead of dumping them. The budget is a backstop, not a guarantee — narrow with filters, grep_pattern and pagination rather than relying on it.

  • A refusal path. If raw_sentry_api would return more than 50,000 tokens and you did not pass a grep_pattern, it refuses and returns grep suggestions rather than flooding the conversation.

  • Filters on the way out. Whitelist/blacklist field selection, regex grep, and stack-frame truncation — see FILTERING.md.

  • Purpose-built extractors. get_stack_frames, list_breadcrumbs and check_dsym_status pull the debugging signal out of an event so the agent never sees the surrounding noise.

Related MCP server: Sentry MCP Server

Quickstart

Node.js 20+ and a self-hosted Sentry instance (Sentry SaaS also works if the token and org slug are valid).

1. Create a Sentry auth token

Settings → Auth Tokens → Create New Token.

For read-only use, select event:read, org:read, project:read, team:read and project:releases. Add event:write only if you want the four write tools.

Which scope each tool needs: Token scopes.

2. Find your org slug

Settings → General in your organization, or read it out of the URL: https://your-sentry.com/organizations/[slug]/.

3. Install

Use 1.2.0 or later. Every earlier version is deprecated: its raw_sentry_api accepted absolute URLs and sent your Sentry auth token to them, and it has no SENTRY_READ_ONLY. If you ran an earlier version with an agent that reads Sentry data, rotate the token. The examples use selfhosted-sentry-mcp@latest so npx checks for the newest release instead of reusing an older copy from its cache. Check what you have with npm ls -g selfhosted-sentry-mcp.

Nothing to install. The recommended setup runs the published package through npx straight from your MCP client config — skip to Client configuration.

To install it globally anyway:

npm install -g selfhosted-sentry-mcp@latest

From source:

git clone https://github.com/HieuAnh87/sentry-selfhosted-mcp.git
cd sentry-selfhosted-mcp
npm install
npm run build

The npm package is selfhosted-sentry-mcp. The GitHub repository is HieuAnh87/sentry-selfhosted-mcp — the two names are transposed. sentry-selfhosted-mcp on npm is an unrelated package by a different maintainer; do not install it and do not give it your token.

Configuration

Environment variables

Variable

Required

Default

Purpose

SENTRY_URL

yes

—

Base URL of your Sentry instance, e.g. https://sentry.example.com. Must be a valid URL; a trailing slash is stripped.

SENTRY_AUTH_TOKEN

yes

—

Sentry API token. See Token scopes below.

SENTRY_ORG_SLUG

yes

—

Organization slug, e.g. my-org.

SENTRY_READ_ONLY

no

false

Set to true (or 1) to block writes. Off by default for backward compatibility, so write tools are exposed unless you opt in. See below for exactly what it blocks. Requires 1.2.0 or later — see the version note.

The server validates the three required variables at startup and exits immediately if any is missing or if SENTRY_URL is not a valid URL.

What SENTRY_READ_ONLY=true blocks

Behaviour in read-only mode

update_sentry_issue_status, create_sentry_issue_comment, bulk_update_issues, merge_issues

Refused outright with an InvalidRequest error

raw_sentry_api

Still available, but POST, PUT and DELETE are refused. GET continues to work.

The other 23 tools

Unaffected

Accepted truthy values are true and 1 (case-insensitive). Anything else, including unset, leaves the server writable. When enabled, the startup line on stderr ends with (read-only).

Token scopes

Sentry's scope namespaces are org:*, project:*, team:*, member:* and event:*. There is no issue:* or comment:* scope — issue and comment endpoints live under event:*.

Read-only setup — covers 24 of the 28 tools (everything except the four write tools):

Scope

Needed by

event:read

Every issue and event tool: get_sentry_issue, list_sentry_issues, list_issues, get_issue_hashes, get_sentry_event_details, list_issue_events, list_error_events, get_stack_frames, check_dsym_status, list_breadcrumbs, get_issue_tags, get_issue_tag_values, list_activity (issues/{id}/activities/), get_grouping_config (reads the issue's latest event), get_trace_details (organizations/{org}/trace/{id}/, falling back to events-trace/{id}/ — organization events endpoints, gated on event:read rather than org:read), list_event_attachments, get_event_attachment (attachments may also require the organization's attachments access role), list_user_feedback

org:read

list_sentry_projects, list_teams, list_releases (organization-level endpoints)

project:read

list_sentry_projects; get_grouping_config (projects/{org}/{project}/events/{id}/grouping-info/)

team:read

list_teams

project:releases

list_releases, get_release_details (grants both project and organization release endpoints)

Add only if you want the write tools:

Scope

Needed by

event:write

update_sentry_issue_status, create_sentry_issue_comment, bulk_update_issues and merge_issues (both PUT projects/{org}/{project}/issues/?id=…)

raw_sentry_api is bounded only by the token: it can call any endpoint your scopes permit, with GET, POST, PUT or DELETE. Scope the token to what you actually need — see SECURITY.md.

Client configuration

Where the config file goes:

Client

Location

Claude Code (project)

.mcp.json at the repository root

Claude Code (user)

claude mcp add --scope user — do not hand-edit settings.json, it does not read mcpServers

Cursor

.cursor/mcp.json (project) or ~/.cursor/mcp.json (global)

Option 1: npx (simplest)

{
  "mcpServers": {
    "sentry": {
      "command": "npx",
      "args": ["-y", "selfhosted-sentry-mcp@latest"],
      "env": {
        "SENTRY_URL": "https://your-sentry-instance.com",
        "SENTRY_AUTH_TOKEN": "your-auth-token",
        "SENTRY_ORG_SLUG": "your-org-slug",
        "SENTRY_READ_ONLY": "true"
      }
    }
  }
}

For Claude Code's .mcp.json you may also add "type": "stdio" alongside command.

SENTRY_READ_ONLY needs 1.2.0 or later; earlier versions ignore it silently — see the version note.

To register it at user scope instead, without writing a config file by hand:

claude mcp add --env SENTRY_URL=https://your-sentry-instance.com \
  --env SENTRY_AUTH_TOKEN=your-auth-token \
  --env SENTRY_ORG_SLUG=your-org-slug \
  --env SENTRY_READ_ONLY=true \
  --transport stdio --scope user sentry \
  -- npx -y selfhosted-sentry-mcp@latest

Option 2: global npm install

{
  "mcpServers": {
    "sentry": {
      "command": "selfhosted-sentry-mcp",
      "args": [],
      "env": {
        "SENTRY_URL": "https://your-sentry-instance.com",
        "SENTRY_AUTH_TOKEN": "your-auth-token",
        "SENTRY_ORG_SLUG": "your-org-slug"
      }
    }
  }
}

Option 3: local source build

{
  "mcpServers": {
    "sentry": {
      "command": "node",
      "args": ["<full/path/to/sentry-selfhosted-mcp/build/index.js>"],
      "env": {
        "SENTRY_URL": "https://your-sentry-instance.com",
        "SENTRY_AUTH_TOKEN": "your-auth-token",
        "SENTRY_ORG_SLUG": "your-org-slug"
      }
    }
  }
}

These files contain a live Sentry token in plaintext. Keep them out of version control — see SECURITY.md.

Verify it works

Confirm the server starts and lists its tools before wiring it into a client:

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | \
  SENTRY_URL=https://your-sentry-instance.com \
  SENTRY_AUTH_TOKEN=your-auth-token \
  SENTRY_ORG_SLUG=your-org-slug \
  npx -y selfhosted-sentry-mcp@latest

You should see a JSON response listing 28 tools, plus a startup line on stderr naming your org slug and Sentry URL. (Fewer than 28 means an outdated version — see the version note. For a source build, replace npx -y selfhosted-sentry-mcp@latest with node build/index.js.)

Self-hosted Sentry MCP server v… running for org "your-org-slug" at https://your-sentry-instance.com

If the process exits instead, one of the three required environment variables is missing or SENTRY_URL is malformed.

Or drive it interactively with the MCP inspector:

npx @modelcontextprotocol/inspector npx -y selfhosted-sentry-mcp@latest

Usage

Once the server is registered, talk to your agent normally. Prompts that map cleanly onto these tools:

  • "List unresolved production issues in the checkout project, most frequent first." → list_issues with query: "is:unresolved environment:production", sort: "freq"

  • "Show me the in-app stack frames for event abc123 in apple-ios." → get_stack_frames with in_app_only: true

  • "What happened right before issue 5217 crashed?" → list_issue_events with issue_id: "5217", limit: 1 to get the latest event ID, then list_breadcrumbs with that event_id and the issue's project_slug

  • "Are we missing dSYMs for the iOS project?" → check_dsym_status

  • "Why are issues 4821 and 4822 grouped separately?" → get_issue_hashes and get_grouping_config

  • "Which OS versions does issue 5217 affect?" → get_issue_tags, then get_issue_tag_values with tag_key: "os.name"

If a response comes back truncated, narrow it rather than asking for more — pass entry_type, limit, grep_pattern or max_stack_frames, or page with cursor. See Reducing response size.

Tools

28 tools across 8 categories. Parameters are required unless marked optional.

WRITE marks the five tools that can modify Sentry. Under SENTRY_READ_ONLY=true the four dedicated write tools are hidden from the tool list and refused if called anyway, while raw_sentry_api stays available with GET only. Every tool also carries MCP annotations (readOnlyHint, destructiveHint, idempotentHint), so clients can decide which calls need confirmation — see Configuration.

Issue IDs. Every issue_id parameter accepts either a numeric ID (5217) or a short ID as shown in the Sentry UI (PROJ-1A2). get_sentry_issue also accepts a full issue URL.

Pagination. Tools that take a cursor return, when Sentry has more results, a second text content block after the main result:

{"next_cursor": "0:25:0", "has_more": true, "hint": "More results exist. Call this tool again with cursor set to next_cursor."}

Call the same tool again with cursor set to next_cursor to get the next page. When there is no further page, the block is absent. The first block keeps its existing shape, so clients that only read content[0] are unaffected.

Write tools act on real data. bulk_update_issues requires a non-empty query or an issue_ids list and refuses to run without one — with no selection, Sentry would apply the change to every unresolved issue in the project (up to 1000). A broad query can still match hundreds of issues; check it with list_sentry_issues first. merge_issues cannot be undone.

Issue tools

Tool

Purpose

Parameters

get_sentry_issue

Issue details by numeric ID, short ID or URL

issue_id_or_url; optional include_latest_event (default false), include_fields[], exclude_fields[], grep_pattern, max_stack_frames — see FILTERING.md

list_sentry_projects

All projects in the org

optional cursor

list_sentry_issues

Issues in one project, as compact triage fields (id, shortId, title, level, status, counts, first/last seen, project, assignee, error type/value)

project_slug; optional query, status (resolved/unresolved/ignored), limit (1–100, default 25), cursor, full (Sentry's full issue objects with stats)

list_issues

Org-wide issue search, Sentry query syntax; compact fields like list_sentry_issues

optional query, sort (date/priority/freq/user, default date), limit (1–100, default 25), cursor, full

get_issue_hashes

Fingerprint hashes for an issue

issue_id; optional cursor

update_sentry_issue_status WRITE

Set issue status

issue_id, status (resolved/ignored/unresolved)

create_sentry_issue_comment WRITE

Add a comment

issue_id, comment_text

bulk_update_issues WRITE

Mass resolve/ignore/assign by query or ID list

project_slug, plus a non-empty query or issue_ids[] (numeric IDs, max 100); optional status, assigned_to, has_seen. Refused if neither query nor issue_ids is given — Sentry would otherwise apply the change to every unresolved issue in the project (up to 1000).

Event tools

Tool

Purpose

Parameters

get_sentry_event_details

Event details, entry-filtered

project_slug, event_id; optional limit (default 5), offset (default 0), entry_type (exception/message/breadcrumbs/request/threads/debugmeta/contexts). limit is the main defence against token blowups. Without entry_type, entries are prioritized exception → message → breadcrumbs → request.

list_issue_events

Events for one issue over time

issue_id; optional limit (1–100, default 25), cursor, full (default false)

list_error_events

Search events in a project

project_slug; optional limit (1–100, default 25), cursor, query, full (default false)

get_stack_frames

Structured stack frames

project_slug, event_id; optional in_app_only (default false; keeps only frames Sentry marks as application code), max_frames (1–100, default 50; keeps the last N)

check_dsym_status

Missing iOS/macOS dSYMs and ProGuard mappings

project_slug; optional event_id. Without it, checks the latest event of the first issue Sentry returns for the project — not necessarily the project's most recent event, so pass event_id when you have one.

list_breadcrumbs

Trail of events before the error

project_slug, event_id (an event ID, not an issue ID — get one from list_issue_events); optional limit (1–100, default 50; returns the most recent N breadcrumbs), type (e.g. default, http, navigation, error)

Release tools

Tool

Purpose

Parameters

list_releases

Releases in the org

optional query (matches on version), date (adoption status, not a date: adopted or unadopted), limit (1–100, default 25), cursor, sort (date/semver, default date)

get_release_details

Release details and health stats

version; optional full (default false; compact view omits stats)

Organization tools

Tool

Purpose

Parameters

list_teams

All teams in the org

none

get_issue_tags

Tags captured for an issue

issue_id (returns the top 5 values per tag)

get_issue_tag_values

Value distribution for one tag

issue_id, tag_key; optional limit (1–100, default 10)

list_activity

Issue activity log

issue_id; optional limit (1–100, default 25), cursor

Advanced tools

Tool

Purpose

Parameters

get_trace_details

Distributed trace with spans

trace_id; optional max_spans (1–500, default 100). Requires Performance data. Uses Sentry's trace endpoint and falls back to events-trace on older self-hosted versions.

get_grouping_config

Why the issue's latest event was grouped the way it was: grouping variants, their hashes and the components that contributed

issue_id

merge_issues WRITE

Merge issues into one

issue_id, target_ids[] — maximum 10. More than 10 is rejected with an invalid-params error, not truncated. All issues must be error issues in the same project. Sentry picks the surviving parent (the earliest first seen), which may not be issue_id; the result reports the actual parent and children, and merged: false when Sentry did not confirm the merge. Merging is not reversible.

Attachment and feedback tools

Tool

Purpose

Parameters

list_event_attachments

Files the SDK attached to events: log files, minidumps, screenshots, view hierarchies

either issue_id (all attachments on the issue) or project_slug + event_id; optional limit (1–100, default 25), cursor

get_event_attachment

Contents of a text attachment such as a log file

project_slug, event_id, attachment_id; optional grep_pattern (matching lines with context, across the whole file), max_chars (1–100,000, default 20,000 — the end of the file is kept, since that is usually nearest the crash). Binary attachments (minidumps, images) and files over 5 MB return metadata only; files Sentry serves from external storage via a redirect are not fetched with your token.

list_user_feedback

What end users wrote when reporting a crash (Sentry user reports)

either issue_id or project_slug; optional limit (1–100, default 25), cursor. Reporter emails are omitted. Feedback from Sentry's newer User Feedback widget is stored as issues — find it with list_issues and query: "issue.category:feedback".

Account tools

Tool

Purpose

Parameters

whoami

Connection and token check: the user the token belongs to, its scopes, whether SENTRY_ORG_SLUG is reachable, and which tools those scopes rule out. Start here when other tools return 401/403.

none

Raw API

Tool

Purpose

Parameters

raw_sentry_api WRITE

Any Sentry API endpoint

endpoint (path without the /api/0/ prefix); optional method (GET/POST/PUT/DELETE, default GET), params, body, grep_pattern. Refuses responses over 50,000 tokens unless grep_pattern is set. Under SENTRY_READ_ONLY=true only GET is permitted.

Reducing response size

get_sentry_issue accepts five parameters that control response size — include_latest_event, include_fields, exclude_fields, max_stack_frames and grep_pattern — that exist specifically to keep large issues inside the token budget. max_stack_frames and any latest_event.* filter only have something to act on when include_latest_event: true is set.

FILTERING.md documents all of them with worked examples, including the recommended escalation order when a response is still too big.

Quick reference for the other tools:

Symptom

Fix

Event response truncated

get_sentry_event_details with limit: 3 and entry_type: "exception"

Only need the stack trace

get_stack_frames with in_app_only: true instead of the full event

raw_sentry_api refuses to return

add a grep_pattern — it is required above 50k tokens

Issue payload still too large

max_stack_frames: 5, then exclude_fields, then include_fields, then grep_pattern

List result has more pages

read next_cursor from the second content block and pass it as cursor — see Pagination

Docker

Build:

docker build -t selfhosted-sentry-mcp:latest .

The Docker image builds from your checkout, so it includes SENTRY_READ_ONLY and all 28 tools regardless of what is published on npm.

Client config:

{
  "mcpServers": {
    "sentry": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "SENTRY_URL",
        "-e", "SENTRY_AUTH_TOKEN",
        "-e", "SENTRY_ORG_SLUG",
        "-e", "SENTRY_READ_ONLY",
        "selfhosted-sentry-mcp:latest"
      ],
      "env": {
        "SENTRY_URL": "https://your-sentry-instance.com",
        "SENTRY_AUTH_TOKEN": "your-auth-token",
        "SENTRY_ORG_SLUG": "your-org-slug",
        "SENTRY_READ_ONLY": "true"
      }
    }
  }
}

SENTRY_READ_ONLY is optional: drop both of its lines to expose the write tools. Outside an MCP config, the equivalent docker run flag is -e SENTRY_READ_ONLY=true.

Using an env file keeps the token out of the config file entirely:

# /path/to/.env
SENTRY_URL=https://your-sentry-instance.com
SENTRY_AUTH_TOKEN=your-auth-token
SENTRY_ORG_SLUG=your-org-slug
# Optional: block write tools. Keep comments on their own line;
# Docker does not strip trailing "# ..." from values.
SENTRY_READ_ONLY=true
{
  "mcpServers": {
    "sentry": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "--env-file", "/path/to/.env",
        "selfhosted-sentry-mcp:latest"
      ]
    }
  }
}

Verify the image:

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | docker run -i --rm \
  -e SENTRY_URL=https://example.com \
  -e SENTRY_AUTH_TOKEN=test \
  -e SENTRY_ORG_SLUG=test \
  selfhosted-sentry-mcp:latest

Development

npm install     # runs the build via the prepare hook
npm run build
npm test

See CONTRIBUTING.md for the full workflow. In short: src/** is the source of truth, build/** is generated and must never be edited by hand, and tool names and input schemas are a public contract.

Run the MCP inspector against a local build:

npx @modelcontextprotocol/inspector build/index.js

Security

The server holds a live Sentry API token supplied as a plaintext environment variable, usually inside a config file that is easy to commit by accident.

Read SECURITY.md before deploying it. It covers least-privilege token scoping, why raw_sentry_api bypasses least-privilege reasoning, the SENTRY_READ_ONLY switch, keeping tokens out of version control, and how to report a vulnerability.

Troubleshooting

Server not starting, or tools not showing

  • Verify SENTRY_URL, SENTRY_AUTH_TOKEN and SENTRY_ORG_SLUG are all set. The server exits at startup if any is missing.

  • Confirm SENTRY_URL parses as a URL (include the scheme: https://…).

  • Check Node.js 20+: node --version.

  • On Claude Code, confirm the config is in .mcp.json or was added with claude mcp add. An mcpServers block in settings.json is ignored — the server will never load and there is no error.

"Unauthorized" or "403"

  • The token is invalid, expired, or lacks the scope for that endpoint. Match the failing tool against the scope table.

  • Confirm the token belongs to the organization in SENTRY_ORG_SLUG.

"Tool is disabled: server is running in read-only mode"

  • Expected if SENTRY_READ_ONLY is set to true or 1. Unset it to restore write access. The startup line on stderr ends with (read-only) when the mode is active.

"Project not found"

  • Confirm the slug exists; run list_sentry_projects to see the valid ones.

Empty or truncated responses

  • Use limit and entry_type on get_sentry_event_details.

  • Use grep_pattern on raw_sentry_api for large endpoints.

  • See Reducing response size.

Docker container exits immediately

  • All three required variables must reach the container. With -e VAR (no value) the variable must exist in your shell; otherwise use --env-file.

  • Check docker logs <container-id>.

FAQ

Is this self-hosted only? It targets self-hosted Sentry, but works against Sentry SaaS when the token and org slug are valid.

Why use raw_sentry_api when typed tools exist? For endpoints the typed tools do not cover. It returns unfiltered JSON, so pass grep_pattern on anything event-shaped — above 50,000 tokens it refuses outright without one.

Can I stop the agent from modifying Sentry? Set SENTRY_READ_ONLY=true (requires 1.2.0 or later — see the version note). That hides and refuses the four mutating tools and restricts raw_sentry_api to GET. For a stronger guarantee, issue a token without event:write — the env var stops an agent from calling the tool, the scope stops the credential from being usable at all.

Does it work with Sentry's newer API versions? Yes, for the versions in use today. Sentry has shipped only one public web API version — /api/0/ — and every endpoint here is composed against it in src/api/client.ts. If Sentry ever publishes a /api/1/, this server would need updating.

License

MIT — see LICENSE.

Available Tools

28 tools
bulk_update_issuesA
DestructiveIdempotent

Bulk update issues in one project (resolve, ignore, unresolve, assign, mark seen). Scope: exactly one of issue_ids or query is required. issue_ids changes only those issues; query changes EVERY issue in the project that matches the Sentry search (up to 1000 per call). A call with neither is refused, because Sentry would otherwise change every unresolved issue in the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSentry search query selecting the issues to change (e.g., "is:unresolved environment:staging"). Every matching issue in the project is changed. Use either query or issue_ids.
statusNoNew status.
has_seenNoMark issues as seen.
issue_idsNoNumeric issue IDs to change (1-100). Only these issues are changed. Use either issue_ids or query.
assigned_toNoTeam or user to assign to.
project_slugYesProject slug.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive=true and idempotent=true, but the description adds the crucial blast-radius detail the annotations cannot convey: query changes EVERY matching issue in the project (up to 1000 per call) while issue_ids touches only the listed issues. This is exactly the kind of safety context that prevents an agent from accidentally mass-mutating a project.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with purpose and scope, then the critical selection rule and its rationale. No filler, and every clause carries decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, scope, mutual exclusivity, and blast radius, which is strong for a 6-parameter destructive tool. The one gap is that no output schema exists and the description never indicates what the call returns (counts, affected IDs, or an empty acknowledgement), which an agent might need to confirm success.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: the semantic difference between issue_ids (only those issues) and query (all matching issues), plus the 1000-per-call cap for query that the schema does not state. It does not elaborate on status/enum or assigned_to beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Bulk update issues in one project") and enumerates the exact operations available (resolve, ignore, unresolve, assign, mark seen). The word "bulk" plus the stated single-project scope clearly distinguishes it from the singular update_sentry_issue_status sibling without needing to name it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly defines the selection constraint: exactly one of issue_ids or query is required, and a call with neither is refused. It also explains why (Sentry would otherwise change every unresolved issue), which tells the agent when the tool will and will not execute.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_dsym_statusB
Read-onlyIdempotent

Check if debug symbols (dSYM files) are missing for iOS/macOS crashes.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idNoOptional: Specific event ID.
project_slugYesProject slug.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered without the description. The description adds only the platform scope (iOS/macOS), disclosing nothing about auth requirements, whether it scans the whole project or a single event, or what a 'missing' result looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler; the purpose and platform scope land immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only tool with no output schema and complete schema descriptions, this is close to sufficient. However, it omits whether the check covers the whole project or the optional single event, which is the key behavioral ambiguity for invoking it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters, so the schema already explains project_slug and event_id. The description mentions no parameters at all and adds no meaning about how the optional event_id narrows the check versus a project-wide scan. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Check') and resource ('debug symbols / dSYM files') plus the platform scope ('iOS/macOS crashes'). No sibling tool overlaps with this function, so no differentiation is needed, but the description stops short of stating exactly what the check returns or evaluates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, no prerequisites, and no named alternatives. The agent must infer that this is for investigating symbolication problems during crash triage, which is reasonable but unstated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_sentry_issue_commentA

Add a comment to a Sentry issue. Returns the new comment id.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_idYesNumeric issue ID or short ID (e.g. PROJ-1A2)
comment_textYesComment text.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=true), so the safety picture is covered. The description usefully discloses the return value ('Returns the new comment id') in the absence of an output schema, but adds nothing about permissions or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and followed by the return value. No filler, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter write tool with full schema coverage and annotations, the description plus the return-value note is nearly sufficient. It could be complete with a brief note on preconditions or the failure mode when the issue does not exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (issue_id with short-ID example, comment_text) are already documented in the schema. The description adds no syntax or format meaning beyond that, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (add) and resource (comment on a Sentry issue), so an agent knows exactly what the tool does. No sibling tool performs commenting, so the purpose is unambiguous in context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use, when-not-to-use, or alternative guidance. It does not mention raw_sentry_api as a fallback or note any preconditions (e.g. issue must exist) for commenting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_event_attachmentA
Read-onlyIdempotent

Read the contents of a text attachment (e.g. a log file) on an event. Binary attachments such as minidumps are not returned; their metadata is. Use grep_pattern to return only matching lines from large logs.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent ID the attachment belongs to (event_id from list_event_attachments).
max_charsNoMax characters of content returned (1-100000, default: 20000).
grep_patternNoRegex (case-insensitive): return only matching lines with context.
project_slugYesProject slug.
attachment_idYesAttachment ID (id from list_event_attachments).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds useful behavioral detail that binary attachments return metadata rather than content, and that grep_pattern can filter large logs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise and front-loaded: the core read action comes first, followed by the binary limitation and the grep_pattern optimization. Every sentence carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete enough for a read-only attachment reader with full schema coverage and strong annotations. It explains the important binary-attachment edge case, though it does not describe the response shape for text attachments in detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters, including grep_pattern and max_chars. The description reinforces grep_pattern's purpose for large logs but does not add substantial semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: read the contents of a text attachment on an event. It also gives a concrete example and immediately clarifies the binary-attachment exclusion, which helps distinguish this from listing attachments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context for large logs via grep_pattern and notes that binary attachments are not returned. It does not explicitly name list_event_attachments as the prerequisite/alternative, but the schema parameter descriptions already point there.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_grouping_configA
Read-onlyIdempotent

Explain why events are grouped into an issue: takes the issue's latest event and returns its grouping breakdown — the grouping config, and per variant (e.g. app/system stack trace, fingerprint, message) whether it contributes, its hash, hint and a short summary of the contributing components. Compare hashes with get_issue_hashes.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_idYesNumeric issue ID or short ID (e.g. PROJ-1A2)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive behavior, so the safety profile is covered. The description adds genuinely non-structured traits: it is scoped to the issue's latest event (not its full history) and enumerates the per-variant breakdown returned (contributes, hash, hint, summary). It says nothing about permissions or rate limits, which keeps it out of the top band.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the purpose before the return-shape detail and the sibling pointer. The per-variant enumeration is dense but earns its place given there is no output schema; a slightly tighter phrasing could trim it further.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing returns, and it does so at a useful level of detail (config plus per-variant contributes/hash/hint/summary). For a one-parameter read-only tool that is close to sufficient; missing only edge cases such as behavior when the issue has no events.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, and the schema already explains that it accepts a numeric ID or short ID such as PROJ-1A2. The description adds no format, default, or validation detail beyond that, so the schema does the work and the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('Explain why events are grouped into an issue') and adds the operating detail that it works off the issue's latest event. It explicitly distinguishes itself from the sibling get_issue_hashes by framing the relationship as a hash comparison, so an agent can differentiate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the operating context (takes the issue's latest event) and points at get_issue_hashes for hash comparison, which is a useful routing signal. It stops short of an explicit when-to-use/when-not rule or the condition that selects one tool over the other, so it is clear context rather than full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_issue_hashesA
Read-onlyIdempotent

Get the fingerprint hashes for an issue (25 per page). Useful for understanding why events are grouped together. Paginate with cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor (next_cursor from a previous call).
issue_idYesNumeric issue ID or short ID (e.g. PROJ-1A2)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: a fixed page size of 25 and the need to paginate via cursor, which tells the agent to expect multiple calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: purpose, motivation, and pagination mechanics, front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a small two-parameter read tool with full schema coverage and no output schema, the description covers purpose and pagination adequately. Only a hint of what a hash looks like is missing, which is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented in the schema. The description's mention of cursor pagination mirrors the schema rather than adding new syntax or format detail; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('fingerprint hashes for an issue') and frames the intent ('why events are grouped together'). It is distinguishable from siblings like get_issue_tags or get_stack_frames, though it doesn't explicitly contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'useful for understanding why events are grouped together' gives an implied use case, but there is no explicit when-to-use/when-not guidance or named alternative tools. Usage is inferable rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_issue_tagsB
Read-onlyIdempotent

List all tags captured for an issue. Tags help identify patterns (e.g., environment, OS, user segment affected).

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_idYesNumeric issue ID or short ID (e.g. PROJ-1A2).

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered without the description's help. The description adds only the semantic note that tags encode attributes like environment, OS, and user segment, which is modest added context for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, with the core action front-loaded before the explanatory note about tags. It is efficient, though the second sentence is somewhat generic and could have been spent on disambiguating from the sibling tool instead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with annotations covering safety and no output schema, the description is adequate but leaves gaps: it does not describe the return shape (list of key/value tag pairs vs. keys only) or how it differs from get_issue_tag_values. Nothing an agent strictly needs is missing, but the sibling ambiguity is unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, so the schema already explains that issue_id accepts a numeric ID or short ID. The description adds no format, syntax, or validation detail beyond that, making 3 the correct baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List all tags captured for an issue'), which is clear and unambiguous. However, it does not distinguish itself from the sibling tool get_issue_tag_values, which an agent could easily confuse with this one — both deal with issue tags.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is given, and the closest alternative (get_issue_tag_values) is never named or contrasted. The sentence about tags identifying patterns hints at why tags matter but gives no condition for selecting this tool over its sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_issue_tag_valuesA
Read-onlyIdempotent

Get tag value distribution for a specific tag key. Shows which values occur most frequently for an issue.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax values to return (1-100, default: 10).
tag_keyYesTag key (e.g., "environment", "release", "user.email", "os.name").
issue_idYesNumeric issue ID or short ID (e.g. PROJ-1A2).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description adds useful behavioral context by saying it returns a frequency distribution of tag values, though it does not detail ordering, pagination beyond the schema limit, or exact response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with the core purpose front-loaded. There is no wasted language and the key constraint, a specific tag key, is stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only distribution tool with full schema coverage and rich annotations, the description is nearly complete. The main minor gap is that it does not specify whether the response includes counts, percentages, or ordering.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so issue_id, tag_key, and limit are already documented in the schema. The description reinforces the tag_key concept but adds no syntax or constraints beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: getting tag value distribution for a specific tag key for an issue. It is clear enough to distinguish from listing tag keys, but it does not explicitly name or contrast with the sibling tool get_issue_tags.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase about showing which values occur most frequently implies the use case, but there is no explicit guidance on when to choose this tool over alternatives such as get_issue_tags or other issue-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_release_detailsA
Read-onlyIdempotent

Get detailed information about a release including health stats, commits, and authors.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoInclude full commit and author data (default: false).
versionYesRelease version (e.g., "1.2.3" or full commit SHA).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world, and non-destructive, so the safety profile is covered. The description adds what 'detailed information' includes (health stats, commits, authors), which is useful context beyond the annotations, but it does not discuss auth, rate limits, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no redundant words. It is appropriately sized for a simple read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema but rich annotations and full schema descriptions, the description provides enough content-level detail (health stats, commits, authors) to understand what is returned. It could mention the effect of the 'full' parameter more explicitly, but it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both 'version' and 'full' are fully documented in the schema. The description adds no parameter-specific syntax or behavior beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (release), and the singular 'a release' distinguishes it from the sibling list_releases, though that alternative is not explicitly named. It enumerates the returned content, making the purpose concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an implied context (fetching details for a known release) but does not say when to prefer this over list_releases or other issue tools, nor does it list prerequisites. No explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sentry_event_detailsB
Read-onlyIdempotent

Retrieve details for a specific event ID within a project. IMPORTANT: For large events, always use limit parameter (e.g., limit: 10) to avoid token limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRECOMMENDED: Limit entries returned (default: 5).
offsetNoOffset for pagination through event entries.
event_idYesThe ID of the event.
entry_typeNoFilter to specific entry type ('exception', 'message', 'breadcrumbs', 'request', 'threads', 'debugmeta', 'contexts').
project_slugYesThe slug of the project.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorld, so the safety profile is covered. The description contributes beyond that by warning about token limits on large events and recommending the limit parameter, but says nothing about return format, pagination interaction, or auth/permission needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core purpose front-loaded, followed by the practical limit warning. The ALL-CAPS 'IMPORTANT' is slightly noisy but the content earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and full annotation coverage, the description is adequate but thin for a detail-retrieval tool: it does not describe the shape of returned event data or how entry_type filtering interacts with the limit/offset pagination fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are documented in the schema. The description adds a concrete example value (limit: 10) but no semantics beyond what the schema already provides; the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Retrieve) and resource (details for a specific event ID within a project), which is enough for an agent to distinguish it from list-style siblings like list_issue_events or get_issue_hashes. It does not explicitly name a sibling it differs from, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives one actionable usage rule ('for large events, always use limit') but offers no when-to-use guidance relative to the many sibling retrieval tools (e.g., get_stack_frames, list_breadcrumbs, get_sentry_issue). Usage is implied rather than scoped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sentry_issueA
Read-onlyIdempotent

Retrieve a Sentry issue by numeric ID, short ID (e.g. PROJ-1A2) or issue URL. Returns essential issue fields only; the stacktrace is NOT included unless include_latest_event is true, which adds the latest event's exception (innermost max_stack_frames frames per exception), message and recent breadcrumbs. Supports field filtering, grep and automatic truncation.

ParametersJSON Schema
NameRequiredDescriptionDefault
grep_patternNoOptional: Regex pattern to filter response content.
exclude_fieldsNoOptional: List of fields to exclude (blacklist). Use dot notation for nested fields.
include_fieldsNoOptional: List of fields to include (whitelist). Use dot notation for nested fields (e.g., "latest_event.entries").
issue_id_or_urlYesNumeric issue ID or short ID (e.g. PROJ-1A2), or a full Sentry issue URL.
max_stack_framesNoOptional: Innermost stack frames kept per exception in latest_event (default: 5). Only applies with include_latest_event.
include_latest_eventNoAlso fetch the latest event (exception with stack frames, message, recent breadcrumbs). Default: false, so no stacktrace is returned.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a safe, idempotent read; beyond that the description discloses what is and isn't returned (essential fields only, no stacktrace by default), what enabling include_latest_event adds (innermost frames per exception, message, recent breadcrumbs), and that responses are truncated. These are exactly the behavioral traits annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the identifier forms, then the return-value caveat and the flag that changes it. Dense but every clause carries information an agent needs before calling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of describing returns, and it does: essential fields only, conditional exception/message/breadcrumbs payload, and truncation behavior. Nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including max_stack_frames, grep_pattern and include/exclude_fields is already documented. The description reinforces the include_latest_event coupling and truncation but adds no syntax or format details beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (retrieve a Sentry issue) and enumerates the accepted identifier forms (numeric ID, short ID, URL). This clearly separates it from list-oriented siblings like list_sentry_issues and from get_sentry_event_details, which fetches events rather than the issue record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the key choice explicit: the stacktrace is NOT returned unless include_latest_event is true, so an agent knows when to flip that flag. It does not, however, name an alternative tool (e.g. get_sentry_event_details or list_issue_events) for deeper event inspection, so routing guidance is implicit rather than complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stack_framesC
Read-onlyIdempotent

Extract structured stack trace frames from an event. Optimized for debugging.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe event ID.
max_framesNoMax frames to return (default: 50).
in_app_onlyNoFilter to only application frames (default: false).
project_slugYesThe slug of the project.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare read-only, idempotent, open-world, non-destructive behavior. The description adds little beyond the purpose statement: it does not explain frame ordering, missing debug symbols, filtering behavior, or other operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core action. The second sentence is slightly vague and adds little, but the overall size is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the schema plus annotations cover most invocation needs. However, with no output schema, the description gives only a high-level return description ("structured stack trace frames") and omits frame shape, ordering, or truncation behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so event_id, project_slug, max_frames, and in_app_only are already documented in the schema. The description does not add meaning beyond those parameter definitions, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: extract stack trace frames from an event. It is clear what the tool does, but it does not differentiate from related event-detail tools such as get_sentry_event_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "Optimized for debugging" gives only vague context and does not say when to use this tool versus alternatives. There are no explicit exclusions, prerequisites, or sibling-tool routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_trace_detailsA
Read-onlyIdempotent

Get a distributed trace as a compact, flat list of spans/transactions (id, parent id, op, description, transaction, project, duration ms, start time, linked errors) in tree order with depth, plus totals and errors not attached to any span. Searches the last 90 days. Requires performance/tracing data.

ParametersJSON Schema
NameRequiredDescriptionDefault
trace_idYesTrace ID (32-character hex string).
max_spansNoMax spans to return (1-500, default: 100). Totals always cover the whole trace.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond them: the hard 90-day retention window, the requirement for performance/tracing data to be present, the tree-order-with-depth shape of results, and that errors unattached to any span are also returned. It stops short of describing truncation behavior or response volume limits, which the schema partly covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded verb and resource, then a single dense parenthetical enumerating fields, then two short constraint sentences. No filler, no repetition of the title, and every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining the return value, and it does so well: flat span list with fields, tree order plus depth, totals, and unattached errors. What it omits is pagination/truncation guidance tied to max_spans and whether the response indicates a truncated trace — a meaningful gap for a tool that can return up to 500 spans.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both trace_id (32-char hex) and max_spans (1-500, default 100) are already documented, including the note that totals always cover the whole trace. The description's parenthetical field list mirrors the output rather than adding syntax or constraints for the inputs. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') plus resource ('a distributed trace') with an explicit enumeration of the returned span fields and the fact it is returned as a flat, tree-ordered list. An agent can immediately tell this is a read of one trace's span structure, distinct from the issue/event/release tools among the siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a precondition ('Requires performance/tracing data') and a scope constraint ('Searches the last 90 days'), which are useful gating facts. However, it never says when to prefer this over an alternative (e.g. get_stack_frames or get_sentry_event_details) or what to do when the trace is older than 90 days or tracing is unavailable. Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_activityA
Read-onlyIdempotent

List activity log for an issue. Shows comments, assignments, status changes, and other events.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax activities (1-100, default: 25).
cursorNoPagination cursor.
issue_idYesNumeric issue ID or short ID (e.g. PROJ-1A2).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds useful context by enumerating which event types appear in the log, but says nothing about pagination behavior, ordering, or result size despite exposing a cursor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler; the purpose is front-loaded and the second sentence earns its place by listing the returned event categories. Slightly redundant with the resource name in the title, but tight overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, three-parameter list tool with full schema coverage and rich annotations but no output schema, the description gives enough to call it correctly. The only mild gap is not clarifying its relationship to the other event-listing siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents limit, cursor, and issue_id formats (including the PROJ-1A2 example). The description adds no parameter-level detail beyond that, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List activity log for an issue') and enumerates the content returned (comments, assignments, status changes). It is clear, but it does not explicitly distinguish itself from overlapping siblings such as list_issue_events or list_breadcrumbs, which also return per-issue event data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope implies when to use it (fetching an issue's activity trail), but there is no explicit when-to-use, no exclusions, and no pointer to alternatives like list_issue_events or list_breadcrumbs. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_breadcrumbsB
Read-onlyIdempotent

Extract all breadcrumbs from an event, showing the trail of events leading up to an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by breadcrumb type (e.g., "default", "http", "navigation", "error").
limitNoMax breadcrumbs to return (1-100, default: 50).
event_idYesEvent ID.
project_slugYesProject slug.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=true, covering the safety profile. The description adds conceptual context (breadcrumbs = trail of preceding events) but omits pagination/return behavior. Minor internal tension: it says 'all breadcrumbs' while the schema caps results via limit (default 50, max 100).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single front-loaded sentence with no filler. It is appropriately sized, though slightly terse for a tool with a filtering parameter and pagination limit.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with full schema coverage and annotations handling safety, the description is adequate. It omits any mention of the result limit/pagination and how breadcrumbs are ordered, which an agent might need when interpreting truncated results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents type, limit, event_id, and project_slug fully. The description adds nothing parameter-specific, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Extract') and resource ('breadcrumbs from an event') with scope ('trail of events leading up to an error'). Clear enough to distinguish from siblings like get_stack_frames or get_sentry_event_details, though it doesn't explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use/when-not or alternatives. The phrase 'leading up to an error' implies investigation context, but there is no guidance on when to pick this over get_stack_frames or get_sentry_event_details for diagnosing an error.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_error_eventsA
Read-onlyIdempotent

List error events in a project. Search across all events without knowing the issue ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoInclude full event details (default: false).
limitNoMax events (1-100, default: 25).
queryNoSentry search query.
cursorNoPagination cursor.
project_slugYesThe slug of the project.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds only the project-wide search scope; it says nothing about result volume, ordering, or how the cursor/limit behave in practice.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the core scope statement is front-loaded before the use-case qualifier. Nothing here repeats the schema or wastes tokens.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description plus the fully documented schema cover what an agent needs to invoke it. Pagination mechanics and return shape are the only mild gaps, and the cursor parameter already signals pagination.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — full, limit, query, cursor and project_slug are all documented in the schema with defaults and bounds. The description adds no parameter meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List error events in a project') and adds a scope qualifier — searching across all events — that separates it from issue-scoped siblings like list_issue_events. It stops short of naming the sibling explicitly, so the differentiation is implied rather than crisp.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'without knowing the issue ID' gives a concrete selection condition: reach for this tool when you lack an issue identifier and cannot use issue-scoped listing tools. No explicit alternative is named and no exclusions are stated, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_event_attachmentsA
Read-onlyIdempotent

List files attached to events (log files, minidumps, screenshots, view hierarchies). Pass issue_id for every attachment on an issue, or project_slug + event_id for one event. Read text attachments with get_event_attachment.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax attachments (1-100, default: 25).
cursorNoPagination cursor (next_cursor from a previous call).
event_idNoEvent ID (with project_slug).
issue_idNoNumeric issue ID or short ID (e.g. PROJ-1A2). Use instead of project_slug + event_id.
project_slugNoProject slug (with event_id).

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it implies this returns attachment metadata rather than content, and directs content retrieval to a different tool. It stops short of stating return format or pagination behavior, which keeps it at a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, front-loaded with the resource and its concrete contents, followed by the selection rules and the related tool. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full schema coverage and no output schema, the description covers purpose, mode selection, and the companion read tool. It is nearly complete; only minor items like pagination behavior are left to the schema's cursor field.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds scoping semantics beyond the schema by explaining the two mutually exclusive lookup modes (issue-wide vs single-event) and their parameter combinations, which clarifies intent rather than merely restating field docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List files attached to events") and immediately enumerates concrete attachment types (log files, minidumps, screenshots, view hierarchies), which disambiguates it from generic event/issue listers. An agent can distinguish it from siblings like get_event_attachment without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: use issue_id to get every attachment on an issue, or project_slug + event_id for a single event. It also names the follow-up tool and when to use it ("Read text attachments with get_event_attachment"), making the list-then-read workflow unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_issue_eventsA
Read-onlyIdempotent

List all events for a specific issue. Useful to see all occurrences of an error over time.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoInclude full event details (default: false).
limitNoMax events (1-100, default: 25).
cursorNoPagination cursor.
issue_idYesNumeric issue ID or short ID (e.g. PROJ-1A2).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, and open-world behavior, so the safety profile is covered. The description adds usage context about occurrences over time but does not disclose additional behavioral details beyond what annotations and the schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and followed by a concise usage note. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with fully described parameters and clear annotations, the description is largely complete. It could mention pagination or how full event details differ, but the schema already covers those parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented. The description adds no parameter-specific meaning beyond the schema baseline, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List all events") scoped to a specific issue, which distinguishes it from issue-listing tools. It does not explicitly differentiate itself from the sibling list_error_events or get_sentry_event_details, so sibling differentiation is incomplete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives clear usage context: viewing all occurrences of an error over time. It does not state when not to use it or name alternatives such as list_error_events or get_sentry_event_details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_issuesA
Read-onlyIdempotent

List issues using Sentry search query syntax (e.g., "is:unresolved environment:production"). More powerful than list_sentry_issues which is project-scoped.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn Sentry's full issue objects (stats, annotations, flags) instead of the compact triage fields (default: false).
sortNoSort order (default: date).date
limitNoMax issues (1-100, default: 25).
queryNoSentry search query (e.g., "is:unresolved environment:production level:error").
cursorNoPagination cursor (next_cursor from a previous call).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, open-world and non-destructive, so the safety profile is covered. The description adds the Sentry-query capability but says nothing about return shape, pagination behavior via cursor, or default scope when query is empty, which the missing output schema leaves unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler, and the core purpose is front-loaded before the sibling comparison. Efficient, though the second sentence could carry one more useful clause without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter search tool with no output schema and no required parameters, the description covers purpose and sibling routing but leaves the default behavior with an empty query, the nature of the returned list, and pagination flow unexplained. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so full/full-object vs. compact triage, sort enum, limit bounds and cursor are all documented in the schema. The description's query example merely duplicates the schema's example, adding no new parameter meaning; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (list issues) and names the confusable sibling list_sentry_issues, clarifying that this one is not project-scoped. The exact scope (org-wide vs. a default project) is left implicit, keeping it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a usable selection axis by calling itself 'more powerful than list_sentry_issues which is project-scoped', implying this is the tool for cross-project / query-driven search. It stops short of an explicit when-to-use rule (e.g., what to do when query is omitted) or a when-not-to-use exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_releasesC
Read-onlyIdempotent

List releases in the organization. Releases link code deployments to error data.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoFilter by adoption status.
sortNoSort order (default: date).date
limitNoMax releases (1-100, default: 25).
queryNoOptional search filter on release version.
cursorNoPagination cursor.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds only conceptual framing and says nothing about pagination behavior (the cursor param), result caps, or default windowing that an agent would need to know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with no filler; the core action leads and the definition follows. It is efficient, though the second sentence is informational rather than actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Parameters are fully described by the schema and there is no output schema to explain, but with 27 siblings including get_release_details the description omits any routing guidance, leaving completeness merely adequate for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (date, sort, limit, query, cursor) are fully documented in the schema itself. The description provides no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List releases in the organization') and adds a useful one-line domain framing about what a release represents. However, it never distinguishes itself from the sibling get_release_details, which an agent could easily confuse with this listing tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus get_release_details or raw_sentry_api, nor any conditions, prerequisites, or exclusions. Usage must be inferred entirely from the name and the vague 'in the organization' scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sentry_issuesB
Read-onlyIdempotent

List issues for a specific project, optionally filtering by query or status. Supports pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn Sentry's full issue objects (stats, annotations, flags) instead of the compact triage fields (default: false).
limitNoMax issues (1-100, default: 25).
queryNoOptional Sentry search query.
cursorNoPagination cursor (next_cursor from a previous call).
statusNoFilter by status.
project_slugYesThe slug of the project.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds that pagination is supported, but doesn't explain return shape or the full vs compact tradeoff (left to the schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and scoping, with minimal waste. Slightly terse given the ambiguity with a sibling tool, but efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema is fully described and annotations cover the safety profile, so the mechanical calling information is complete. However, the overlap with sibling list_issues is unaddressed, leaving a meaningful selection gap for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all six parameters are already documented in the schema; the description only echoes query/status and pagination. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb (list) and resource (issues) scoped to a specific project, with optional filtering. It does not, however, distinguish itself from the sibling tool list_issues, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It mentions that filtering by query or status is optional and that pagination is supported, which implies usage, but gives no guidance on when to prefer this over list_issues or other siblings, and no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sentry_projectsA
Read-onlyIdempotent

List projects in the configured Sentry organization (essential fields only). When more projects exist, the result carries a next_cursor; pass it as cursor to get the next page.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoOptional: pagination cursor (next_cursor from a previous call).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuine behavioral context the annotations lack: it discloses that the result may carry next_cursor and how to consume it, and that returned project objects are trimmed to 'essential fields only'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, the resource and scope are front-loaded, and the pagination instruction follows immediately. No filler or restated boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully covers the one return detail that matters for correct invocation: the next_cursor pagination token. It is complete enough for a single-optional-param read tool, though it says nothing about ordering, filters, or what happens when no projects exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents cursor as 'next_cursor from a previous call', which the description essentially repeats. Baseline 3 applies; the description adds the loop-level framing but no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List projects in the configured Sentry organization') and adds a scoping qualifier ('essential fields only'). The resource is clearly distinct from siblings like list_teams or list_releases, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied (call it when you need the organization's project list), and it does explain the pagination loop for the cursor. However, there is no explicit when-to-use vs alternatives guidance and no stated conditions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_teamsA
Read-onlyIdempotent

List all teams in the organization.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered structurally. The description adds only the organizational scope ('all teams in the organization'); it says nothing about pagination, result size, or ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the scope qualifier is stated immediately and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, read-only list tool with rich annotations and no output schema, the definition covers what an agent needs to invoke it. Only return-shape details (pagination, result volume) are absent, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. There is no parameter semantics to add beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (teams) with a scope qualifier ('in the organization'). It is immediately distinguishable from siblings like list_sentry_projects or list_issues, though it does not explicitly contrast itself with any of them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives or related tools. For a trivial enumerator this is tolerable, but the description provides zero routing information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_user_feedbackA
Read-onlyIdempotent

List user feedback (what end users wrote when reporting a crash) for an issue or a whole project. Pass exactly one of issue_id or project_slug. Reporter emails are omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax feedback entries (1-100, default: 25).
cursorNoPagination cursor (next_cursor from a previous call).
issue_idNoNumeric issue ID or short ID (e.g. PROJ-1A2).
project_slugNoProject slug, for all feedback in the project.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond that: reporter emails are redacted/omitted, and results can be scoped to a single issue or an entire project.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The core purpose is front-loaded and the mutual-exclusion constraint follows immediately, so nothing needs to be skimmed for.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description covers purpose, scoping, the XOR constraint, and a notable privacy behavior (emails omitted). It could mention pagination/return shape explicitly, but the cursor parameter in the schema largely covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics the schema lacks: issue_id and project_slug are mutually exclusive and exactly one must be supplied. It also reinforces the scoping effect of project_slug (all feedback in the project).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List user feedback") and disambiguates with a parenthetical explaining what feedback actually is (what end users wrote when reporting a crash). The scope (an issue or a whole project) is stated, so an agent can immediately tell what this returns versus issue/event listing siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit invocation rule: "Pass exactly one of issue_id or project_slug," which steers the agent to valid usage. It does not name alternatives or state when-not to use it (e.g. versus list_issue_events), so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

merge_issuesA
Destructive

Merge issues of the same project into one (error issues only; cross-project merges are refused). Sentry picks the surviving parent itself — the issue first seen earliest — which is not necessarily issue_id; the others become its children. The merge completes asynchronously in Sentry. Use after confirming the issues share a root cause.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_idYesNumeric issue ID or short ID (e.g. PROJ-1A2)
target_idsYesOther issues to merge with issue_id: numeric IDs or short IDs, same project (max 10).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructive/non-idempotent/open-world; the description adds the operationally critical facts that Sentry picks the surviving parent itself (earliest first-seen, not necessarily issue_id), that the others become children, and that the merge completes asynchronously. These are non-obvious behaviors an agent could not infer from the schema or hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, no redundancy. Scope restrictions come first, then the behavior of the merge, then the precondition — a sensible priority order for a destructive operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two well-documented parameters, no output schema, and a destructive hint, the description covers everything an agent needs: eligibility restrictions, async completion, parent-selection semantics, and the precondition. No meaningful gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description still adds real meaning: it clarifies that issue_id is not guaranteed to be the surviving parent, which reframes what the parameter actually controls. It does not restate formats already in the schema, keeping the addition purely additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb + resource ('merge issues of the same project into one') and immediately narrows scope with two constraints: error issues only, cross-project merges refused. This distinguishes it cleanly from siblings like bulk_update_issues, which mutate status rather than consolidate issues.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use after confirming the issues share a root cause' gives a clear precondition for invocation. It stops short of naming alternatives or stating when NOT to use it, so it is one step below fully explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

raw_sentry_apiA
Destructive

Make a raw API call to any Sentry endpoint. Returns unfiltered JSON. WARNING: Event endpoints can return 100K+ tokens. Use grep_pattern for events.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body for POST/PUT.
methodNoHTTP method (default: GET)GET
paramsNoURL query parameters.
endpointYesAPI endpoint path (e.g., 'projects/your-org/your-project/events/abc123/'). Do NOT include /api/0/ prefix.
grep_patternNoCRITICAL for event endpoints: Regex to filter response.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true and readOnlyHint=false, so safety is partly covered. The description adds real behavioral value beyond that: it warns that event endpoints can return 100K+ tokens and that responses are unfiltered. It stops short of covering auth requirements or confirming DELETE/PUT effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with purpose then the token warning, with zero filler. Every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an open-world, potentially destructive raw API tool with no output schema, the definition covers purpose, the unfiltered-response caveat, and the token-blowup risk. It omits mutation/permission caveats (DELETE/POST effects), leaving a small gap for a dangerous tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (including method enum and the endpoint path format) are already documented. The description reinforces grep_pattern's importance for events, but this largely repeats the schema's own 'CRITICAL for event endpoints' note, so it adds little beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Make a raw API call to any Sentry endpoint') and adds the key qualifier 'Returns unfiltered JSON', which distinguishes this escape-hatch tool from the many specialized siblings like list_sentry_issues or get_sentry_event_details. An agent can tell exactly what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one concrete conditional ('Use grep_pattern for events') but never routes the agent between this generic tool and the specialized siblings, nor says when the raw escape hatch is preferred over them. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_sentry_issue_statusB
Idempotent

Update the status of a Sentry issue. Returns the issue id, short ID, title and new status.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesNew status.
issue_idYesNumeric issue ID or short ID (e.g. PROJ-1A2)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the return shape (issue id, short ID, title, new status), which is genuinely useful, but says nothing about permissions or side effects beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste; the action is front-loaded and the return info follows. Nothing could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so naming the returned fields compensates usefully, and the simple two-parameter shape is fully covered by the schema. The only gap is the absence of routing guidance against the bulk sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters and the status enum are fully documented in the schema. The description adds no format or syntax detail beyond it, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Update the status of a Sentry issue.' An agent immediately knows the operation. It does not differentiate from the sibling bulk_update_issues, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance and no mention of alternatives. With bulk_update_issues and merge_issues among the siblings, the description gives no signal about when this single-issue variant is preferred over the bulk one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiA
Read-onlyIdempotent

Check the Sentry connection: the user the token belongs to, the token's scopes, whether the configured organization is reachable, and which tools the scopes rule out. Call this first when other tools fail with 401/403.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world, so safety is covered. The description adds real diagnostic context beyond that: it is a preflight/failure-triage tool and it reports scope-derived tool availability, which an agent could not infer from the annotation set. It does not describe the response shape, but with no output schema this is a modest omission rather than a blocker.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. What it reports comes first, the actionable routing instruction ('call this first on 401/403') is last and easy to scan, so the agent gets payoff and trigger in one pass.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-argument diagnostic tool with full annotation coverage, the description supplies everything an agent needs: what it inspects, why the result matters (which tools are ruled out by scopes), and when to invoke it. No output schema exists, yet the return contents are summarized in prose, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies no input is needed by framing the tool as a pure connection inspection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (check) and resource (the Sentry connection/token), then enumerates the exact facts returned: user identity, token scopes, organization reachability, and which tools the scopes rule out. This is unmistakably the diagnostic/identity tool and is differentiable from every sibling, which are all data-fetching or mutation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition: 'Call this first when other tools fail with 401/403,' which is exactly the situation an agent needs routing for. It stops short of stating when NOT to call it (e.g. whether it is worth calling preemptively before a long workflow), leaving a small gap, but the primary usage signal is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 20 tool updates
    • Changedbulk_update_issues2 fields changed
      • addedInput schema / properties / issue_ids
        Added value: +{
        +  "description": "Numeric issue IDs to change (1-100). Only these issues are changed. Use either issue_ids or query.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 100,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / properties / query / description
        Previous value: -"Sentry search query to select issues (e.g., \"is:unresolved environment:staging\")."New value: +"Sentry search query selecting the issues to change (e.g., \"is:unresolved environment:staging\"). Every matching issue in the project is changed. Use either query or issue_ids."
    • Changedcreate_sentry_issue_comment1 field changed
      • changedInput schema / properties / issue_id / description
        Previous value: -"Issue ID."New value: +"Numeric issue ID or short ID (e.g. PROJ-1A2)"
    • Addedget_event_attachment
    • Changedget_grouping_config1 field changed
      • changedInput schema / properties / issue_id / description
        Previous value: -"Issue ID."New value: +"Numeric issue ID or short ID (e.g. PROJ-1A2)"
    • Changedget_issue_hashes2 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"Pagination cursor."New value: +"Pagination cursor (next_cursor from a previous call)."
      • changedInput schema / properties / issue_id / description
        Previous value: -"Issue ID."New value: +"Numeric issue ID or short ID (e.g. PROJ-1A2)"
    • Changedget_issue_tag_values1 field changed
      • changedInput schema / properties / issue_id / description
        Previous value: -"Issue ID."New value: +"Numeric issue ID or short ID (e.g. PROJ-1A2)."
    • Changedget_issue_tags1 field changed
      • changedInput schema / properties / issue_id / description
        Previous value: -"Issue ID."New value: +"Numeric issue ID or short ID (e.g. PROJ-1A2)."
    • Changedget_sentry_issue3 fields changed
      • changedInput schema / properties / include_latest_event / description
        Previous value: -"Include latest event details (default: false to reduce response size)"New value: +"Also fetch the latest event (exception with stack frames, message, recent breadcrumbs). Default: false, so no stacktrace is returned."
      • changedInput schema / properties / issue_id_or_url / description
        Previous value: -"Sentry issue ID or full issue URL. Issue ID is a number e.g: 123456"New value: +"Numeric issue ID or short ID (e.g. PROJ-1A2), or a full Sentry issue URL."
      • changedInput schema / properties / max_stack_frames / description
        Previous value: -"Optional: Maximum number of stack trace frames to return (default: all)."New value: +"Optional: Innermost stack frames kept per exception in latest_event (default: 5). Only applies with include_latest_event."
    • Changedget_trace_details2 fields changed
      • changedInput schema / properties / max_spans / description
        Previous value: -"Max spans to return (1-500, default: 100)."New value: +"Max spans to return (1-500, default: 100). Totals always cover the whole trace."
      • changedInput schema / properties / trace_id / description
        Previous value: -"Trace ID."New value: +"Trace ID (32-character hex string)."
    • Changedlist_activity1 field changed
      • changedInput schema / properties / issue_id / description
        Previous value: -"Issue ID."New value: +"Numeric issue ID or short ID (e.g. PROJ-1A2)."
    • Addedlist_event_attachments
    • Changedlist_issue_events1 field changed
      • changedInput schema / properties / issue_id / description
        Previous value: -"The ID of the issue."New value: +"Numeric issue ID or short ID (e.g. PROJ-1A2)."
    • Changedlist_issues2 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"Pagination cursor."New value: +"Pagination cursor (next_cursor from a previous call)."
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "Return Sentry's full issue objects (stats, annotations, flags) instead of the compact triage fields (default: false).",
        +  "type": "boolean"
        +}
    • Changedlist_sentry_issues2 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"Pagination cursor."New value: +"Pagination cursor (next_cursor from a previous call)."
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "Return Sentry's full issue objects (stats, annotations, flags) instead of the compact triage fields (default: false).",
        +  "type": "boolean"
        +}
    • Changedlist_sentry_projects1 field changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Optional: pagination cursor (next_cursor from a previous call).",
        +  "type": "string"
        +}
    • Addedlist_user_feedback
    • Changedmerge_issues2 fields changed
      • changedInput schema / properties / issue_id / description
        Previous value: -"Primary issue ID to merge into."New value: +"Numeric issue ID or short ID (e.g. PROJ-1A2)"
      • changedInput schema / properties / target_ids / description
        Previous value: -"Issue IDs to merge from (max 10)."New value: +"Other issues to merge with issue_id: numeric IDs or short IDs, same project (max 10)."
    • Changedraw_sentry_api1 field changed
      • changedInput schema / properties / endpoint / description
        Previous value: -"API endpoint path (e.g., 'projects/beoflow/apple-ios/events/abc123/'). Do NOT include /api/0/ prefix."New value: +"API endpoint path (e.g., 'projects/your-org/your-project/events/abc123/'). Do NOT include /api/0/ prefix."
    • Changedupdate_sentry_issue_status1 field changed
      • changedInput schema / properties / issue_id / description
        Previous value: -"The ID of the issue."New value: +"Numeric issue ID or short ID (e.g. PROJ-1A2)"
    • Addedwhoami
  2. 24 tool updatesv1.2.0
    • First observedbulk_update_issues
    • First observedcheck_dsym_status
    • First observedcreate_sentry_issue_comment
    • First observedget_grouping_config
    • First observedget_issue_hashes
    • First observedget_issue_tag_values
    • First observedget_issue_tags
    • First observedget_release_details
    • First observedget_sentry_event_details
    • First observedget_sentry_issue
    • First observedget_stack_frames
    • First observedget_trace_details
    • First observedlist_activity
    • First observedlist_breadcrumbs
    • First observedlist_error_events
    • First observedlist_issue_events
    • First observedlist_issues
    • First observedlist_releases
    • First observedlist_sentry_issues
    • First observedlist_sentry_projects
    • First observedlist_teams
    • First observedmerge_issues
    • First observedraw_sentry_api
    • First observedupdate_sentry_issue_status

TDQS

A3.5/5.0

Scored across 28 tools

Disambiguation4/5

Most tools target distinct resources, and the long descriptions explicitly differentiate near-neighbors (e.g. list_issues vs list_sentry_issues, list_issue_events vs list_error_events, update_sentry_issue_status vs bulk_update_issues). However, the event-fetching cluster (get_sentry_event_details, list_issue_events, list_error_events, get_stack_frames, list_breadcrumbs) still has adjacent boundaries that an agent could confuse, and single vs bulk status updates overlap.

Naming Consistency4/5

Names follow a mostly predictable snake_case verb_noun pattern (list_, get_, create_, update_, merge_, bulk_update_). The main blemish is an inconsistent redundant 'sentry' infix applied to only a subset (get_sentry_issue, list_sentry_projects, raw_sentry_api) while sibling tools omit it, which slightly muddies predictability.

Tool Count3/5

At 28 tools the surface is heavy and sits above the comfortable 3-15 range, with some redundancy (multiple issue/event listing tools). Sentry is a broad domain so most tools earn their place, but the count is borderline overweight.

Completeness4/5

Coverage spans issues, events, attachments, releases, traces, tags, feedback, teams, projects, grouping and comments, with a raw_sentry_api escape hatch for gaps. Missing explicit release creation and dedicated issue assignment tooling, but bulk_update_issues handles assignment and deploys are usually external, so gaps are minor.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that retrieves and analyzes Sentry.io issues, allowing users to inspect error reports, stacktraces, and debugging information from their Sentry account.
    2
    22
    -
  • A
    license
    B
    quality
    F
    maintenance
    A Model Context Protocol server that enables AI assistants to interact with Sentry for error tracking and monitoring, allowing retrieval and analysis of error data, project management, and performance monitoring through the Sentry API.
    11
    21
    ISC
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that connects to Sentry.io or self-hosted Sentry instances to retrieve and analyze error reports, stack traces, and debugging information.
    2
    -
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    A stateless FastMCP server that enables interaction with multiple Sentry instances, including US, EU, and self-hosted versions, through a single deployment. It provides tools for searching issues, events, and traces, allowing users to monitor and debug applications using natural language.
    21 npm
    MIT