# Local deployment

> Run Milvus, build the index, and start the MCP server.

Canonical: https://keta1930.github.io/icml2026-mcp/en/docs/getting-started/local-deployment



## Docker Compose [#docker-compose]

You need Docker Compose and a DashScope key for `qwen3.7-text-embedding`.

```bash
mkdir -p deploy/secrets
printf '%s' 'YOUR_DASHSCOPE_KEY' > deploy/secrets/dashscope_api_key
chmod 600 deploy/secrets/dashscope_api_key

docker compose -f deploy/compose.yaml -f deploy/milvus.compose.yaml \
  up -d etcd minio standalone
docker compose -f deploy/compose.yaml -f deploy/milvus.compose.yaml \
  --profile build run --rm build-index
docker compose -f deploy/compose.yaml -f deploy/milvus.compose.yaml \
  up -d icml-mcp
```

Connect to `http://127.0.0.1:20442/mcp`. Index data and runtime state live in Docker volumes.

## Run Python directly [#run-python-directly]

Start the bundled Milvus stack, then install the Python project:

```bash
docker compose -f deploy/milvus.compose.yaml up -d etcd minio standalone
uv sync
cp .env.example .env
```

Set `ICML_PAPERS_DASHSCOPE_API_KEY` in `.env`, then build and start:

```bash
uv run icml-papers build
uv run icml-papers build --execute --max-input-tokens 10000000
uv run icml-paper-search-mcp
```

The direct Python endpoint is `http://127.0.0.1:20441/mcp`.
