3gpp-mcp
3gpp-mcp
Ein MCP-Server (Model Context Protocol), der LLMs den Zugriff auf 3GPP-Spezifikationen ermöglicht.
Hintergrund
3GPP-Spezifikationen sind unverzichtbare Referenzen für die Mobilfunk- und Telekommunikationstechnik, aber für LLMs sind sie nur schwer effektiv nutzbar:
Zu viele Dokumente – Tausende von Spezifikationen existieren über mehrere Reihen hinweg, was es schwierig macht, die richtige zu finden.
Einzelne Dokumente sind zu groß – Viele Spezifikationen sind hunderte Seiten lang und überschreiten typische Kontextfenster bei Weitem.
Verteilung als Word-Dateien – Spezifikationen werden im
.docx/.doc-Format veröffentlicht und müssen für die Textverarbeitung konvertiert werden.Starke Querverweise – Spezifikationen verweisen häufig aufeinander; das Lesen eines einzelnen Dokuments isoliert ergibt ein unvollständiges Bild.
Informationen in Tabellen und Abbildungen – Komplexe Tabellen und Ablaufdiagramme enthalten kritische Details. Dieses Tool konvertiert Tabellen in Markdown und extrahiert eingebettete Bilder zur Ansicht durch LLMs.
Versionskomplexität – Dieselbe Spezifikation existiert in mehreren 3GPP-Releases, und die Identifizierung der richtigen Version ist wichtig.
Dieses Tool adressiert diese Herausforderungen, indem es die .docx-Dateien analysiert, den Inhalt nach Abschnitten strukturiert und alles in einer SQLite-Datenbank mit Volltextsuche (FTS5) speichert. Ein MCP-Server stellt dann Werkzeuge zur Suche, zum Navigieren nach Abschnitten und zum Verfolgen von Querverweisen bereit – so kann ein LLM die Spezifikationen wie ein Ingenieur durchsuchen.
Warum nicht RAG?
Embedding-basiertes RAG ist eine gängige Methode zur Verbesserung der Genauigkeit bei Dokumenten-Fragen und -Antworten, und es gibt spezialisierte RAG-Systeme für 3GPP-Dokumente (Telco-RAG, TelcoAI). Dieses Tool verfolgt einen einfacheren Ansatz: Statt einer Retrieval-Pipeline vor dem Modell gibt es dem Modell Such- und Navigationswerkzeuge und lässt es die Spezifikationen so erkunden, wie ein Ingenieur es tun würde – Volltextsuche, dann folgt es der Abschnittshierarchie und den Querverweisen. Da die Abfrage eine einfache FTS5-Suche über strukturierte Abschnitte ist, wird kein Embedding-Modell oder Vektordatenbank benötigt, und alles lebt in einer einzigen SQLite-Datei.
Gemessen an TeleQnA verbessert dies die Genauigkeit bei Fragen zu 3GPP-Standards um 6,5 bis 12,0 Prozentpunkte über drei Modellfamilien hinweg. Der größte Teil davon kommt durch den reinen Text: eine einzelne BM25-Abfrage über dieselbe Datenbank macht +7,8 bis +9,6 Punkte davon aus. Die eigene Suche des Tools ist es, was sie bei Fragen unterscheidet, deren Antwort mehr als einen Sprung von der ersten abgerufenen Passage entfernt ist – bei Aufgaben, die aus den Spezifikationen selbst generiert wurden (Protokollcodes, ASN.1-Struktur, 5G-SBI-Schemata), beantwortet es die Fragen und zitiert korrekt in 88–100 % der Fälle und schlägt dieselbe BM25-Baseline bei jedem Aufgabentyp und jedem Modell um +26 bis +88 Punkte. Siehe BENCHMARK.md.
Related MCP server: mcp-docs
Erste Schritte
1. Installation
# Homebrew
brew install higebu/tap/3gpp-mcp
# ...or with Go 1.26+
go install github.com/higebu/3gpp-mcp/cmd/3gpp-mcp@latestVorgefertigte Binärdateien sind auch auf der Releases-Seite verfügbar. LibreOffice ist optional (erforderlich für die Konvertierung von .doc in .docx und die Konvertierung von EMF/WMF-Bildern in PNG).
2. Datenbank erstellen
Laden Sie Spezifikationen herunter und importieren Sie sie in die Datenbank. Temporäre Dateien werden nach der Verarbeitung jeder Spezifikation gelöscht, um die Festplattennutzung zu minimieren.
# Download and import the latest version of every spec (all releases)
3gpp-mcp build --latest --db data/3gpp.db --convert-doc --convert-image
# ...or restrict to a single release
3gpp-mcp build --release 19 --db data/3gpp.db --convert-doc --convert-imageDies durchsucht das 3GPP-FTP-Archiv, lädt ZIP-Dateien herunter, extrahiert und analysiert .docx-Dateien und fügt strukturierte Inhalte in die SQLite-Datenbank ein.
3. Bei Ihrem MCP-Client registrieren
Claude Code
claude mcp add --scope user 3gpp -- 3gpp-mcp serve --db /path/to/data/3gpp.dbVS Code / GitHub Copilot
code --add-mcp '{"name":"3gpp","command":"3gpp-mcp","args":["serve","--db","/path/to/data/3gpp.db"]}'GitHub Copilot CLI
Fügen Sie zu ~/.config/github-copilot/cli-mcp.json hinzu (erstellen, falls nicht vorhanden):
{
"mcpServers": {
"3gpp": {
"command": "3gpp-mcp",
"args": ["serve", "--db", "/path/to/data/3gpp.db"]
}
}
}Codex CLI
codex mcp add --name 3gpp --command 3gpp-mcp --args serve --db /path/to/data/3gpp.dbClaude Desktop
Fügen Sie zu Ihrer Konfigurationsdatei hinzu (~/Library/Application Support/Claude/claude_desktop_config.json auf macOS, %APPDATA%\Claude\claude_desktop_config.json auf Windows):
{
"mcpServers": {
"3gpp": {
"command": "3gpp-mcp",
"args": ["serve", "--db", "/path/to/data/3gpp.db"]
}
}
}4. Web-Viewer (optional)
Durchsuchen Sie Spezifikationen in Ihrem Browser, indem Sie --web zum HTTP-Transport hinzufügen:
3gpp-mcp serve --db data/3gpp.db --transport http --addr :8080 --web
# MCP endpoint: http://localhost:8080/mcp/
# Web viewer: http://localhost:8080/Funktionen: Spezifikationsliste mit Filterung, Abschnittsansicht mit Inhaltsverzeichnis-Seitenleiste, Volltextsuche mit Paginierung, Durchsuchen vergangener Versionen (Versionen werden pro Spezifikation aufgelistet und bei Bedarf heruntergeladen, wie die MCP-Werkzeuge), Versionsvergleich (strukturelle Zusammenfassung und abschnittsweise Unterschiede), eingebettete Bilder, Querverweis-Links, OpenAPI-Definitionen mit Syntaxhervorhebung, KaTeX-Rendering der LaTeX-Formeln, die der Konverter ausgibt, Dunkelmodus, responsives Design. Codeblöcke werden je nach Notation syntaxhervorgehoben – ASN.1, Diameter, SIP/RTSP, SDP und XML (siehe Codeblöcke).
WebMCP
Wenn der Browser die W3C WebMCP-API bereitstellt (document.modelContext, eine Chrome Origin-Trial ab 2026), registriert der Viewer beim Seitenladen alle seine MCP-Werkzeuge beim Browser, sodass ein In-Browser-Agent direkt die Spezifikationsdatenbank abfragen kann. Die Registrierung ist ein dünner Same-Origin-Passthrough zum /mcp/-Endpunkt – es gibt nichts serverseitig zu konfigurieren, und Browser ohne die API sind nicht betroffen. Während des Origin-Trials aktivieren Sie es lokal über Chrome-Flags (chrome://flags) oder für eine gemeinsame Bereitstellung stellen Sie einen Origin-Trial-Header von einem vorgelagerten Proxy bereit.
Bereitstellung
Streamable HTTP
Der HTTP-Transport ist zustandslos: Er unterstützt das MCP-Protokoll Version 2026-07-28 (kein Initialize-Handshake, keine Mcp-Session-Id), während ältere Clients (2024-11-05 bis 2025-11-25) weiterhin über anfragebezogene Sessions funktionieren.
Starten Sie den Server mit HTTP-Transport:
3gpp-mcp serve --db data/3gpp.db --transport http --addr :8080Optional Bearer-Token-Authentifizierung aktivieren:
export THREEGPP_MCP_BEARER_TOKEN=$(openssl rand -hex 32)
3gpp-mcp serve --db data/3gpp.db --transport http --addr :8080Konfigurieren Sie dann Ihren Client für die Verbindung über HTTP:
{
"mcpServers": {
"3gpp": {
"url": "http://your-server:8080",
"headers": {
"Authorization": "Bearer YOUR_SECRET_TOKEN"
}
}
}
}Bei Verwendung von --web verschiebt sich der MCP-Endpunkt nach /mcp/.
Siehe examples/systemd/ für die Produktionsbereitstellung mit systemd.
Docker
Das Dockerfile ist mehrstufig und erstellt die Datenbank direkt für ein Release, wodurch ein eigenständiges Image mit der SQLite-Datenbank (Abschnitte, OpenAPI-Definitionen und eingebettete Bilder) entsteht. Es wird keine vorgefertigte Datenbank im Build-Kontext benötigt.
# Build an image with the latest version of every spec baked in (default)
docker build -t 3gpp-mcp:latest .
# ...or restrict the database to a single release
docker build --build-arg RELEASE=19 -t 3gpp-mcp:rel19 .
# ...or cap the newest release, keeping specs that have no version in it
docker build --build-arg MAX_RELEASE=19 -t 3gpp-mcp:max-rel19 .
# stdio transport (Claude Code / IDE integration)
docker run --rm -i 3gpp-mcp:latest
# HTTP transport
docker run --rm -p 8080:8080 3gpp-mcp:latest serve --db /3gpp.db --transport http --addr :8080RELEASE standardmäßig auf latest, was die neueste Version jeder Spezifikation über alle Releases hinweg einbaut. Setzen Sie --build-arg RELEASE=<n> (z.B. 19), um die Datenbank auf ein einzelnes Release zu beschränken, oder --build-arg MAX_RELEASE=<n>, um das neueste Release zu begrenzen, ohne Spezifikationen fallen zu lassen, die keine Version darin haben. Beide können nicht kombiniert werden.
Cloud Run
Informationen zur Ausführung auf Cloud Run finden Sie in cloudbuild.yaml (Build + Push + Deploy) und service.yaml (Cloud Run-Dienstspezifikation).
Werkzeuge
Jedes unten aufgeführte Werkzeug hat auch einen CLI-Zwilling (list_specs → 3gpp-mcp list-specs und so weiter) für die Shell-Nutzung und Skripterstellung – siehe die Abfragebefehle in der Befehlsreferenz.
Durchsuchen von Spezifikationen
Werkzeug | Beschreibung | Wichtige Parameter |
| Verfügbare Spezifikationen auflisten (paginiert) |
|
| Versionen einer Spezifikation auflisten und wo jede gelesen werden kann |
|
| Inhaltsverzeichnis einer Spezifikation abrufen |
|
| Abschnittsinhalt abrufen (paginiert) |
|
| Zwei Versionen einer Spezifikation vergleichen: strukturelle Zusammenfassung oder Abschnittstext-Diff |
|
Jedes Ergebnis von get_toc, get_section und search nennt die Spezifikation und Version, aus der es stammt, auf jeder Seite einer paginierten Antwort.
Vergangene Versionen
Die Datenbank enthält eine Version pro Spezifikation. Um eine andere Version zu lesen, übergeben Sie version an get_section oder get_toc. version akzeptiert die punktierte Form (15.8.0), das Archiv-Token (f80), einen Release-Selektor (Rel-15 oder 15, wählt die neueste Version in diesem Release) oder latest. Release-Selektoren und latest werden gegen das 3GPP-Archiv aufgelöst, erfordern also On-Demand-Abruf (sie funktionieren nicht unter --no-fetch). old_version und new_version von compare_versions akzeptieren dieselben Formen; new_version standardmäßig auf die Version in der Datenbank.
Eine Version, die nicht in der Datenbank ist, wird aus dem 3GPP-Archiv heruntergeladen und bei der ersten Verwendung konvertiert. Dies dauert bei einer großen Spezifikation bis zu einigen Minuten; wenn es noch läuft, während das Budget des Aufrufs abläuft, sagt das Werkzeug dies und derselbe später wiederholte Aufruf gibt den Inhalt zurück. Ergebnisse werden in einem größenbegrenzten Cache (siehe serve) aufbewahrt, der getrennt von der Hauptdatenbank ist, daher:
searchdeckt nur die Version in der Datenbank ab – herstellerübergreifende Volltextsuche wird nicht unterstütztget_referenceshat nur Daten für die Version in der Datenbank, und ein aus einer archivierten Version gelesener Abschnitt sagt dies in seinem Headerget_imageundlist_imagesakzeptieren ebenfalls eineversion: Bilder einer archivierten Version werden bei ihrer ersten Verwendung heruntergeladen (ein zusätzlicher Archiv-Download pro Version, mit demselben Wiederholungsverhalten), und EMF/WMF-Abbildungen werden in PNG konvertiert, wenn LibreOffice auf dem Server installiert istAbschnittsnummern verschieben sich zwischen Releases; überprüfen Sie
get_tocfür die ältere Version, bevor Sie einen Abschnitt davon lesen
Suche
Werkzeug | Beschreibung | Wichtige Parameter |
| Volltextsuche über alle Spezifikationen |
|
Das search-Werkzeug unterstützt die SQLite FTS5-Abfragesyntax:
Phrasensuche:
"service based interface"Boolesche Operatoren:
AMF AND UE,AMF OR SMF,NOT deprecatedAusschluss nach einem positiven Begriff:
handover -conditionalPräfixübereinstimmung:
handov*Spaltenfilter:
title:authentication,content:handoverNähe:
NEAR(AMF UE, 5)
Begriffe, die Bindestriche oder Punkte enthalten (IMS-AKA, 38.101), werden automatisch in Anführungszeichen gesetzt, sodass kein manuelles Escapen erforderlich ist.
Querverweise
Tool | Beschreibung | Wichtige Parameter |
| Querverweise zwischen Spezifikationen und RFCs abrufen |
|
OpenAPI-Definitionen
Tool | Beschreibung | Wichtige Parameter |
| Verfügbare OpenAPI-Definitionen auflisten |
|
| OpenAPI-Definition abrufen (paginiert) |
|
| Volltextsuche über OpenAPI-Definitionen |
|
search_openapi verwendet einen eigenen FTS5-Index, getrennt von dem, den search verwendet:
search durchsucht Spezifikationsklauseltexte und gibt niemals OpenAPI-Inhalte zurück,
search_openapi durchsucht ausschließlich OpenAPI-Inhalte. Ein Treffer ist eine Definition und nicht ein Dokument – ein Schema aus components.schemas oder eine HTTP-Methode eines Pfades (benannt wie PUT /nf-instances/{nfInstanceID}) – sodass Sie einen Datentyp oder einen Endpunkt finden können, ohne zu wissen, welches API-Dokument ihn definiert, und ihn dann mit get_openapi vollständig lesen können. Eine Abfrage, die ein einzelner nackter Begriff ist, bewertet eine Definition mit genau diesem Namen zuerst, sodass NFProfile das NFProfile-Schema vor den Schemata zurückgibt, die es nur referenzieren.
Der indizierte Text eines Schemas enthält eine Ebene der $ref-Erweiterung – über items und additionalProperties sowie direkt, was der Art und Weise entspricht, wie die 5G-SBI-Definitionen die meisten ihrer Beziehungen darstellen – sodass die Felder eines referenzierten Typs aus dem Schema, das ihn verwendet, durchsuchbar sind; ein zwei Schritte entfernter Typ ist in diesem Text nicht enthalten. Im Gegensatz zu search wendet dieser Index keine Wortstammerweiterung an – Bezeichner werden wie geschrieben abgeglichen – und -, . und _ trennen Token, sodass Nnrf_NFManagement auch durch NFManagement und /nf-instances durch instances gefunden wird. camelCase wird nicht getrennt.
Der Index wird am Ende von build und update erstellt. import und import-dir lassen ihn unberührt: Die YAML-Dateien werden im Archiv-Zip mitgeliefert, sodass das Importieren einer .docx-Datei nicht ändern kann, was es zu indizieren gibt. Eine Datenbank, die vor der Existenz dieses Tools erstellt wurde, hat keinen Index; fügen Sie ihn mit build-openapi-index nachträglich hinzu.
ASN.1-Definitionen
Tool | Beschreibung | Wichtige Parameter |
| Eine ASN.1-Zuweisung nach Namen abrufen – in einer Spezifikation oder über alle hinweg – oder die Zuweisungsnamen einer Spezifikation auflisten |
|
Die ASN.1-spezifizierten Protokolle (RRC TS 38.331/36.331, NGAP TS 38.413, S1AP TS 36.413, XnAP, F1AP, ...) schreiben ihr ASN.1 zwischen -- ASN1START / -- ASN1STOP-Markierungen, die der Konverter als ```asn1-Fences speichert (siehe Codeblöcke). get_asn1 extrahiert jede Zuweisung der obersten Ebene – Typen, Konstanten und Informationsobjekte – aus diesen Fences.
Mit name wird der vollständige Text dieser Zuweisung zusammen mit dem Abschnitt, der sie definiert, zurückgegeben, sodass die Antwort zitiert werden kann. Dies ist wichtig für die Protokolle, die alle ihre IEs in einer Klausel definieren: Die IE-Definitionsklausel von NGAP ist Hunderte von Kilobyte groß, weit mehr als eine get_section-Seite, während die eine Definition, die die Frage beantwortet „Welchen Bereich erlaubt das ASN.1 hier?“, nur wenige Zeilen umfasst. Der Abgleich ignoriert Groß-/Kleinschreibung und Trennzeichen, sodass die IE-Tabelle AMF UE NGAP ID das ASN.1 AMF-UE-NGAP-ID findet; ein Name, der nichts findet, erhält Vorschläge für ähnliche Namen. Ein Name, der mehrfach definiert ist, gibt jede Definition zurück, jede unter ihrer eigenen Quellzeile.
Wenn Sie nicht wissen, welche Spezifikation einen Namen definiert, lassen Sie spec_id weg: Der Name wird über alle Spezifikationen in der Datenbank aufgelöst, aus einem Namensindex, der zur Datenbankerstellungszeit erstellt wird (build, update, import und import-dir aktualisieren ihn alle). Eine Suche, die die falsche Spezifikation angibt, erhält die Information, wo der Name tatsächlich definiert ist. Eine Datenbank, die vor der Existenz dieses Tools erstellt wurde, hat keinen Index – fügen Sie ihn mit build-asn1-index nachträglich hinzu. Die spezifikationsübergreifende Auflösung deckt nur die Datenbankversionen ab – übergeben Sie spec_id (und optional version), um eine archivierte Version zu lesen, mit demselben On-Demand-Download-Verhalten wie get_section.
Mit einer spec_id und ohne name listet es jeden Zuweisungsnamen auf, gruppiert nach dem definierenden Abschnitt.
Eingebettete Bilder
Tool | Beschreibung | Wichtige Parameter |
| Eingebettete Bilder in einer Spezifikation auflisten |
|
| Ein eingebettetes Bild als base64-Daten abrufen, die von LLMs angezeigt werden können |
|
PNG/JPEG/GIF/WebP-Bilder sind direkt von LLMs anzeigbar. EMF/WMF-Bilder (die meisten 3GPP-Abbildungen verwenden dieses Format) werden standardmäßig als Rohdaten gespeichert; verwenden Sie --convert-image, um sie zur Build-Zeit über LibreOffice in PNG zu konvertieren.
Abbildungen werden im Abschnittstext in einer einheitlichen Notation referenziert, unabhängig vom Bildformat:  im Fließtext und <img src="image://NAME?w=&h=" ...> in Tabellenzellen. Übergeben Sie diesen NAME an get_image; sowohl der ursprüngliche Dateiname (image3.emf) als auch der konvertierte (image3.png) werden aufgelöst.
Codeblöcke
Abschnittstexte enthalten getaggte Code-Fences, sodass sowohl LLMs als auch der Web-Viewer die Notationen unterscheiden können:
Fence | Inhalt |
| ASN.1-Module zwischen den |
| Diameter-Befehls- und gruppierte AVP-Definitionen (RFC 6733 CCF) |
| XML-Schemata, XML-Body-Beispiele und DTDs |
| SIP/RTSP-Nachrichtenbeispiele |
| Eigenständige SDP-Sitzungsbeschreibungen |
| Eigenständige Gleichungen, die aus Word-OMML konvertiert wurden |
| Alles andere, was das Quelldokument als Code formatiert |
Formeln
Word-Formeln (OMML) werden in drei Notationen in LaTeX konvertiert, sodass eine Formel lesbar ist, egal ob sie allein steht oder in einem Satz sitzt:
Notation | Wo |
| Ein Absatz, dessen einziger Inhalt eine Gleichung ist. Ihre Gleichungsnummer bleibt als |
| Angezeigte Gleichungen, die kein Fence-Block sein können – innerhalb einer Tabellenzelle oder eines Listeneintrags. |
| Eine Formel innerhalb eines Satzes. |
Einrückung
3GPP-Prosa kodiert Struktur in Einrückungen – verschachtelte Anforderungs- und Bedingungslisten, mehrstufige Definitionen. Der führende Leerraum eines Textabsatzes wird als geschützte Leerzeichen (U+00A0) beibehalten, wobei ein Tabulator des Quelldokuments zu vier wird: Ein wörtlicher Tabulator oder 4+ führende Leerzeichen würden die Zeile in einen eingerückten Codeblock in Markdown verwandeln (in dem HTML wie <sub> nie interpretiert wird), während geschützte Leerzeichen die visuelle Verschachtelung in jedem Renderer erhalten und der Volltextsuche nicht im Weg stehen.
Tipps
Dem Modell sagen, dass es die Tools verwenden soll
Das Anhängen des Servers führt nicht automatisch dazu, dass ein Modell ihn konsultiert: Wenn die Wahl besteht, beantworten einige Modelle 3GPP-Fragen aus dem Gedächtnis. Im Benchmark übersprang Claude Sonnet 5 den Abruf bei 40 % der TeleQnA-Fragen und GPT 5.6 Luna bei 60 %, und bei diesen Fragen waren die Tools wertlos. Ein Satz im System-Prompt des Clients entfernt dieses Ermessen. Die gemessene Formulierung:
Antworten Sie nicht aus dem Gedächtnis. Durchsuchen Sie zuerst die Spezifikationen und stützen Sie Ihre Antwort auf den Text, den Sie abrufen, auch wenn Sie sicher sind, dass Sie die Antwort bereits kennen.
Dieser Satz senkte Lunas Überspringrate auf null und steigerte seinen Gewinn von +5,9 auf +12,0 Punkte, bewegte nichts bei einem Modell, das bereits jede Frage durchsuchte, und ist ohne die angehängten Tools wertlos – es erzwingt den Abruf, anstatt eine Antwort einzuschmuggeln. Strengere Hausregeln im gleichen Geist – stützen Sie jede Antwort über 3GPP auf Klauseltexte, die mit diesen Tools abgerufen wurden, und zitieren Sie die Klausel – sind vernünftig, aber nur der obige Satz ist das, was der Benchmark gemessen hat.
Separate Datenbanken pro Release
Für punktuelle Vergleiche zwischen Releases benötigen compare_versions und der Parameter version keine zusätzliche Einrichtung. Das Erstellen einer separaten Datenbank pro Release lohnt sich dennoch, wenn Sie kontinuierlich mit einem Release arbeiten: Volltext-search, get_references und OpenAPI-Definitionen decken nur die in der Datenbank eingebackene Version ab, sodass eine releasespezifische Datenbank Ihnen alle drei für dieses Release bietet, ohne On-Demand-Downloads.
# Build databases for different releases
3gpp-mcp build --release 18 --db data/3gpp-rel18.db --convert-doc --convert-image
3gpp-mcp build --release 19 --db data/3gpp-rel19.db --convert-doc --convert-image--release behält nur Spezifikationen, die eine Version in genau diesem Release haben, sodass eine in einem früheren Release eingefrorene Spezifikation (z. B. TS 34.108) vollständig in der Datenbank fehlt. Um ein Release festzulegen, ohne diese Spezifikationen zu verlieren, begrenzen Sie stattdessen die Auswahl – jede Spezifikation wird in ihrer neuesten Version auf oder unter der Grenze genommen:
# Everything as of Release 19: specs with no Rel-19 version fall back to their
# newest older version rather than dropping out.
3gpp-mcp build --max-release 19 --db data/3gpp-rel19.db --convert-doc --convert-image
# Keep the cap when refreshing the database later.
3gpp-mcp update --max-release 19 --db data/3gpp-rel19.db --convert-docRegistrieren Sie sie als separate MCP-Server:
claude mcp add --scope user 3gpp-rel18 -- 3gpp-mcp serve --db /path/to/data/3gpp-rel18.db
claude mcp add --scope user 3gpp-rel19 -- 3gpp-mcp serve --db /path/to/data/3gpp-rel19.dbSpezifikationen auf dem neuesten Stand halten
Verwenden Sie den Befehl update, um nach neueren Versionen von Spezifikationen zu suchen, die bereits in Ihrer Datenbank sind:
3gpp-mcp update --db data/3gpp.db --convert-doc --convert-imageBefehlsreferenz
serve
Starten Sie den MCP-Server.
Flag | Beschreibung | Standard |
| Pfad zur SQLite-Datenbank |
|
| Transporttyp: |
|
| HTTP-Listen-Adresse (env: |
|
| Bearer-Token für HTTP-Authentifizierung (env: | |
| Web-Viewer neben dem MCP-Server aktivieren (nur HTTP-Transport) |
|
| On-Demand-Abruf von Spezifikationsversionen, die nicht in der Datenbank sind, deaktivieren |
|
| Pfad zum On-Demand-Versionscache |
|
| Größenbegrenzung des Versionscaches in MB. |
|
| Wie lange ein Tool-Aufruf auf einen On-Demand-Abruf wartet, bevor der Aufrufer um eine Wiederholung gebeten wird (env: |
|
Der Versionscache ist eine separate SQLite-Datei, sodass die Hauptdatenbank schreibgeschützt bleibt und niemals mit zusätzlichen Versionen verunreinigt wird. Wenn der Cache nicht erstellt werden kann – bei einem schreibgeschützten oder flüchtigen Dateisystem, wie dem scratch-basierten Container-Image – protokolliert der Server eine Warnung und läuft mit deaktiviertem On-Demand-Abruf; alles andere funktioniert weiterhin. Zwischengespeicherte Versionen werden nach dem Prinzip „am wenigsten zuletzt verwendet“ entfernt, sobald die Größenbegrenzung überschritten wird.
Der HTTP-Transport stellt auch GET /health bereit, das 200 OK ohne Authentifizierung zurückgibt. Verwenden Sie diesen Pfad für Plattform-Health-Checks (Cloud Run, Sakura AppRun, Kubernetes-Liveness/Readiness-Probes usw.).
build
Spezifikationen herunterladen und in die Datenbank importieren (empfohlen für die Ersteinrichtung). Alias: pipeline.
Flag | Beschreibung | Standard |
| Pfad zur SQLite-Ausgabedatenbank |
|
| Spezifikationen für eine bestimmte Version verarbeiten (z. B. | |
| Die Auswahl auf eine Version begrenzen (z. B. | |
| Jede Spezifikation in ihrer neuesten Version auswählen (verwenden, wenn kein anderer Selektor angegeben ist) |
|
| Eine bestimmte Spezifikation verarbeiten (z. B. | |
| Nach Serie filtern, kommagetrennt (z. B. | |
| Anzahl paralleler Arbeiter | NumCPU |
|
|
|
| EMF/WMF-Bilder mit LibreOffice in PNG konvertieren |
|
| Die Spezifikationsliste aus einer Datei lesen anstatt aus dem Archiv zu scrapen (ein Selektor ist dennoch erforderlich) | |
| Den Spezifikationslistencache deaktivieren |
|
| Nebenläufigkeit für das Scrapen von Spezifikationslisten ( |
|
| HTTP-Timeout |
|
Einer von --release, --max-release, --latest, --series oder --spec muss angegeben werden, einschließlich --spec-list: die Datei liefert die Kandidateinträge und der Selektor filtert sie.
--release und --max-release unterscheiden sich darin, was mit einer Spezifikation passiert, die keine Version in der genannten Version hat: --release 19 verwirft sie, --max-release 19 behält sie in ihrer neuesten Version unterhalb der Grenze. Sie können nicht kombiniert werden.
Andere Befehle
download— Spezifikationen ohne Konvertierung herunterladen (--output-dir, Standardspecs). Erfordert einen von--release,--max-release,--latest,--seriesoder--spec, wiebuild.import— Eine einzelne.docx-Datei in die Datenbank importieren. Alias:convert. Verwendung:3gpp-mcp import --db data/3gpp.db path/to/spec.docximport-dir— Alle.docx-Dateien in einem Verzeichnis in die Datenbank importieren. Alias:convert-dir. Verwendung:3gpp-mcp import-dir --db data/3gpp.db ./specsupdate— Spezifikationen in der Datenbank auf die neuesten Versionen aktualisieren oder auf eine Obergrenze mit--max-release.build-openapi-index— Den OpenAPI-Suchindex einer vorhandenen Datenbank neu erstellen.buildundupdateerledigen dies selbst, daher dient es dem Hinzufügen des Index zu einer Datenbank, die vor der Existenz vonsearch_openapierstellt wurde:serveöffnet die Datenbank schreibgeschützt und kann sie nicht im laufenden Betrieb erstellen.build-asn1-index— Den ASN.1-Namensindex einer vorhandenen Datenbank neu erstellen.build,update,importundimport-direrledigen dies selbst, daher dient es dem Hinzufügen des Index zu einer Datenbank, die vor der Existenz vonget_asn1erstellt wurde.completion— Ein Shell-Vervollständigungsskript ausgeben:3gpp-mcp completion bash(oderzsh,fish)
Die Obergrenze wird nicht in der Datenbank gespeichert, daher benötigt eine mit --max-release 19 erstellte Datenbank dasselbe Flag bei update – andernfalls hebt das Update jede Spezifikation auf die neueste Version im Archiv an. Mit einer Obergrenze verschiebt das Update eine Spezifikation in beide Richtungen, sodass es auch eine bereits erstellte unbegrenzte Datenbank auf die Obergrenze herunterstuft; eine Spezifikation, deren sämtliche Versionen über der Obergrenze liegen, wird entfernt, da keine Version von ihr in eine begrenzte Datenbank gehört. Eine Spezifikation, die in der Archivliste fehlt, wird unberührt gelassen, da eine fehlgeschlagene Liste wie eine zurückgezogene Spezifikation aussieht.
Abfragebefehle
Die Abfragebefehle (list-specs, list-versions, get-toc, get-section,
get-asn1, compare-versions, search, list-openapi, get-openapi,
search-openapi, get-references, list-images, get-image) spiegeln die MCP-Lese-Tools 1:1 wider, sodass
die Datenbank von einer Shell aus ohne MCP-Client überprüft und per Skript gesteuert werden kann:
3gpp-mcp search --db data/3gpp.db --limit 3 "AMF AND authentication" | jq '.results[].section_number'
3gpp-mcp get-section --db data/3gpp.db "TS 23.501" 5.15.2 | lessGemeinsame Konventionen für alle:
Flags müssen vor Positionsargumenten kommen.
JSON-Ergebnisse werden nach stdout eingerückt und ohne Seitenumbrüche ausgegeben – leiten Sie sie an
jq,headoderlessweiter. Warnungen und Fortschrittshinweise gehen an stderr, sodass stdout analysierbar bleibt.Befehle, die
--versionakzeptieren (undcompare-versions), verwenden dieselben Versionsformen wie die MCP-Tools (15.8.0,f80,Rel-15,latest) und warten auf den Abschluss eines On-Demand-Downloads, anstatt Sie um eine Wiederholung zu bitten; unterbrechen Sie mit Strg-C. Sie teilen die Fetch-Flags vonserve:--no-fetch,--version-cache,--version-cache-mb,--fetch-budget. Abfragen, die keine Version nennen, erstellen nie den Versionscache (list-versionsliest einen vorhandenen Cache, um die Verfügbarkeit voncachedzu melden, wird aber keinen erstellen).Jeder Befehl akzeptiert
--db(Standard3gpp.db).
Umgebungsvariablen
Variable | Beschreibung |
| Transport für |
| HTTP-Listen-Adresse für |
| Bearer-Token für HTTP-Transport-Authentifizierung |
| PaaS-Konvention (Cloud Run / Heroku); |
| Größenbegrenzung des On-Demand-Versionscaches in MB (Standard |
| Wie lange ein Tool-Aufruf auf einen On-Demand-Abruf wartet (Standard |
| Maximale ZIP-Download-Größe (Standard |
| TTL des Spezifikationslistencaches in Stunden (Standard |
| Anfänglicher Backoff zwischen den Abrufversuchen der Archivliste in ms (Standard |
| Cache-Verzeichnisstamm, gemäß der XDG Base Directory-Spezifikation |
Maintenance
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables AI assistants to access and search 3GPP telecommunications specifications through direct integration with the TSpec-LLM dataset. Provides real-time specification content, implementation requirements, and multi-spec comparisons for 3GPP standards development.43129MIT
- Alicense-qualityDmaintenanceGeneric MCP server that exposes Markdown documentation to LLMs, enabling them to search and answer questions about any software documentation.MIT
- Alicense-qualityDmaintenanceAn MCP server that indexes documents and serves relevant context to LLMs via Retrieval Augmented Generation (RAG).24536MIT
- AlicenseAqualityBmaintenanceA local-first MCP server that ingests PDFs, extracts structure, and provides semantic search and sequential navigation tools for AI clients to query and learn from documents.10MIT
Related MCP Connectors
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
MCP server for AgentDocs (agentdocs.eu): read, search, write, comment on & share Markdown docs.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/higebu/3gpp-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server