Skip to main content
Glama
Pyda-AI

Sentry MCP Server

by Pyda-AI

Sentry MCP Server

A stateless FastMCP server for Sentry API integration, supporting multiple Sentry instances (US, EU, self-hosted) with a single deployment.

Architecture

┌─────────────────────────────────────────────────────────────┐ │ Customer VPC │ │ │ │ ┌──────────────┐ ┌─────────────────────────────┐ │ │ │ Satellite │ ──MCP──▶│ Sentry MCP Server │ │ │ └──────────────┘ │ ┌─────────┐ ┌─────────┐ │ │ │ │ │sentryUS │ │sentryEU │ │ │ │ │ └────┬────┘ └────┬────┘ │ │ │ └───────┼───────────┼─────────┘ │ └───────────────────────────────────┼───────────┼─────────────┘ │ │ ▼ ▼ sentry.io de.sentry.io (US) (EU)

Features

  • Multi-instance support: Configure multiple Sentry accounts (US, EU, self-hosted)

  • Base tools + instance parameter: 11 tools that work across all instances

  • Stateless HTTP: Scales horizontally, no session state

  • Secure: Auth tokens stored in K8s secrets, never exposed to Claude

Tools

Tool

Description

list_sentry_instances

Discovery - list all configured Sentry accounts

find_organizations

List organizations accessible with the token

find_teams

List teams in an organization

find_projects

List projects in an organization

find_releases

List releases in an org/project

get_issue_details

Get detailed info about a specific issue

search_issues

Search for grouped issues in a project

search_issue_events

Search events within a specific issue

search_events

Search events and perform aggregations

get_trace_details

Get trace overview and span breakdown

get_event_attachment

Download attachments from an event

Quick Start

1. Create Internal Integration in Sentry

For each Sentry organization you want to connect:

  1. Go to Settings → Developer Settings → Internal Integrations

    • US: https://sentry.io/settings/{org}/developer-settings/

    • EU: https://de.sentry.io/settings/{org}/developer-settings/

  2. Click Create New Internal Integration

  3. Configure:

    • Name: Deeptrace MCP

    • Scopes (read-only):

      • org:read

      • project:read

      • event:read

      • team:read

      • member:read

  4. Click Save and copy the generated token (starts with sntrys_...)

2. Create Kubernetes Secrets

# US Sentry kubectl create secret generic sentry-us-creds \ --from-literal=auth_token="sntrys_eyJ..." \ -n deeptrace # EU Sentry kubectl create secret generic sentry-eu-creds \ --from-literal=auth_token="sntrys_eyJ..." \ -n deeptrace

3. Deploy with Helm

Create a values.yaml:

instances: sentryUS: enabled: true region: "us" orgSlug: "your-org-slug" secretName: "sentry-us-creds" labels: dataResidency: "US" description: "US customer data and services" sentryEU: enabled: true region: "eu" orgSlug: "your-org-slug-eu" secretName: "sentry-eu-creds" labels: dataResidency: "EU" description: "EU customer data (GDPR)"

Install:

helm install sentry-mcp ./helm/sentry-mcp \ -f values.yaml \ -n deeptrace

4. Configure Satellite

Add to your satellite's values.yaml:

mcpServers: sentryMCP: create: true type: mcp connection: url: "http://sentry-mcp.deeptrace:8080/mcp" transport: "streamable_http" stateless: true auditLogging: true domainAllowlist: - "sentry-mcp.deeptrace"

Configuration Reference

Instance Configuration

Field

Required

Description

enabled

No

Enable/disable instance (default: true)

region

Yes

us, eu, or custom

orgSlug

Yes

Sentry organization slug

baseUrl

For custom

Full URL for self-hosted Sentry

secretName

Yes

K8s secret name with auth_token key

labels.dataResidency

No

Data residency label (e.g., "US", "EU")

labels.description

No

Human-readable description

labels.team

No

Team that owns this instance

labels.environment

No

Environment (production, staging)

Self-Hosted Example

instances: sentrySelfHosted: enabled: true region: "custom" baseUrl: "https://sentry.internal.company.com" orgSlug: "internal" secretName: "sentry-internal-creds" labels: dataResidency: "On-Premise" description: "Self-hosted Sentry for internal services"

How It Works

Claude's Workflow

  1. Discovery: Claude calls list_sentry_instances() to see available Sentry accounts

  2. Query: Claude uses the instance name when calling other tools

  3. Multi-region: Claude queries both instances when context is ambiguous

Example conversation:

User: "Find unresolved errors in the Platform team's Sentry" Claude: I'll check the available Sentry instances first. → list_sentry_instances() → Returns: [sentryUS (US), sentryEU (EU)] Claude: The Platform team uses the EU instance based on the labels. → search_issues(instance="sentryEU", query="is:unresolved level:error") → "Found 5 unresolved errors in the EU Sentry..."

Why Internal Integration?

Auth Type

Tied To

Multi-Org?

Best For

Personal Token

User

Yes (user's orgs)

Personal scripts

Internal Integration

Organization

No (single org)

Automated systems

Public Integration

OAuth

Yes (via OAuth)

Third-party SaaS

Internal Integration is correct because:

  • Not tied to a person - survives employee departures

  • Organization-scoped - clear access boundaries

  • No OAuth complexity - simple bearer token

  • Fine-grained scopes - request only what you need

Development

Local Setup

# Create virtual environment python -m venv venv source venv/bin/activate # Install dependencies pip install -e ".[dev]" # Create local config mkdir -p /tmp/sentry-mcp cat > /tmp/sentry-mcp/config.yaml << EOF instances: sentryUS: enabled: true region: us orgSlug: your-org EOF # Create local secret mkdir -p /tmp/secrets/sentryUS echo "sntrys_your_token" > /tmp/secrets/sentryUS/auth_token # Run server SENTRY_MCP_CONFIG=/tmp/sentry-mcp/config.yaml \ SENTRY_MCP_SECRETS=/tmp/secrets \ python -m sentry_mcp

Building Docker Image

docker build -t deeptrace/sentry-mcp:latest .

Running Tests

pytest

Troubleshooting

"Unknown Sentry instance" Error

The instance name in your tool call doesn't match any configured instance.

  1. Check list_sentry_instances() output

  2. Verify the instance is enabled in config

  3. Ensure the K8s secret exists and has auth_token key

"No auth token configured" Error

The secret for the instance wasn't found or is empty.

  1. Verify secret exists: kubectl get secret <secretName> -n deeptrace

  2. Check secret has auth_token key: kubectl get secret <secretName> -o yaml

  3. Ensure secret is mounted correctly in deployment

API Rate Limiting

Sentry has rate limits. If you hit them:

  1. Reduce limit parameter in search queries

  2. Add delays between bulk operations

  3. Consider caching frequently-accessed data

License

MIT

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Pyda-AI/sentry-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server