Skip to content
Get Started

Getting Started

Quickstart

Build the Mirobody C++ engine with SQLite and run it locally.

You’ll build the C++ engine, add one LLM key, enable local demo login, and verify the server — all on the self-contained SQLite backend, so there is no PostgreSQL to provision.

Terminal window
git clone https://github.com/thetahealth/mirobody.git
cd mirobody
Terminal window
sudo apt install build-essential cmake ninja-build pkg-config \
libwebsockets-dev libcurl4-openssl-dev libssl-dev \
rapidjson-dev libyaml-cpp-dev libhiredis-dev libsqlite3-dev \
libjpeg-dev libpng-dev libtiff-dev libwebp-dev
Terminal window
brew install cmake ninja pkg-config libwebsockets curl openssl@3 \
rapidjson yaml-cpp hiredis sqlite \
jpeg-turbo libpng libtiff webp
Terminal window
sudo dnf install gcc-c++ cmake ninja-build pkgconf-pkg-config \
libwebsockets-devel libcurl-devel openssl-devel \
rapidjson-devel yaml-cpp-devel hiredis-devel sqlite-devel \
libjpeg-turbo-devel libpng-devel libtiff-devel libwebp-devel
Terminal window
./build.sh sqlite

The command creates build-sqlite/mirobody. Each backend gets its own directory, so builds coexist; the default PostgreSQL one goes to build/mirobody.

Terminal window
cp config.example.yml config.yml

Edit config.yml:

# Configure at least one hosted model:
GOOGLE_API_KEY: 'AIza...' # or OPENAI_API_KEY: 'sk-...'
# Local demo login. Keep this disabled on any reachable deployment.
EMAIL_PREDEFINE_CODES:
demo1@mirobody.ai: '777777'

Run the binary from the repository root so it can read ./config.yml and res/:

Terminal window
./build-sqlite/mirobody

Open http://localhost:8080 and sign in with:

demo1@mirobody.ai
777777

You can now upload a health document, chat with the built-in agent, or connect a data provider.

Terminal window
# Liveness
curl http://localhost:8080/api/health
# Public FHIR R4 capability statement
curl http://localhost:8080/fhir/metadata
# MCP discovery
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

The health endpoint returns ok; the other two commands return JSON.