7935b671d3
Exposes homelab topology to MCP-compatible AI clients (Claude Code, etc.) over LAN via HTTP/SSE on port 8001. - New mcp/ service: FastAPI + mcp SDK, SSE transport - Auth: X-API-Key for AI clients, X-MCP-Service-Key for backend (Docker-internal) - Resources: canvas, nodes, edges, scan/pending, scan/runs - Tools: create/update/delete nodes+edges, trigger scan, approve/hide devices - Backend deps.py: accepts JWT or MCP service key (no plain-text password) - 40 tests (auth, resources, tools) across asyncio + trio - docker-compose.yml: mcp service on port 8001 - README: MCP setup section with Claude Code/Desktop config examples
27 lines
705 B
Python
27 lines
705 B
Python
import pytest
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_health_no_key(client):
|
|
resp = await client.get("/health")
|
|
assert resp.status_code == 200
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_missing_api_key(client):
|
|
resp = await client.get("/mcp")
|
|
assert resp.status_code == 401
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_wrong_api_key(client):
|
|
resp = await client.get("/mcp", headers={"X-API-Key": "wrong"})
|
|
assert resp.status_code == 401
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_valid_api_key_passes(client, api_key):
|
|
# SSE endpoint returns 200 with valid key (even if stream is incomplete in tests)
|
|
resp = await client.get("/mcp", headers={"X-API-Key": api_key})
|
|
assert resp.status_code != 401
|