Skip to content
Conduit

mcp server

indi-mcp

An MCP server that controls Astrophotography equipment via INDI on a raspberry pi or equivalent devices

Oekalegon/indi-mcpcommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

Before you start

  • uv (`curl -LsSf https://astral.sh/uv/install.sh | sh`)
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "oekalegon-indi-mcp": {
      "command": "uvx",
      "args": [
        "indi-mcp"
      ]
    }
  }
}

same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12

Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs

README

synced Oct 14, 2026

INDI MCP Server

An MCP server that controls astrophotography equipment via INDI on a Raspberry Pi (or equivalent device), and exposes it to other computers on the local network.

What it does

  • Equipment control — connect to an INDI server and control mounts, cameras, filter wheels, focusers and other astrophotography gear through MCP tools.
  • INDI server management — manage the INDI server itself: install/remove drivers, and start, stop or restart the server, all via MCP.
  • Frame storage — captured frames are stored on the Raspberry Pi and can be listed, inspected and transferred to another computer on the local network via MCP.

Documentation

Debug CLI

indi-mcp-cli is a small standalone tool for manually testing/debugging the INDI server and driver management tools, without needing an MCP client:

uv run indi-mcp-cli server status
uv run indi-mcp-cli server start --port 7624
uv run indi-mcp-cli driver list
uv run indi-mcp-cli driver start "CCD Simulator"
uv run indi-mcp-cli listen --device "CCD Simulator"   # prints incoming events until Ctrl+C

The driver catalog is read from /usr/share/indi/ by default, which only exists where INDI's drivers are actually installed (e.g. the Raspberry Pi). On a machine with a local INDI install elsewhere (e.g. Homebrew on macOS, typically /usr/local/share/indi or /opt/homebrew/share/indi), point the server at it via INDI_MCP_DRIVER_CATALOG_DIR (INDIMCP-128) — this applies to the MCP server itself, not just indi-mcp-cli's driver subcommands, since both read the same catalog:

export INDI_MCP_DRIVER_CATALOG_DIR=/usr/local/share/indi
uv run indi-mcp-cli driver list

Status

Early setup stage — MCP server skeleton in place, with INDI server management tools (start/stop/restart/status) implemented.

Tech stack

  • Python 3.12+, managed with uv
  • Official Python MCP SDK (mcp)
  • indipyclient — pure-Python INDI client, used for equipment control
  • indiweb — used as a library only (its IndiServer/DriverCollection classes), for indiserver process/FIFO control and driver-catalog parsing; its bundled web app is not used
  • astropy — celestial-geometry computation (Sun/Moon position, illumination) for capture_frame's FITS header enrichment, see docs/FitsHeaders.md
  • Ruff for linting and formatting
  • ty for static type checking
  • pytest, with pytest-asyncio and pytest-cov
  • pre-commit to run the above on every commit

Development setup

uv sync --dev
uv run pre-commit install

Common tasks:

uv run ruff check .          # lint
uv run ruff format .         # format
uv run ty check .            # type-check
uv run pytest --cov          # test

Contributing / branching model

This project follows a git-flow-style workflow:

  • main — always releasable; only accepts merges from release/* or hotfix/* branches.
  • develop — integration branch for ongoing work.
  • feature/* — branched from and merged back into develop.

A CI check (enforce-merge-policy) rejects pull requests that don't follow these rules.

↑↓ navigate openesc close