Back to catalog
Sentry icon

Sentry

Official

MCP server for Sentry - error monitoring, issue tracking, and debugging for AI assistants

Developer tools22 toolsAuth: oauth

Tools (22)

whoami

Identify the authenticated user in Sentry. Use this tool when you need to: - Get the user's name and email address.

find_organizations

Find organizations that the user has access to in Sentry. Use this tool when you need to: - View organizations in Sentry - Find an organization's slug to aid other tool requests - Search for specific organizations by name or slug Returns up to 25 results. If you hit this limit, use the query parameter to narrow down results.

find_teams

Find teams in an organization in Sentry. Use this tool when you need to: - View teams in a Sentry organization - Find a team's slug and numeric ID to aid other tool requests - Search for specific teams by name or slug Returns up to 25 results. If you hit this limit, use the query parameter to narrow down results.

find_projects

Find projects in Sentry. Use this tool when you need to: - View projects in a Sentry organization - Find a project's slug to aid other tool requests - Search for specific projects by name or slug Returns up to 25 results. If you hit this limit, use the query parameter to narrow down results.

find_releases

Find releases in Sentry. Use this tool when you need to: - Find recent releases in a Sentry organization - Find the most recent version released of a specific project - Determine when a release was deployed to an environment <examples> ### Find the most recent releases in the 'my-organization' organization ``` find_releases(organizationSlug='my-organization') ``` ### Find releases matching '2ce6a27' in the 'my-organization' organization ``` find_releases(organizationSlug='my-organization', query='2ce6a27') ``` </examples> <hints> - If the user passes a parameter in the form of name/otherName, its likely in the format of <organizationSlug>/<projectSlug>. </hints>

get_issue_tag_values

Get tag value distribution for a specific Sentry issue. Use this tool when you need to: - Understand how an issue is distributed across different tag values - Get aggregate counts of unique tag values (e.g., 'how many unique URLs are affected') - Analyze which browsers, environments, or URLs are most impacted by an issue - View the tag distributions page data programmatically Common tag keys: - `url`: Request URLs affected by the issue - `browser`: Browser types and versions - `browser.name`: Browser names only - `os`: Operating systems - `environment`: Deployment environments (production, staging, etc.) - `release`: Software releases - `device`: Device types - `user`: Affected users <examples> ### Get URL distribution for an issue ``` get_issue_tag_values(organizationSlug='my-organization', issueId='PROJECT-123', tagKey='url') ``` ### Get browser distribution using issue URL ``` get_issue_tag_values(issueUrl='https://sentry.io/issues/PROJECT-123/', tagKey='browser') ``` ### Get environment distribution ``` get_issue_tag_values(organizationSlug='my-organization', issueId='PROJECT-123', tagKey='environment') ``` </examples> <hints> - If user provides a Sentry URL, pass the ENTIRE URL to issueUrl parameter unchanged - Common tag keys: url, browser, browser.name, os, environment, release, device, user - Tag keys are case-sensitive </hints>

get_replay_details

Get high-level information about a specific Sentry replay by URL or replay ID. USE THIS TOOL WHEN USERS: - Share a replay URL - Ask what happened in a specific replay - Want a concise replay summary plus the next issue or trace lookups to run <examples> ### With replay URL ``` get_replay_details(replayUrl='https://my-organization.sentry.io/replays/7e07485f-12f9-416b-8b14-26260799b51f/') ``` ### With organization and replay ID ``` get_replay_details(organizationSlug='my-organization', replayId='7e07485f-12f9-416b-8b14-26260799b51f') ``` </examples>

get_event_attachment

Download attachments from a Sentry event. Use this tool when you need to: - Download files attached to a specific event - Access screenshots, log files, or other attachments uploaded with an error report - Retrieve attachment metadata and download URLs <examples> ### Download a specific attachment by ID ``` get_event_attachment(organizationSlug='my-organization', projectSlug='my-project', eventId='c49541c747cb4d8aa3efb70ca5aba243', attachmentId='12345') ``` ### List all attachments for an event ``` get_event_attachment(organizationSlug='my-organization', projectSlug='my-project', eventId='c49541c747cb4d8aa3efb70ca5aba243') ``` </examples> <hints> - If `attachmentId` is provided, the specific attachment will be downloaded as an embedded resource - If `attachmentId` is omitted, all attachments for the event will be listed with download information - The `projectSlug` is required to identify which project the event belongs to </hints>

