Skip to main content
When something goes wrong with Meridian, start with meridian doctor. It runs the full suite of environment health checks — binary presence, plist validity, running processes, database existence, Python venv, and MCP build — and tells you exactly which check failed and what to do about it.
The sections below cover the most common failure patterns in more detail.

Installation & Setup

The installer uses Homebrew to install system dependencies (Rust, Node, Python, screenpipe). If it fails at this step:
  1. Make sure you have an active internet connection.
  2. Ensure Xcode Command Line Tools are installed:
If the tools are already installed, the command exits immediately with a message to that effect. Otherwise, follow the on-screen prompt and re-run ./install.sh after the installation completes.
Meridian compiles the ETL daemon from Rust source. If the build fails, first check that the correct toolchain is active:
The output should show a stable toolchain for aarch64-apple-darwin (Apple Silicon) or x86_64-apple-darwin. If rustup is not found at all, install it:
Then re-run ./install.sh. The rust-toolchain.toml file in the repo root pins the exact version the project requires, so rustup picks it up automatically.
The Python services (MLX inference server, Jira updater, task classifier) require Python 3.13. Check whether it is installed:
If the command is not found, install it via Homebrew or pyenv:
After installing Python 3.13, re-run the service setup:

Daemon & Runtime

The Rust daemon TCP-connects to the MLX inference server before entering its poll loop. If the MLX server is not running, the daemon exits immediately with an error message in the log.Fix — install and start the MLX server daemon:
Then check that it started:
Wait until you see server: MLX model ready (this can take up to 30 seconds on first run while the model downloads).Alternatively, if you do not need session classification, set CLASSIFICATION_ENABLED=false in the repo-root .env and restart:
Run meridian doctor afterwards to confirm everything is healthy.
Two commands give you a complete picture:
For live log output:
If meridian status shows the daemon is running but no sessions appear in ~/.meridian/meridian.db, check the following:
  1. Is screenpipe running?
  1. Does the screenpipe database exist?
If the file is missing, screenpipe has not recorded any frames yet. Ensure screenpipe has Screen Recording permission (see the macOS Permissions section below) and that it has been running long enough to produce data.
  1. Is SCREENPIPE_DB pointing to the right path?

Integrations

A 401 from the Jira API means either JIRA_EMAIL or JIRA_API_TOKEN is wrong, or the token has been revoked.
  1. Open the repo-root .env with meridian config edit.
  2. Verify that JIRA_EMAIL matches the email address of the Atlassian account that owns the token.
  3. Regenerate the token at id.atlassian.com/manage-profile/security/api-tokens and paste the new value into JIRA_API_TOKEN.
  4. Restart: meridian restart.
If the Jira connector is authenticated but no Jira tasks are appearing in session classifications:
  1. Check JIRA_PROJECT_KEYS — if set, ensure the keys match exactly (e.g. KAN, not kan).
  2. Confirm that the projects have open issues in the configured statuses.
  3. Force a full refresh without restarting the daemon:
You can also run a targeted refresh with custom JQL:
A GitHub 401 means the personal access token is expired, revoked, or was created without the repo scope.
  1. Go to github.com/settings/tokens and create a new classic PAT with at minimum the repo scope.
  2. Update GITHUB_TOKEN in the repo-root .env via meridian config edit.
  3. Restart: meridian restart.
  1. Verify LINEAR_API_KEY is set correctly in the repo-root .env.
  2. Check LINEAR_TEAM_IDS — if set, confirm the team IDs are correct (visible in Linear’s workspace settings URL).
  3. Ensure the teams have open issues in a status that the connector picks up.
  4. Check the jira-updater log (which also handles Linear sync) for error messages:

MCP Server

This error means the MCP server process could not find ~/.meridian/meridian.db.
  1. Confirm the daemon is running and has processed at least one poll tick:
  1. Check that the database exists:
  1. If you edited the MCP config file (~/Library/Application Support/Claude/claude_desktop_config.json), verify that the path in args points to the actual repo location:
Use an absolute path — ~ is not expanded by all MCP hosts.
If packages/meridian-mcp/dist/index.js is missing or stale, rebuild it:
Then restart your MCP-compatible AI tool so it picks up the rebuilt server.

macOS Permissions

screenpipe requires Screen Recording permission to capture frames. Without it, the database stays empty and Meridian has nothing to process.Run the guided permissions walkthrough:
The command opens the Screen Recording, Accessibility, and Microphone System Settings panes in sequence and waits for you to confirm each one. After granting access, restart the stack:
You must restart screenpipe after granting Screen Recording permission. The permission change does not take effect for a running process.
Audio transcription requires the Microphone permission. screenpipe appears in the Microphone pane only after it has first tried to access the microphone — this happens automatically once Screen Recording is granted and screenpipe is running.If screenpipe is not listed in the Microphone pane yet:
  1. Ensure Screen Recording is already granted.
  2. Start screenpipe: meridian start.
  3. Wait a few seconds, then open System Settings → Privacy & Security → Microphone.
  4. Toggle screenpipe on.
Alternatively, run meridian permissions to open all three panes in the correct order.

Dashboard

  1. Check whether the UI service is running:
  1. If it is not running, check the logs:
  1. If the UI has not been built yet (e.g. after a fresh clone or --no-ui install), build it:
  1. Then bring the service back up:

meridian doctor is always the best first step for any issue. It checks every dependency and running service in one command and tells you exactly what needs fixing.