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>
91 lines
3.8 KiB
Python
91 lines
3.8 KiB
Python
"""
|
||
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")
|