Skip to content

feat: remote MCP @ AWS — HTTP-transport, read-only, health, kontti, paikkatietotyökalut#145

Merged
trotor merged 12 commits into
mainfrom
feat/remote-mcp-http-transport
Jun 11, 2026
Merged

feat: remote MCP @ AWS — HTTP-transport, read-only, health, kontti, paikkatietotyökalut#145
trotor merged 12 commits into
mainfrom
feat/remote-mcp-http-transport

Conversation

@trotor

@trotor trotor commented Jun 11, 2026

Copy link
Copy Markdown
Owner

Remote MCP @ AWS — sovelluspuoli + paketointi

Toteuttaa epicin #133 ensimmäiset 5 issueta. Aura on nyt remote-valmis: streamable HTTP, read-only-gateys, health-endpoint, kontti ja paikkatietotyökalut. Kaikki TDD:llä.

Mukana

Suunnitelma

docs/superpowers/specs/2026-06-06-aws-remote-mcp-design.md (mukana tässä PR:ssä).

Testaus

872 passed, 0 failed (55 deselattu = ennestään failaavat päivämäärätestit). ruff puhdas; mypy puhdas uusille tiedostoille (2 ennestään olevaa virhettä quality.py:ssä).

Closes #134
Closes #135
Closes #136
Closes #138
Closes #139

🤖 Generated with Claude Code

trotor and others added 12 commits June 6, 2026 16:16
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…§5.3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Remote MCP:n pohja. `aura serve --http` ajaa FastMCP:n streamable HTTP
-transportilla (polku /mcp, stateless), `aura serve` säilyy stdiona.

- aura/serve.py: resolve_serve_config() eristää transport-päätöslogiikan
  (host/portti argumenteista tai AURA_HTTP_HOST/PORT-envistä) blokkaavasta
  mcp.run()-kutsusta → yksikkötestattavissa
- cli.py: serve saa --http/--host/--port-liput
- testit: yksikkö (config + CLI-wiring) + integraatio (server käynnistyy ja
  vastaa list_tools-kutsuun HTTP:n yli)

Osa epicistä #133.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
AURA_READONLY=1 → kirjoittavat toolit eivät näy ja kanta avataan vain luettavaksi.

- aura/config.py: is_readonly() — yksi paikka moodille (env-ohjaus)
- database.get_connection(readonly=True): mode=ro URI, ei WAL-pragmaa/mkdiriä
  → estää kirjoitukset SQLite-tasolla
- server.py: WRITE_TOOL_NAMES + apply_readonly_gating() poistaa kirjoittavat
  toolit (harvest, probe_sizes, enrich, batch_enrich, save_session_findings,
  populate_reference); lifespan avaa RO-yhteyden ja ohittaa init_db:n readonlyssa
- cli.py: serve-handler kutsuu apply_readonly_gating ennen mcp.run
- testit: is_readonly, RO-SQLite, gating-funktio, + integraatio (subprocess
  AURA_READONLY=1 → write-toolit puuttuvat, search/stats toimivat)

Osa epicistä #133.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
GET /health → 200 + {status, datasets} (kevyt DB-tarkistus). Readonly-tietoinen
yhteys (mode=ro remotessa). FastMCP custom_route HTTP-transportin alla.

- server.py: health_payload(conn) + @mcp.custom_route("/health")
- testit: yksikkö (health_payload) + integraatio (GET /health HTTP:n yli → 200)

Osa epicistä #133.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
python:3.11-slim, editable-asennus (pitää DEFAULT_DB_PATH = /app/data/aura.db),
vain data/aura.db (ei boundaries-gpkg:itä), non-root, AURA_READONLY=1 oletuksena,
CMD aura serve --http --host 0.0.0.0 --port 8000.

Verifioitu buildaamalla ja ajamalla: /health → 200 {status:ok,datasets:11220},
MCP /mcp → 27 toolia, write-toolit gateattu pois. Content size 119 MB (< 250 MB).

Osa epicistä #133.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Read-only MCP-toolit jotka palvelevat ref_map_sheets-taulusta (bbox EPSG:3067 jo
kannassa) → toimivat remotessa. Agentti voi rajata WFS/WCS/OGC-kyselyt alueelle.

- map_sheet(id): karttalehden bbox + centroid + mittakaava, valmis WFS-bbox:ksi
- find_map_sheets(scale, bbox|point|prefix): osuvat lehdet (leikkaavuus/sisältyvyys/
  hierarkkinen prefiksi)
- uusi tools/spatial.py, rekisteröity tools/__init__.py:hyn, re-export server.py:stä
- 7 testiä (bbox-haku, piste, prefiksi, case-insensitive, validointi)

Osa #136 (municipality_bbox seuraavaksi). Osa epicistä #133.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Viimeistelee #136: kunnan bbox aluerajaukseen, ketjutettavissa find_map_sheets:iin.

- migraatio 017: bbox-sarakkeet (min_x/min_y/max_x/max_y) ref_municipalities-tauluun
- populators/municipality_bbox.py: lukee kuntajako_1000k.gpkg:n Kunta-tason
  envelope-bbox:t (uudelleenkäyttää map_sheetsin GPKG-parseria), päivittää
  ref_municipalities natcode=code-avaimella (ei-destruktiivinen)
- spatial.py: municipality_bbox(name|code) -tool
- data/aura.db: populoitu 308/308 kunnan bbox (Helsinki todennettu, EPSG:3067)
- 6 testiä (tool: nimi/koodi/puuttuva/tuntematon; populaattori: täsmäys/zfill)

Osa epicistä #133.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@trotor trotor added the deployment AWS-deployment ja infra label Jun 11, 2026
@trotor trotor merged commit 67b2430 into main Jun 11, 2026
0 of 3 checks passed
@trotor trotor deleted the feat/remote-mcp-http-transport branch June 11, 2026 18:39
@trotor trotor mentioned this pull request Jun 11, 2026
11 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deployment AWS-deployment ja infra

Projects

None yet

1 participant