Files
stiftung-management-system/app/gramps_mcp_server/server.py
SysAdmin Agent 69adab2c5e Add GrampsWeb MCP server with Phase 1 read tools (STI-104)
New MCP server (app/gramps_mcp_server/) that exposes the GrampsWeb REST API
as 12 MCP tools for genealogy data access: person_suchen, person_details,
familie_details, ereignis_details, ort_suchen, ort_details, quelle_suchen,
quelle_details, stammbaum_export, stammbaum_info, medien_liste, notiz_details.

Includes HTTP client with auto-login/token management and Docker compose
services for both prod and dev environments.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-05 21:26:57 +00:00

91 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
MCP Server für GrampsWeb Ahnenforschung.
Startmodus:
python -m gramps_mcp_server
Konfiguration über Umgebungsvariablen:
GRAMPS_URL GrampsWeb Basis-URL (Standard: http://grampsweb:5000)
GRAMPS_USERNAME GrampsWeb Benutzername
GRAMPS_PASSWORD GrampsWeb Passwort
"""
import logging
import os
import sys
logging.basicConfig(
level=logging.WARNING,
format="%(asctime)s %(levelname)s %(name)s: %(message)s",
stream=sys.stderr,
)
logger = logging.getLogger("gramps_mcp_server")
# ──────────────────────────────────────────────────────────────────────────────
# Startup-Check: GrampsWeb-Verbindung prüfen
# ──────────────────────────────────────────────────────────────────────────────
_gramps_url = os.environ.get("GRAMPS_URL", "http://grampsweb:5000")
_gramps_user = os.environ.get("GRAMPS_USERNAME", "")
if not _gramps_user:
logger.error("GRAMPS_USERNAME nicht gesetzt. Server kann nicht starten.")
sys.exit(1)
logger.info("GrampsWeb MCP Server startet URL: %s, User: %s", _gramps_url, _gramps_user)
# ──────────────────────────────────────────────────────────────────────────────
# MCP Server Initialisierung
# ──────────────────────────────────────────────────────────────────────────────
from mcp.server.fastmcp import FastMCP # noqa: E402
mcp = FastMCP(
"GrampsWeb Ahnenforschung",
instructions=(
"MCP-Server für die GrampsWeb-Genealogie-Datenbank der Stiftung. "
"Bietet Zugriff auf Personen, Familien, Ereignisse, Orte, Quellen, "
"Medien und Notizen des Stammbaums. "
f"Verbunden mit: {_gramps_url}"
),
)
# ──────────────────────────────────────────────────────────────────────────────
# Lese-Tools registrieren (Phase 1)
# ──────────────────────────────────────────────────────────────────────────────
from gramps_mcp_server.tools.lesen import ( # noqa: E402
ereignis_details,
familie_details,
medien_liste,
notiz_details,
ort_details,
ort_suchen,
person_details,
person_suchen,
quelle_details,
quelle_suchen,
stammbaum_export,
stammbaum_info,
)
mcp.tool()(person_suchen)
mcp.tool()(person_details)
mcp.tool()(familie_details)
mcp.tool()(ereignis_details)
mcp.tool()(ort_suchen)
mcp.tool()(ort_details)
mcp.tool()(quelle_suchen)
mcp.tool()(quelle_details)
mcp.tool()(stammbaum_export)
mcp.tool()(medien_liste)
mcp.tool()(notiz_details)
mcp.tool()(stammbaum_info)
# ──────────────────────────────────────────────────────────────────────────────
# Server starten
# ──────────────────────────────────────────────────────────────────────────────
if __name__ == "__main__":
mcp.run(transport="stdio")