[
{
"name": "add_issue_note",
"description": "Add a human-visible comment to a Sentry issue's activity feed.\n\nUse this tool when the user explicitly asks to leave a note/comment, or when a triage workflow needs to record a user-approved explanation.\n\n\nadd_issue_note(organizationSlug='my-organization', issueId='PROJECT-123', text='Investigating with the payments team.')\nadd_issue_note(issueUrl='https://my-organization.sentry.io/issues/PROJECT-123/', text='Resolved by deploy 1.2.3.')\n\n\n\n- This mutates visible Sentry issue state by posting a comment.\n- Do not use this for private scratch notes, secrets, credentials, or unapproved content.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"issueUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the issue. e.g. https://my-organization.sentry.io/issues/PROJECT-1Z43"
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "The exact comment text to add to the issue."
}
},
"required": ["text"]
},
"requiredScopes": ["event:write"],
"skills": ["triage"],
"surface": "catalog"
},
{
"name": "add_team_to_project",
"description": "Grant a team access to an existing Sentry project.\n\nUse this tool when you need to:\n- Add another team to a project\n- Grant a team access without changing project metadata\n- Check whether a team already has project access before adding it\n\n\nadd_team_to_project(organizationSlug='my-organization', projectSlug='my-project', teamSlug='my-team')\n\n\n\n- Team access changes are separate from project metadata updates.\n- If the team is already assigned, this tool returns the current team list without making another change.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"teamSlug": {
"type": "string",
"description": "The team's slug. You can find a list of existing teams in an organization with the Sentry tool `find_teams`."
}
},
"required": ["organizationSlug", "projectSlug", "teamSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"changed": {
"type": "boolean"
},
"teams": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": ["id", "slug", "name"],
"additionalProperties": false
}
}
},
"required": ["changed", "teams"],
"additionalProperties": false
},
"requiredScopes": ["project:write", "team:read", "org:read"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "analyze_issue_with_seer",
"description": "Use Seer to analyze production errors and get detailed root cause analysis with specific code fixes.\n\nUse this tool when:\n- The user explicitly asks for root cause analysis, Seer analysis, or help fixing/debugging an issue\n- You are unable to accurately determine the root cause from the issue details alone\n\nDo NOT call this tool as an automatic follow-up to get_sentry_resource.\n\nWhat this tool provides:\n- Root cause analysis with code-level explanations\n- Specific file locations and line numbers where errors occur\n- Concrete code fixes you can apply\n- Step-by-step implementation guidance\n\nThis tool automatically:\n1. Checks if analysis already exists (instant results)\n2. Starts new AI analysis if needed (~2-5 minutes)\n3. Returns complete fix recommendations\n\n\n### User: \"Run Seer on this issue\"\n\n```\nanalyze_issue_with_seer(issueUrl='https://my-org.sentry.io/issues/PROJECT-1Z43')\n```\n\n### User: \"Analyze this issue and suggest a fix\"\n\n```\nanalyze_issue_with_seer(organizationSlug='my-organization', issueId='ERROR-456')\n```\n\n\n\n- Only use when the user explicitly requests analysis or you cannot determine the root cause from issue details alone\n- Seer Autofix does not support metric alert issues (issueCategory: metric); use get_issue_details and search_metrics or search_traces instead\n- If the user provides an issueUrl, extract it and use that parameter alone\n- The analysis includes actual code snippets and fixes, not just error descriptions\n- Results are cached - subsequent calls return instantly\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"issueUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the issue. e.g. https://my-organization.sentry.io/issues/PROJECT-1Z43"
},
"instruction": {
"type": "string",
"description": "Optional custom instruction for the AI analysis"
}
}
},
"requiredScopes": [],
"skills": ["seer"],
"surface": "direct"
},
{
"name": "create_alert_rule",
"description": "Create a Sentry Alert (workflow) with notification actions and explicit sources.\nUse get_alert_options for available actions, integrations, conditions, and sources. All notification providers use their native config and data fields.\nTo copy an Alert, read get_alert_rule(kind='issue') and pass its configuration here; component IDs are discarded while integration and destination IDs are retained. New trigger groups require logicType='any-short'.\nTo reuse an existing Alert across projects, use update_alert_rule instead.\nSupply projectSlugs for project issue streams and/or detectorIds for individual monitors. Pass detectorIds=[] explicitly to create an Alert without sources; it will not send notifications until connected.\nNew Alerts default to active with a 30-minute notification interval. Use status='disabled' to configure one before enabling it.\nProject-constrained sessions require sources exclusively within that project. All-project sources require Sentry's feature and org:write in addition to alerts:write.\nAfter a timeout or error, search for the Alert before retrying: creation may already have succeeded.\n\ncreate_alert_rule(organizationSlug='my-org', name='Backend notifications', status='disabled', detectorIds=[], actionFilters=[])\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"status": {
"default": "active",
"type": "string",
"enum": ["active", "disabled"]
},
"frequencyMinutes": {
"default": 30,
"description": "Minimum interval between notifications, in minutes.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"environment": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"owner": {
"description": "Owner actor user:ID or team:ID. Pass null to clear.",
"anyOf": [
{
"type": "string",
"pattern": "^(user|team):\\d+$"
},
{
"type": "null"
}
]
},
"triggers": {
"anyOf": [
{
"type": "object",
"properties": {
"logicType": {
"type": "string",
"enum": ["all", "any", "any-short", "none"]
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"]
}
}
},
"required": ["logicType", "conditions"],
"description": "Trigger conditions. Nonempty groups require logicType='any-short' for new Alerts. Copied component IDs are discarded. Omit, pass null, or use an empty group for no trigger conditions."
},
{
"type": "null"
}
]
},
"actionFilters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"logicType": {
"type": "string",
"enum": ["all", "any", "any-short", "none"]
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"]
}
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"integrationId": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "null"
}
]
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"config": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string"
}
},
"required": ["type", "data", "config"]
}
}
},
"required": ["logicType", "conditions", "actions"]
},
"description": "Action groups with conditions and notification actions, from get_alert_options or get_alert_rule. Copied component IDs are discarded; integration and destination IDs are retained. Pass [] explicitly for no notification actions."
},
"projectSlugs": {
"description": "Projects whose issue streams should be connected.",
"type": "array",
"items": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
}
},
"detectorIds": {
"description": "Existing source IDs from get_alert_options. Pass [] explicitly for an Alert without sources.",
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d+$"
}
}
},
"required": ["organizationSlug", "name", "actionFilters"]
},
"outputSchema": {
"type": "object",
"properties": {
"alertRule": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"config": {
"type": "object",
"properties": {
"frequency": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"additionalProperties": false
},
"environment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"triggers": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"logicType": {
"type": "string",
"enum": ["all", "any", "any-short", "none"]
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"],
"additionalProperties": false
}
}
},
"required": ["logicType", "conditions"],
"additionalProperties": false,
"description": "The complete trigger group. Preserve existing condition IDs when editing; omitted conditions are removed. Use the configuration returned by get_alert_rule."
},
{
"type": "null"
}
]
},
"actionFilters": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"logicType": {
"type": "string",
"enum": ["all", "any", "any-short", "none"]
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"],
"additionalProperties": false
}
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"integrationId": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "null"
}
]
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"config": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string"
}
},
"required": ["type", "data", "config"],
"additionalProperties": false
}
}
},
"required": ["logicType", "conditions", "actions"],
"additionalProperties": false
},
"description": "The complete list of action groups, conditions, and notification actions. Preserve their IDs and all unchanged groups and actions; omitted entries are removed. Slack and Microsoft Teams resolve config.targetDisplay as a channel name within integrationId. Other providers use their native config.targetIdentifier and data fields."
},
{
"type": "null"
}
]
},
"detectorIds": {
"type": "array",
"items": {
"type": "string"
}
},
"webUrl": {
"type": "string",
"format": "uri"
}
},
"required": ["id", "name", "detectorIds", "webUrl"],
"additionalProperties": false
},
"guidance": {
"type": "string"
}
},
"required": ["alertRule"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read", "alerts:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "create_dsn",
"description": "Create an additional DSN for an EXISTING project.\n\nUSE THIS TOOL WHEN:\n- Project already exists and needs additional DSN\n- 'Create another DSN for project X'\n- 'I need a production DSN for existing project'\n\nDO NOT USE for new projects (use create_project instead)\n\nBe careful when using this tool!\n\n\n### Create additional DSN for existing project\n```\ncreate_dsn(organizationSlug='my-organization', projectSlug='my-project', name='Production')\n```\n\n\n\n- If the user passes a parameter in the form of name/otherName, its likely in the format of /.\n- If any parameter is ambiguous, you should clarify with the user what they meant.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"name": {
"type": "string",
"description": "The name of the DSN to create, for example 'Production'."
}
},
"required": ["organizationSlug", "projectSlug", "name"]
},
"outputSchema": {
"type": "object",
"properties": {
"dsn": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"dsn": {
"type": "string"
}
},
"required": ["id", "name", "dsn"],
"additionalProperties": false
}
},
"required": ["dsn"],
"additionalProperties": false
},
"requiredScopes": ["project:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "create_metric_monitor",
"description": "Create a Sentry Metric Monitor with Static, Percent or Dynamic detection in a project.\nProvide the complete query, detection config and conditions. Time windows and comparison deltas use seconds. Percent comparisons are absolute: 110 means 10% higher.\nTo copy a monitor, use the query, config and conditionGroup from get_metric_monitor_details. Component IDs are discarded; new condition groups use logicType='any'.\nNew monitors start ACTIVE and immediately evaluate data. Initially disabled creation is not supported. Use update_metric_monitor to disable an existing monitor.\nworkflowIds optionally connect existing notification Alerts, including shared Alerts, without modifying their configuration. Create an Alert separately with create_alert_rule if needed.\nDataset access, quota, aggregate, window and historical-data requirements are enforced by Sentry. Dynamic detection requires sufficient history and Seer availability.\nCreation can fail after persisting a monitor, especially during Dynamic setup. After an error or timeout, use find_metric_monitors with the name and project before retrying; do not assume rollback or blindly repeat creation.\ncreate_metric_monitor(organizationSlug='my-org', projectSlug='backend', name='High error count', query={dataset:'events', query:'level:error', aggregate:'count()', eventTypes:['error'], timeWindowSeconds:300}, config={detectionType:'static'}, conditionGroup={conditions:[{type:'gt', comparison:100, conditionResult:75}, {type:'lte', comparison:50, conditionResult:0}]})",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"owner": {
"description": "Owner actor, e.g. team:123 or user:123. Pass null to clear.",
"anyOf": [
{
"type": "string",
"pattern": "^(user|team):\\d+$"
},
{
"type": "null"
}
]
},
"query": {
"type": "object",
"properties": {
"dataset": {
"type": "string",
"enum": [
"events",
"transactions",
"generic_metrics",
"metrics",
"events_analytics_platform"
]
},
"query": {
"type": "string"
},
"aggregate": {
"type": "string",
"minLength": 1
},
"environment": {
"default": null,
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"eventTypes": {
"type": "array",
"items": {
"type": "string"
}
},
"extrapolationMode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timeWindowSeconds": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"dataset",
"query",
"aggregate",
"eventTypes",
"timeWindowSeconds"
],
"description": "Complete query: dataset, aggregate, filter, eventTypes and timeWindowSeconds. metrics is crash-free Releases; events_analytics_platform supports spans, logs and application metrics via eventTypes. Omitted environment means all environments."
},
"config": {
"type": "object",
"properties": {
"detectionType": {
"type": "string",
"enum": ["static", "percent", "dynamic"]
},
"comparisonDeltaSeconds": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": ["detectionType"],
"description": "Detection mode. Percent requires comparisonDeltaSeconds. Static and Dynamic do not use a comparison delta."
},
"conditionGroup": {
"type": "object",
"properties": {
"logicType": {
"default": "any",
"type": "string",
"const": "any"
},
"conditions": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["gt", "lt", "gte", "lte"]
},
"comparison": {
"type": "number"
},
"conditionResult": {
"anyOf": [
{
"type": "number",
"const": 75
},
{
"type": "number",
"const": 50
},
{
"type": "number",
"const": 0
}
]
}
},
"required": ["type", "comparison", "conditionResult"]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "anomaly_detection"
},
"comparison": {
"type": "object",
"properties": {
"sensitivity": {
"type": "string",
"enum": ["low", "medium", "high"]
},
"seasonality": {
"type": "string",
"const": "auto"
},
"thresholdType": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
}
]
}
},
"required": [
"sensitivity",
"seasonality",
"thresholdType"
]
},
"conditionResult": {
"anyOf": [
{
"type": "number",
"const": 75
},
{
"type": "number",
"const": 50
}
]
}
},
"required": ["type", "comparison", "conditionResult"]
}
]
}
}
},
"required": ["conditions"],
"description": "Complete conditions, using logicType any. Copied group and condition IDs are discarded. Static/Percent require thresholds and resolution (results 75 critical, 50 warning, 0 resolved). Percent 110 means 10% higher. Dynamic requires one anomaly_detection condition: sensitivity, seasonality:auto, thresholdType 0 above/1 below/2 both."
},
"workflowIds": {
"default": [],
"description": "Existing notification Alert IDs to connect. Omit or pass [] to create without connected Alerts. Use find_alert_rules(kind='issue') to find workflow IDs.",
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d+$"
}
}
},
"required": [
"organizationSlug",
"projectSlug",
"name",
"query",
"config",
"conditionGroup"
]
},
"outputSchema": {
"type": "object",
"properties": {
"monitor": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"projectId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workflowIds": {
"type": "array",
"items": {
"type": "string"
}
},
"webUrl": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config": {
"type": "object",
"properties": {
"detectionType": {
"type": "string"
},
"comparisonDeltaSeconds": {
"type": "number"
}
},
"required": ["detectionType"],
"additionalProperties": false
},
"conditionGroup": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"logicType": {
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"],
"additionalProperties": false
}
}
},
"required": ["logicType", "conditions"],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Native detection conditions, including resolution. Results: 75 critical, 50 warning, 0 resolved. Percent comparisons are absolute percentages (110 means 10% higher). Dynamic comparisons contain sensitivity, seasonality and thresholdType."
},
"dataSources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"query": {
"type": "object",
"properties": {
"dataset": {
"type": "string"
},
"query": {
"type": "string"
},
"aggregate": {
"type": "string"
},
"environment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"eventTypes": {
"type": "array",
"items": {
"type": "string"
}
},
"extrapolationMode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timeWindowSeconds": {
"type": "number"
}
},
"required": [
"dataset",
"query",
"aggregate",
"environment",
"eventTypes",
"timeWindowSeconds"
],
"additionalProperties": false
},
"unavailableReason": {
"type": "string"
}
},
"required": ["type"],
"additionalProperties": false
}
},
"dateCreated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dateUpdated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"projectId",
"enabled",
"owner",
"workflowIds",
"webUrl",
"description",
"config",
"conditionGroup",
"dataSources",
"dateCreated",
"dateUpdated"
],
"additionalProperties": false
},
"guidance": {
"type": "string"
}
},
"required": ["monitor"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read", "alerts:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "create_project",
"description": "Create a new project in Sentry (provisions DSN automatically).\n\nUSE THIS TOOL WHEN USERS WANT TO:\n- 'Create a new project'\n- 'Set up a project for [app/service] with team [X]'\n- 'I need a new Sentry project'\n- Create project AND need DSN in one step\n- Create project and link an existing repository\n\nReturns the created project slug and a usable SENTRY_DSN when key setup succeeds.\n\nBe careful when using this tool!\n\n\n### Create new project with team\n```\ncreate_project(organizationSlug='my-organization', teamSlug='my-team', name='my-project', platform='javascript')\n```\n### Create project with an explicit slug\n```\ncreate_project(organizationSlug='my-organization', teamSlug='my-team', name='My Project', slug='my-project', platform='javascript')\n```\n### Create project and link to a repository\n```\ncreate_project(organizationSlug='my-organization', teamSlug='my-team', name='my-project', platform='javascript', repository='getsentry/sentry')\n```\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"teamSlug": {
"type": "string",
"description": "The team's slug. You can find a list of existing teams in an organization with the Sentry tool `find_teams`."
},
"name": {
"type": "string",
"description": "The name of the project to create. Typically this is the name of the application or service. It is only used as a visual label in Sentry."
},
"slug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional project slug to create."
},
{
"type": "null"
}
]
},
"platform": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The platform for the project. e.g., python, javascript, react, etc."
},
{
"type": "null"
}
]
},
"repository": {
"default": null,
"description": "Optional repository name to link to the project (e.g. 'getsentry/sentry'). The repo must already be connected to the organization via a VCS integration.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug", "teamSlug", "name"]
},
"requiredScopes": ["project:write", "team:read", "org:read"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "create_team",
"description": "Create a new team in Sentry.\n\nUSE THIS TOOL WHEN USERS WANT TO:\n- 'Create a new team'\n- 'Set up a team called [X]'\n- 'I need a team for my project'\n\nBe careful when using this tool!\n\n\n### Create a new team\n```\ncreate_team(organizationSlug='my-organization', name='the-goats')\n```\n\n\n\n- If any parameter is ambiguous, you should clarify with the user what they meant.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"name": {
"type": "string",
"description": "The name of the team to create."
}
},
"required": ["organizationSlug", "name"]
},
"outputSchema": {
"type": "object",
"properties": {
"team": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": ["id", "slug", "name"],
"additionalProperties": false
}
},
"required": ["team"],
"additionalProperties": false
},
"requiredScopes": ["team:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "create_uptime_monitor",
"description": "Create a Sentry HTTP uptime monitor.\n\nUse this tool when you need to:\n- Start monitoring a URL for availability\n- Create a new uptime check with interval and timeout\n\nBe careful when using this tool!\n\nRequired fields match Sentry's uptime API: name, url, intervalSeconds, timeoutMs.\nAdvanced response assertions are not supported in this MVP; configure them in the Sentry UI if needed.\n\n\ncreate_uptime_monitor(organizationSlug='my-organization', projectSlug='backend', name='API Health', url='https://api.example.com/health', intervalSeconds=60, timeoutMs=5000)\ncreate_uptime_monitor(organizationSlug='my-organization', projectSlug='backend', name='Checkout', url='https://example.com/checkout', intervalSeconds=300, timeoutMs=10000, method='GET', environment='production')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Monitor display name."
},
"url": {
"type": "string",
"format": "uri",
"description": "URL to check."
},
"intervalSeconds": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Seconds between checks. Allowed values: 60, 300, 600, 1200, 1800, 3600."
},
"timeoutMs": {
"default": 5000,
"type": "integer",
"minimum": 1000,
"maximum": 60000,
"description": "Request timeout in milliseconds (1000-60000)."
},
"method": {
"type": "string",
"enum": ["GET", "POST", "HEAD", "PUT", "DELETE", "PATCH", "OPTIONS"],
"description": "HTTP method used for the uptime check request."
},
"headers": {
"type": "array",
"items": {
"type": "array",
"items": [
{
"type": "string"
},
{
"type": "string"
}
]
},
"description": "Optional HTTP headers as an array of [name, value] pairs, e.g. [[\"Accept\",\"application/json\"]]."
},
"body": {
"type": "string",
"description": "Optional request body for methods that support a body."
},
"status": {
"type": "string",
"enum": ["active", "disabled"],
"description": "Monitor status. `disabled` stops checks and does not count against quota."
},
"owner": {
"type": "string",
"minLength": 1,
"pattern": "^(user|team):.+$",
"description": "Owner actor in `user:ID` or `team:ID` format."
},
"environment": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "Optional environment name for created uptime issues."
},
"traceSampling": {
"type": "boolean",
"description": "Whether check requests may be considered for tracing."
},
"responseCaptureEnabled": {
"type": "boolean",
"description": "Capture response body/headers on failures."
},
"recoveryThreshold": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991,
"description": "Consecutive successful checks required to recover."
},
"downtimeThreshold": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991,
"description": "Consecutive failed checks required to mark down."
}
},
"required": [
"organizationSlug",
"projectSlug",
"name",
"url",
"intervalSeconds"
]
},
"outputSchema": {
"type": "object",
"properties": {
"monitor": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"projectSlug": {
"type": "string"
},
"status": {
"type": "string"
},
"uptimeStatus": {
"type": "string",
"enum": ["ok", "failed", "unknown"]
},
"url": {
"type": "string"
},
"method": {
"type": "string"
},
"intervalSeconds": {
"type": "number"
},
"environment": {
"type": "string"
},
"owner": {
"type": "string"
},
"webUrl": {
"type": "string",
"format": "uri"
},
"timeoutMs": {
"type": "number"
},
"recoveryThreshold": {
"type": "number"
},
"downtimeThreshold": {
"type": "number"
},
"traceSampling": {
"type": "boolean"
},
"responseCaptureEnabled": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"projectSlug",
"status",
"uptimeStatus",
"url",
"intervalSeconds",
"webUrl",
"timeoutMs"
],
"additionalProperties": false
}
},
"required": ["monitor"],
"additionalProperties": false
},
"requiredScopes": ["project:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "delete_alert_rule",
"description": "Permanently delete a Sentry Alert (workflow), preserving its connected monitors.\nUse get_alert_rule(kind='issue') to inspect the Alert and obtain its workflow ID before deletion. Metric Monitor IDs and legacy metric alert IDs are not workflow IDs.\nDeleting a shared Alert removes its notifications for every connected project and monitor. Use update_alert_rule to disconnect individual sources or disable it instead.\nA project-constrained session can only delete Alerts affecting that project exclusively.\nSentry removes the Alert from normal reads immediately and completes internal deletion in the background.\n\ndelete_alert_rule(organizationSlug='my-org', ruleId='12345')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"ruleId": {
"type": "string",
"pattern": "^\\d+$",
"description": "Workflow ID from get_alert_rule(kind='issue')."
}
},
"required": ["organizationSlug", "ruleId"]
},
"outputSchema": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": true
},
"ruleId": {
"type": "string"
}
},
"required": ["success", "ruleId"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read", "alerts:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "delete_metric_monitor",
"description": "Permanently delete a Sentry Metric Monitor, preserving its connected Alerts and their other monitors.\nUse get_metric_monitor_details to inspect the monitor and obtain its native monitorId. Legacy metric alert IDs are not monitor IDs.\nUse update_metric_monitor(status='disabled') to pause detection instead. Deletion also removes an associated legacy metric alert and its incident history when present.\nSentry hides the monitor from normal reads immediately and completes deletion in the background.\ndelete_metric_monitor(organizationSlug='my-org', monitorId='12345')",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"monitorId": {
"type": "string",
"pattern": "^\\d+$",
"description": "Native Metric Monitor ID from find_metric_monitors."
}
},
"required": ["organizationSlug", "monitorId"]
},
"outputSchema": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": true
},
"monitorId": {
"type": "string"
}
},
"required": ["success", "monitorId"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read", "alerts:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "delete_monitor_environment",
"description": "Delete one environment from a Sentry cron monitor.\n\nUse find_monitors or get_monitor_details to identify the monitor and exact environment name.\n\nDeletion is irreversible and completes in the background. The monitor and its other environments are preserved. An already absent environment is treated as success.\n\n\ndelete_monitor_environment(organizationSlug='my-organization', projectSlug='backend', monitorSlug='nightly-import', environment='production')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"monitorSlug": {
"type": "string",
"minLength": 1,
"description": "Monitor slug or GUID."
},
"environment": {
"type": "string",
"minLength": 1,
"description": "Exact environment name to delete. Preserve whitespace and casing."
}
},
"required": [
"organizationSlug",
"projectSlug",
"monitorSlug",
"environment"
]
},
"outputSchema": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": true
},
"monitorSlug": {
"type": "string"
},
"projectSlug": {
"type": "string"
},
"environment": {
"type": "string"
}
},
"required": ["success", "monitorSlug", "projectSlug", "environment"],
"additionalProperties": false
},
"requiredScopes": ["project:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "delete_uptime_monitor",
"description": "Delete a Sentry HTTP uptime monitor.\n\nUse this tool when you need to permanently remove an uptime monitor.\n\nBe careful when using this tool! Deletion cannot be undone.\n\n\ndelete_uptime_monitor(organizationSlug='my-organization', projectSlug='backend', uptimeMonitorId='12345')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"uptimeMonitorId": {
"type": "string",
"minLength": 1,
"description": "Uptime monitor ID (detector id)."
}
},
"required": ["organizationSlug", "projectSlug", "uptimeMonitorId"]
},
"outputSchema": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": true
},
"uptimeMonitorId": {
"type": "string"
},
"projectSlug": {
"type": "string"
}
},
"required": ["success", "uptimeMonitorId", "projectSlug"],
"additionalProperties": false
},
"requiredScopes": ["project:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "execute_sentry_tool",
"description": "Execute an available Sentry MCP tool discovered through search_sentry_tools.\n\nUse this tool when you need to:\n- Call a Sentry operation returned by search_sentry_tools\n- Execute a tool by name using arguments that match its returned schema\n\n\nexecute_sentry_tool(name='find_projects', arguments={ organizationSlug: 'my-org' })\nexecute_sentry_tool(name='whoami', arguments={})\n\n\n\n- Use search_sentry_tools first if you are not sure which name or arguments to pass.\n- Arguments are validated against the target tool's schema before execution.\n- Active organization, project, and region constraints are injected automatically.\n",
"inputSchema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "The name of the available tool to execute."
},
"arguments": {
"default": {},
"description": "Arguments for the target tool, matching the schema returned by search_sentry_tools.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": ["name"]
},
"requiredScopes": [],
"skills": ["inspect", "seer", "docs", "triage", "project-management"],
"surface": "direct"
},
{
"name": "find_alert_rules",
"description": "Find Sentry alert rules.\n\nUse this tool when you need to:\n- List Alerts (workflows) for an organization or project, including Alerts without connected sources\n- List Metric Monitors using compatibility references; prefer find_metric_monitors for canonical monitor IDs\n- Find an alert rule ID by name before inspecting it\n- Check alert conditions, queries, triggers, actions, owner, or environment\n\n\nfind_alert_rules(organizationSlug='my-org')\nfind_alert_rules(organizationSlug='my-org', projectSlug='backend')\nfind_alert_rules(organizationSlug='my-org', kind='issue', projectSlug='backend', query='critical')\n\n\n\n- Omit `projectSlug` to search organization-wide. A project filter finds connected Alerts, which may also cover other projects.\n- Metric entries expose monitorId and projectId. id retains a legacy alert-rule ID when available, otherwise detector:. status describes enabled/disabled monitoring, not a legacy alert status.\n- Issue and metric alert rules have independent pagination state. Reuse a nextCursor only with its matching kind.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"kind": {
"default": "all",
"type": "string",
"enum": ["all", "issue", "metric"],
"description": "Which alert rule family to search. Use `all` to include Alerts (workflows) and Metric Monitors."
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug, or exact lowercase `all` when a tool supports all-projects scope. Other casing is treated as a project slug."
},
{
"type": "null"
}
]
},
"query": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional search query for alert rule name."
},
{
"type": "null"
}
]
},
"cursor": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional pagination cursor from a previous Sentry API response."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100,
"description": "Maximum number of alert rules to return per alert family."
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"issueRules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"actionMatch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"filterMatch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"frequencyMinutes": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"environment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dateCreated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dateUpdated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"lastTriggered": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webUrl": {
"type": "string"
}
},
"required": [
"id",
"name",
"status",
"actionMatch",
"filterMatch",
"frequencyMinutes",
"environment",
"owner",
"dateCreated",
"dateUpdated",
"lastTriggered",
"webUrl"
],
"additionalProperties": false
}
},
"metricRules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Legacy alert-rule ID when available, otherwise detector:."
},
"monitorId": {
"type": "string"
},
"projectId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": ["enabled", "disabled"]
},
"dataset": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"aggregate": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timeWindowMinutes": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"environment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dateCreated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webUrl": {
"type": "string"
}
},
"required": [
"id",
"monitorId",
"projectId",
"enabled",
"name",
"status",
"dataset",
"aggregate",
"query",
"timeWindowMinutes",
"environment",
"owner",
"dateCreated",
"webUrl"
],
"additionalProperties": false
}
},
"pagination": {
"type": "object",
"properties": {
"issue": {
"anyOf": [
{
"type": "object",
"properties": {
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["nextCursor"],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"metric": {
"anyOf": [
{
"type": "object",
"properties": {
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["nextCursor"],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": ["issue", "metric"],
"additionalProperties": false
},
"metricMonitorHint": {
"type": "string"
}
},
"required": ["issueRules", "metricRules", "pagination"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "find_dashboards",
"description": "Find Sentry dashboards in an organization.\n\nUse this tool when you need to:\n- List dashboards in an organization\n- Find a dashboard ID before calling get_dashboard_details\n- Search dashboards by title\n\n\nfind_dashboards(organizationSlug='my-organization')\nfind_dashboards(organizationSlug='my-organization', titleQuery='errors')\n\n\n\n- Dashboard IDs are organization-scoped.\n- Use `get_dashboard_details` after finding the correct dashboard ID.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"titleQuery": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional title substring to search for."
},
{
"type": "null"
}
]
},
"sort": {
"default": "title",
"type": "string",
"enum": ["title", "-title", "dateCreated", "-dateCreated"],
"description": "Sort order for dashboard results."
},
"cursor": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional pagination cursor from a previous response. Reuse cursors only with the same search scope and project constraint."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100,
"description": "Maximum number of dashboards to return."
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"dashboards": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"widgetCount": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"widgetTypes": {
"type": "array",
"items": {
"type": "string"
}
},
"projects": {
"type": "array",
"items": {
"type": "string"
}
},
"environments": {
"type": "array",
"items": {
"type": "string"
}
},
"createdBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dateCreated": {
"type": "string"
},
"lastVisited": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"isFavorited": {
"type": "boolean"
},
"prebuiltId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"format": "uri"
}
},
"required": [
"id",
"title",
"widgetCount",
"widgetTypes",
"projects",
"environments",
"createdBy",
"dateCreated",
"lastVisited",
"isFavorited",
"prebuiltId",
"url"
],
"additionalProperties": false
}
},
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["dashboards", "nextCursor"],
"additionalProperties": false
},
"requiredScopes": ["org:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "find_dropped_events",
"description": "Find events dropped before they were stored in Sentry — ground-truth data-fidelity information about what was and wasn't captured.\n\nEvents can be dropped client-side in the SDK (sample_rate, before_send) or\nserver-side at ingest (rate limited, over quota, filtered, invalid, abuse/spike\nprotection, cardinality limited). Accepted-only views (searches, aggregates,\ncharts) can't show this, so the data may be incomplete in ways they don't reveal\n— for example, a flat or spiky chart caused entirely by drops.\n\nUse this tool when you need to:\n- Explain why a chart is flat, lower than expected, or doesn't match what the user is sending\n- Confirm the data you need is actually in Sentry (not dropped) before trusting a query, aggregate, or dashboard\n- Attribute a volume anomaly to a specific drop reason (quota, spike protection, sampling, filters)\n- Tell the user why their data is missing and what to do about it (raise quota, fix sampling, etc.)\n\nReturns dropped event volume bucketed over time, with the drop `outcome` and `reason`\nfor each bucket, plus the accepted volume per bucket so you can compute the dropped share.\n\n\nfind_dropped_events(organizationSlug='my-org', dataset='spans', projectSlug='my-project')\nfind_dropped_events(organizationSlug='my-org', dataset='logs', statsPeriod='30d')\nfind_dropped_events(organizationSlug='my-org', dataset='errors', outcome='rate_limited')\n\n\n\n- This is independent of any search query — it reports drops for the whole project/time range.\n- `outcome` is the drop kind (e.g. rate_limited, filtered); `reason` is the sub-cause (e.g. key_quota, sample_rate).\n- Pass `outcome` and/or `reason` to scope the dropped side to one classification; the accepted volume is always returned in full.\n- An empty `droppedEvents` list means no drops in the window — the data can be trusted.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"dataset": {
"default": "spans",
"type": "string",
"enum": ["spans", "logs", "metrics", "errors"],
"description": "Which data type to report drops for."
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"statsPeriod": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Relative time range, e.g. '24h', '7d', '30d'. Mutually exclusive with start/end."
},
{
"type": "null"
}
]
},
"start": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Absolute start (ISO 8601). Must be paired with end."
},
{
"type": "null"
}
]
},
"end": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Absolute end (ISO 8601). Must be paired with start."
},
{
"type": "null"
}
]
},
"interval": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Bucket size, e.g. '1h', '1d'. Omit to let Sentry pick for the range."
},
{
"type": "null"
}
]
},
"outcome": {
"default": null,
"anyOf": [
{
"type": "string",
"enum": [
"rate_limited",
"filtered",
"invalid",
"abuse",
"client_discard",
"cardinality_limited"
],
"description": "Scope the dropped side to one top-level drop classification. Accepted volume is still returned in full."
},
{
"type": "null"
}
]
},
"reason": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Scope the dropped side to one reason (sub-classification within an outcome, e.g. 'spike_protection'). Combine with `outcome`."
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"dataset": {
"type": "string"
},
"interval": {
"type": "number"
},
"droppedEvents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"outcome": {
"type": "string"
},
"reason": {
"type": "string"
},
"category": {
"type": "string"
},
"start": {
"type": "number"
},
"end": {
"type": "number"
},
"count": {
"type": "number"
}
},
"required": [
"outcome",
"reason",
"category",
"start",
"end",
"count"
],
"additionalProperties": false
}
},
"acceptedEvents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"outcome": {
"type": "string"
},
"reason": {
"type": "string"
},
"category": {
"type": "string"
},
"start": {
"type": "number"
},
"end": {
"type": "number"
},
"count": {
"type": "number"
}
},
"required": [
"outcome",
"reason",
"category",
"start",
"end",
"count"
],
"additionalProperties": false
}
}
},
"required": ["dataset", "interval", "droppedEvents", "acceptedEvents"],
"additionalProperties": false
},
"requiredScopes": ["event:read"],
"skills": ["inspect"],
"surface": "direct"
},
{
"name": "find_dsns",
"description": "List all Sentry DSNs for a specific project.\n\nUse this tool when you need to:\n- Retrieve a SENTRY_DSN for a specific project\n\n\n- If the user passes a parameter in the form of name/otherName, its likely in the format of /.\n- 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.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
}
},
"required": ["organizationSlug", "projectSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"dsns": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"dsn": {
"type": "string"
}
},
"required": ["id", "name", "dsn"],
"additionalProperties": false
}
}
},
"required": ["dsns"],
"additionalProperties": false
},
"requiredScopes": ["project:read"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "find_metric_monitors",
"description": "Find Sentry Metric Monitors that evaluate errors, performance, logs, metrics or crash rates.\nUse this tool to find a monitor ID before inspecting its query and detection conditions with get_metric_monitor_details.\nResults contain native monitor IDs, separate from legacy metric alert IDs. Alerts connected through workflowIds control notifications; inspect them with get_alert_rule(kind='issue').\nOmit projectSlug to search all accessible projects. Pass nextCursor as cursor with the same filters to retrieve more results.\nfind_metric_monitors(organizationSlug='my-org', projectSlug='backend', query='latency')",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug, or exact lowercase `all` when a tool supports all-projects scope. Other casing is treated as a project slug."
},
"query": {
"description": "Optional monitor search, such as a name or name:\"latency\". This searches monitor metadata, not the monitored event query. Results are always restricted to Metric Monitors.",
"type": "string",
"minLength": 1
},
"cursor": {
"description": "nextCursor from the previous page.",
"type": "string"
},
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"monitors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"projectId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workflowIds": {
"type": "array",
"items": {
"type": "string"
}
},
"webUrl": {
"type": "string"
}
},
"required": [
"id",
"name",
"projectId",
"enabled",
"owner",
"workflowIds",
"webUrl"
],
"additionalProperties": false
}
},
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["monitors", "nextCursor"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "find_monitors",
"description": "Find Sentry cron monitors.\n\nUse this tool when you need to:\n- List cron monitors in an organization\n- Find a monitor by name or slug before getting details\n- Check monitor status, owner, project, schedule, or recent environment state\n- When `hasMore` is true, narrow the results with project, environment, owner, or query filters\n\n\nfind_monitors(organizationSlug='my-organization')\nfind_monitors(organizationSlug='my-organization', projectSlug='backend', query='billing')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug, or exact lowercase `all` when a tool supports all-projects scope. Other casing is treated as a project slug."
},
{
"type": "null"
}
]
},
"environment": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional environment name to limit monitor state."
},
{
"type": "null"
}
]
},
"owner": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional owner filter, such as `user:123`, `team:456`, `myteams`, or `unassigned`."
},
{
"type": "null"
}
]
},
"query": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional search query for monitor name or slug."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 99,
"description": "Maximum number of monitors to return."
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"monitors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"projectSlug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"lastCheckIn": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"nextCheckIn": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"webUrl": {
"type": "string",
"format": "uri"
},
"schedule": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"checkInMargin": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"maxRuntime": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"type",
"value",
"checkInMargin",
"maxRuntime"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"environments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"lastCheckIn": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
}
},
"required": ["name", "status", "lastCheckIn"],
"additionalProperties": false
}
},
"hasMoreEnvironments": {
"type": "boolean"
}
},
"required": [
"id",
"slug",
"name",
"projectSlug",
"status",
"owner",
"lastCheckIn",
"nextCheckIn",
"webUrl",
"schedule",
"environments",
"hasMoreEnvironments"
],
"additionalProperties": false
}
},
"hasMore": {
"type": "boolean"
}
},
"required": ["monitors", "hasMore"],
"additionalProperties": false
},
"requiredScopes": ["org:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "find_organizations",
"description": "Find organizations that the user has access to in Sentry.\n\nUse this tool when you need to:\n- View organizations in Sentry\n- Find an organization's slug to aid other tool requests\n- Search for specific organizations by name or slug\n\nReturns up to 25 results per page. When hasMore is true, pass the returned nextCursor with the same filters and scope to fetch the next page.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Search query to filter results by name or slug. Use this to narrow down results when there are many items."
},
{
"type": "null"
}
]
},
"cursor": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Pagination cursor from a previous call's nextCursor. Reuse it with the same filters and scope to fetch the next page."
},
{
"type": "null"
}
]
}
}
},
"outputSchema": {
"type": "object",
"properties": {
"organizations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"webUrl": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"regionUrl": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
}
},
"required": ["slug", "webUrl", "regionUrl"],
"additionalProperties": false
}
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["organizations", "hasMore", "nextCursor"],
"additionalProperties": false
},
"requiredScopes": ["org:read"],
"skills": ["inspect", "seer", "docs", "triage", "project-management"],
"surface": "direct"
},
{
"name": "find_projects",
"description": "Find projects in Sentry.\n\nUse this tool when you need to:\n- View projects in a Sentry organization\n- Find a project's slug to aid other tool requests\n- Search for specific projects by name or slug\n\nReturns up to 25 results per page. When hasMore is true, pass the returned nextCursor with the same filters and scope to fetch the next page.",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"query": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Search query to filter results by name or slug. Use this to narrow down results when there are many items."
},
{
"type": "null"
}
]
},
"cursor": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Pagination cursor from a previous call's nextCursor. Reuse it with the same filters and scope to fetch the next page."
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"projects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
}
},
"required": ["slug"],
"additionalProperties": false
}
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["projects", "hasMore", "nextCursor"],
"additionalProperties": false
},
"requiredScopes": ["project:read"],
"skills": ["inspect", "seer", "docs", "triage", "project-management"],
"surface": "direct"
},
{
"name": "find_releases",
"description": "Find releases in Sentry.\n\nUse this tool when you need to:\n- Find recent releases in a Sentry organization\n- Find the most recent version released of a specific project\n- Determine when a release was deployed to an environment\n\nReturns up to 25 results. When hasMore is true, use the projectSlug or query parameter to narrow down results.\n\n\n### Find the most recent releases in the 'my-organization' organization\n\n```\nfind_releases(organizationSlug='my-organization')\n```\n\n### Find releases matching '2ce6a27' in the 'my-organization' organization\n\n```\nfind_releases(organizationSlug='my-organization', query='2ce6a27')\n```\n\n\n\n- If the user passes a parameter in the form of name/otherName, its likely in the format of /.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug, or exact lowercase `all` when a tool supports all-projects scope. Other casing is treated as a project slug."
},
{
"type": "null"
}
]
},
"query": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Search for versions which contain the provided string."
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"releases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"version": {
"type": "string"
},
"dateCreated": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"dateReleased": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"firstEvent": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"lastEvent": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"newIssues": {
"type": "number"
},
"projects": {
"type": "array",
"items": {
"type": "string"
}
},
"lastCommit": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dateCreated": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": ["id", "message", "author", "dateCreated"],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"lastDeploy": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"environment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dateStarted": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"dateFinished": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"environment",
"dateStarted",
"dateFinished"
],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"version",
"dateCreated",
"dateReleased",
"firstEvent",
"lastEvent",
"newIssues",
"projects",
"lastCommit",
"lastDeploy"
],
"additionalProperties": false
}
},
"hasMore": {
"type": "boolean"
}
},
"required": ["releases", "hasMore"],
"additionalProperties": false
},
"requiredScopes": ["project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "find_teams",
"description": "Find teams in an organization in Sentry.\n\nUse this tool when you need to:\n- View teams in a Sentry organization\n- Find a team's slug and numeric ID to aid other tool requests\n- Search for specific teams by name or slug\n\nReturns up to 25 results per page. When hasMore is true, pass the returned nextCursor with the same filters and scope to fetch the next page.",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"query": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Search query to filter results by name or slug. Use this to narrow down results when there are many items."
},
{
"type": "null"
}
]
},
"cursor": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Pagination cursor from a previous call's nextCursor. Reuse it with the same filters and scope to fetch the next page."
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"teams": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"id": {
"type": "string"
}
},
"required": ["slug", "id"],
"additionalProperties": false
}
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["teams", "hasMore", "nextCursor"],
"additionalProperties": false
},
"requiredScopes": ["team:read"],
"skills": ["inspect", "triage", "project-management"],
"surface": "catalog"
},
{
"name": "find_uptime_monitors",
"description": "Find Sentry uptime monitors.\n\nUse this tool when you need to:\n- List HTTP uptime monitors in an organization\n- Find a monitor by name or URL before getting details\n- Check monitor status, owner, project, interval, or target URL\n- When `hasMore` is true, narrow results with project, environment, owner, or query filters\n\nThis is separate from cron monitors (`find_monitors`).\n\n\nfind_uptime_monitors(organizationSlug='my-organization')\nfind_uptime_monitors(organizationSlug='my-organization', projectSlug='backend', query='api')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug, or exact lowercase `all` when a tool supports all-projects scope. Other casing is treated as a project slug."
},
"environment": {
"type": "string",
"minLength": 1,
"description": "Optional environment name to limit monitors."
},
"owner": {
"type": "string",
"minLength": 1,
"description": "Optional owner filter, such as `user:123`, `team:456`, `myteams`, or `unassigned`."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Optional search query for monitor name or URL."
},
"limit": {
"default": 10,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 99,
"description": "Maximum number of monitors to return."
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"monitors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"projectSlug": {
"type": "string"
},
"status": {
"type": "string"
},
"uptimeStatus": {
"type": "string",
"enum": ["ok", "failed", "unknown"]
},
"url": {
"type": "string"
},
"method": {
"type": "string"
},
"intervalSeconds": {
"type": "number"
},
"environment": {
"type": "string"
},
"owner": {
"type": "string"
},
"webUrl": {
"type": "string",
"format": "uri"
}
},
"required": [
"id",
"name",
"projectSlug",
"status",
"uptimeStatus",
"url",
"intervalSeconds",
"webUrl"
],
"additionalProperties": false
}
},
"hasMore": {
"type": "boolean"
}
},
"required": ["monitors", "hasMore"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_agent_conversation_details",
"description": "Fetch the chronological transcript and debugging details for one agent conversation, formerly called an AI conversation.\n\nReturns a timeline of user messages, assistant messages, and tool calls, with trace/span IDs for deeper debugging. To discover or list conversations, use search_agent_conversations.",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"conversationId": {
"type": "string",
"description": "The agent conversation ID from gen_ai.conversation.id."
},
"project": {
"description": "Numeric project ID to scope the query. Falls back to context constraint or all projects.",
"type": "string"
},
"start": {
"description": "Explicit start time for the conversation lookup window.",
"type": "string"
},
"end": {
"description": "Explicit end time for the conversation lookup window.",
"type": "string"
},
"regionUrl": {
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
}
},
"required": ["organizationSlug", "conversationId"]
},
"outputSchema": {
"type": "object",
"properties": {
"conversationId": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"organizationSlug": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
},
"lookupWindow": {
"type": "object",
"properties": {
"statsPeriod": {
"type": "string"
},
"start": {
"type": "string"
},
"end": {
"type": "string"
}
},
"additionalProperties": false
},
"startTimestamp": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"endTimestamp": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"traceIds": {
"type": "array",
"items": {
"type": "string"
}
},
"projects": {
"type": "array",
"items": {
"type": "string"
}
},
"spanCount": {
"type": "number"
},
"aiCallCount": {
"type": "number"
},
"messageCount": {
"type": "number"
},
"toolCallCount": {
"type": "number"
},
"totalTokens": {
"type": "number"
},
"spanSummaries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"spanId": {
"type": "string"
},
"traceId": {
"type": "string"
},
"parentSpanId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"project": {
"type": "string"
},
"projectId": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"timestamp": {
"type": "number"
},
"durationMs": {
"type": "number"
},
"spanName": {
"type": "string"
},
"spanOp": {
"type": "string"
},
"spanDescription": {
"type": "string"
},
"spanStatus": {
"type": "string"
},
"transaction": {
"type": "string"
},
"isTransaction": {
"type": "boolean"
},
"genAi": {
"type": "object",
"properties": {
"operationType": {
"type": "string"
},
"agentName": {
"type": "string"
},
"requestModel": {
"type": "string"
},
"responseModel": {
"type": "string"
},
"usageTotalTokens": {
"type": "number"
},
"costTotalTokens": {
"type": "number"
},
"systemInstructions": {
"type": "string"
},
"inputMessages": {
"type": "string"
},
"outputMessages": {
"type": "string"
},
"requestMessages": {
"type": "string"
},
"responseText": {
"type": "string"
},
"responseObject": {
"type": "string"
},
"toolDefinitions": {
"type": "string"
},
"toolName": {
"type": "string"
},
"toolCallArguments": {
"type": "string"
},
"toolInput": {
"type": "string"
},
"truncatedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"required": [
"spanId",
"traceId",
"project",
"projectId",
"timestamp",
"durationMs"
],
"additionalProperties": false
}
},
"timeline": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "message"
},
"role": {
"type": "string",
"enum": ["user", "assistant"]
},
"content": {
"type": "string"
},
"timestamp": {
"type": "number"
},
"spanId": {
"type": "string"
},
"traceId": {
"type": "string"
},
"userEmail": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"agentName": {
"type": "string"
},
"model": {
"type": "string"
},
"totalTokens": {
"type": "number"
},
"status": {
"type": "string"
},
"durationMs": {
"type": "number"
}
},
"required": ["totalTokens", "durationMs"],
"additionalProperties": false
},
"genAi": {
"type": "object",
"properties": {
"operationType": {
"type": "string"
},
"agentName": {
"type": "string"
},
"requestModel": {
"type": "string"
},
"responseModel": {
"type": "string"
},
"usageTotalTokens": {
"type": "number"
},
"costTotalTokens": {
"type": "number"
},
"systemInstructions": {
"type": "string"
},
"inputMessages": {
"type": "string"
},
"outputMessages": {
"type": "string"
},
"requestMessages": {
"type": "string"
},
"responseText": {
"type": "string"
},
"responseObject": {
"type": "string"
},
"toolDefinitions": {
"type": "string"
},
"toolName": {
"type": "string"
},
"toolCallArguments": {
"type": "string"
},
"toolInput": {
"type": "string"
},
"truncatedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"required": [
"type",
"role",
"content",
"timestamp",
"spanId",
"traceId"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "tool_call"
},
"name": {
"type": "string"
},
"spanId": {
"type": "string"
},
"traceId": {
"type": "string"
},
"timestamp": {
"type": "number"
},
"durationMs": {
"type": "number"
},
"status": {
"type": "string"
},
"arguments": {
"type": "string"
},
"input": {
"type": "string"
},
"genAi": {
"type": "object",
"properties": {
"operationType": {
"type": "string"
},
"agentName": {
"type": "string"
},
"requestModel": {
"type": "string"
},
"responseModel": {
"type": "string"
},
"usageTotalTokens": {
"type": "number"
},
"costTotalTokens": {
"type": "number"
},
"systemInstructions": {
"type": "string"
},
"inputMessages": {
"type": "string"
},
"outputMessages": {
"type": "string"
},
"requestMessages": {
"type": "string"
},
"responseText": {
"type": "string"
},
"responseObject": {
"type": "string"
},
"toolDefinitions": {
"type": "string"
}
},
"additionalProperties": false
}
},
"required": [
"type",
"name",
"spanId",
"traceId",
"timestamp",
"durationMs"
],
"additionalProperties": false
}
]
}
}
},
"required": [
"conversationId",
"title",
"organizationSlug",
"url",
"lookupWindow",
"startTimestamp",
"endTimestamp",
"traceIds",
"projects",
"spanCount",
"aiCallCount",
"messageCount",
"toolCallCount",
"totalTokens",
"spanSummaries",
"timeline"
],
"additionalProperties": false
},
"requiredScopes": ["event:read", "project:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "catalog"
},
{
"name": "get_ai_conversation_details",
"description": "Deprecated alias for get_agent_conversation_details.\n\nUse get_agent_conversation_details for new integrations. This alias is kept for backward compatibility.",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"conversationId": {
"type": "string",
"description": "The agent conversation ID from gen_ai.conversation.id."
},
"project": {
"description": "Numeric project ID to scope the query. Falls back to context constraint or all projects.",
"type": "string"
},
"start": {
"description": "Explicit start time for the conversation lookup window.",
"type": "string"
},
"end": {
"description": "Explicit end time for the conversation lookup window.",
"type": "string"
},
"regionUrl": {
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
}
},
"required": ["organizationSlug", "conversationId"]
},
"outputSchema": {
"type": "object",
"properties": {
"conversationId": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"organizationSlug": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
},
"lookupWindow": {
"type": "object",
"properties": {
"statsPeriod": {
"type": "string"
},
"start": {
"type": "string"
},
"end": {
"type": "string"
}
},
"additionalProperties": false
},
"startTimestamp": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"endTimestamp": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"traceIds": {
"type": "array",
"items": {
"type": "string"
}
},
"projects": {
"type": "array",
"items": {
"type": "string"
}
},
"spanCount": {
"type": "number"
},
"aiCallCount": {
"type": "number"
},
"messageCount": {
"type": "number"
},
"toolCallCount": {
"type": "number"
},
"totalTokens": {
"type": "number"
},
"spanSummaries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"spanId": {
"type": "string"
},
"traceId": {
"type": "string"
},
"parentSpanId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"project": {
"type": "string"
},
"projectId": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"timestamp": {
"type": "number"
},
"durationMs": {
"type": "number"
},
"spanName": {
"type": "string"
},
"spanOp": {
"type": "string"
},
"spanDescription": {
"type": "string"
},
"spanStatus": {
"type": "string"
},
"transaction": {
"type": "string"
},
"isTransaction": {
"type": "boolean"
},
"genAi": {
"type": "object",
"properties": {
"operationType": {
"type": "string"
},
"agentName": {
"type": "string"
},
"requestModel": {
"type": "string"
},
"responseModel": {
"type": "string"
},
"usageTotalTokens": {
"type": "number"
},
"costTotalTokens": {
"type": "number"
},
"systemInstructions": {
"type": "string"
},
"inputMessages": {
"type": "string"
},
"outputMessages": {
"type": "string"
},
"requestMessages": {
"type": "string"
},
"responseText": {
"type": "string"
},
"responseObject": {
"type": "string"
},
"toolDefinitions": {
"type": "string"
},
"toolName": {
"type": "string"
},
"toolCallArguments": {
"type": "string"
},
"toolInput": {
"type": "string"
},
"truncatedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"required": [
"spanId",
"traceId",
"project",
"projectId",
"timestamp",
"durationMs"
],
"additionalProperties": false
}
},
"timeline": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "message"
},
"role": {
"type": "string",
"enum": ["user", "assistant"]
},
"content": {
"type": "string"
},
"timestamp": {
"type": "number"
},
"spanId": {
"type": "string"
},
"traceId": {
"type": "string"
},
"userEmail": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"agentName": {
"type": "string"
},
"model": {
"type": "string"
},
"totalTokens": {
"type": "number"
},
"status": {
"type": "string"
},
"durationMs": {
"type": "number"
}
},
"required": ["totalTokens", "durationMs"],
"additionalProperties": false
},
"genAi": {
"type": "object",
"properties": {
"operationType": {
"type": "string"
},
"agentName": {
"type": "string"
},
"requestModel": {
"type": "string"
},
"responseModel": {
"type": "string"
},
"usageTotalTokens": {
"type": "number"
},
"costTotalTokens": {
"type": "number"
},
"systemInstructions": {
"type": "string"
},
"inputMessages": {
"type": "string"
},
"outputMessages": {
"type": "string"
},
"requestMessages": {
"type": "string"
},
"responseText": {
"type": "string"
},
"responseObject": {
"type": "string"
},
"toolDefinitions": {
"type": "string"
},
"toolName": {
"type": "string"
},
"toolCallArguments": {
"type": "string"
},
"toolInput": {
"type": "string"
},
"truncatedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"required": [
"type",
"role",
"content",
"timestamp",
"spanId",
"traceId"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "tool_call"
},
"name": {
"type": "string"
},
"spanId": {
"type": "string"
},
"traceId": {
"type": "string"
},
"timestamp": {
"type": "number"
},
"durationMs": {
"type": "number"
},
"status": {
"type": "string"
},
"arguments": {
"type": "string"
},
"input": {
"type": "string"
},
"genAi": {
"type": "object",
"properties": {
"operationType": {
"type": "string"
},
"agentName": {
"type": "string"
},
"requestModel": {
"type": "string"
},
"responseModel": {
"type": "string"
},
"usageTotalTokens": {
"type": "number"
},
"costTotalTokens": {
"type": "number"
},
"systemInstructions": {
"type": "string"
},
"inputMessages": {
"type": "string"
},
"outputMessages": {
"type": "string"
},
"requestMessages": {
"type": "string"
},
"responseText": {
"type": "string"
},
"responseObject": {
"type": "string"
},
"toolDefinitions": {
"type": "string"
}
},
"additionalProperties": false
}
},
"required": [
"type",
"name",
"spanId",
"traceId",
"timestamp",
"durationMs"
],
"additionalProperties": false
}
]
}
}
},
"required": [
"conversationId",
"title",
"organizationSlug",
"url",
"lookupWindow",
"startTimestamp",
"endTimestamp",
"traceIds",
"projects",
"spanCount",
"aiCallCount",
"messageCount",
"toolCallCount",
"totalTokens",
"spanSummaries",
"timeline"
],
"additionalProperties": false
},
"requiredScopes": ["event:read", "project:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "catalog"
},
{
"name": "get_alert_options",
"description": "Discover available actions, conditions, or sources for a Sentry Alert (notification workflow).\n\nChoose one section per call; reuse its cursor with the same section and filters.\n- actions: installed integrations, notification services, native config/data schemas and Sentry App settings. These schemas use Sentry's internal field names and target enums; inputGuide explains the update format.\n- conditions: condition types and comparison schemas for workflow triggers or action filters.\n- sources: accessible monitors and project issue streams. Use an issue_stream source to connect all issues from its project; a source with projectId=null covers all projects.\nSlack and Teams accept channel names; Discord needs a channel ID or URL. Dynamic Sentry App fields require explicit values; this tool does not enumerate their external choices.\n\n\nget_alert_options(organizationSlug='my-org', section='actions', actionTypes=['slack', 'msteams'])\nget_alert_options(organizationSlug='my-org', section='conditions', conditionGroup='action_filter')\nget_alert_options(organizationSlug='my-org', section='sources', projectSlug='backend', sourceTypes=['issue_stream'])\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"section": {
"type": "string",
"enum": ["actions", "conditions", "sources"],
"description": "The kind of Alert options to discover."
},
"actionTypes": {
"default": null,
"description": "Actions only: restrict to action types, such as slack, msteams, email, or pagerduty.",
"anyOf": [
{
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
{
"type": "null"
}
]
},
"conditionGroup": {
"default": null,
"description": "Required for conditions: workflow_trigger for Alert triggers, action_filter for action groups.",
"anyOf": [
{
"type": "string",
"enum": ["workflow_trigger", "action_filter"]
},
{
"type": "null"
}
]
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug, or exact lowercase `all` when a tool supports all-projects scope. Other casing is treated as a project slug."
},
{
"type": "null"
}
]
},
"sourceTypes": {
"default": null,
"description": "Sources only: restrict by monitor type, such as issue_stream or metric_issue.",
"anyOf": [
{
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
{
"type": "null"
}
]
},
"query": {
"default": null,
"description": "Sources only: Sentry monitor search, such as name:latency or workflow:123.",
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"cursor": {
"default": null,
"description": "Next cursor from the same section and filters.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"limit": {
"default": 25,
"description": "Maximum options to return in this page.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": ["organizationSlug", "section"]
},
"outputSchema": {
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": ["actions", "conditions", "sources"]
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"handlerGroup": {
"type": "string"
},
"configSchema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"dataSchema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"integrations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"services": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": ["id", "name"],
"additionalProperties": false
}
}
},
"required": ["id", "name"],
"additionalProperties": false
}
},
"services": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": ["slug", "name"],
"additionalProperties": false
}
},
"sentryApp": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"installationId": {
"type": "string"
},
"installationUuid": {
"type": "string"
},
"status": {
"type": "string"
},
"settings": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"title": {
"type": "string"
}
},
"required": [
"id",
"name",
"installationId",
"installationUuid",
"status"
],
"additionalProperties": false
}
},
"required": ["type", "handlerGroup", "configSchema", "dataSchema"],
"additionalProperties": false
}
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"handlerGroup": {
"type": "string"
},
"handlerSubgroup": {
"type": "string"
},
"comparisonJsonSchema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": ["type", "handlerGroup", "comparisonJsonSchema"],
"additionalProperties": false
}
},
"conditionGroup": {
"type": "string",
"enum": ["workflow_trigger", "action_filter"]
},
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"projectId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"workflowIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"name",
"type",
"projectId",
"enabled",
"workflowIds"
],
"additionalProperties": false
}
},
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"inputGuide": {
"type": "object",
"properties": {
"schemaFormat": {
"type": "string"
},
"fieldNames": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"targetTypes": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": ["schemaFormat", "fieldNames", "targetTypes", "notes"],
"additionalProperties": false
}
},
"required": ["section", "nextCursor"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_alert_rule",
"description": "Get details for a Sentry alert rule.\n\nUse this tool when you need to inspect an alert rule's exact conditions, query, triggers, and actions before explaining or planning changes.\n\n\nget_alert_rule(organizationSlug='my-org', kind='metric', ruleIdOrName='12345')\nget_alert_rule(organizationSlug='my-org', kind='issue', projectSlug='backend', ruleIdOrName='Notify backend team')\nget_alert_rule(organizationSlug='my-org', projectSlug='backend', ruleIdOrName='P95 latency')\n\n\n\n- Prefer get_metric_monitor_details for Metric Monitors. With kind=metric, numeric IDs retain their legacy alert-rule meaning; detector:123 explicitly identifies monitor 123.\n- With `kind='all'`, a digit-only `ruleIdOrName` is treated as an exact alert rule name.\n- Issue Alerts are notification workflows and may cover multiple projects or have no connected sources. Omit projectSlug to inspect organization-wide.\n- Issue details include complete conditions, notification actions, connected monitors and project scope. Inaccessible or session-restricted sources are marked explicitly.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"kind": {
"default": "all",
"type": "string",
"enum": ["all", "issue", "metric"],
"description": "Which alert family to inspect. Numeric metric IDs are legacy alert-rule IDs, not monitor IDs. `all` performs an exact-name lookup."
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug, or exact lowercase `all` when a tool supports all-projects scope. Other casing is treated as a project slug."
},
{
"type": "null"
}
]
},
"ruleIdOrName": {
"type": "string",
"minLength": 1,
"description": "An Alert ID or exact name. Metric references accept legacy numeric alert-rule IDs or detector:123 for canonical monitor IDs."
}
},
"required": ["organizationSlug", "ruleIdOrName"]
},
"requiredScopes": ["org:read", "project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_dashboard_details",
"description": "Get detailed information about a specific Sentry dashboard.\n\nUse this tool when you need to:\n- Inspect a dashboard's widgets and saved query definitions\n- View dashboard projects, environments, filters, layout, and widget IDs\n- Resolve a dashboard by exact title or numeric ID\n\n\nget_dashboard_details(organizationSlug='my-organization', dashboardIdOrTitle='12345')\nget_dashboard_details(organizationSlug='my-organization', dashboardIdOrTitle='Errors Overview')\n\n\n\n- Numeric dashboard IDs are resolved directly.\n- Title lookups require one exact case-insensitive match. Use `find_dashboards` first if uncertain.\n- This returns saved widget query definitions, not live widget data.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"dashboardIdOrTitle": {
"type": "string",
"minLength": 1,
"description": "The dashboard's numeric ID or exact title."
}
},
"required": ["organizationSlug", "dashboardIdOrTitle"]
},
"requiredScopes": ["org:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_doc",
"description": "Fetch the full markdown content of a Sentry documentation page.\n\nUse this tool when you need to:\n- Read the complete documentation for a specific topic\n- Get detailed implementation examples or code snippets\n- Access the full context of a documentation page\n- Extract specific sections from documentation\n\n\n### Get the Next.js integration guide\n\n```\nget_doc(path='/platforms/javascript/guides/nextjs.md')\n```\n\n\n\n- Use the path from search_docs results for accurate fetching\n- Paths should end with .md extension\n",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "The documentation path (e.g., '/platforms/javascript/guides/nextjs.md'). Get this from search_docs results."
}
},
"required": ["path"]
},
"requiredScopes": [],
"skills": ["inspect", "docs"],
"surface": "catalog"
},
{
"name": "get_event_attachment",
"description": "Download attachments from a Sentry event.\n\nUse this tool when you need to:\n- Download files attached to a specific event\n- Access screenshots, log files, or other attachments uploaded with an error report\n- Retrieve attachment metadata and download URLs\n\n\n### Download a specific attachment by ID\n\n```\nget_event_attachment(organizationSlug='my-organization', projectSlug='my-project', eventId='c49541c747cb4d8aa3efb70ca5aba243', attachmentId='12345')\n```\n\n### List all attachments for an event\n\n```\nget_event_attachment(organizationSlug='my-organization', projectSlug='my-project', eventId='c49541c747cb4d8aa3efb70ca5aba243')\n```\n\n\n\n\n- If `attachmentId` is provided, the specific attachment will be downloaded as an embedded resource\n- If `attachmentId` is omitted, all attachments for the event will be listed with download information\n- The `projectSlug` is required to identify which project the event belongs to\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"eventId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{32}$",
"description": "The ID of the event. e.g. `c49541c747cb4d8aa3efb70ca5aba243`"
},
"attachmentId": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The ID of the attachment to download."
},
{
"type": "null"
}
]
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug", "projectSlug", "eventId"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_event_stacktrace",
"description": "Get a full thread stacktrace from a specific Sentry event.\n\nUse this tool when you need to:\n- Fetch the full stacktrace for a thread listed in issue details\n- Inspect a non-crashed thread from an event with multiple threads\n- Get Sentry's default selected thread stacktrace when no thread is specified\n\n\nget_event_stacktrace(organizationSlug='my-org', issueId='PROJECT-123')\nget_event_stacktrace(organizationSlug='my-org', issueId='PROJECT-123', eventId='c49541c747cb4d8aa3efb70ca5aba243', thread=259)\nget_event_stacktrace(organizationSlug='my-org', issueId='PROJECT-123', thread='main')\n\n\n\n- `thread` is optional. If omitted, this returns the same default thread Sentry selects: first crashed thread, then first thread with a stacktrace, then first thread.\n- Pass `thread` as a numeric Thread ID or exact thread Name from the issue details thread list.\n- If the issue details show only one useful thread, omit `thread`.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"eventId": {
"default": "latest",
"description": "The event ID for the issue, or `latest`. Defaults to `latest`.",
"anyOf": [
{
"type": "string",
"const": "latest"
},
{
"type": "string",
"pattern": "^[0-9a-fA-F]{32}$",
"description": "The ID of the event. e.g. `c49541c747cb4d8aa3efb70ca5aba243`"
}
]
},
"thread": {
"description": "Optional thread selector. Pass a numeric thread ID, or an exact thread name string. If omitted, returns the same default thread Sentry selects: first crashed thread, then first thread with a stacktrace, then first thread.",
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "string",
"minLength": 1
}
]
}
},
"required": ["organizationSlug", "issueId"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "catalog"
},
{
"name": "get_issue_activity",
"description": "Get the activity feed and comments for a Sentry issue.\n\nUse this tool when you need to:\n- Review prior comments before triaging an issue\n- Understand who resolved, ignored, assigned, or commented on an issue\n- See recent issue activity that is not included in `get_issue_details`\n\n\nget_issue_activity(organizationSlug='my-organization', issueId='PROJECT-123')\nget_issue_activity(issueUrl='https://my-organization.sentry.io/issues/PROJECT-123/')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"issueUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the issue. e.g. https://my-organization.sentry.io/issues/PROJECT-1Z43"
},
"includeComments": {
"default": true,
"type": "boolean"
},
"limit": {
"default": 25,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
}
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage"],
"surface": "catalog"
},
{
"name": "get_issue_breadcrumbs",
"description": "Get the breadcrumb trail from a Sentry issue event.\nDefaults to the latest event when eventId is omitted.\n\nUse this tool when you need to:\n- See the user and application actions leading up to an error\n- Inspect navigation, console, HTTP, and other breadcrumb events\n- Reconstruct the immediate context before an issue occurred\n- Compare breadcrumb trails across multiple events in the same issue\n\n\nget_issue_breadcrumbs(organizationSlug='my-org', issueId='PROJECT-123')\nget_issue_breadcrumbs(organizationSlug='my-org', issueId='PROJECT-123', eventId='c49541c747cb4d8aa3efb70ca5aba243')\nget_issue_breadcrumbs(issueUrl='https://my-org.sentry.io/issues/PROJECT-123/')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"issueUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the issue. e.g. https://my-organization.sentry.io/issues/PROJECT-1Z43"
},
"eventId": {
"default": "latest",
"description": "The event ID for the issue, or `latest`. Defaults to `latest`.",
"anyOf": [
{
"type": "string",
"const": "latest"
},
{
"type": "string",
"pattern": "^[0-9a-fA-F]{32}$",
"description": "The ID of the event. e.g. `c49541c747cb4d8aa3efb70ca5aba243`"
}
]
}
}
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage"],
"surface": "catalog"
},
{
"name": "get_issue_details",
"description": "Get detailed information about a specific Sentry issue by ID.\n\nUSE THIS TOOL WHEN USERS:\n- Provide a specific issue ID (e.g., 'CLOUDFLARE-MCP-41', 'PROJECT-123')\n- Ask to 'explain [ISSUE-ID]', 'tell me about [ISSUE-ID]'\n- Want details/stacktrace/analysis for a known issue\n- Want the suspect commit's SHA, message, author, and source when available\n- Provide a Sentry issue URL\n\nDO NOT USE for:\n- General searching or listing issues (use search_issues)\n\nTRIGGER PATTERNS:\n- 'Explain ISSUE-123' → use get_issue_details\n- 'Tell me about PROJECT-456' → use get_issue_details\n- 'What happened in [issue URL]' → use get_issue_details\n\n\n### With Sentry URL (recommended - simplest approach)\n```\nget_issue_details(issueUrl='https://sentry.sentry.io/issues/6916805731/?project=4509062593708032&query=is%3Aunresolved')\n```\n\n### With issue ID and organization\n```\nget_issue_details(organizationSlug='my-organization', issueId='CLOUDFLARE-MCP-41')\n```\n\n### With event ID and organization\n```\nget_issue_details(organizationSlug='my-organization', eventId='c49541c747cb4d8aa3efb70ca5aba243')\n```\n\n\n\n- **IMPORTANT**: If user provides a Sentry URL, pass the ENTIRE URL to issueUrl parameter unchanged\n- When using issueUrl, all other parameters are automatically extracted - don't provide them separately\n- If using issueId (not URL), then organizationSlug is required\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"eventId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{32}$",
"description": "The ID of the event. e.g. `c49541c747cb4d8aa3efb70ca5aba243`"
},
"issueUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the issue. e.g. https://my-organization.sentry.io/issues/PROJECT-1Z43"
}
}
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "catalog"
},
{
"name": "get_issue_tag_values",
"description": "Get tag value distribution for a specific Sentry issue.\n\nUse this tool when you need to:\n- Understand how an issue is distributed across different tag values\n- Get aggregate counts of unique tag values (e.g., 'how many unique URLs are affected')\n- Analyze which browsers, environments, or URLs are most impacted by an issue\n- View the tag distributions page data programmatically\n\nCommon tag keys:\n- `url`: Request URLs affected by the issue\n- `browser`: Browser types and versions\n- `browser.name`: Browser names only\n- `os`: Operating systems\n- `environment`: Deployment environments (production, staging, etc.)\n- `release`: Software releases\n- `device`: Device types\n- `user`: Affected users\n\n\n### Get URL distribution for an issue\n```\nget_issue_tag_values(organizationSlug='my-organization', issueId='PROJECT-123', tagKey='url')\n```\n\n### Get browser distribution using issue URL\n```\nget_issue_tag_values(issueUrl='https://sentry.io/issues/PROJECT-123/', tagKey='browser')\n```\n\n### Get environment distribution\n```\nget_issue_tag_values(organizationSlug='my-organization', issueId='PROJECT-123', tagKey='environment')\n```\n\n\n\n- If user provides a Sentry URL, pass the ENTIRE URL to issueUrl parameter unchanged\n- Common tag keys: url, browser, browser.name, os, environment, release, device, user\n- Tag keys are case-sensitive\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"issueUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the issue. e.g. https://my-organization.sentry.io/issues/PROJECT-1Z43"
},
"tagKey": {
"type": "string",
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]*$",
"description": "The tag key to get values for (e.g., 'url', 'browser', 'environment', 'release')."
}
},
"required": ["tagKey"]
},
"outputSchema": {
"type": "object",
"properties": {
"tag": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"name": {
"type": "string"
},
"totalValues": {
"type": "number"
},
"topValues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"count": {
"type": "number"
},
"firstSeen": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"lastSeen": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["value", "count", "firstSeen", "lastSeen"],
"additionalProperties": false
}
}
},
"required": ["key", "name", "totalValues", "topValues"],
"additionalProperties": false
}
},
"required": ["tag"],
"additionalProperties": false
},
"requiredScopes": ["event:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_issue_user_reports",
"description": "Get legacy User Reports or crash-report feedback attached to a Sentry issue.\n\nUse this tool when you need to:\n- See what a user said happened when an error occurred\n- Check if any legacy bug reports or crash-report feedback were submitted for this issue\n- Get the human-provided context behind a crash, beyond the stack trace\n\n\nget_issue_user_reports(organizationSlug='my-organization', issueId='PROJECT-123')\nget_issue_user_reports(issueUrl='https://my-organization.sentry.io/issues/PROJECT-123/')\n\n\n\n- For standalone User Feedback Widget submissions, use `search_issues(query='issue.category:feedback')`.\n- Reuse pagination cursors only with the same issue scope.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"issueUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the issue. e.g. https://my-organization.sentry.io/issues/PROJECT-1Z43"
},
"cursor": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional pagination cursor from a previous response."
},
{
"type": "null"
}
]
},
"limit": {
"default": 25,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100,
"description": "Maximum number of user reports to return."
}
}
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage"],
"surface": "catalog"
},
{
"name": "get_latest_base_snapshot",
"description": "Get the latest UI screenshots/images for an app from the preprod snapshot system.\n\nThis is the primary tool for retrieving app screenshots.\n\nUse this tool when you need to:\n- Get screenshots, screens, golden images, or reference images for an app\n- Find what the current UI looks like (latest screenshots from the main/default branch)\n- List available snapshots or browse images before requesting specific ones\n- Look up dark mode, light mode, or other variant screenshots\n- Understand what baseline images exist when investigating snapshot test or visual regression CI failures\n\nThe appId parameter is the app identifier (e.g. 'sentry-frontend', 'com.emergetools.hackernews').\nReturns compact image metadata (display_name, image_file_name, group, description) for every image.\n\n\n### Get the latest screenshots for an app\n\n```\nget_latest_base_snapshot(organizationSlug=\"sentry\", appId=\"sentry-frontend\", project=\"frontend\")\n```\n\n### Get the latest screenshots for a specific branch\n\n```\nget_latest_base_snapshot(organizationSlug=\"sentry\", appId=\"sentry-frontend\", project=\"frontend\", branch=\"main\")\n```\n\n\n\n- The response includes compact metadata per image. Scan the list to find images matching what you need (e.g. filter by group or name containing 'button').\n- To view a specific image, use get_sentry_resource(url='?selectedSnapshot=').\n- If you need to investigate a specific snapshot comparison, use get_sentry_resource with the snapshot URL.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"appId": {
"type": "string",
"description": "The app identifier (e.g. 'sentry-frontend', 'com.emergetools.hackernews'). Required."
},
"branch": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Filter by git branch (e.g. 'main'). Omit to use the app's default branch."
},
{
"type": "null"
}
]
},
"project": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Project slug or numeric ID for scoping (e.g. 'frontend')."
},
{
"type": "null"
}
]
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug", "appId"]
},
"requiredScopes": ["project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_metric_monitor_details",
"description": "Inspect a Sentry Metric Monitor's query, dataset, detection mode, thresholds, resolution conditions and connected Alerts.\nUse monitorId from find_metric_monitors, not a legacy metric alert ID. Time windows and comparison deltas are in seconds.\nCondition results use 75 for critical, 50 for warning and 0 for resolved. Percent comparisons are absolute percentages (110 means 10% higher); dynamic conditions include sensitivity and direction.\nworkflowIds identify notification Alerts; inspect their actions with get_alert_rule(kind='issue').\nget_metric_monitor_details(organizationSlug='my-org', monitorId='12345')",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"monitorId": {
"type": "string",
"pattern": "^\\d+$",
"description": "Native Metric Monitor ID from find_metric_monitors."
}
},
"required": ["organizationSlug", "monitorId"]
},
"outputSchema": {
"type": "object",
"properties": {
"monitor": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"projectId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workflowIds": {
"type": "array",
"items": {
"type": "string"
}
},
"webUrl": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config": {
"type": "object",
"properties": {
"detectionType": {
"type": "string"
},
"comparisonDeltaSeconds": {
"type": "number"
}
},
"required": ["detectionType"],
"additionalProperties": false
},
"conditionGroup": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"logicType": {
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"],
"additionalProperties": false
}
}
},
"required": ["logicType", "conditions"],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Native detection conditions, including resolution. Results: 75 critical, 50 warning, 0 resolved. Percent comparisons are absolute percentages (110 means 10% higher). Dynamic comparisons contain sensitivity, seasonality and thresholdType."
},
"dataSources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"query": {
"type": "object",
"properties": {
"dataset": {
"type": "string"
},
"query": {
"type": "string"
},
"aggregate": {
"type": "string"
},
"environment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"eventTypes": {
"type": "array",
"items": {
"type": "string"
}
},
"extrapolationMode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timeWindowSeconds": {
"type": "number"
}
},
"required": [
"dataset",
"query",
"aggregate",
"environment",
"eventTypes",
"timeWindowSeconds"
],
"additionalProperties": false
},
"unavailableReason": {
"type": "string"
}
},
"required": ["type"],
"additionalProperties": false
}
},
"dateCreated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dateUpdated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"projectId",
"enabled",
"owner",
"workflowIds",
"webUrl",
"description",
"config",
"conditionGroup",
"dataSources",
"dateCreated",
"dateUpdated"
],
"additionalProperties": false
}
},
"required": ["monitor"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_monitor_details",
"description": "Get details for a Sentry cron monitor.\n\nUse this tool when you need to:\n- Inspect a monitor's schedule, status, owner, project, and environments\n- Review recent check-ins for missed, failed, timeout, or OK runs\n- Check monitor stats over a recent time range\n\n\nget_monitor_details(organizationSlug='my-organization', monitorSlug='nightly-import')\nget_monitor_details(organizationSlug='my-organization', monitorSlug='nightly-import', projectSlugOrId='backend', environment='production', period='7d')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlugOrId": {
"default": null,
"description": "Optional project slug or numeric ID. Use this to disambiguate monitors with the same slug or to scope a monitor URL that includes a project segment.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"monitorSlug": {
"type": "string",
"minLength": 1,
"description": "Monitor slug or GUID."
},
"environment": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional environment name to filter monitor environments, recent check-ins, and stats."
},
{
"type": "null"
}
]
},
"period": {
"default": null,
"anyOf": [
{
"type": "string",
"pattern": "^\\d+[hdw]$",
"description": "Relative time range. Defaults to `24h` when `start` and `end` are omitted."
},
{
"type": "null"
}
]
},
"start": {
"default": null,
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Absolute start time. Must be provided with `end`; do not combine with `period`."
},
{
"type": "null"
}
]
},
"end": {
"default": null,
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Absolute end time. Must be provided with `start`; do not combine with `period`."
},
{
"type": "null"
}
]
},
"checkInLimit": {
"default": 10,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50,
"description": "Maximum number of recent check-ins to include."
},
"includeStats": {
"default": true,
"type": "boolean",
"description": "Include aggregate check-in stats for the selected time range."
},
"rollupSeconds": {
"default": null,
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Optional stats bucket size in seconds. Omit this to let Sentry choose an appropriate rollup."
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug", "monitorSlug"]
},
"requiredScopes": ["project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_profile",
"description": "Analyze CPU profiling data to identify performance bottlenecks and detect regressions.\n\nUSE THIS TOOL WHEN:\n- User asks why a specific endpoint/transaction is slow\n- User wants to understand where CPU time is spent\n- User asks about performance bottlenecks\n- User wants to compare performance between time periods\n- User shares a Sentry profile URL\n\nRETURNS:\n- Hot paths (call stacks consuming the most CPU time)\n- Performance percentiles (p75, p95, p99) for each function\n- User code vs library code breakdown\n- Actionable recommendations for optimization\n- Regression analysis when comparing periods\n\n\n### Analyze from URL (with transaction name)\n```\nget_profile(\n profileUrl='https://my-org.sentry.io/explore/profiling/profile/backend/flamegraph/?profilerId=abc123',\n transactionName='/api/users'\n)\n```\n\n### Analyze by transaction name\n```\nget_profile(\n organizationSlug='my-org',\n transactionName='/api/users',\n projectSlugOrId='backend'\n)\n```\n\n### Compare performance between periods\n```\nget_profile(\n organizationSlug='my-org',\n transactionName='/api/users',\n projectSlugOrId='backend',\n period='7d',\n compareAgainstPeriod='14d'\n)\n```\n\n\n\n- Use `focusOnUserCode: true` (default) to filter out library code\n- High p99 relative to p75 indicates inconsistent performance\n- Use compareAgainstPeriod to detect regressions over time\n- Transaction names are case-sensitive\n",
"inputSchema": {
"type": "object",
"properties": {
"profileUrl": {
"description": "Sentry profile URL. If provided, organization and project are extracted from URL. transactionName is still required.",
"type": "string",
"format": "uri"
},
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlugOrId": {
"description": "Project slug or numeric ID",
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"transactionName": {
"description": "Transaction name (e.g., '/api/users', 'POST /graphql')",
"type": "string"
},
"period": {
"default": "7d",
"description": "Profiling time window (default: '7d'). Use '1h' for very recent profiling data.",
"type": "string",
"pattern": "^\\d+[hdw]$"
},
"compareAgainstPeriod": {
"description": "Compare against this baseline profiling time window. Enables regression detection.",
"type": "string",
"pattern": "^\\d+[hdw]$"
},
"focusOnUserCode": {
"default": true,
"description": "Show only user code (is_application: true). Set to false to include library code.",
"type": "boolean"
},
"maxHotPaths": {
"default": 10,
"description": "Number of hot paths to display (1-20, default: 10)",
"type": "integer",
"minimum": 1,
"maximum": 20
}
}
},
"requiredScopes": ["event:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_profile_details",
"description": "Inspect a specific Sentry profile in detail.\n\nUSE THIS TOOL WHEN:\n- User shares a transaction profile URL and wants the details\n- User has a profile ID and wants a concise summary plus raw sample structure\n- User needs to inspect a continuous profile session by profiler ID and time range\n\nRETURNS:\n- Transaction profile summary with profile URL, transaction, trace, release, and runtime details\n- Sample structure summaries such as frame count, sample count, stacks, and thread breakdown\n- Top frames by occurrence for a quick hotspot overview\n\nNOTE: This tool supports two profile modes.\n- Transaction profiles: pass `profileUrl` or `organizationSlug` + `projectSlugOrId` + `profileId`\n- Continuous profiles: pass `profileUrl` or `organizationSlug` + `projectSlugOrId` + `profilerId` + `start` + `end`\n\n\n### Transaction profile URL\n```\nget_profile_details(\n profileUrl='https://my-org.sentry.io/explore/profiling/profile/backend/cfe78a5c892d4a64a962d837673398d2/flamegraph/'\n)\n```\n\n### Transaction profile by ID\n```\nget_profile_details(\n organizationSlug='my-org',\n projectSlugOrId='backend',\n profileId='cfe78a5c892d4a64a962d837673398d2'\n)\n```\n\n### Continuous profile by session\n```\nget_profile_details(\n organizationSlug='my-org',\n projectSlugOrId='backend',\n profilerId='041bde57b9844e36b8b7e5734efae5f7',\n start='2024-01-01T00:00:00Z',\n end='2024-01-01T01:00:00Z'\n)\n```\n",
"inputSchema": {
"type": "object",
"properties": {
"profileUrl": {
"description": "Sentry transaction profile or continuous profile URL. If provided, organization, project, and profile identifiers are extracted from the URL.",
"type": "string",
"format": "uri"
},
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlugOrId": {
"description": "Project slug or numeric ID",
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"profileId": {
"description": "Transaction profile ID from a profile flamegraph URL",
"type": "string"
},
"profilerId": {
"description": "Continuous profiler session ID",
"type": "string"
},
"start": {
"description": "Continuous profile start time in ISO 8601 format, for example '2024-01-01T00:00:00Z'",
"type": "string"
},
"end": {
"description": "Continuous profile end time in ISO 8601 format, for example '2024-01-01T01:00:00Z'",
"type": "string"
},
"focusOnUserCode": {
"default": true,
"description": "Show only user code frames in the hotspot table. Set to false to include library frames.",
"type": "boolean"
}
}
},
"requiredScopes": ["event:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_release_details",
"description": "Get details for a Sentry release.\n\nUse this tool when you need to:\n- Inspect an exact release version\n- Scope a release lookup to a specific project\n- See deploys and environments for a release\n- See recent commits attached to a release\n- Gather release health metadata when a project is known\n\n\nget_release_details(organizationSlug='my-organization', releaseVersion='1.2.3')\nget_release_details(organizationSlug='my-organization', releaseVersion='1.2.3', projectSlugOrId='backend')\nget_release_details(organizationSlug='my-organization', releaseVersion='1.2.3', includeHealth=true, projectSlugOrId='backend')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"releaseVersion": {
"type": "string",
"minLength": 1,
"description": "Exact release version."
},
"projectSlugOrId": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "Optional project slug or numeric ID. Use this to scope release details, deploys, and commits to one project; required for health metadata unless the session is already project-constrained."
},
{
"type": "null"
}
]
},
"includeHealth": {
"default": false,
"type": "boolean",
"description": "Include project-specific release health metadata. Requires projectSlugOrId unless the session is already project-constrained."
},
"includeDeploys": {
"default": true,
"type": "boolean",
"description": "Include recent deploys for this release."
},
"includeCommits": {
"default": true,
"type": "boolean",
"description": "Include recent commits attached to this release."
},
"limit": {
"default": 10,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50,
"description": "Maximum number of deploys and commits to return, up to 50."
}
},
"required": ["organizationSlug", "releaseVersion"]
},
"requiredScopes": ["project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_replay_details",
"description": "Get high-level information about a specific Sentry replay by URL or replay ID.\n\nUSE THIS TOOL WHEN USERS:\n- Share a replay URL\n- Ask what happened in a specific replay\n- Want a concise replay summary plus the next issue or trace lookups to run\n\n\n### With replay URL\n```\nget_replay_details(replayUrl='https://my-organization.sentry.io/explore/replays/7e07485f-12f9-416b-8b14-26260799b51f/')\n```\n\n### With organization and replay ID\n```\nget_replay_details(organizationSlug='my-organization', replayId='7e07485f-12f9-416b-8b14-26260799b51f')\n```\n",
"inputSchema": {
"type": "object",
"properties": {
"replayUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the replay. e.g. https://my-organization.sentry.io/explore/replays/7e07485f-12f9-416b-8b14-26260799b51f/"
},
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"replayId": {
"type": "string",
"description": "The replay ID. e.g. `7e07485f-12f9-416b-8b14-26260799b51f`"
},
"regionUrl": {
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
}
}
},
"requiredScopes": ["org:read", "project:read", "event:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_sentry_mcp_info",
"description": "Get information about the running Sentry MCP server.\n\nUse this tool when you need to:\n- Check the Sentry MCP server version\n- Verify compatibility with a Skill or integration",
"inputSchema": {},
"outputSchema": {
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "The Sentry MCP server version."
}
},
"required": ["version"],
"additionalProperties": false
},
"requiredScopes": [],
"skills": ["inspect", "seer", "docs", "triage", "project-management"],
"surface": "catalog"
},
{
"name": "get_sentry_resource",
"description": "Fetch a Sentry resource by URL, or by resourceType plus resourceId.\nPass a Sentry URL directly when possible; the resource type is auto-detected.\n\nSupports issues, events, traces, spans, agent conversations, replays, monitors, dashboards, preprod snapshots, and snapshot images.\nTrace lookups return a condensed overview by default.\n\nAgent Conversations: A conversation is a set of spans sharing the same gen_ai.conversation.id. Use resourceType='ai_conversation' with a conversation ID, or pass a Sentry conversation URL, to fetch the transcript/details. To discover or list conversations, use search_agent_conversations. Conversations are NOT issues — do not use search_issues for conversation queries.\n\nFor preprod snapshot URLs (matching 'sentry.io/preprod/snapshots/'):\n- Without ?selectedSnapshot=: returns the snapshot diff summary (changed, added, removed images)\n- With ?selectedSnapshot=: returns the image preview and metadata. Use the Sentry tool `get_snapshot_image` for full-resolution image bytes.\n\nResource IDs:\n- monitor: \n- dashboard: \n- snapshot: \n\n\nget_sentry_resource(url='https://sentry.io/issues/PROJECT-123/')\nget_sentry_resource(resourceType='issue', organizationSlug='my-org', resourceId='PROJECT-123')\nget_sentry_resource(resourceType='ai_conversation', organizationSlug='my-org', resourceId='conversation-123')\nget_sentry_resource(url='https://sentry.sentry.io/dashboard/542438/')\nget_sentry_resource(url='https://sentry.sentry.io/preprod/snapshots/123/')\nget_sentry_resource(url='https://sentry.sentry.io/preprod/snapshots/123/?selectedSnapshot=login_screen.png')\n",
"inputSchema": {
"type": "object",
"properties": {
"url": {
"description": "Sentry URL. The resource type is auto-detected from the URL pattern.",
"type": "string",
"format": "uri"
},
"resourceType": {
"description": "Resource type. With a URL, can override a span-focused trace URL with `trace`. Use `monitor` with a monitor slug only when inspect monitor tools are available, `snapshot` with a snapshot artifact ID, or `dashboard` with a dashboard ID or exact title when inspect dashboard tools are available.",
"type": "string",
"enum": [
"issue",
"event",
"trace",
"ai_conversation",
"replay",
"monitor",
"snapshot",
"dashboard"
]
},
"resourceId": {
"description": "Resource identifier: issue shortId (e.g., 'PROJECT-123'), event ID, trace ID, agent conversation ID, replay ID, monitor slug when inspect monitor tools are available, dashboard ID or title when inspect dashboard tools are available, or snapshot artifact ID. Required when not using a URL.",
"type": "string"
},
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
}
}
},
"requiredScopes": ["event:read", "project:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "direct"
},
{
"name": "get_snapshot",
"description": "Get a preprod snapshot comparison summary, including metadata, counts, and changed image sections.\n\nUse this tool when you need to:\n- Investigate a failed snapshot test from CI\n- Review what changed in a specific preprod snapshot\n- Browse snapshot image file names before viewing a specific image\n\nPass organizationSlug and snapshotId. Use get_sentry_resource for snapshot URLs.\nCompact output is returned by default. Set showUnmodified=true to list unchanged and skipped images separately.\n\n\n### Browse a snapshot\n\n```\nget_snapshot(organizationSlug=\"sentry\", snapshotId=\"231949\")\n```\n\n### Include unchanged and skipped images\n\n```\nget_snapshot(organizationSlug=\"sentry\", snapshotId=\"231949\", showUnmodified=true)\n```\n\n\n\n- Use the Sentry tool `get_snapshot_image` to view a specific image preview or full-resolution image bytes.\n- Use get_sentry_resource when starting from a Sentry snapshot URL.\n- The diff percent field shows what percentage of pixels changed (0-100).\n- showUnmodified=true is useful when a diff snapshot has no changed image sections.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"snapshotId": {
"type": "string",
"minLength": 1,
"description": "The numeric snapshot artifact ID."
},
"showUnmodified": {
"default": false,
"type": "boolean",
"description": "When true, include unchanged and skipped image sections. This can substantially increase response size and token usage for large snapshots."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug", "snapshotId"]
},
"requiredScopes": ["project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_snapshot_image",
"description": "Get metadata and image content for one image in a preprod snapshot.\n\nUse this tool when you need to:\n- View the current, previous, or diff image for a snapshot entry\n- Inspect metadata and context for a specific snapshot image\n- Fetch full-resolution image bytes when preview images are insufficient; full-resolution images can substantially increase response size and token usage\n\nPass organizationSlug, snapshotId, and imageIdentifier. Use get_sentry_resource for snapshot URLs.\nPreview images are returned by default; set imageResolution=full for original bytes when needed, but expect higher response size and token usage.\n\n\n### View a preview image\n\n```\nget_snapshot_image(organizationSlug=\"sentry\", snapshotId=\"231949\", imageIdentifier=\"login_screen.png\")\n```\n\n### Fetch original full-resolution bytes\n\n```\nget_snapshot_image(organizationSlug=\"sentry\", snapshotId=\"231949\", imageIdentifier=\"login_screen.png\", imageResolution=\"full\")\n```\n\n\n\n- Use get_snapshot first if you need to discover available image file names.\n- Use get_sentry_resource when starting from a Sentry snapshot URL.\n- imageIdentifier values may include slashes; pass the full image_file_name exactly as shown by get_snapshot.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"snapshotId": {
"type": "string",
"minLength": 1,
"description": "The numeric snapshot artifact ID."
},
"imageIdentifier": {
"type": "string",
"minLength": 1,
"description": "The snapshot image file name or identifier to fetch."
},
"imageResolution": {
"default": "preview",
"type": "string",
"enum": ["preview", "full"],
"description": "Return locally generated previews or original full-resolution bytes. Full-resolution images can substantially increase response size and token usage."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug", "snapshotId", "imageIdentifier"]
},
"requiredScopes": ["project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_span_details",
"description": "Get detailed information about a specific span within a Sentry trace.\n\nUse this tool when you need to:\n- Inspect a span when you already know its trace ID and span ID\n- Focus a trace investigation on one operation\n- Review a span's attributes, timing, errors, and child spans\n\n\nget_span_details(organizationSlug='my-organization', traceId='a4d1aae7216b47ff8117cf4e09ce9d0a', spanId='aa8e7f3384ef4ff5')\n\n\n\n- Pass traceId and spanId as separate parameters.\n- Use get_trace_details for a trace overview when no span is selected.\n- Use get_sentry_resource when starting from a Sentry trace or span URL.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"traceId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{32}$",
"description": "The trace ID. e.g. `a4d1aae7216b47ff8117cf4e09ce9d0a`"
},
"spanId": {
"type": "string",
"minLength": 1,
"description": "The span ID within a trace. Use this with a trace resource to focus on a specific span."
}
},
"required": ["organizationSlug", "traceId", "spanId"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_trace_details",
"description": "Get detailed information about a specific Sentry trace by ID.\n\nUSE THIS TOOL WHEN USERS:\n- Provide a specific trace ID (e.g., 'a4d1aae7216b47ff8117cf4e09ce9d0a')\n- Ask to 'show me trace [TRACE-ID]', 'explain trace [TRACE-ID]'\n- Want high-level overview and link to view trace details in Sentry\n- Need trace statistics and span breakdown\n- Want an overview first, then a guided pivot into additional spans or events\n\nDO NOT USE for:\n- General searching for traces (use search_traces)\n- Complete span enumeration or branch-by-branch reconstruction (use search_traces scoped to the trace)\n\nTRIGGER PATTERNS:\n- 'Show me trace abc123' → use get_trace_details\n- 'Explain trace a4d1aae7216b47ff8117cf4e09ce9d0a' → use get_trace_details\n- 'What is trace [trace-id]' → use get_trace_details\n\n\n### Get trace overview\n```\nget_trace_details(organizationSlug='my-organization', traceId='a4d1aae7216b47ff8117cf4e09ce9d0a')\n```\n\n### Focus a single span\n```\nget_trace_details(organizationSlug='my-organization', traceId='a4d1aae7216b47ff8117cf4e09ce9d0a', spanId='aa8e7f3384ef4ff5')\n```\n\n\n\n- Trace IDs are 32-character hexadecimal strings\n- This returns a condensed trace overview, not a full span dump\n- Provide `spanId` to focus on a single span within the trace\n- If the response says it shows a subset of spans, use search_traces to inspect the rest of the trace\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"traceId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{32}$",
"description": "The trace ID. e.g. `a4d1aae7216b47ff8117cf4e09ce9d0a`"
},
"spanId": {
"type": "string",
"minLength": 1,
"description": "The span ID within a trace. Use this with a trace resource to focus on a specific span."
}
},
"required": ["organizationSlug", "traceId"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "get_uptime_monitor_details",
"description": "Get details for a Sentry uptime monitor, including recent checks.\n\nUse this tool when you need to:\n- Inspect an uptime monitor's URL, interval, thresholds, and status\n- Review recent HTTP check results (success/failure, status code, duration)\n- Debug why an uptime monitor is failing\n\nThis is separate from cron monitors (`get_monitor_details`).\n\nRequest bodies are never returned. Sensitive header values are redacted.\n\n\nget_uptime_monitor_details(organizationSlug='my-organization', projectSlug='backend', uptimeMonitorId='12345')\nget_uptime_monitor_details(organizationSlug='my-organization', projectSlug='backend', uptimeMonitorId='12345', period='7d', checkLimit=20)\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"uptimeMonitorId": {
"type": "string",
"minLength": 1,
"description": "Uptime monitor ID (detector id)."
},
"period": {
"type": "string",
"pattern": "^\\d+[hdw]$",
"description": "Relative time range for recent checks. Defaults to `24h` when `start` and `end` are omitted."
},
"start": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Absolute start time. Must be provided with `end`; do not combine with `period`."
},
"end": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Absolute end time. Must be provided with `start`; do not combine with `period`."
},
"checkLimit": {
"default": 10,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50,
"description": "Maximum number of recent checks to include."
}
},
"required": ["organizationSlug", "projectSlug", "uptimeMonitorId"]
},
"requiredScopes": ["project:read"],
"skills": ["inspect"],
"surface": "catalog"
},
{
"name": "link_issue",
"description": "Link an existing external ticket or GitHub pull request to a Sentry issue by URL.\nSupports native Jira, GitHub/GitHub Enterprise, GitLab, Bitbucket, and Azure DevOps integrations, and installed Sentry Apps whose issue-link forms use single-value select or text fields.\nCreates a reference: it does not create a ticket, resolve the Sentry issue, or associate a commit. Use update_issue separately to change status or assignment.\nA repeated link returns already_linked. A different App association must be unlinked first.\nFor Apps, copy the canonical issue URL from the provider. Supply fields only when the installed App requires additional form values.\n\nlink_issue(organizationSlug='my-org', issueId='PROJECT-123', externalIssueUrl='https://github.com/example/repo/pull/42')\nlink_issue(issueUrl='https://my-org.sentry.io/issues/123/', externalIssueUrl='https://linear.app/example/issue/ENG-42/fix-crash')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"issueUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the issue. e.g. https://my-organization.sentry.io/issues/PROJECT-1Z43"
},
"externalIssueUrl": {
"type": "string",
"format": "uri",
"description": "URL of the existing external ticket or GitHub pull request. For Sentry Apps, use the canonical issue URL shown by the provider."
},
"integrationId": {
"description": "Native integration ID, only needed when multiple installations match the URL.",
"type": "string",
"pattern": "^\\d+$"
},
"appSlug": {
"description": "Installed Sentry App slug. Inferred for Linear and Shortcut URLs; specify it for other Apps.",
"type": "string",
"minLength": 1
},
"fields": {
"description": "Additional App form values by field name; required fields are reported when missing.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
}
},
"required": ["externalIssueUrl"]
},
"outputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string"
},
"issueId": {
"type": "string"
},
"issueUrl": {
"type": "string"
},
"externalIssue": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"displayName": {
"type": "string"
},
"provider": {
"type": "string"
}
},
"required": ["url"],
"additionalProperties": false
},
"status": {
"type": "string",
"enum": ["linked", "already_linked", "not_linked"]
}
},
"required": [
"organizationSlug",
"issueId",
"issueUrl",
"externalIssue",
"status"
],
"additionalProperties": false
},
"requiredScopes": ["event:write", "org:read"],
"skills": ["triage"],
"surface": "catalog"
},
{
"name": "onboarding_status_update",
"description": "Update the progress shown in Sentry's agentic onboarding UI.\n\nUse this tool only when the Sentry getting started skill provides a run token. Call it at the workflow boundaries described by that skill.\n\n\n- Progress updates are operational UI state, not user analytics.\n- Keep eventNote brief and limited to context useful in the progress UI.\n- Do not include source code, repository paths, credentials, error output, or other sensitive data.\n- status is required for every update.\n- Set runStatus to completed or failed only when the entire onboarding run reaches that state.\n- A failed status requires a brief eventNote explaining the failure.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"runToken": {
"type": "string",
"pattern": "^[A-Za-z0-9]{10}$",
"description": "The 10-character onboarding run token supplied by Sentry."
},
"update": {
"oneOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"active",
"waiting",
"completed",
"skipped",
"failed"
],
"description": "The stage's current status."
},
"runStatus": {
"description": "Set only when the entire onboarding run has completed or failed.",
"type": "string",
"enum": ["completed", "failed"]
},
"eventNote": {
"description": "Short context to display with this progress event. Required when status is failed.",
"type": "string",
"minLength": 1,
"maxLength": 256
},
"stage": {
"type": "string",
"const": "create_project",
"description": "Report progress while creating or selecting Sentry projects."
},
"extra": {
"description": "Project metadata accepted only by the create_project stage.",
"type": "object",
"properties": {
"projectSlugs": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Sentry project slugs created or selected during onboarding. Values accumulate across updates; include each project as it becomes usable while active, then all known projects when completed."
}
},
"required": ["projectSlugs"],
"additionalProperties": false
}
},
"required": ["status", "stage"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"active",
"waiting",
"completed",
"skipped",
"failed"
],
"description": "The stage's current status."
},
"runStatus": {
"description": "Set only when the entire onboarding run has completed or failed.",
"type": "string",
"enum": ["completed", "failed"]
},
"eventNote": {
"description": "Short context to display with this progress event. Required when status is failed.",
"type": "string",
"minLength": 1,
"maxLength": 256
},
"stage": {
"type": "string",
"const": "receive_verification_error",
"description": "Report progress while receiving the verification error in Sentry."
},
"extra": {
"description": "Issue metadata accepted only by the receive_verification_error stage.",
"type": "object",
"properties": {
"issueIds": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Sentry issue IDs observed after sending the verification error. Values accumulate across updates; include each matching issue as it is confirmed, then all known issues when completed."
}
},
"required": ["issueIds"],
"additionalProperties": false
}
},
"required": ["status", "stage"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"active",
"waiting",
"completed",
"skipped",
"failed"
],
"description": "The stage's current status."
},
"runStatus": {
"description": "Set only when the entire onboarding run has completed or failed.",
"type": "string",
"enum": ["completed", "failed"]
},
"eventNote": {
"description": "Short context to display with this progress event. Required when status is failed.",
"type": "string",
"minLength": 1,
"maxLength": 256
},
"stage": {
"type": "string",
"enum": [
"connect_mcp",
"analyze_project",
"instrument_app",
"plan_test_error",
"send_verification_error",
"prepare_production",
"check_stack_trace_quality"
],
"description": "Report progress for a stage that does not accept extra metadata."
}
},
"required": ["status", "stage"],
"additionalProperties": false
}
],
"description": "The stage-specific onboarding progress update."
}
},
"required": ["organizationSlug", "runToken", "update"]
},
"requiredScopes": ["org:read"],
"skills": ["inspect", "seer", "docs", "triage", "project-management"],
"surface": "catalog"
},
{
"name": "remove_team_from_project",
"description": "Revoke a team's access to an existing Sentry project.\n\nUse this tool when you need to:\n- Remove a team from a project\n- Revoke team access without changing project metadata\n- Check project team assignments before removing access\n\nBe careful when using this tool because it revokes project access.\n\n\nremove_team_from_project(organizationSlug='my-organization', projectSlug='my-project', teamSlug='my-team')\n\n\n\n- The team must already be assigned to the project.\n- This tool will not remove the last team assigned to a project.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"teamSlug": {
"type": "string",
"description": "The team's slug. You can find a list of existing teams in an organization with the Sentry tool `find_teams`."
}
},
"required": ["organizationSlug", "projectSlug", "teamSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"changed": {
"type": "boolean"
},
"teams": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": ["id", "slug", "name"],
"additionalProperties": false
}
}
},
"required": ["changed", "teams"],
"additionalProperties": false
},
"requiredScopes": ["project:write", "team:read", "org:read"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "search_agent_conversations",
"description": "Search Sentry Agent Conversations, formerly called AI Conversations, and return one summary row per conversation.\n\nUse this tool to find or list Agent Conversations. Results are conversation summaries, not raw span rows.\nEach row includes title (when available), USD cost, tokens, call counts, previews, and other list metadata.\nUse get_agent_conversation_details with a conversationId to fetch the transcript. Use get_sentry_resource for Sentry conversation URLs.\n\n\nsearch_agent_conversations(organizationSlug='my-org', query='failed conversations', period='7d')\nsearch_agent_conversations(organizationSlug='my-org', query='checkout', project='backend')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"query": {
"description": "Conversation query/filter string.",
"type": "string"
},
"project": {
"description": "Project slug or numeric project ID, or an array of projects.",
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
}
}
]
},
"environment": {
"description": "Environment name, or an array of environments.",
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
]
},
"period": {
"default": "30d",
"description": "Relative time range. Defaults to 30d.",
"type": "string",
"pattern": "^\\d+[hdw]$"
},
"start": {
"description": "Explicit start time for the search window.",
"type": "string"
},
"end": {
"description": "Explicit end time for the search window.",
"type": "string"
},
"cursor": {
"description": "Pagination cursor from a previous response.",
"type": "string"
},
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"regionUrl": {
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string"
},
"searchUrl": {
"type": "string",
"format": "uri"
},
"count": {
"type": "number"
},
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"conversations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"conversationId": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"format": "uri"
},
"startTimestamp": {
"type": "number"
},
"endTimestamp": {
"type": "number"
},
"durationMs": {
"type": "number"
},
"errors": {
"type": "number"
},
"aiCallCount": {
"type": "number"
},
"toolCallCount": {
"type": "number"
},
"toolErrorCount": {
"type": "number"
},
"totalTokens": {
"type": "number"
},
"totalCost": {
"type": "string"
},
"traceCount": {
"type": "number"
},
"sampleTraceIds": {
"type": "array",
"items": {
"type": "string"
}
},
"firstInputPreview": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"lastOutputPreview": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"flow": {
"type": "array",
"items": {
"type": "string"
}
},
"toolNames": {
"type": "array",
"items": {
"type": "string"
}
},
"user": {
"anyOf": [
{
"type": "object",
"properties": {
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"username": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["email", "username"],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"conversationId",
"title",
"url",
"startTimestamp",
"endTimestamp",
"durationMs",
"errors",
"aiCallCount",
"toolCallCount",
"toolErrorCount",
"totalTokens",
"totalCost",
"traceCount",
"sampleTraceIds",
"firstInputPreview",
"lastOutputPreview",
"flow",
"toolNames",
"user"
],
"additionalProperties": false
}
}
},
"required": [
"organizationSlug",
"searchUrl",
"count",
"nextCursor",
"conversations"
],
"additionalProperties": false
},
"requiredScopes": ["event:read", "project:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "catalog"
},
{
"name": "search_ai_conversations",
"description": "Deprecated alias for search_agent_conversations.\n\nUse search_agent_conversations for new integrations. This alias is kept for backward compatibility.",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"query": {
"description": "Conversation query/filter string.",
"type": "string"
},
"project": {
"description": "Project slug or numeric project ID, or an array of projects.",
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
}
}
]
},
"environment": {
"description": "Environment name, or an array of environments.",
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
]
},
"period": {
"default": "30d",
"description": "Relative time range. Defaults to 30d.",
"type": "string",
"pattern": "^\\d+[hdw]$"
},
"start": {
"description": "Explicit start time for the search window.",
"type": "string"
},
"end": {
"description": "Explicit end time for the search window.",
"type": "string"
},
"cursor": {
"description": "Pagination cursor from a previous response.",
"type": "string"
},
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"regionUrl": {
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
}
},
"required": ["organizationSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string"
},
"searchUrl": {
"type": "string",
"format": "uri"
},
"count": {
"type": "number"
},
"nextCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"conversations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"conversationId": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string",
"format": "uri"
},
"startTimestamp": {
"type": "number"
},
"endTimestamp": {
"type": "number"
},
"durationMs": {
"type": "number"
},
"errors": {
"type": "number"
},
"aiCallCount": {
"type": "number"
},
"toolCallCount": {
"type": "number"
},
"toolErrorCount": {
"type": "number"
},
"totalTokens": {
"type": "number"
},
"totalCost": {
"type": "string"
},
"traceCount": {
"type": "number"
},
"sampleTraceIds": {
"type": "array",
"items": {
"type": "string"
}
},
"firstInputPreview": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"lastOutputPreview": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"flow": {
"type": "array",
"items": {
"type": "string"
}
},
"toolNames": {
"type": "array",
"items": {
"type": "string"
}
},
"user": {
"anyOf": [
{
"type": "object",
"properties": {
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"username": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["email", "username"],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"conversationId",
"title",
"url",
"startTimestamp",
"endTimestamp",
"durationMs",
"errors",
"aiCallCount",
"toolCallCount",
"toolErrorCount",
"totalTokens",
"totalCost",
"traceCount",
"sampleTraceIds",
"firstInputPreview",
"lastOutputPreview",
"flow",
"toolNames",
"user"
],
"additionalProperties": false
}
}
},
"required": [
"organizationSlug",
"searchUrl",
"count",
"nextCursor",
"conversations"
],
"additionalProperties": false
},
"requiredScopes": ["event:read", "project:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "catalog"
},
{
"name": "search_docs",
"description": "Search Sentry documentation for SDK setup, instrumentation, and configuration guidance.\n\nUse this tool when you need to:\n- Set up Sentry SDK or framework integrations (Django, Flask, Express, Next.js, etc.)\n- Configure features like performance monitoring, error sampling, or release tracking\n- Implement custom instrumentation (spans, transactions, breadcrumbs)\n- Configure data scrubbing, filtering, or sampling rules\n\nReturns snippets only. Use the Sentry tool `get_doc` to fetch full documentation content.\n\n\n```\nsearch_docs(query='Django setup configuration SENTRY_DSN', guide='python/django')\nsearch_docs(query='source maps webpack upload', guide='javascript/nextjs')\n```\n\n\n\n- Use guide parameter to filter to specific technologies (e.g., 'javascript/nextjs')\n- Include specific feature names like 'beforeSend', 'tracesSampleRate', 'SENTRY_DSN'\n",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"maxLength": 200,
"description": "The search query in natural language. Be specific about what you're looking for."
},
"maxResults": {
"default": 3,
"description": "Maximum number of results to return (1-10)",
"type": "integer",
"minimum": 1,
"maximum": 10
},
"guide": {
"type": "string",
"enum": [
"javascript",
"python",
"java",
"dotnet",
"go",
"php",
"ruby",
"android",
"apple",
"unity",
"unreal",
"rust",
"elixir",
"kotlin",
"native",
"dart",
"godot",
"nintendo-switch",
"playstation",
"powershell",
"react-native",
"xbox",
"javascript/nextjs",
"javascript/react",
"javascript/gatsby",
"javascript/remix",
"javascript/vue",
"javascript/angular",
"javascript/hono",
"javascript/svelte",
"javascript/express",
"javascript/fastify",
"javascript/astro",
"javascript/bun",
"javascript/capacitor",
"javascript/cloudflare",
"javascript/connect",
"javascript/cordova",
"javascript/deno",
"javascript/electron",
"javascript/ember",
"javascript/nuxt",
"javascript/solid",
"javascript/solidstart",
"javascript/sveltekit",
"javascript/tanstack-react",
"javascript/wasm",
"javascript/node",
"javascript/koa",
"javascript/nestjs",
"javascript/hapi",
"python/django",
"python/flask",
"python/fastapi",
"python/celery",
"python/tornado",
"python/pyramid",
"python/aiohttp",
"python/anthropic",
"python/airflow",
"python/aws-lambda",
"python/boto3",
"python/bottle",
"python/chalice",
"python/dramatiq",
"python/falcon",
"python/langchain",
"python/litestar",
"python/logging",
"python/loguru",
"python/openai",
"python/quart",
"python/ray",
"python/redis",
"python/rq",
"python/sanic",
"python/sqlalchemy",
"python/starlette",
"dart/flutter",
"dotnet/aspnetcore",
"dotnet/maui",
"dotnet/wpf",
"dotnet/winforms",
"dotnet/aspnet",
"dotnet/aws-lambda",
"dotnet/azure-functions",
"dotnet/blazor-webassembly",
"dotnet/entityframework",
"dotnet/google-cloud-functions",
"dotnet/extensions-logging",
"dotnet/log4net",
"dotnet/nlog",
"dotnet/serilog",
"dotnet/uwp",
"dotnet/xamarin",
"java/spring",
"java/spring-boot",
"java/android",
"java/jul",
"java/log4j2",
"java/logback",
"java/servlet",
"go/echo",
"go/fasthttp",
"go/fiber",
"go/gin",
"go/http",
"go/iris",
"go/logrus",
"go/negroni",
"go/slog",
"go/zerolog",
"php/laravel",
"php/symfony",
"ruby/delayed_job",
"ruby/rack",
"ruby/rails",
"ruby/resque",
"ruby/sidekiq",
"android/kotlin",
"apple/ios",
"apple/macos",
"apple/watchos",
"apple/tvos",
"apple/visionos",
"kotlin/multiplatform"
],
"description": "Optional guide filter to limit search results to specific documentation sections. Use either a platform (e.g., 'javascript', 'python') or platform/guide combination (e.g., 'javascript/nextjs', 'python/django')."
}
},
"required": ["query"]
},
"requiredScopes": [],
"skills": ["inspect", "docs"],
"surface": "catalog"
},
{
"name": "search_errors",
"description": "Search Sentry error events: exceptions and crashes with stack traces. Use for error counts, statistics, trends, and individual error events.\n\n`query` is natural language (preferred) or Sentry search syntax; a configured agent translates it into query, fields, and sort.\n\nSupports aggregations ('how many errors today', 'top error types'), individual events ('latest TypeErrors in checkout'), and time series ('errors per hour last 24h').\n\nNOT for log messages, including error/warning logs (use search_logs), requests or latency (use search_traces), or grouped issue lists (use search_issues).\n\n\nsearch_errors(organizationSlug='my-org', query='how many errors today')\nsearch_errors(organizationSlug='my-org', query='most common error types in production this week')\nsearch_errors(organizationSlug='my-org', query='errors per hour last 24h')\n\n\n\n- name/otherName notation means /; parse it directly, don't call find_organizations/find_projects.\n- Natural language is usually enough. Only pass fields/sort when you need exact columns or ordering.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"query": {
"description": "What to find, in natural language (preferred) or Sentry search syntax. Include environment, release, or other filters here.",
"type": "string"
},
"fields": {
"description": "Fields to return. If not specified, uses sensible defaults. Include aggregate functions like count(), avg() for statistics.",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"sort": {
"description": "Sort field (prefix with - for descending). Defaults to -timestamp. Use -count() for aggregations.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"period": {
"type": "string",
"pattern": "^\\d+[hdw]$",
"description": "Relative time window, such as `24h`, `7d`, `14d`, `30d`, or `90d`. Controls which records fall within the search window."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"description": "Maximum number of results to return (1-100)",
"type": "number",
"minimum": 1,
"maximum": 100
},
"includeExplanation": {
"default": false,
"description": "Include explanation of how the query was translated or repaired",
"type": "boolean"
}
},
"required": ["organizationSlug"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "direct"
},
{
"name": "search_events",
"description": "Deprecated multi-dataset event search, kept for backward compatibility.\n\nUse search_errors, search_logs, search_traces, search_metrics, search_profiles, or search_replays for new integrations.",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"dataset": {
"description": "Initial dataset hint: errors, logs, spans, metrics, profiles, or replays. Always pass it, including for natural language queries. The agent may correct it when configured.",
"type": "string",
"enum": ["spans", "errors", "logs", "metrics", "profiles", "replays"]
},
"query": {
"description": "Natural language or Sentry event search query syntax.",
"type": "string"
},
"fields": {
"description": "Fields to return for event datasets. If not specified, uses sensible defaults. Include aggregate functions like count(), avg() for statistics. Leave null for dataset='replays'.",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"sort": {
"description": "Sort field (prefix with - for descending). If omitted, event datasets default to -timestamp and replays default to -started_at. Use -count() for event aggregations. For dataset='replays', use replay sorts like -started_at or -count_errors.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"environment": {
"description": "Optional environment filter for dataset='replays'. Use a string for one environment or an array for multiple. Omit when unused. For other datasets, filter environment in the query string instead.",
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
]
},
"period": {
"type": "string",
"pattern": "^\\d+[hdw]$",
"description": "Relative time window, such as `24h`, `7d`, `14d`, `30d`, or `90d`. Controls which records fall within the search window."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"description": "Maximum number of results to return (1-100)",
"type": "number",
"minimum": 1,
"maximum": 100
},
"includeExplanation": {
"default": false,
"description": "Include explanation of how the query was translated or repaired",
"type": "boolean"
}
},
"required": ["organizationSlug"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "catalog"
},
{
"name": "search_issue_events",
"description": "Search and filter events within a specific issue.\n\nProvide `query` as natural language or Sentry event search syntax. When an embedded agent is configured, it fixes filters, fields, sort, and time range before running.\n\nThe tool automatically constrains results to the specified issue.\n\nCommon Query Filters:\n- environment:production - Filter by environment\n- release:1.0.0 - Filter by release version\n- user.email:alice@example.com - Filter by user\n- trace:TRACE_ID - Filter by trace ID\n\nFor cross-issue searches use search_issues. For single issue or event details use get_sentry_resource.\n\n\nsearch_issue_events(issueId='MCP-41', organizationSlug='my-org', query='from last hour')\nsearch_issue_events(issueId='MCP-41', organizationSlug='my-org', query='environment:production')\nsearch_issue_events(issueUrl='https://sentry.io/.../issues/123/', query='release:v1.0.0', period='7d')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"default": null,
"description": "Organization slug. Required when using issueId. Not needed when using issueUrl.",
"anyOf": [
{
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"description": "Issue ID (e.g., 'MCP-41', 'PROJECT-123'). Requires organizationSlug. Alternatively, use issueUrl.",
"type": "string"
},
"issueUrl": {
"description": "Full Sentry issue URL (e.g., 'https://sentry.io/organizations/my-org/issues/123/'). Includes both organization and issue ID.",
"type": "string",
"format": "uri"
},
"query": {
"description": "Natural language or Sentry event search query syntax for filtering within the issue.",
"type": "string"
},
"sort": {
"description": "Sort field (prefix with - for descending). Default: -timestamp",
"type": "string"
},
"period": {
"type": "string",
"pattern": "^\\d+[hdw]$",
"description": "Relative time window, such as `24h`, `7d`, `14d`, `30d`, or `90d`. Controls which records fall within the search window."
},
"projectSlug": {
"default": null,
"description": "Project slug for better tag discovery. Optional - helps find project-specific tags.",
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"regionUrl": {
"default": null,
"description": "Sentry region URL. Optional - defaults to main region.",
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"limit": {
"default": 50,
"description": "Maximum number of events to return (1-100, default: 50)",
"type": "number",
"minimum": 1,
"maximum": 100
},
"includeExplanation": {
"default": false,
"description": "Include explanation of how the query was translated or repaired",
"type": "boolean"
}
}
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage"],
"surface": "catalog"
},
{
"name": "search_issues",
"description": "Search for grouped issues/problems in Sentry - returns a LIST of issues, NOT counts or aggregations.\n\nProvide `query` as natural language or Sentry issue search syntax. When an embedded agent is configured, it fixes query and sort before running while preserving explicit Sentry search syntax.\n\nReturns grouped issues with metadata like title, status, and user count.\n\nCommon Query Syntax:\n- is:unresolved / is:resolved / is:ignored / is:for_review / is:new / is:regressed / is:escalating\n- level:error / level:warning\n- firstSeen:-24h / lastSeen:-7d\n- assigned:me / assigned_or_suggested:me\n- release:latest\n- issue.category:feedback\n- issue.priority:high\n- environment:production\n- userCount:>100\n\nDO NOT USE FOR COUNTS/AGGREGATIONS → use search_errors\nDO NOT USE FOR individual events with timestamps → use search_errors, search_logs, or search_traces\nDO NOT USE FOR details about a specific issue → use get_sentry_resource\n\n\nsearch_issues(organizationSlug='my-org', query='critical bugs from last week')\nsearch_issues(organizationSlug='my-org', query='is:unresolved is:unassigned', sort='freq')\nsearch_issues(organizationSlug='my-org', query='level:error firstSeen:-24h', projectSlugOrId='my-project')\n\n\n\n- If the user passes a parameter in the form of name/otherName, it's likely in the format of /.\n- Parse org/project notation directly without calling find_organizations or find_projects.\n- The projectSlugOrId parameter accepts both project slugs (e.g., 'my-project') and numeric IDs (e.g., '123456').\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"query": {
"default": "is:unresolved",
"description": "Natural language or Sentry issue search query syntax.",
"type": "string"
},
"sort": {
"default": "date",
"description": "Sort order: date (last seen), freq (frequency), new (first seen), user (user count), recommended (Sentry's prioritized ranking)",
"type": "string",
"enum": ["date", "freq", "new", "user", "recommended"]
},
"projectSlugOrId": {
"default": null,
"description": "The project's slug or numeric ID (optional)",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"description": "Maximum number of issues to return (1-100)",
"type": "number",
"minimum": 1,
"maximum": 100
},
"period": {
"default": "30d",
"description": "Time window for issue search results. Controls which issues are returned based on when they had activity. Default 30d is a balance between coverage and query performance; use 24h for very recent issues or 90d for broader historical searches.",
"type": "string",
"enum": ["24h", "7d", "14d", "30d", "90d"]
},
"includeExplanation": {
"default": false,
"description": "Include explanation of how the query was translated or repaired",
"type": "boolean"
}
},
"required": ["organizationSlug"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "direct"
},
{
"name": "search_logs",
"description": "Search Sentry logs: application log entries, including error- and warning-severity log messages. Use for log counts, statistics, trends, and individual log lines.\n\n`query` is natural language (preferred) or Sentry search syntax; a configured agent translates it into query, fields, and sort.\n\nSupports aggregations ('warning logs by service'), individual entries ('error logs from the last hour'), and time series ('error logs per hour').\n\nNOT for exceptions/crashes (use search_errors). For requests or spans whose trace also has a matching log, use search_traces.\n\n\nsearch_logs(organizationSlug='my-org', query='error logs from the last hour')\nsearch_logs(organizationSlug='my-org', query='logs mentioning payment timeout in production')\nsearch_logs(organizationSlug='my-org', query='count warning logs by service over 7 days')\n\n\n\n- name/otherName notation means /; parse it directly, don't call find_organizations/find_projects.\n- Natural language is usually enough. Only pass fields/sort when you need exact columns or ordering.\n- Sentry search syntax for logs includes RE2 regex filters, never quoted: `message://^Timeout after \\d+ms//`.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"query": {
"description": "What to find, in natural language (preferred) or Sentry search syntax. Include environment, release, or other filters here.",
"type": "string"
},
"fields": {
"description": "Fields to return. If not specified, uses sensible defaults. Include aggregate functions like count(), avg() for statistics.",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"sort": {
"description": "Sort field (prefix with - for descending). Defaults to -timestamp. Use -count() for aggregations.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"period": {
"type": "string",
"pattern": "^\\d+[hdw]$",
"description": "Relative time window, such as `24h`, `7d`, `14d`, `30d`, or `90d`. Controls which records fall within the search window."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"description": "Maximum number of results to return (1-100)",
"type": "number",
"minimum": 1,
"maximum": 100
},
"includeExplanation": {
"default": false,
"description": "Include explanation of how the query was translated or repaired",
"type": "boolean"
}
},
"required": ["organizationSlug"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "direct"
},
{
"name": "search_metrics",
"description": "Search Sentry metrics: counters, gauges, and distributions, as rows or aggregates. Use for metric values, percentiles, totals, and trends.\n\n`query` is natural language (preferred) or Sentry search syntax; a configured agent translates it into query, fields, and sort.\n\nSupports aggregations ('p95 http.request.duration by environment'), individual metric rows, and time series ('total tokens per day this week').\n\nNOT for span or request latency recorded on traces (use search_traces).\n\n\nsearch_metrics(organizationSlug='my-org', query='p95 http.request.duration grouped by environment over the last 24 hours')\nsearch_metrics(organizationSlug='my-org', query='total tokens used per day this week')\n\n\n\n- name/otherName notation means /; parse it directly, don't call find_organizations/find_projects.\n- Natural language is usually enough. Only pass fields/sort when you need exact columns or ordering.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"query": {
"description": "What to find, in natural language (preferred) or Sentry search syntax. Include environment, release, or other filters here.",
"type": "string"
},
"fields": {
"description": "Fields to return. If not specified, uses sensible defaults. Include aggregate functions like count(), avg() for statistics.",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"sort": {
"description": "Sort field (prefix with - for descending). Defaults to -timestamp. Use -count() for aggregations.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"period": {
"type": "string",
"pattern": "^\\d+[hdw]$",
"description": "Relative time window, such as `24h`, `7d`, `14d`, `30d`, or `90d`. Controls which records fall within the search window."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"description": "Maximum number of results to return (1-100)",
"type": "number",
"minimum": 1,
"maximum": 100
},
"includeExplanation": {
"default": false,
"description": "Include explanation of how the query was translated or repaired",
"type": "boolean"
}
},
"required": ["organizationSlug"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "direct"
},
{
"name": "search_profiles",
"description": "Search Sentry profiles: transaction and continuous profile results, profile IDs, and profiled transactions. Use to find profiles to inspect.\n\n`query` is natural language (preferred) or Sentry search syntax; a configured agent translates it into query, fields, and sort.\n\nUse get_profile or get_profile_details on a result for flamegraph and hotspot analysis.\n\n\nsearch_profiles(organizationSlug='my-org', query='recent profiles for the /checkout transaction')\n\n\n\n- name/otherName notation means /; parse it directly, don't call find_organizations/find_projects.\n- Natural language is usually enough. Only pass fields/sort when you need exact columns or ordering.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"query": {
"description": "What to find, in natural language (preferred) or Sentry search syntax. Include environment, release, or other filters here.",
"type": "string"
},
"fields": {
"description": "Fields to return. If not specified, uses sensible defaults. Include aggregate functions like count(), avg() for statistics.",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"sort": {
"description": "Sort field (prefix with - for descending). Defaults to -timestamp. Use -count() for aggregations.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"period": {
"type": "string",
"pattern": "^\\d+[hdw]$",
"description": "Relative time window, such as `24h`, `7d`, `14d`, `30d`, or `90d`. Controls which records fall within the search window."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"description": "Maximum number of results to return (1-100)",
"type": "number",
"minimum": 1,
"maximum": 100
},
"includeExplanation": {
"default": false,
"description": "Include explanation of how the query was translated or repaired",
"type": "boolean"
}
},
"required": ["organizationSlug"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "direct"
},
{
"name": "search_replays",
"description": "Search Sentry session replays: rage clicks, dead clicks, visited pages, errors seen, and replay users.\n\n`query` is natural language (preferred) or replay search syntax; a configured agent translates it into a replay search.\n\nReturns replay lists only; count()/avg()/sum() are not supported. Use get_replay_details on a result for one replay.\n\n\nsearch_replays(organizationSlug='my-org', query='replays with rage clicks on checkout in the last day')\nsearch_replays(organizationSlug='my-org', query='count_errors:>0', sort='-count_errors')\n\n\n\n- name/otherName notation means /; parse it directly, don't call find_organizations/find_projects.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"query": {
"description": "What to find, in natural language (preferred) or replay search syntax.",
"type": "string"
},
"sort": {
"description": "Replay sort (prefix with - for descending): -started_at (default), -count_errors, -count_rage_clicks, or -duration.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"environment": {
"description": "Optional environment filter. Use a string for one environment or an array for multiple. Omit when unused.",
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
]
},
"period": {
"type": "string",
"pattern": "^\\d+[hdw]$",
"description": "Relative time window, such as `24h`, `7d`, `14d`, `30d`, or `90d`. Controls which records fall within the search window."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"description": "Maximum number of results to return (1-100)",
"type": "number",
"minimum": 1,
"maximum": 100
},
"includeExplanation": {
"default": false,
"description": "Include explanation of how the query was translated or repaired",
"type": "boolean"
}
},
"required": ["organizationSlug"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "direct"
},
{
"name": "search_sentry_tools",
"description": "Search the available Sentry MCP tool catalog by name and description.\n\nMany Sentry operations are intentionally not exposed as top-level tools. Use this for any Sentry-related task when you do not see an obvious direct tool, including long-tail inspection, project management, documentation lookup, preprod snapshots, attachments, DSNs, releases, teams, and issue-specific pivots.\n\nUse this tool when you need to:\n- Find the right Sentry operation for a task\n- Discover catalog tools and their schemas for a task\n- Inspect the executable JSON input schema for an available tool\n\n\nsearch_sentry_tools(query='list projects')\nsearch_sentry_tools(query='issue details')\nsearch_sentry_tools(query='find dsn', limit=5)\nsearch_sentry_tools(query='snapshot image')\n\n\n\n- Results only include tools available in the current session.\n- If a Sentry operation is not listed as a direct tool, search here before deciding it is unavailable.\n- Returned schemas already account for active organization, project, and region constraints.\n- Use the returned name and schema when executing a catalog result.\n- This tool returns structured JSON. Do not parse markdown from its text content.\n",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Natural language keywords describing the Sentry operation, resource, or workflow to find."
},
"limit": {
"default": 8,
"description": "Maximum number of matching tools to return, up to 20.",
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 20
},
{
"type": "null"
}
]
}
},
"required": ["query"]
},
"outputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string"
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"inputSchema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "JSON Schema for the matching tool's arguments. Session-constrained parameters are omitted."
},
"annotations": {
"type": "object",
"properties": {
"readOnlyHint": {
"type": "boolean"
},
"destructiveHint": {
"type": "boolean"
},
"idempotentHint": {
"type": "boolean"
},
"openWorldHint": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"required": ["name", "description", "inputSchema", "annotations"],
"additionalProperties": false
}
}
},
"required": ["query", "results"],
"additionalProperties": false
},
"requiredScopes": [],
"skills": ["inspect", "seer", "docs", "triage", "project-management"],
"surface": "direct"
},
{
"name": "search_traces",
"description": "Search Sentry spans and traces: requests, API/HTTP calls, endpoints, DB queries, AI/LLM calls, and other operations. Use for latency, throughput, slowness, and performance questions.\n\n`query` is natural language (preferred) or Sentry search syntax; a configured agent translates it into query, fields, and sort.\n\nAlso use for spans whose trace contains a matching log, metric, or other span, e.g. 'slow checkout requests that also logged an error'.\n\nSupports aggregations ('p95 duration by span.op'), individual spans ('slowest API calls today'), and time series ('requests per minute last hour').\n\nNOT for exceptions/crashes (use search_errors), standalone log lines (use search_logs), or a single trace's span tree (use get_sentry_resource with the trace).\n\n\nsearch_traces(organizationSlug='my-org', query='slowest API calls in the last 24 hours')\nsearch_traces(organizationSlug='my-org', query='p95 duration of db spans grouped by span.op over 7 days')\nsearch_traces(organizationSlug='my-org', query='checkout requests that also have an error log')\n\n\n\n- name/otherName notation means /; parse it directly, don't call find_organizations/find_projects.\n- Natural language is usually enough. Only pass fields/sort when you need exact columns or ordering.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"query": {
"description": "What to find, in natural language (preferred) or Sentry search syntax. Include environment, release, or other filters here.",
"type": "string"
},
"fields": {
"description": "Fields to return. If not specified, uses sensible defaults. Include aggregate functions like count(), avg() for statistics.",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"sort": {
"description": "Sort field (prefix with - for descending). Defaults to -timestamp. Use -count() for aggregations.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"projectSlug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"period": {
"type": "string",
"pattern": "^\\d+[hdw]$",
"description": "Relative time window, such as `24h`, `7d`, `14d`, `30d`, or `90d`. Controls which records fall within the search window."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"limit": {
"default": 10,
"description": "Maximum number of results to return (1-100)",
"type": "number",
"minimum": 1,
"maximum": 100
},
"includeExplanation": {
"default": false,
"description": "Include explanation of how the query was translated or repaired",
"type": "boolean"
}
},
"required": ["organizationSlug"]
},
"requiredScopes": ["event:read"],
"skills": ["inspect", "triage", "seer"],
"surface": "direct"
},
{
"name": "unlink_issue",
"description": "Remove an external ticket or GitHub pull request reference from a Sentry issue by URL.\nRemoves only the Sentry association. It does not delete the external ticket or the Sentry issue, or change resolution status.\nSupports native integrations and installed Sentry Apps. Repeating the request is safe: not_linked means the association is absent, whether removed by this call or already absent.\n\nunlink_issue(organizationSlug='my-org', issueId='PROJECT-123', externalIssueUrl='https://github.com/example/repo/issues/42')\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"issueUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the issue. e.g. https://my-organization.sentry.io/issues/PROJECT-1Z43"
},
"externalIssueUrl": {
"type": "string",
"format": "uri",
"description": "URL of the existing external ticket or GitHub pull request. For Sentry Apps, use the canonical issue URL shown by the provider."
},
"integrationId": {
"description": "Native integration ID, only needed when multiple installations match the URL.",
"type": "string",
"pattern": "^\\d+$"
},
"appSlug": {
"description": "Installed Sentry App slug. Inferred for Linear and Shortcut URLs; specify it for other Apps.",
"type": "string",
"minLength": 1
}
},
"required": ["externalIssueUrl"]
},
"outputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string"
},
"issueId": {
"type": "string"
},
"issueUrl": {
"type": "string"
},
"externalIssue": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"displayName": {
"type": "string"
},
"provider": {
"type": "string"
}
},
"required": ["url"],
"additionalProperties": false
},
"status": {
"type": "string",
"enum": ["linked", "already_linked", "not_linked"]
}
},
"required": [
"organizationSlug",
"issueId",
"issueUrl",
"externalIssue",
"status"
],
"additionalProperties": false
},
"requiredScopes": ["event:write", "org:read"],
"skills": ["triage"],
"surface": "catalog"
},
{
"name": "update_alert_rule",
"description": "Update a Sentry Alert (workflow), including notification actions and connections.\nUse get_alert_rule with kind='issue' first to inspect the complete triggers and actionFilters configuration.\nUse get_alert_options to discover notification actions, integrations, conditions, and available sources.\nOmit fields to leave them unchanged. Pass null to clear owner or environment.\ntriggers replaces the trigger conditions. actionFilters replaces ALL action groups: copy the complete configuration, retain existing IDs, and change only the intended values. Omitted groups, conditions, and actions are removed.\nFor Slack or Microsoft Teams, change config.targetDisplay to the channel name and use integrationId for the workspace or team. Sentry resolves the channel ID. Slack also accepts an explicit new targetIdentifier; a copied old ID is cleared when the name or workspace changes.\nOther actions use their provider's config and data. For Discord, PagerDuty, Opsgenie, and email, update targetIdentifier to the channel, service, team, or recipient ID; changing only its display name does not change the destination.\nUse addProjectSlugs/removeProjectSlugs to connect/disconnect a project's issue stream. Other monitors in that project remain connected. Use addDetectorIds/removeDetectorIds for individual monitors. Unmentioned connections are preserved.\nMetric Monitor detection queries and thresholds are separate operations.\nAll-project connections require Sentry's all-project feature and an API token with org:write in addition to alerts:write.\nA project-constrained session can only edit alerts affecting that project exclusively.\nRequires alerts:write; reconnect OAuth if the existing token lacks it.\n\nupdate_alert_rule(organizationSlug='my-org', ruleIdOrName='12345', status='disabled')\nupdate_alert_rule(organizationSlug='my-org', projectSlug='backend', ruleIdOrName='Notify backend team', frequencyMinutes=30)\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"anyOf": [
{
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
{
"type": "null"
}
]
},
"ruleIdOrName": {
"type": "string",
"minLength": 1,
"description": "Workflow ID or exact alert name. Digit-only values are treated as IDs. Use IDs from get_alert_rule(kind='issue')."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"status": {
"type": "string",
"enum": ["active", "disabled"]
},
"frequencyMinutes": {
"description": "Minimum interval between notifications, in minutes.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"environment": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"owner": {
"description": "Owner actor user:ID or team:ID. Pass null to clear.",
"anyOf": [
{
"type": "string",
"pattern": "^(user|team):\\d+$"
},
{
"type": "null"
}
]
},
"triggers": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"logicType": {
"type": "string",
"enum": ["all", "any", "any-short", "none"]
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"]
}
}
},
"required": ["logicType", "conditions"],
"description": "The complete trigger group. Preserve existing condition IDs when editing; omitted conditions are removed. Use the configuration returned by get_alert_rule."
},
"actionFilters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"logicType": {
"type": "string",
"enum": ["all", "any", "any-short", "none"]
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"]
}
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"integrationId": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "null"
}
]
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"config": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string"
}
},
"required": ["type", "data", "config"]
}
}
},
"required": ["logicType", "conditions", "actions"]
},
"description": "The complete list of action groups, conditions, and notification actions. Preserve their IDs and all unchanged groups and actions; omitted entries are removed. Slack and Microsoft Teams resolve config.targetDisplay as a channel name within integrationId. Other providers use their native config.targetIdentifier and data fields."
},
"addProjectSlugs": {
"description": "Projects whose existing issue streams should be connected.",
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
}
},
"removeProjectSlugs": {
"description": "Projects whose issue streams should be disconnected; other monitor connections are retained.",
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
}
},
"addDetectorIds": {
"description": "Existing detector IDs to connect, from get_alert_options(section='sources').",
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d+$"
}
},
"removeDetectorIds": {
"description": "Detector IDs to disconnect. Other connections are retained.",
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d+$"
}
}
},
"required": ["organizationSlug", "ruleIdOrName"]
},
"outputSchema": {
"type": "object",
"properties": {
"alertRule": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"config": {
"type": "object",
"properties": {
"frequency": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"additionalProperties": false
},
"environment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"triggers": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"logicType": {
"type": "string",
"enum": ["all", "any", "any-short", "none"]
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"],
"additionalProperties": false
}
}
},
"required": ["logicType", "conditions"],
"additionalProperties": false,
"description": "The complete trigger group. Preserve existing condition IDs when editing; omitted conditions are removed. Use the configuration returned by get_alert_rule."
},
{
"type": "null"
}
]
},
"actionFilters": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"logicType": {
"type": "string",
"enum": ["all", "any", "any-short", "none"]
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"],
"additionalProperties": false
}
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"integrationId": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
{
"type": "null"
}
]
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"config": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string"
}
},
"required": ["type", "data", "config"],
"additionalProperties": false
}
}
},
"required": ["logicType", "conditions", "actions"],
"additionalProperties": false
},
"description": "The complete list of action groups, conditions, and notification actions. Preserve their IDs and all unchanged groups and actions; omitted entries are removed. Slack and Microsoft Teams resolve config.targetDisplay as a channel name within integrationId. Other providers use their native config.targetIdentifier and data fields."
},
{
"type": "null"
}
]
},
"detectorIds": {
"type": "array",
"items": {
"type": "string"
}
},
"webUrl": {
"type": "string",
"format": "uri"
}
},
"required": ["id", "name", "detectorIds", "webUrl"],
"additionalProperties": false
}
},
"required": ["alertRule"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read", "alerts:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "update_dsn",
"description": "Update settings for an existing DSN (client key) in a project, such as name, active status, rate limit, and loader script options.\n\nUSE THIS TOOL WHEN:\n- Deactivating or activating a DSN/client key\n- Setting or removing DSN rate limits ('set rate limit of 1000 per hour on DSN X')\n- Renaming a DSN ('rename DSN X to Production')\n- Configuring Javascript SDK loader script options (session replay, performance, debug, feedback, etc.)\n\nBe careful when using this tool!\n\n\n### Rename DSN and set rate limit\n```\nupdate_dsn(organizationSlug='my-organization', projectSlug='my-project', keyId='d20df0a1ab5031c7f3c7edca9c02814d', name='Production Key', rateLimitWindow=3600, rateLimitCount=500)\n```\n\n### Deactivate a DSN\n```\nupdate_dsn(organizationSlug='my-organization', projectSlug='my-project', keyId='d20df0a1ab5031c7f3c7edca9c02814d', isActive=false)\n```\n\n### Disable rate limit entirely\n```\nupdate_dsn(organizationSlug='my-organization', projectSlug='my-project', keyId='d20df0a1ab5031c7f3c7edca9c02814d', disableRateLimit=true)\n```\n\n\n\n- Use `find_dsns()` first to find the `keyId` for the DSN you want to update.\n- Both `rateLimitWindow` (seconds) and `rateLimitCount` (error cap) must be provided together to set a rate limit.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"keyId": {
"type": "string",
"description": "The ID of the DSN (client key) to update. Use find_dsns() to retrieve this ID first."
},
"name": {
"type": "string",
"maxLength": 64,
"description": "The new name for the DSN."
},
"isActive": {
"type": "boolean",
"description": "Activate or deactivate the DSN."
},
"rateLimitWindow": {
"type": "integer",
"minimum": 0,
"maximum": 86400,
"description": "The time window in seconds for the rate limit."
},
"rateLimitCount": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "The maximum number of errors allowed within the rate limit window."
},
"disableRateLimit": {
"type": "boolean",
"description": "Set to true to disable the rate limit entirely (removes the cap)."
},
"browserSdkVersion": {
"type": "string",
"description": "The Sentry Javascript SDK version to use (e.g. 'latest', '7.x')."
},
"loaderHasReplay": {
"type": "boolean",
"description": "Configure Session Replay for the Javascript Loader Script."
},
"loaderHasPerformance": {
"type": "boolean",
"description": "Configure Performance Monitoring for the Javascript Loader Script."
},
"loaderHasDebug": {
"type": "boolean",
"description": "Configure Debug Bundles & Logging for the Javascript Loader Script."
},
"loaderHasFeedback": {
"type": "boolean",
"description": "Configure User Feedback for the Javascript Loader Script."
},
"loaderHasLogsAndMetrics": {
"type": "boolean",
"description": "Configure Logs and Metrics for the Javascript Loader Script (requires SDK >= 10.0.0)."
}
},
"required": ["organizationSlug", "projectSlug", "keyId"]
},
"requiredScopes": ["project:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "update_issue",
"description": "Update a Sentry issue's status or assignment.\n\nUse this to resolve, reopen, assign, unassign, or ignore an issue.\n\n\n```\nupdate_issue(organizationSlug='my-org', issueId='PROJECT-123', status='resolved')\nupdate_issue(organizationSlug='my-org', issueId='PROJECT-123', assignedTo='user:123456')\nupdate_issue(organizationSlug='my-org', issueId='PROJECT-123', assignedTo=null)\nupdate_issue(organizationSlug='my-org', issueId='PROJECT-123', status='ignored')\nupdate_issue(organizationSlug='my-org', issueId='PROJECT-123', status='ignored', ignoreMode='forever')\nupdate_issue(organizationSlug='my-org', issueId='PROJECT-123', status='ignored', ignoreMode='untilOccurrenceCount', ignoreCount=100, ignoreWindowMinutes=60)\nupdate_issue(organizationSlug='my-org', issueId='PROJECT-123', status='ignored', reason='Ignoring because this is expected noise from the staging deploy')\n```\n\n\n\n- Provide `issueUrl` or `organizationSlug` + `issueId`.\n- At least one of `status` or `assignedTo` is required.\n- Omit `assignedTo` to leave assignment unchanged. Pass `null` to unassign; otherwise use `user:ID` or `team:ID_OR_SLUG`.\n- Use `execute_sentry_tool(name='whoami', arguments={})` to find your user ID for self-assignment.\n- Status values: `resolved`, `resolvedInNextRelease`, `unresolved`, `ignored`.\n- `status='ignored'` defaults to `ignoreMode='untilEscalating'`.\n- Ignore modes: `untilEscalating`, `forever`, `forDuration`, `untilOccurrenceCount`, `untilUserCount`.\n- Matching ignore inputs are `ignoreDurationMinutes`, `ignoreCount` + optional `ignoreWindowMinutes`, or `ignoreUserCount` + optional `ignoreUserWindowMinutes`.\n- To switch an already ignored issue between `untilEscalating`, `forever`, and condition-based ignore modes, first set `status='unresolved'`, then ignore it again with the new rule.\n- `reason` is optional. When provided, it will be posted as a comment on the issue's activity feed explaining why the action was taken.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"issueId": {
"type": "string",
"description": "The Issue ID. e.g. `PROJECT-1Z43`"
},
"issueUrl": {
"type": "string",
"format": "uri",
"description": "The URL of the issue. e.g. https://my-organization.sentry.io/issues/PROJECT-1Z43"
},
"status": {
"type": "string",
"enum": [
"resolved",
"resolvedInNextRelease",
"unresolved",
"ignored"
],
"description": "The new status for the issue. Valid values are 'resolved', 'resolvedInNextRelease', 'unresolved', and 'ignored'."
},
"assignedTo": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"description": "The assignee in format 'user:ID' or 'team:ID_OR_SLUG' where ID is numeric. Pass null to unassign the issue. Example: 'user:123456', 'team:789', or 'team:my-team-slug'. Use `execute_sentry_tool(name='whoami', arguments={})` to find your user ID."
},
"ignoreMode": {
"type": "string",
"enum": [
"untilEscalating",
"forever",
"forDuration",
"untilOccurrenceCount",
"untilUserCount"
],
"description": "How ignored issues should behave. Use 'untilEscalating' to match the Sentry UI default, 'forever' for a permanent ignore, 'forDuration' with ignoreDurationMinutes, 'untilOccurrenceCount' with ignoreCount and optional ignoreWindowMinutes, or 'untilUserCount' with ignoreUserCount and optional ignoreUserWindowMinutes."
},
"ignoreDurationMinutes": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "How many minutes to ignore the issue when ignoreMode is 'forDuration'."
},
"ignoreCount": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "How many times the issue must occur before it stops being ignored when ignoreMode is 'untilOccurrenceCount'."
},
"ignoreWindowMinutes": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10080,
"description": "Optional time window in minutes for ignoreCount. If omitted, Sentry counts all future occurrences."
},
"ignoreUserCount": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "How many users must be affected before the issue stops being ignored when ignoreMode is 'untilUserCount'."
},
"ignoreUserWindowMinutes": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10080,
"description": "Optional time window in minutes for ignoreUserCount. If omitted, Sentry counts all future affected users."
},
"reason": {
"type": "string",
"minLength": 1,
"description": "Optional reason for taking this action. When provided, it will be posted as a comment on the issue's activity feed."
}
}
},
"requiredScopes": ["event:write"],
"skills": ["triage"],
"surface": "direct"
},
{
"name": "update_metric_monitor",
"description": "Update a Sentry Metric Monitor's query, detection conditions, metadata, status or connected Alerts.\nUse get_metric_monitor_details first and its native monitorId, not a legacy metric alert ID. projectSlug identifies scope; it does not move the monitor.\nOmit fields to preserve them. query and config accept partial changes. conditionGroup and workflowIds replace their complete configuration; preserve IDs and entries you want to retain.\nStatic, Percent and Dynamic detection are supported. Windows and comparison deltas are in seconds. Percent thresholds are absolute (110 means 10% higher), not percentage changes.\nDynamic changes may require sufficient historical data. Dataset access, query and window constraints are enforced by Sentry.\nworkflowIds connect existing Alerts, including shared Alerts, without editing their actions or other monitors. Use update_alert_rule for notification configuration.\nRequires alerts:write; reconnect OAuth if the existing token lacks it.\nupdate_metric_monitor(organizationSlug='my-org', monitorId='12345', status='disabled')\nupdate_metric_monitor(organizationSlug='my-org', monitorId='12345', query={query:'level:error', timeWindowSeconds:300})",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"monitorId": {
"type": "string",
"pattern": "^\\d+$",
"description": "Native Metric Monitor ID from find_metric_monitors."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": ["active", "disabled"]
},
"owner": {
"description": "Owner actor, e.g. team:123 or user:123. Pass null to clear.",
"anyOf": [
{
"type": "string",
"pattern": "^(user|team):\\d+$"
},
{
"type": "null"
}
]
},
"query": {
"description": "Partial query changes. Omitted fields are preserved; environment:null clears its filter. metrics is crash-free Releases; events_analytics_platform supports spans, logs and application metrics via eventTypes. Dataset changes must include compatible aggregate and eventTypes.",
"type": "object",
"properties": {
"dataset": {
"type": "string",
"enum": [
"events",
"transactions",
"generic_metrics",
"metrics",
"events_analytics_platform"
]
},
"query": {
"type": "string"
},
"aggregate": {
"type": "string",
"minLength": 1
},
"environment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"eventTypes": {
"type": "array",
"items": {
"type": "string"
}
},
"extrapolationMode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timeWindowSeconds": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
}
},
"config": {
"description": "Partial detection config. Percent mode requires comparisonDeltaSeconds. Selecting Static or Dynamic clears the comparison delta. Changing detectionType also requires compatible conditionGroup.",
"type": "object",
"properties": {
"detectionType": {
"type": "string",
"enum": ["static", "percent", "dynamic"]
},
"comparisonDeltaSeconds": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
}
},
"conditionGroup": {
"description": "Replaces ALL detection conditions; preserve existing IDs. Static/Percent use numeric comparisons, results 75 critical, 50 warning, 0 resolved, including a resolution condition. Percent 110 means 10% higher. Dynamic uses anomaly_detection with sensitivity, seasonality:auto and thresholdType 0 above, 1 below, 2 both.",
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"logicType": {
"type": "string"
},
"conditions": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string",
"enum": ["gt", "lt", "gte", "lte"]
},
"comparison": {
"type": "number"
},
"conditionResult": {
"anyOf": [
{
"type": "number",
"const": 75
},
{
"type": "number",
"const": 50
},
{
"type": "number",
"const": 0
}
]
}
},
"required": ["type", "comparison", "conditionResult"]
},
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string",
"const": "anomaly_detection"
},
"comparison": {
"type": "object",
"properties": {
"sensitivity": {
"type": "string",
"enum": ["low", "medium", "high"]
},
"seasonality": {
"type": "string",
"const": "auto"
},
"thresholdType": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
}
]
}
},
"required": [
"sensitivity",
"seasonality",
"thresholdType"
]
},
"conditionResult": {
"anyOf": [
{
"type": "number",
"const": 75
},
{
"type": "number",
"const": 50
}
]
}
},
"required": ["type", "comparison", "conditionResult"]
}
]
}
}
},
"required": ["logicType", "conditions"]
},
"workflowIds": {
"description": "Replaces this monitor's Alert connections. Copy all IDs to retain from get_metric_monitor_details; [] disconnects all. Does not edit the Alerts themselves.",
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d+$"
}
}
},
"required": ["organizationSlug", "monitorId"]
},
"outputSchema": {
"type": "object",
"properties": {
"monitor": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"projectId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"type": "boolean"
},
"owner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workflowIds": {
"type": "array",
"items": {
"type": "string"
}
},
"webUrl": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config": {
"type": "object",
"properties": {
"detectionType": {
"type": "string"
},
"comparisonDeltaSeconds": {
"type": "number"
}
},
"required": ["detectionType"],
"additionalProperties": false
},
"conditionGroup": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"logicType": {
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"type": {
"type": "string"
},
"comparison": {},
"conditionResult": {}
},
"required": ["type", "comparison", "conditionResult"],
"additionalProperties": false
}
}
},
"required": ["logicType", "conditions"],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Native detection conditions, including resolution. Results: 75 critical, 50 warning, 0 resolved. Percent comparisons are absolute percentages (110 means 10% higher). Dynamic comparisons contain sensitivity, seasonality and thresholdType."
},
"dataSources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"query": {
"type": "object",
"properties": {
"dataset": {
"type": "string"
},
"query": {
"type": "string"
},
"aggregate": {
"type": "string"
},
"environment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"eventTypes": {
"type": "array",
"items": {
"type": "string"
}
},
"extrapolationMode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timeWindowSeconds": {
"type": "number"
}
},
"required": [
"dataset",
"query",
"aggregate",
"environment",
"eventTypes",
"timeWindowSeconds"
],
"additionalProperties": false
},
"unavailableReason": {
"type": "string"
}
},
"required": ["type"],
"additionalProperties": false
}
},
"dateCreated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dateUpdated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"projectId",
"enabled",
"owner",
"workflowIds",
"webUrl",
"description",
"config",
"conditionGroup",
"dataSources",
"dateCreated",
"dateUpdated"
],
"additionalProperties": false
}
},
"required": ["monitor"],
"additionalProperties": false
},
"requiredScopes": ["org:read", "project:read", "alerts:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "update_project",
"description": "Update project metadata in Sentry, such as name, slug, and platform.\n\nBe careful when using this tool!\n\nUse this tool when you need to:\n- Update a project's name or slug to fix onboarding mistakes\n- Change the platform assigned to a project\n\n\n### Update a project's name and slug\n\n```\nupdate_project(organizationSlug='my-organization', projectSlug='old-project', name='New Project Name', slug='new-project-slug')\n```\n\n### Update platform\n\n```\nupdate_project(organizationSlug='my-organization', projectSlug='my-project', platform='python')\n```\n\n\n\n\n- If the user passes a parameter in the form of name/otherName, it's likely in the format of /.\n- Team access changes are handled by separate project-management tools.\n- If any parameter is ambiguous, you should clarify with the user what they meant.\n- When updating the slug, the project will be accessible at the new slug after the update\n- Do not update the slug from a project-scoped session; reconnect with an organization-scoped or unconstrained session first.\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"name": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The new name for the project"
},
{
"type": "null"
}
]
},
"slug": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The new slug for the project (must be unique)"
},
{
"type": "null"
}
]
},
"platform": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The platform for the project. e.g., python, javascript, react, etc."
},
{
"type": "null"
}
]
}
},
"required": ["organizationSlug", "projectSlug"]
},
"outputSchema": {
"type": "object",
"properties": {
"project": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"platform": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["id", "slug", "name", "platform"],
"additionalProperties": false
}
},
"required": ["project"],
"additionalProperties": false
},
"requiredScopes": ["project:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "update_uptime_monitor",
"description": "Update a Sentry HTTP uptime monitor.\n\nUse this tool when you need to:\n- Change URL, interval, timeout, method, headers, or body\n- Enable or disable a monitor (`status`)\n- Update owner, environment, or failure thresholds\n\nBe careful when using this tool!\n\nOmit a field to leave it unchanged. Pass explicit `null` to clear `owner`, `environment`, or `body`.\n\n\nupdate_uptime_monitor(organizationSlug='my-organization', projectSlug='backend', uptimeMonitorId='12345', status='disabled')\nupdate_uptime_monitor(organizationSlug='my-organization', projectSlug='backend', uptimeMonitorId='12345', intervalSeconds=300, timeoutMs=8000)\nupdate_uptime_monitor(organizationSlug='my-organization', projectSlug='backend', uptimeMonitorId='12345', owner=null)\n",
"inputSchema": {
"type": "object",
"properties": {
"organizationSlug": {
"type": "string",
"description": "The organization's slug. You can find a existing list of organizations you have access to using the `find_organizations()` tool."
},
"regionUrl": {
"default": null,
"anyOf": [
{
"type": "string",
"description": "The region URL for the organization you're querying, if known. For Sentry's Cloud Service (sentry.io), this is typically the region-specific URL like 'https://us.sentry.io'. For self-hosted Sentry installations, this parameter is usually not needed and should be omitted. You can find the correct regionUrl from the organization details using the `find_organizations()` tool."
},
{
"type": "null"
}
]
},
"projectSlug": {
"type": "string",
"description": "The project's slug. You can find a list of existing projects in an organization using the `find_projects()` tool."
},
"uptimeMonitorId": {
"type": "string",
"minLength": 1,
"description": "Uptime monitor ID (detector id)."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"url": {
"type": "string",
"format": "uri"
},
"intervalSeconds": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Seconds between checks. Allowed values: 60, 300, 600, 1200, 1800, 3600."
},
"timeoutMs": {
"type": "integer",
"minimum": 1000,
"maximum": 60000,
"description": "Request timeout in milliseconds (1000-60000)."
},
"method": {
"type": "string",
"enum": ["GET", "POST", "HEAD", "PUT", "DELETE", "PATCH", "OPTIONS"],
"description": "HTTP method used for the uptime check request."
},
"headers": {
"type": "array",
"items": {
"type": "array",
"items": [
{
"type": "string"
},
{
"type": "string"
}
]
},
"description": "Optional HTTP headers as an array of [name, value] pairs, e.g. [[\"Accept\",\"application/json\"]]."
},
"body": {
"description": "Request body. Pass `null` to clear the body.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": ["active", "disabled"],
"description": "Monitor status. `disabled` stops checks and does not count against quota."
},
"owner": {
"description": "Owner actor in `user:ID` or `team:ID` format. Pass `null` to clear the owner.",
"anyOf": [
{
"type": "string",
"minLength": 1,
"pattern": "^(user|team):.+$",
"description": "Owner actor in `user:ID` or `team:ID` format."
},
{
"type": "null"
}
]
},
"environment": {
"description": "Environment name. Pass `null` to clear the environment.",
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "null"
}
]
},
"traceSampling": {
"type": "boolean"
},
"responseCaptureEnabled": {
"type": "boolean"
},
"recoveryThreshold": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"downtimeThreshold": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"required": ["organizationSlug", "projectSlug", "uptimeMonitorId"]
},
"outputSchema": {
"type": "object",
"properties": {
"monitor": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"projectSlug": {
"type": "string"
},
"status": {
"type": "string"
},
"uptimeStatus": {
"type": "string",
"enum": ["ok", "failed", "unknown"]
},
"url": {
"type": "string"
},
"method": {
"type": "string"
},
"intervalSeconds": {
"type": "number"
},
"environment": {
"type": "string"
},
"owner": {
"type": "string"
},
"webUrl": {
"type": "string",
"format": "uri"
},
"timeoutMs": {
"type": "number"
},
"recoveryThreshold": {
"type": "number"
},
"downtimeThreshold": {
"type": "number"
},
"traceSampling": {
"type": "boolean"
},
"responseCaptureEnabled": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"projectSlug",
"status",
"uptimeStatus",
"url",
"intervalSeconds",
"webUrl",
"timeoutMs"
],
"additionalProperties": false
}
},
"required": ["monitor"],
"additionalProperties": false
},
"requiredScopes": ["project:write"],
"skills": ["project-management"],
"surface": "catalog"
},
{
"name": "whoami",
"description": "Identify the authenticated user in Sentry.\n\nUse this tool when you need to:\n- Get the user's name and email address.",
"inputSchema": {},
"outputSchema": {
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"email": {
"type": "string"
}
},
"required": ["id", "name", "email"],
"additionalProperties": false
},
"sessionConstraints": {
"anyOf": [
{
"type": "object",
"properties": {
"organizationSlug": {
"type": "string"
},
"projectSlug": {
"type": "string"
},
"regionUrl": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": ["user", "sessionConstraints"],
"additionalProperties": false
},
"requiredScopes": [],
"skills": ["inspect", "seer", "docs", "triage", "project-management"],
"surface": "catalog"
}
]