update_issue

Update an issue's status or assignment in Sentry. This allows you to resolve, ignore, or reassign issues. Use this tool when you need to: - Resolve an issue that has been fixed - Assign an issue to a team member or team for investigation - Mark an issue as ignored to reduce noise - Reopen a resolved issue by setting status to 'unresolved' <examples> ### Resolve an issue ``` update_issue(organizationSlug='my-organization', issueId='PROJECT-123', status='resolved') ``` ### Assign an issue to a user (use whoami to get your user ID) ``` update_issue(organizationSlug='my-organization', issueId='PROJECT-123', assignedTo='user:123456') ``` ### Assign an issue to a team (by ID or slug) ``` update_issue(organizationSlug='my-organization', issueId='PROJECT-123', assignedTo='team:789') update_issue(organizationSlug='my-organization', issueId='PROJECT-123', assignedTo='team:my-team-slug') ``` ### Mark an issue as ignored ``` update_issue(organizationSlug='my-organization', issueId='PROJECT-123', status='ignored') ``` </examples> <hints> - If the user provides the `issueUrl`, you can ignore the other required parameters and extract them from the URL. - At least one of `status` or `assignedTo` must be provided to update the issue. - assignedTo format: Use 'user:ID' for users (e.g., 'user:123456') or 'team:ID_OR_SLUG' for teams (e.g., 'team:789' or 'team:my-team-slug') - To find your user ID, first use the whoami tool which returns your numeric user ID - Valid status values are: 'resolved', 'resolvedInNextRelease', 'unresolved', 'ignored'. </hints>

search_events

Search for events AND perform counts/aggregations - the ONLY tool for statistics and counts. Supports TWO query types: 1. AGGREGATIONS (counts, sums, averages): 'how many errors', 'count of issues', 'total tokens' 2. Individual events with timestamps: 'show me error logs from last hour' USE THIS FOR ALL COUNTS/STATISTICS: - 'how many errors today' → returns count - 'count of database failures' → returns count - 'total number of issues' → returns count - 'average response time' → returns avg() - 'sum of tokens used' → returns sum() ALSO USE FOR INDIVIDUAL EVENTS: - 'error logs from last hour' → returns event list - 'database errors with timestamps' → returns event list - 'trace spans for slow API calls' → returns span list Dataset Selection (AI automatically chooses): - errors: Exception/crash events - logs: Log entries - spans: Performance data, AI/LLM calls, token usage DO NOT USE for grouped issue lists → use search_issues <examples> search_events(organizationSlug='my-org', naturalLanguageQuery='how many errors today') search_events(organizationSlug='my-org', naturalLanguageQuery='count of database failures this week') search_events(organizationSlug='my-org', naturalLanguageQuery='total tokens used by model') search_events(organizationSlug='my-org', naturalLanguageQuery='error logs from the last hour') </examples> <hints> - If the user passes a parameter in the form of name/otherName, it's likely in the format of <organizationSlug>/<projectSlug>. - Parse org/project notation directly without calling find_organizations or find_projects. </hints>

create_team

Create a new team in Sentry. USE THIS TOOL WHEN USERS WANT TO: - 'Create a new team' - 'Set up a team called [X]' - 'I need a team for my project' Be careful when using this tool! <examples> ### Create a new team ``` create_team(organizationSlug='my-organization', name='the-goats') ``` </examples> <hints> - If any parameter is ambiguous, you should clarify with the user what they meant. </hints>

create_project

Create a new project in Sentry (includes DSN automatically). USE THIS TOOL WHEN USERS WANT TO: - 'Create a new project' - 'Set up a project for [app/service] with team [X]' - 'I need a new Sentry project' - Create project AND need DSN in one step DO NOT USE create_dsn after this - DSN is included in output. Be careful when using this tool! <examples> ### Create new project with team ``` create_project(organizationSlug='my-organization', teamSlug='my-team', name='my-project', platform='javascript') ``` </examples> <hints> - If the user passes a parameter in the form of name/otherName, its likely in the format of <organizationSlug>/<teamSlug>. - If any parameter is ambiguous, you should clarify with the user what they meant. </hints>

