sentry_get_issue
Retrieve and analyze a Sentry issue by providing its ID or URL. Simplifies error monitoring and debugging within the MCP Sentry para Cursor server.
Instructions
Retrieve and analyze a Sentry issue. Accepts issue URL or ID.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| issueId | Yes | Issue ID or URL |
Implementation Reference
- src/index.ts:1252-1277 (handler)MCP tool handler for 'sentry_get_issue': extracts issueId argument, calls SentryAPIClient.getIssue(issueId), and returns formatted text response with key issue details like title, status, counts.case "sentry_get_issue": { if (!apiClient) { throw new Error("Sentry API client not initialized. Provide auth token."); } const { issueId } = args as any; const issue = await apiClient.getIssue(issueId); return { content: [ { type: "text", text: `Issue ${issueId} details:\n` + `- Title: ${issue.title}\n` + `- Short ID: ${issue.shortId}\n` + `- Status: ${issue.status}\n` + `- Level: ${issue.level}\n` + `- Platform: ${issue.platform || 'N/A'}\n` + `- First seen: ${issue.firstSeen}\n` + `- Last seen: ${issue.lastSeen}\n` + `- Event count: ${issue.count}\n` + `- User count: ${issue.userCount}`, }, ], }; }
- src/index.ts:616-628 (schema)Input schema and metadata for the 'sentry_get_issue' tool, defining required 'issueId' parameter.name: "sentry_get_issue", description: "Retrieve and analyze a Sentry issue. Accepts issue URL or ID.", inputSchema: { type: "object", properties: { issueId: { type: "string", description: "Issue ID or URL", }, }, required: ["issueId"], }, },
- src/index.ts:93-691 (registration)Registration of all tools including 'sentry_get_issue' in the ListToolsRequestSchema handler.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: "sentry_capture_exception", description: "Capture and send an exception to Sentry", inputSchema: { type: "object", properties: { error: { type: "string", description: "Error message or description", }, level: { type: "string", enum: ["fatal", "error", "warning", "info", "debug"], description: "Severity level of the error", default: "error", }, tags: { type: "object", description: "Key-value pairs to tag the error", additionalProperties: { type: "string" }, }, context: { type: "object", description: "Additional context data", additionalProperties: true, }, user: { type: "object", description: "User information", properties: { id: { type: "string" }, email: { type: "string" }, username: { type: "string" }, }, }, }, required: ["error"], }, }, { name: "sentry_capture_message", description: "Capture and send a message to Sentry", inputSchema: { type: "object", properties: { message: { type: "string", description: "Message to send to Sentry", }, level: { type: "string", enum: ["fatal", "error", "warning", "info", "debug"], description: "Severity level of the message", default: "info", }, tags: { type: "object", description: "Key-value pairs to tag the message", additionalProperties: { type: "string" }, }, context: { type: "object", description: "Additional context data", additionalProperties: true, }, }, required: ["message"], }, }, { name: "sentry_add_breadcrumb", description: "Add a breadcrumb for debugging context", inputSchema: { type: "object", properties: { message: { type: "string", description: "Breadcrumb message", }, category: { type: "string", description: "Category of the breadcrumb", }, level: { type: "string", enum: ["fatal", "error", "warning", "info", "debug"], description: "Severity level", default: "info", }, data: { type: "object", description: "Additional data for the breadcrumb", additionalProperties: true, }, }, required: ["message"], }, }, { name: "sentry_set_user", description: "Set user context for Sentry", inputSchema: { type: "object", properties: { id: { type: "string", description: "User ID", }, email: { type: "string", description: "User email", }, username: { type: "string", description: "Username", }, ip_address: { type: "string", description: "User IP address", }, segment: { type: "string", description: "User segment", }, }, }, }, { name: "sentry_set_tag", description: "Set a tag that will be sent with all events", inputSchema: { type: "object", properties: { key: { type: "string", description: "Tag key", }, value: { type: "string", description: "Tag value", }, }, required: ["key", "value"], }, }, { name: "sentry_set_context", description: "Set custom context data", inputSchema: { type: "object", properties: { name: { type: "string", description: "Context name", }, context: { type: "object", description: "Context data", additionalProperties: true, }, }, required: ["name", "context"], }, }, { name: "sentry_start_transaction", description: "Start a performance monitoring transaction", inputSchema: { type: "object", properties: { name: { type: "string", description: "Transaction name", }, op: { type: "string", description: "Operation type (e.g., 'http.request', 'db.query')", }, description: { type: "string", description: "Transaction description", }, }, required: ["name", "op"], }, }, { name: "sentry_finish_transaction", description: "Finish the current transaction", inputSchema: { type: "object", properties: { status: { type: "string", description: "Transaction status", enum: ["ok", "cancelled", "unknown", "invalid_argument", "deadline_exceeded", "not_found", "already_exists", "permission_denied", "resource_exhausted", "failed_precondition", "aborted", "out_of_range", "unimplemented", "internal_error", "unavailable", "data_loss", "unauthenticated"], default: "ok", }, }, }, }, { name: "sentry_start_session", description: "Start a new session for release health monitoring", inputSchema: { type: "object", properties: { distinctId: { type: "string", description: "Unique user identifier (ID, email, or username)", }, sessionId: { type: "string", description: "Optional custom session ID", }, release: { type: "string", description: "Release version", }, environment: { type: "string", description: "Environment name (production, staging, etc)", }, }, }, }, { name: "sentry_end_session", description: "End the current session with a specific status", inputSchema: { type: "object", properties: { status: { type: "string", enum: ["exited", "crashed", "abnormal", "errored"], description: "How the session ended", default: "exited", }, }, }, }, { name: "sentry_set_release", description: "Set the release version for release health tracking", inputSchema: { type: "object", properties: { release: { type: "string", description: "Release version (e.g., 'myapp@1.0.0')", }, dist: { type: "string", description: "Distribution identifier", }, }, required: ["release"], }, }, { name: "sentry_capture_session", description: "Manually capture a session for server-mode/request-mode", inputSchema: { type: "object", properties: { sessionId: { type: "string", description: "Unique session identifier", }, distinctId: { type: "string", description: "User identifier", }, status: { type: "string", enum: ["ok", "exited", "crashed", "abnormal", "errored"], description: "Session status", default: "ok", }, duration: { type: "number", description: "Session duration in seconds", }, errors: { type: "number", description: "Number of errors in session", default: 0, }, }, required: ["sessionId"], }, }, // API Management Tools { name: "sentry_list_projects", description: "List all projects in the organization", inputSchema: { type: "object", properties: {}, }, }, { name: "sentry_list_issues", description: "List issues for a project", inputSchema: { type: "object", properties: { projectSlug: { type: "string", description: "Project slug/identifier", }, query: { type: "string", description: "Search query (e.g., 'is:unresolved', 'level:error')", }, }, required: ["projectSlug"], }, }, { name: "sentry_create_release", description: "Create a new release", inputSchema: { type: "object", properties: { version: { type: "string", description: "Release version (e.g., 'myapp@1.0.0')", }, projects: { type: "array", items: { type: "string" }, description: "List of project slugs", }, url: { type: "string", description: "Release URL", }, dateReleased: { type: "string", description: "Release date (ISO format)", }, }, required: ["version"], }, }, { name: "sentry_list_releases", description: "List releases for a project", inputSchema: { type: "object", properties: { projectSlug: { type: "string", description: "Project slug/identifier", }, }, required: ["projectSlug"], }, }, { name: "sentry_get_organization_stats", description: "Get organization statistics", inputSchema: { type: "object", properties: { stat: { type: "string", enum: ["received", "rejected", "blacklisted"], description: "Type of statistic", }, since: { type: "string", description: "Start date (ISO format or timestamp)", }, until: { type: "string", description: "End date (ISO format or timestamp)", }, resolution: { type: "string", enum: ["10s", "1h", "1d"], description: "Time resolution", }, }, required: ["stat"], }, }, { name: "sentry_create_alert_rule", description: "Create an alert rule for a project", inputSchema: { type: "object", properties: { projectSlug: { type: "string", description: "Project slug/identifier", }, name: { type: "string", description: "Alert rule name", }, conditions: { type: "array", description: "Alert conditions", }, actions: { type: "array", description: "Alert actions", }, frequency: { type: "number", description: "Check frequency in minutes", default: 30, }, }, required: ["projectSlug", "name"], }, }, { name: "sentry_resolve_short_id", description: "Retrieve details about an issue using its short ID. Maps short IDs to issue details, project context and status.", inputSchema: { type: "object", properties: { shortId: { type: "string", description: "The short ID of the issue (e.g., 'PROJ-123')", }, }, required: ["shortId"], }, }, { name: "sentry_get_event", description: "Retrieve a specific Sentry event from an issue. Requires issue ID/URL and event ID.", inputSchema: { type: "object", properties: { projectSlug: { type: "string", description: "Project slug/identifier", }, eventId: { type: "string", description: "Event ID", }, }, required: ["projectSlug", "eventId"], }, }, { name: "sentry_list_error_events_in_project", description: "List error events from a specific Sentry project. View recent errors, frequency patterns and occurrence timestamps.", inputSchema: { type: "object", properties: { projectSlug: { type: "string", description: "Project slug/identifier", }, limit: { type: "number", description: "Number of events to return", default: 50, }, query: { type: "string", description: "Search query", }, }, required: ["projectSlug"], }, }, { name: "sentry_create_project", description: "Create a new project in Sentry. Track deployments, releases and health metrics.", inputSchema: { type: "object", properties: { name: { type: "string", description: "Project name", }, slug: { type: "string", description: "Project slug (URL-friendly identifier)", }, platform: { type: "string", description: "Platform (e.g., 'javascript', 'python', 'node')", }, team: { type: "string", description: "Team slug", }, }, required: ["name", "slug", "team"], }, }, { name: "sentry_list_issue_events", description: "List events for a specific Sentry issue. Analyze event details, metadata and patterns.", inputSchema: { type: "object", properties: { issueId: { type: "string", description: "Issue ID", }, limit: { type: "number", description: "Number of events to return", default: 50, }, }, required: ["issueId"], }, }, { name: "sentry_get_issue", description: "Retrieve and analyze a Sentry issue. Accepts issue URL or ID.", inputSchema: { type: "object", properties: { issueId: { type: "string", description: "Issue ID or URL", }, }, required: ["issueId"], }, }, { name: "sentry_list_organization_replays", description: "List replays from a Sentry organization. Monitor user sessions, interactions, errors and experience issues.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project ID or slug", }, limit: { type: "number", description: "Number of replays to return", default: 50, }, query: { type: "string", description: "Search query", }, }, required: [], }, }, { name: "sentry_setup_project", description: "Set up Sentry for a project returning a DSN and instructions for setup.", inputSchema: { type: "object", properties: { projectSlug: { type: "string", description: "Project slug/identifier", }, platform: { type: "string", description: "Platform for installation instructions", default: "javascript", }, }, required: ["projectSlug"], }, }, { name: "sentry_search_errors_in_file", description: "Search for Sentry errors occurring in a specific file. Find all issues related to a particular file path or filename.", inputSchema: { type: "object", properties: { projectSlug: { type: "string", description: "Project slug/identifier", }, filename: { type: "string", description: "File path or filename to search for", }, }, required: ["projectSlug", "filename"], }, }, ], }; });
- src/sentry-api-client.ts:60-62 (helper)SentryAPIClient.getIssue helper method that fetches issue details via Sentry API endpoint `/issues/${issueId}/`.async getIssue(issueId: string) { return this.request(`/issues/${issueId}/`); }
- src/sentry-api-client.ts:20-36 (helper)Core private request method used by all API calls, including getIssue, handling authentication and error checking.private async request(endpoint: string, options: any = {}) { const url = `${this.baseUrl}${endpoint}`; const response = await fetch(url, { ...options, headers: { 'Authorization': `Bearer ${this.authToken}`, 'Content-Type': 'application/json', ...options.headers, }, }); if (!response.ok) { throw new Error(`Sentry API error: ${response.status} ${response.statusText}`); } return response.json(); }