# atlas2-mcp

Python FastMCP server for the *atlas2* resolution flow.

## Current status
- Exposes **one tool**: `resolve()`
- `resolve()` now performs the working path:
  - store lookup (label/alias)
  - Wikidata fallback using `wikidata.reconci.link` quick-resolve (single-candidate)
  - minimal persist to Virtuoso via MCP
  - cache hits return the stored result when confidence is sufficient
- Resolve supports strategy modes:
  - `quick`
  - `ranked`
  - `interactive`
  - `hybrid`
  - `llm_select`
- Ranking can use embeddings via Ollama when `strategy.use_embeddings=true`
- `confidence` controls cache reuse and re-resolution, not just the resolved/not-found status
- Store lookup was debugged and made robust by splitting label-first then alias.
- Maintenance scaffolding (dry-run CLI) exists to upgrade `atlas:needsCuration true` entities using:
  - `ontology/wikidata_subclassof.ttl`
  - Wikidata entity dumps
  - Atlas type bucket inference (Person/Organization/Location/etc.)

## Resolver tests
- `./test_resolve.sh` runs resolver-focused tests only
- It prints the subjects under test and a per-test timing table

## How to run

1) Create config:
```bash
cp .env.example .env
```

2) Install dependencies:
```bash
pip install -r requirements.txt
```

3) Start:
```bash
./run.sh
```

Server runs on **port 8550** and mounts the MCP endpoint at **`/mcp`**.