update_project

Update project settings in Sentry, such as name, slug, platform, and team assignment. Be careful when using this tool! Use this tool when you need to: - Update a project's name or slug to fix onboarding mistakes - Change the platform assigned to a project - Update team assignment for a project <examples> ### Update a project's name and slug ``` update_project(organizationSlug='my-organization', projectSlug='old-project', name='New Project Name', slug='new-project-slug') ``` ### Assign a project to a different team ``` update_project(organizationSlug='my-organization', projectSlug='my-project', teamSlug='backend-team') ``` ### Update platform ``` update_project(organizationSlug='my-organization', projectSlug='my-project', platform='python') ``` </examples> <hints> - If the user passes a parameter in the form of name/otherName, it's likely in the format of <organizationSlug>/<projectSlug>. - Team assignment is handled separately from other project settings - If any parameter is ambiguous, you should clarify with the user what they meant. - When updating the slug, the project will be accessible at the new slug after the update </hints>

create_dsn

Create an additional DSN for an EXISTING project. USE THIS TOOL WHEN: - Project already exists and needs additional DSN - 'Create another DSN for project X' - 'I need a production DSN for existing project' DO NOT USE for new projects (use create_project instead) Be careful when using this tool! <examples> ### Create additional DSN for existing project ``` create_dsn(organizationSlug='my-organization', projectSlug='my-project', name='Production') ``` </examples> <hints> - If the user passes a parameter in the form of name/otherName, its likely in the format of <organizationSlug>/<projectSlug>. - If any parameter is ambiguous, you should clarify with the user what they meant. </hints>

find_dsns

List all Sentry DSNs for a specific project. Use this tool when you need to: - Retrieve a SENTRY_DSN for a specific project <hints> - If the user passes a parameter in the form of name/otherName, its likely in the format of <organizationSlug>/<projectSlug>. - If only one parameter is provided, and it could be either `organizationSlug` or `projectSlug`, its probably `organizationSlug`, but if you're really uncertain you might want to call `find_organizations()` first. </hints>

analyze_issue_with_seer

Use Seer to analyze production errors and get detailed root cause analysis with specific code fixes. Use this tool when: - The user explicitly asks for root cause analysis, Seer analysis, or help fixing/debugging an issue - You are unable to accurately determine the root cause from the issue details alone Do NOT call this tool as an automatic follow-up to get_sentry_resource. What this tool provides: - Root cause analysis with code-level explanations - Specific file locations and line numbers where errors occur - Concrete code fixes you can apply - Step-by-step implementation guidance This tool automatically: 1. Checks if analysis already exists (instant results) 2. Starts new AI analysis if needed (~2-5 minutes) 3. Returns complete fix recommendations <examples> ### User: "Run Seer on this issue" ``` analyze_issue_with_seer(issueUrl='https://my-org.sentry.io/issues/PROJECT-1Z43') ``` ### User: "Analyze this issue and suggest a fix" ``` analyze_issue_with_seer(organizationSlug='my-organization', issueId='ERROR-456') ``` </examples> <hints> - Only use when the user explicitly requests analysis or you cannot determine the root cause from issue details alone - If the user provides an issueUrl, extract it and use that parameter alone - The analysis includes actual code snippets and fixes, not just error descriptions - Results are cached - subsequent calls return instantly </hints>

search_docs

Search Sentry documentation for SDK setup, instrumentation, and configuration guidance. Use this tool when you need to: - Set up Sentry SDK or framework integrations (Django, Flask, Express, Next.js, etc.) - Configure features like performance monitoring, error sampling, or release tracking - Implement custom instrumentation (spans, transactions, breadcrumbs) - Configure data scrubbing, filtering, or sampling rules Returns snippets only. Use `get_doc(path='...')` to fetch full documentation content. <examples> ``` search_docs(query='Django setup configuration SENTRY_DSN', guide='python/django') search_docs(query='source maps webpack upload', guide='javascript/nextjs') ``` </examples> <hints> - Use guide parameter to filter to specific technologies (e.g., 'javascript/nextjs') - Include specific feature names like 'beforeSend', 'tracesSampleRate', 'SENTRY_DSN' </hints>

