Overview

The desktop app exposes captured data — traffic, errors, traces, events, database, cache, feature flags, build/git metadata — as MCP tools over Streamable HTTP on loopback.

There is no embedded chatbot and no LLM key in the app. Alohomora is the data source; the reasoning happens in whatever agent you already use (Claude Code, Cursor, Claude Desktop).

Off by default. Two separate toggles: one for the server, one for write tools.

Enabling

In the desktop app, open Preferences and find the MCP server section:

  • Toggle the server on. Default port is 53900.
  • The endpoint URL and live status are shown below the toggle.
  • A "Connect your agent" picker generates the exact snippet for Claude Code, Cursor, or Claude Desktop.

Then point your agent at the endpoint:

Endpoint
http://127.0.0.1:53900/mcp

Claude Code

Terminal
claude mcp add alohomora --transport http http://127.0.0.1:53900/mcp

Cursor

Add to your .cursor/mcp.json:

JSON
{
  "mcpServers": {
    "alohomora": {
      "url": "http://127.0.0.1:53900/mcp"
    }
  }
}

Claude Desktop

Claude Desktop requires an stdio bridge. Use mcp-remote via npx:

JSON
{
  "mcpServers": {
    "alohomora": {
      "command": "npx",
      "args": ["mcp-remote", "http://127.0.0.1:53900/mcp"]
    }
  }
}

Read Tools

Always available once the server is on. Each tool takes an optional deviceId parameter; with a single connected device it defaults to that one.

Tool Description
get_attention Unviewed errors + failed traffic. Best starting point for triage.
list_traffic List captured network requests with filters for status, method, URL.
get_traffic Full detail for a single traffic entry: headers, body, timing.
list_errors List captured errors with exception type, message, and timestamp.
get_error Full error detail including stack trace.
list_traces List captured trace summaries grouped by trace ID.
get_trace All spans for a trace with parent/child relationships and timing.
list_events List recorded events with name, timestamp, and properties.
get_database_schema Tables, columns, types, and constraints for a registered database.
query_database_table Read rows from a table with optional limit and offset.
list_cache_keys List SharedPreferences / UserDefaults keys.
get_cache_value Read a single cache value by key.
list_feature_flags List recorded feature flags with source, type, and value.
get_build_metadata Package name, version, branch, commit, build timestamp.
get_git_history Recent commits embedded at build time (SHA, message, author, date).
list_devices Connected devices with model, OS version, and session status.

Prompts

Pre-built prompt templates that orchestrate multiple read tools into a coherent flow:

Prompt Description
triage What's broken right now? Pulls attention items, recent errors, and failed traffic.
debug_request(id) Why is this request failing? Walks through the traffic entry, related errors, and suggests a source-level fix.
explain_screen(name) Explain what this screen is doing: events fired, traffic triggered, errors encountered.

Write Tools

Separate opt-in: toggle "Allow write tools" in Preferences. Off by default.

When enabled, these tools become available. They use the same code paths as the UI — whatever the agent does shows up in the console.

Tool Description
replay_traffic Re-send a captured request through the app's replay handler.
list_mock_rules List active mock rules in the current session.
set_mock_rules Create or update mock rules (URL pattern, status, response body).
clear_mock_rules Remove all mock rules from the active session.
get_throttle Get the current throttle profile.
set_throttle Set a throttle preset (NONE, EDGE, SLOW_3G, FAST_3G, SLOW_WIFI).
clear_captured Delete captured traffic, traces, events, and/or errors.
clear_captured is irreversible. When an agent calls it, a system-wide Allow/Deny dialog appears in the desktop app. The tool blocks until you respond.

Security

  • Loopback only — binds 127.0.0.1, not 0.0.0.0. Not reachable from other machines on the network.
  • Origin validation — DNS-rebinding protection is on. Non-loopback Origin headers are rejected with 403. Origin-less requests (CLI agents) are allowed.
  • Same trust boundary as adb forward — if you can reach port 53900 on localhost, you already have ADB access to the device.
  • Off by default — the server must be explicitly enabled. Write tools are a second opt-in.
  • Raw data served as-is — captured headers and bodies are served without redaction. [REDACTED] handling is on the replay path, not the storage or read path.
No secrets are served. BuildInfo.slackWebhookUrl is dropped in the build-metadata projection. It is the one secret that must never be served via MCP.