crashpoint-ios-mcp
Exports .crash files from Xcode Organizer .xccrashpoint bundles and symbolicates crashes using Xcode's symbolicatecrash tool and .dSYM bundles.
Provides crash report notifications via Zoho Cliq webhook and creates/updates bugs in Zoho Projects with structured crash data, including severity and occurrence counts.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@crashpoint-ios-mcpanalyze recent crashes and post to Cliq"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CrashPoint iOS MCP
A TypeScript MCP (Model Context Protocol) server that wraps the CrashPoint iOS crash analysis pipeline as MCP tools. Use it with Claude Desktop, Cursor, and other MCP clients to export, symbolicate, analyze, and report iOS/macOS crash logs — all through natural language.
Also includes a standalone CLI (crashpoint-ios-cli) for scheduled runs without an AI client.
What It Does
CrashPoint iOS MCP gives your AI assistant the ability to:
Export
.crashfiles from Xcode Organizer.xccrashpointbundlesSave Apptics crash data as
.crashfiles for unified processingSymbolicate crashes using Xcode's
symbolicatecrashtool and your.dSYMbundleAnalyze & group symbolicated crashes by unique signature, device, iOS version, and app version
Track fixes locally so your team can mark crash types as resolved
Notify Zoho Cliq with crash report summaries via webhook
Report to Zoho Projects — prepare structured bug data for creation/updates
Run the full pipeline end-to-end with Apptics, Cliq, and Zoho Projects integration
Related MCP server: Log Analyzer MCP
Prerequisites
macOS (required for Xcode's
symbolicatecrashanddwarfdump)Node.js 18+
Xcode CLI tools (
xcode-select --install)A
.dSYMbundle for your appXcode Organizer crash data (
.xccrashpointfiles)
Installation
git clone https://github.com/maanasa-s-5539/CrashPoint-IOS-MCP.git
cd CrashPoint-IOS-MCP
npm install
npm run buildConfiguration
Copy crashpoint.config.example.json from the repo root to <ParentHolderFolder>/crashpoint.config.json and fill in your values:
cp crashpoint.config.example.json /path/to/ParentHolderFolder/crashpoint.config.jsonThis JSON config file is the single source of truth for all user configuration — you only need to edit this one file. The .mcp.json (used by Claude CLI for the automation pipeline) and the launchd .plist (for scheduled daily runs) are auto-generated from it by setup_folders and by run_crash_pipeline.sh on first run.
When both the JSON config file and environment variables provide the same key, environment variables win — values in process.env override values from the JSON config file. This means MCP client env blocks (or a .env file used as a fallback) can always override the JSON config.
Complete crashpoint.config.json example
{
"CRASH_ANALYSIS_PARENT": "/path/to/ParentHolderFolder",
"CLAUDE_CLI_PATH": "/Users/name/.local/bin/claude",
"DSYM_PATH": "/path/to/MyApp.app.dSYM",
"MASTER_BRANCH_PATH": "/path/to/master",
"DEV_BRANCH_PATH": "/path/to/dev",
"CRASH_INPUT_DIR": "",
"CRASH_VERSIONS": "1.0.0",
"CRASH_DATE_OFFSET": "4",
"CRASH_NUM_DAYS": "1",
"SCHEDULED_RUN_TIME": "11:00",
"APP_DISPLAY_NAME": "MyApp",
"APPTICS_MCP_NAME": "apptics-mcp",
"APPTICS_PORTAL_ID": "12345",
"APPTICS_PROJECT_ID": "67890",
"APPTICS_APP_NAME": "MyApp",
"ZOHO_CLIQ_WEBHOOK_URL": "https://cliq.zoho.in/...",
"ZOHO_PROJECTS_PORTAL_ID": "12345",
"ZOHO_PROJECTS_PROJECT_ID": "67890",
"ZOHO_BUG_STATUS_OPEN": "status-id-open",
"ZOHO_BUG_STATUS_FIXED": "status-id-fixed",
"ZOHO_BUG_SEVERITY_SHOWSTOPPER": "severity-id-showstopper",
"ZOHO_BUG_SEVERITY_CRITICAL": "severity-id-critical",
"ZOHO_BUG_SEVERITY_MAJOR": "severity-id-major",
"ZOHO_BUG_SEVERITY_MINOR": "severity-id-minor",
"ZOHO_BUG_SEVERITY_NONE": "severity-id-none",
"ZOHO_BUG_APP_VERSION": "field-name",
"ZOHO_BUG_NUM_OF_OCCURRENCES": "field-name"
}Config key reference
Key | Description |
| Path to your ParentHolderFolder |
| Absolute path to the Claude CLI binary (e.g. |
| Path to |
| Path to master/live branch checkout (creates |
| Path to dev branch checkout (creates |
| Override directory searched for |
| Comma-separated version filter for exports |
| Days ago to target for daily run (default: |
| Number of days to process in the crash window (1–180, default: |
| Time of day for the scheduled launchd pipeline run in HH:MM 24-hour format, where HH is 0–23 and MM is 0–59 (default: |
| App name shown in pipeline prompts and Cliq notifications |
| Name of your Apptics MCP server ( |
| Webhook URL for Zoho Cliq crash notifications |
| Zoho Projects portal ID |
| Zoho Projects project ID |
| Apptics portal ID ( |
| Apptics project ID |
| App name as it appears in Apptics |
| Status ID for "Open" bugs in Zoho Projects |
| Status ID for "Fixed" bugs in Zoho Projects |
| Severity ID for Showstopper (≥50 occurrences) |
| Severity ID for Critical (≥20 occurrences) |
| Severity ID for Major (≥5 occurrences) |
| Severity ID for Minor (≥2 occurrences) |
| Severity ID for None (<2 occurrences) |
| Custom field name for app version on bug items |
| Custom field name for occurrence count on bug items |
MCP Client Configuration
All MCP clients use the same JSON block — only the config file path differs.
Block to add:
{
"mcpServers": {
"crashpoint-ios": {
"command": "npx",
"args": [
"-p",
"github:maanasa-s-5539/CrashPoint-IOS-MCP",
"crashpoint-ios-core"
],
"env": {
"CRASH_INPUT_DIR": "/path/to/Xcode/Products/com.example.myapp/Crashes/Points",
"CRASH_ANALYSIS_PARENT": "/path/to/ParentHolderFolder"
}
}
}
}Where to put it:
Client | Config file | Where in the file |
Claude Desktop (macOS) |
| Top-level |
Claude CLI (Claude Code) |
| Top-level |
Cursor |
| Top-level |
If the chosen file already contains an mcpServers object, add the "crashpoint-ios": { ... } entry inside the existing object instead of duplicating the key.
Replace /path/to/... with real absolute paths on your machine. CRASH_ANALYSIS_PARENT is required; CRASH_INPUT_DIR is optional and only needed when overriding the default Xcode crash input location.
All other values (paths, app name, etc.) are read automatically from crashpoint.config.json.
Restart Claude Desktop, Cursor, or start a new claude CLI session after saving the file.
Environment Variables
Only CRASH_ANALYSIS_PARENT is required as an environment variable — it tells the server where to find crashpoint.config.json. All other settings live in that config file.
Environment variables can still override any key from crashpoint.config.json (env always wins) if you need per-client overrides via MCP client env blocks.
Quick Start
There are two ways to run the CrashPoint pipeline. Choose the path that fits your workflow:
Path A: Claude Desktop / Cursor (zero manual setup)
The MCP tools automatically create the entire workspace on the very first run — no setup command needed beforehand.
Clone & build the repo (or install via npx — see Installation above).
Create your ParentHolderFolder and place a filled-in
crashpoint.config.jsoninside it (see Configuration above).Configure your MCP client with
CRASH_ANALYSIS_PARENTpointing to your ParentHolderFolder (see the Cursor / Claude Desktop block in Configuration above).Ask Claude to call
run_full_pipeline— on the very first call, the MCP server detects that the workspace doesn't exist yet and automatically runs setup (creating all folders, copying prompt templates, generatingrun_crash_pipeline.shwith your real paths, and writing.mcp.json). No prior setup step is needed.
That's it. After the first
run_full_pipeline(orrun_basic_pipeline) call, the full workspace is ready and every subsequent call works without any additional configuration.
Path B: Terminal bash script (one-time setup required first)
The bash script at ParentHolderFolder/Automation/run_crash_pipeline.sh does not exist until a setup command generates it. The repo contains only a template (automation/run_crash_pipeline.sh) with <REPLACE_WITH_...> placeholders. The setup command replaces those placeholders with your real paths automatically — you never need to edit them manually.
# 1. Clone and build the repo
git clone https://github.com/maanasa-s-5539/CrashPoint-IOS-MCP.git
cd CrashPoint-IOS-MCP
npm install
npm run build
# 2. Create your ParentHolderFolder and fill in crashpoint.config.json
mkdir -p /path/to/ParentHolderFolder
cp crashpoint.config.example.json /path/to/ParentHolderFolder/crashpoint.config.json
# Edit /path/to/ParentHolderFolder/crashpoint.config.json with your real values
# 3. Run the setup command once — creates the folder structure AND generates
# run_crash_pipeline.sh with your real paths automatically filled in
CRASH_ANALYSIS_PARENT=/path/to/ParentHolderFolder node dist/cli.js setup
# 4. Run the generated script (placeholders already replaced — no manual editing needed)
bash /path/to/ParentHolderFolder/Automation/run_crash_pipeline.shNote: The auto-setup block inside the generated bash script (which calls
node dist/cli.js setupif folders are missing) is a safety net for subsequent runs — for example if folders were accidentally deleted. It is not the mechanism for the initial bootstrap. Step 3 above is the required first-time step.
Folder Structure
CrashPoint iOS MCP uses a ParentHolderFolder to organize crash data:
ParentHolderFolder/ ← CRASH_ANALYSIS_PARENT
├── crashpoint.config.json ← Single source of truth for all configuration
├── .mcp.json ← Auto-generated (do not edit manually)
├── MainCrashLogsFolder/
│ ├── XCodeCrashLogs/ ← Exported .crash files from Xcode Organizer
│ ├── AppticsCrashLogs/ ← Apptics SDK crash logs
│ └── OtherCrashLogs/ ← Other crash logs
├── SymbolicatedCrashLogsFolder/ ← Symbolicated .crash files
├── AnalyzedReportsFolder/ ← JSON + CSV analysis reports
├── StateMaintenance/ ← Processed manifest + fix tracking
└── Automation/ ← Pipeline scripts, prompts, and logs
├── run_crash_pipeline.sh ← Generated by setup (placeholders auto-replaced)
├── daily_crash_pipeline_prompt_phase1.md
├── daily_crash_pipeline_prompt_phase2.md
└── ScheduledRunLogs/Using Claude Desktop / Cursor (MCP path): The folder structure is created automatically on the first call to run_full_pipeline or run_basic_pipeline — no manual setup step needed. The MCP server also generates Automation/run_crash_pipeline.sh with your real paths filled in as part of this auto-setup.
Using the terminal bash script: Run CRASH_ANALYSIS_PARENT=/path/to/ParentHolderFolder node dist/cli.js setup once to create the folder structure and generate Automation/run_crash_pipeline.sh with your real paths. After that, run bash /path/to/ParentHolderFolder/Automation/run_crash_pipeline.sh. You can also run setup_folders in Claude Desktop / Cursor to do the same thing interactively.
Available MCP Tools
# | Tool | Description |
1 |
| Create the complete folder structure, generate |
2 |
| Export |
3 |
| Save crash data fetched from the Apptics Zoho MCP as |
4 |
| Symbolicate crash files. Pass optional |
5 |
| Validate a |
6 |
| Group & deduplicate crashes by signature; includes fix status. Always auto-generates JSON + CSV reports in |
7 |
| Unified fix tracking: |
8 |
| Run the basic pipeline: export → symbolicate → analyze. Automatically initializes the workspace on first run if |
9 |
| Run the full pipeline with Zoho integration: export → symbolicate → analyze. Returns |
10 |
| Send crash report summary to a Zoho Cliq channel via incoming webhook |
11 |
| Prepare structured bug data from crash reports for Zoho Projects submission (titles, descriptions, severity, custom fields) |
12 |
| Delete |
13 |
| Delete analyzed report files ( |
14 |
| Remove all crash files and reports in one go. Supports |
For detailed parameter documentation, see Tool Parameters.
Standalone CLI
The CLI lets you run the crash analysis pipeline without an MCP client (useful for scheduled runs):
# Delete crash files older than a given date
node dist/cli.js clean --before-date 2026-03-01
# Delete analyzed report files in AnalyzedReportsFolder older than a given date
node dist/cli.js cleanup-reports --before-date 2026-03-01
# Create folder structure with symlinks
node dist/cli.js setup --master-branch /path/to/master --dev-branch /path/to/dev --dsym /path/to/MyApp.dSYM
# Validate a dSYM bundle and check UUID matches against crashes in MainCrashLogsFolder
node dist/cli.js verify-dsym
node dist/cli.js verify-dsym --crash-dir /path/to/MainCrashLogsFolder/XCodeCrashLogs/ --dsym /path/to/MyApp.dSYM
# Export crash logs from Xcode Organizer
node dist/cli.js export
# Export crashes filtered by date range
node dist/cli.js export --start-date 2026-03-01 --end-date 2026-03-20
# Symbolicate all crash files in MainCrashLogsFolder (XCodeCrashLogs, AppticsCrashLogs, OtherCrashLogs)
node dist/cli.js batch
# Symbolicate a single crash file
node dist/cli.js batch --file /path/to/crash.crash
# Analyze crashes and print JSON report (also auto-saves JSON + CSV to AnalyzedReportsFolder)
node dist/cli.js analyze
# Manage fix statuses (unified command)
node dist/cli.js fix-status --action set --signature "EXC_BAD_ACCESS SIGSEGV" --note "Fixed in PR #42"
node dist/cli.js fix-status --action unset --signature "EXC_BAD_ACCESS SIGSEGV"
node dist/cli.js fix-status --action list
# Run basic pipeline (export → symbolicate → analyze)
node dist/cli.js pipeline
# Remove all crash files and reports in one go
node dist/cli.js cleanup # delete everything
node dist/cli.js cleanup --keep-reports # only delete crash files, preserve reports
node dist/cli.js cleanup --keep-manifests # preserve processed manifestsFix Tracking
Crash fix statuses are stored in {CRASH_ANALYSIS_PARENT}/StateMaintenance/fix_status.json (local only, gitignored).
{
"EXC_BAD_ACCESS||MyApp -[ViewController load]||...": {
"fixed": true,
"note": "Fixed in PR #42",
"updatedAt": "2026-03-22T16:00:00.000Z"
}
}This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/maanasa-s-5539/CrashPoint-IOS-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server