sentry-debug-bundle
Execute collect debug information for Sentry support tickets. Use when preparing support requests, debugging complex issues, or gathering diagnostic information. Trigger with phrases like "sentry debug info", "sentry support ticket", "gather sentry diagnostics", "sentry debug bundle".
Install
mkdir -p .claude/skills/sentry-debug-bundle && curl -L -o skill.zip "https://mcp.directory/api/skills/download/7853" && unzip -o skill.zip -d .claude/skills/sentry-debug-bundle && rm skill.zipInstalls to .claude/skills/sentry-debug-bundle
About this skill
Sentry Debug Bundle
Overview
Collect SDK versions, configuration state, network connectivity, and event delivery status into a single diagnostic report. Attach the output to Sentry support tickets or use it to systematically isolate why events are not reaching the dashboard.
Current State
!node --version 2>/dev/null || echo 'Node.js not found'
!python3 --version 2>/dev/null || echo 'Python3 not found'
!npm list @sentry/node @sentry/browser @sentry/react @sentry/cli 2>/dev/null | grep sentry || pip show sentry-sdk 2>/dev/null | grep -E '^(Name|Version)' || echo 'No Sentry SDK found'
!sentry-cli --version 2>/dev/null || echo 'sentry-cli not installed'
!sentry-cli info 2>/dev/null || echo 'sentry-cli not authenticated'
Prerequisites
- At least one Sentry SDK installed (
@sentry/node,@sentry/browser,@sentry/react, orsentry-sdkfor Python) SENTRY_DSNenvironment variable set (or DSN configured in application code)- For API checks:
SENTRY_AUTH_TOKENwithproject:readscope (generate token) - Optional:
sentry-cliinstalled for source map diagnostics andsend-eventtests
Instructions
Step 1 — Gather SDK Version, Configuration, and Init Hooks
Identify the installed SDK, verify all @sentry/* packages share the same version (mismatches cause silent failures), and extract the runtime configuration.
Check installed packages:
# Node.js — list all Sentry packages and flag version mismatches
npm ls @sentry/node @sentry/browser @sentry/react @sentry/nextjs @sentry/cli 2>/dev/null | grep sentry
# Python — show sentry-sdk version and installed extras
pip show sentry-sdk 2>/dev/null
Extract runtime configuration (Node.js):
import * as Sentry from '@sentry/node';
const client = Sentry.getClient();
if (!client) {
console.error('ERROR: Sentry client not initialized — Sentry.init() may not have been called');
process.exit(1);
}
const opts = client.getOptions();
const diagnostics = {
sdk_version: Sentry.SDK_VERSION,
dsn_configured: !!opts.dsn,
dsn_host: opts.dsn ? new URL(opts.dsn).hostname : 'N/A',
dsn_project_id: opts.dsn ? new URL(opts.dsn).pathname.replace('/', '') : 'N/A',
environment: opts.environment ?? '(default)',
release: opts.release ?? '(auto-detect)',
debug: opts.debug ?? false,
sample_rate: opts.sampleRate ?? 1.0,
traces_sample_rate: opts.tracesSampleRate ?? '(not set)',
profiles_sample_rate: opts.profilesSampleRate ?? '(not set)',
send_default_pii: opts.sendDefaultPii ?? false,
max_breadcrumbs: opts.maxBreadcrumbs ?? 100,
before_send: typeof opts.beforeSend === 'function' ? 'CONFIGURED' : 'none',
before_send_transaction: typeof opts.beforeSendTransaction === 'function' ? 'CONFIGURED' : 'none',
before_breadcrumb: typeof opts.beforeBreadcrumb === 'function' ? 'CONFIGURED' : 'none',
integrations: client.getOptions().integrations?.map(i => i.name) ?? [],
transport: opts.transport ? 'custom' : 'default',
};
console.log(JSON.stringify(diagnostics, null, 2));
Extract runtime configuration (Python):
import sentry_sdk
from sentry_sdk import Hub
client = Hub.current.client
if not client:
print("ERROR: Sentry client not initialized")
exit(1)
opts = client.options
print(f"SDK version: {sentry_sdk.VERSION}")
print(f"DSN configured: {bool(opts.get('dsn'))}")
print(f"Environment: {opts.get('environment', '(default)')}")
print(f"Release: {opts.get('release', '(auto-detect)')}")
print(f"Debug: {opts.get('debug', False)}")
print(f"Sample rate: {opts.get('sample_rate', 1.0)}")
print(f"Traces sample rate:{opts.get('traces_sample_rate', '(not set)')}")
print(f"Send default PII: {opts.get('send_default_pii', False)}")
print(f"before_send: {'CONFIGURED' if opts.get('before_send') else 'none'}")
print(f"before_breadcrumb: {'CONFIGURED' if opts.get('before_breadcrumb') else 'none'}")
print(f"Integrations: {[i.identifier for i in client.integrations.values()]}")
Key check: If
beforeSendis CONFIGURED, inspect the function — abeforeSendthat returnsnullwill silently drop every event.
Step 2 — Verify DSN Connectivity and Sentry Service Status
Confirm the application can reach Sentry's ingest endpoint and that Sentry itself is operational.
Test DSN reachability:
# Test the Sentry API root (should return HTTP 200)
curl -s -o /dev/null -w "sentry.io API: HTTP %{http_code} (%{time_total}s)\n" \
https://sentry.io/api/0/
# Test the ingest endpoint derived from your DSN
# DSN format: https://<PUBLIC_KEY>@o<ORG_ID>.ingest.sentry.io/<PROJECT_ID>
# Extract host from DSN and test the envelope endpoint
curl -s -o /dev/null -w "Ingest endpoint: HTTP %{http_code} (%{time_total}s)\n" \
"https://o0.ingest.sentry.io/api/0/envelope/"
# DNS resolution check
dig +short o0.ingest.sentry.io 2>/dev/null || nslookup o0.ingest.sentry.io
# Check for proxy/firewall interference
curl -v https://sentry.io/api/0/ 2>&1 | grep -iE 'proxy|blocked|forbidden|connect'
Check Sentry service status:
Visit https://status.sentry.io or:
# Programmatic status check
curl -s https://status.sentry.io/api/v2/status.json | python3 -c "
import sys, json
d = json.load(sys.stdin)
print(f\"Sentry Status: {d['status']['description']}\")
print(f\"Updated: {d['page']['updated_at']}\")
"
Verify auth token and project access (requires SENTRY_AUTH_TOKEN):
# Check token validity and list accessible projects
curl -s -H "Authorization: Bearer $SENTRY_AUTH_TOKEN" \
https://sentry.io/api/0/projects/ | python3 -c "
import sys, json
projects = json.load(sys.stdin)
if isinstance(projects, dict) and 'detail' in projects:
print(f'Auth error: {projects[\"detail\"]}')
else:
for p in projects[:10]:
print(f\" {p['organization']['slug']}/{p['slug']} (platform: {p.get('platform', 'N/A')})\")"
# sentry-cli auth check
sentry-cli info 2>/dev/null || echo "sentry-cli not authenticated — run: sentry-cli login"
Step 3 — Test Event Capture, Verify Delivery, and Generate Report
Send a diagnostic test event, confirm it arrives in Sentry, and produce the final debug bundle report.
Send test event via sentry-cli:
# Quick test — sends a test message event
sentry-cli send-event -m "diagnostic test from debug-bundle $(date -u +%Y-%m-%dT%H:%M:%SZ)"
Send test event programmatically (Node.js):
import * as Sentry from '@sentry/node';
Sentry.init({
dsn: process.env.SENTRY_DSN,
debug: true, // Enables console logging of SDK internals
});
const eventId = Sentry.captureMessage('sentry-debug-bundle diagnostic test', 'info');
console.log(`Test event ID: ${eventId}`);
console.log(`View at: https://sentry.io/organizations/YOUR_ORG/issues/?query=${eventId}`);
// CRITICAL: Node.js will exit before async transport completes without flush
const flushed = await Sentry.flush(10000);
console.log(`Flush: ${flushed ? 'SUCCESS — event delivered' : 'TIMEOUT — event may not have been sent'}`);
if (!flushed) {
console.error('Flush timeout. Possible causes:');
console.error(' - Network blocking outbound HTTPS to sentry.io');
console.error(' - DSN is invalid or project has been deleted');
console.error(' - Rate limit exceeded (HTTP 429)');
}
Send test event programmatically (Python):
import sentry_sdk
import time
sentry_sdk.init(dsn="YOUR_DSN", debug=True)
event_id = sentry_sdk.capture_message("sentry-debug-bundle diagnostic test", level="info")
print(f"Test event ID: {event_id}")
# Python SDK flushes automatically on exit, but explicit flush is safer
sentry_sdk.flush(timeout=10)
print("Flush complete — check Sentry dashboard for event")
Generate the debug bundle report:
#!/bin/bash
set -euo pipefail
REPORT="sentry-debug-$(date +%Y%m%d-%H%M%S).md"
cat > "$REPORT" << 'HEADER'
# Sentry Debug Bundle
HEADER
cat >> "$REPORT" << EOF
**Generated:** $(date -u +"%Y-%m-%dT%H:%M:%SZ")
**Node.js:** $(node --version 2>/dev/null || echo N/A)
**Python:** $(python3 --version 2>/dev/null || echo N/A)
**OS:** $(uname -srm)
**sentry-cli:** $(sentry-cli --version 2>/dev/null || echo 'not installed')
## SDK Packages
\`\`\`
$(npm list 2>/dev/null | grep -i sentry || echo "No npm Sentry packages")
$(pip show sentry-sdk 2>/dev/null | grep -E '^(Name|Version|Location)' || echo "No pip sentry-sdk")
\`\`\`
## Environment Variables (sanitized)
| Variable | Status |
|----------|--------|
| SENTRY_DSN | $([ -n "${SENTRY_DSN:-}" ] && echo "SET (\`$(echo "$SENTRY_DSN" | sed 's|//[^@]*@|//***@|')\`)" || echo "NOT SET") |
| SENTRY_ORG | ${SENTRY_ORG:-NOT SET} |
| SENTRY_PROJECT | ${SENTRY_PROJECT:-NOT SET} |
| SENTRY_AUTH_TOKEN | $([ -n "${SENTRY_AUTH_TOKEN:-}" ] && echo "SET (${#SENTRY_AUTH_TOKEN} chars)" || echo "NOT SET") |
| SENTRY_RELEASE | ${SENTRY_RELEASE:-NOT SET} |
| SENTRY_ENVIRONMENT | ${SENTRY_ENVIRONMENT:-NOT SET} |
| NODE_ENV | ${NODE_ENV:-NOT SET} |
## Network Connectivity
$(curl -s -o /dev/null -w "- sentry.io API: HTTP %{http_code} (%{time_total}s)" https://sentry.io/api/0/ 2>/dev/null || echo "- sentry.io: UNREACHABLE")
$(curl -s -o /dev/null -w "\n- Ingest endpoint: HTTP %{http_code} (%{time_total}s)" https://o0.ingest.sentry.io/api/0/envelope/ 2>/dev/null || echo "- Ingest: UNREACHABLE")
## Sentry Status
$(curl -s https://status.sentry.io/api/v2/status.json 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print(f\"- Status: {d['status']['description']}\")" 2>/dev/null || echo "- Status: Could not fetch")
## CLI Authentication Status
\`\`\`
$(sentry-cli info 2>/dev/null || echo "sentry-cli not authenticated — run: sentry-cli login")
\`\`\`
## Source Map Artifacts
\`\`\`
$(sentry-cli releases files "${SENTRY_RELEASE:-unknown}" list 2>/dev/null || echo "No release artifacts found (set SENTRY_RELEASE)")
\`\`\`
EOF
echo "Debug bundle saved to
---
*Content truncated.*
More by jeremylongshore
View all skills by jeremylongshore →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
Related MCP Servers
Browse all serversIntegrate with Sentry to retrieve and analyze error reports and stacktraces, streamlining issue tracking and speeding up
Use iOS Simulator for testing with tools like UI interaction and device info retrieval. Perfect as an iPhone emulator fo
Easily integrate and debug Sentry APIs with sentry-mcp, a flexible MCP middleware for cloud and self-hosted setups.
MCP Science: Easily discover and run scientific research MCP servers from the Path Integral Institute with automated set
Boost Payload CMS 3.0 development with validation, querying, and Redis-integrated code generation for efficient project
Access the Discogs website to search music databases, manage your collection, and browse marketplace listings with detai
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.