get_doc

Fetch the full markdown content of a Sentry documentation page. Use this tool when you need to: - Read the complete documentation for a specific topic - Get detailed implementation examples or code snippets - Access the full context of a documentation page - Extract specific sections from documentation <examples> ### Get the Next.js integration guide ``` get_doc(path='/platforms/javascript/guides/nextjs.md') ``` </examples> <hints> - Use the path from search_docs results for accurate fetching - Paths should end with .md extension </hints>

search_issues

Search for grouped issues/problems in Sentry - returns a LIST of issues, NOT counts or aggregations. Uses AI to translate natural language queries into Sentry issue search syntax. Returns grouped issues with metadata like title, status, and user count. USE THIS TOOL WHEN USERS WANT: - A LIST of issues: 'show me issues', 'what problems do we have' - Filtered issue lists: 'unresolved issues', 'critical bugs' - Issues by impact: 'errors affecting more than 100 users' - Issues by assignment: 'issues assigned to me' - User feedback: 'show me user feedback', 'feedback from last week' DO NOT USE FOR COUNTS/AGGREGATIONS: - 'how many errors' → use search_events - 'count of issues' → use search_events - 'total number of errors today' → use search_events - 'sum/average/statistics' → use search_events ALSO DO NOT USE FOR: - Individual error events with timestamps → use search_events - Details about a specific issue ID or Sentry issue URL → use get_sentry_resource REMEMBER: This tool returns a LIST of issues, not counts or statistics! <examples> search_issues(organizationSlug='my-org', naturalLanguageQuery='critical bugs from last week') search_issues(organizationSlug='my-org', naturalLanguageQuery='unhandled errors affecting 100+ users') search_issues(organizationSlug='my-org', naturalLanguageQuery='issues assigned to me') search_issues(organizationSlug='my-org', naturalLanguageQuery='user feedback from production') </examples> <hints> - If the user passes a parameter in the form of name/otherName, it's likely in the format of <organizationSlug>/<projectSlugOrId>. - Parse org/project notation directly without calling find_organizations or find_projects. - The projectSlugOrId parameter accepts both project slugs (e.g., 'my-project') and numeric IDs (e.g., '123456'). </hints>

search_issue_events

Search and filter events within a specific issue using natural language queries. Use this to filter events by time, environment, release, user, trace ID, or other tags. The tool automatically constrains results to the specified issue. For cross-issue searches use search_issues. For single issue or event details use get_sentry_resource. <examples> search_issue_events(issueId='MCP-41', organizationSlug='my-org', naturalLanguageQuery='from last hour') search_issue_events(issueUrl='https://sentry.io/.../issues/123/', naturalLanguageQuery='production with release v1.0') </examples>

get_profile_details

Retrieve raw profile chunk data to inspect individual function calls, threads, and stack traces. USE THIS TOOL WHEN: - User wants to inspect raw profiling samples for a specific profiler session - User needs to see individual thread activity and stack traces - User wants detailed frame-level data (function names, file locations, call counts) RETURNS: - Profile chunk metadata (platform, release, environment) - Per-thread sample counts and names - Top frames by occurrence with file locations - User code vs library code breakdown NOTE: This tool requires a `profilerId` which identifies a specific profiling session. Use `get_profile` for aggregated flamegraph analysis by transaction name. <examples> ### Inspect a profiler session ``` get_profile_details( organizationSlug='my-org', projectSlugOrId='backend', profilerId='041bde57b9844e36b8b7e5734efae5f7', start='2024-01-01T00:00:00', end='2024-01-01T01:00:00' ) ``` </examples> <hints> - Use `focusOnUserCode: true` (default) to filter out library/system frames - The profilerId can be found in Sentry profile URLs or event data </hints>

get_sentry_resource

Fetch a Sentry resource by URL or by type and ID. <examples> ### From a Sentry URL get_sentry_resource(url='https://sentry.io/issues/PROJECT-123/') ### Breadcrumbs from a Sentry URL get_sentry_resource(url='https://sentry.io/issues/PROJECT-123/', resourceType='breadcrumbs') ### By type and ID get_sentry_resource(resourceType='issue', organizationSlug='my-org', resourceId='PROJECT-123') </examples>

AI everywhere.