3gpp-mcp
3gpp-mcp
3GPP 仕様を LLM から利用可能にする MCP(Model Context Protocol)サーバーです。
背景
3GPP 仕様はモバイル通信工学に不可欠なリファレンスですが、LLM で効果的に扱うには難しい面があります。
文書が多すぎる — 数千の仕様が複数のシリーズにまたがっており、適切なものを見つけるのが困難。
個々の文書が大きすぎる — 多くの仕様は数百ページに及び、典型的なコンテキストウィンドウをはるかに超える。
Word ファイルで配布される — 仕様は
.docx/.doc形式で公開されており、テキスト処理には変換が必要。相互参照が多い — 仕様同士が頻繁に参照し合うため、単独の文書だけでは不完全な情報しか得られない。
表や図に情報が集中 — 複雑な表やフロー図には重要な詳細が含まれている。このツールは表を Markdown に変換し、埋め込み画像を LLM が閲覧できるように抽出する。
バージョンの複雑さ — 同じ仕様が複数の 3GPP リリースに存在し、正しいバージョンを特定することが重要。
このツールはこれらの課題に対処するため、.docx ファイルを解析し、セクションごとに内容を構造化し、全文検索(FTS5)に対応した SQLite データベースに格納します。MCP サーバーは、検索、セクションごとの閲覧、相互参照の追跡を行うツールを公開し、LLM がエンジニアと同じように仕様をナビゲートできるようにします。
なぜ RAG ではないのか?
埋め込みベースの RAG は文書の Q&A 精度を高める一般的な手法であり、3GPP 文書に特化した RAG システムも存在します(Telco-RAG、TelcoAI)。このツールはよりシンプルなアプローチをとっています。モデルの前に検索パイプラインを構築する代わりに、モデルに検索とナビゲーションのツールを与え、エンジニアと同じように仕様を探索させます。すなわち、全文検索を行い、セクション階層と相互参照をたどります。検索は構造化されたセクションに対する単純な FTS5 検索であるため、埋め込みモデルやベクターデータベースを実行する必要はなく、すべてが単一の SQLite ファイルに収まります。
TeleQnA で測定した結果、3GPP 標準に関する質問の精度が 3 つのモデルファミリー全体で 6.5 ~ 12.0 パーセントポイント向上しました。そのほとんどは単にテキストが存在することによるものです。同じデータベースに対する単一の BM25 クエリだけで +7.8 ~ +9.6pt の向上が得られています。このツール独自の検索は、答えが最初に取得されたパッセージから 2 ホップ以上離れている質問で差を生み出します。仕様自体から生成されたタスク(プロトコルコード、ASN.1 構造、5G SBI スキーマ)では、すべてのタスクタイプとすべてのモデルで 88 ~ 100% の正解率(かつ正しく引用)を達成し、同じ BM25 ベースラインを +26 ~ +88 ポイント上回っています。詳細は BENCHMARK.md を参照してください。
Related MCP server: mcp-docs
はじめに
1. インストール
# Homebrew
brew install higebu/tap/3gpp-mcp
# ...or with Go 1.26+
go install github.com/higebu/3gpp-mcp/cmd/3gpp-mcp@latestプリビルドバイナリは リリースページ からも入手可能です。LibreOffice はオプションです(.doc から .docx への変換、および EMF/WMF 画像の PNG 変換に必要)。
2. データベースの構築
仕様をダウンロードしてデータベースにインポートします。各仕様の処理後に一時ファイルは削除され、ディスク使用量を最小限に抑えます。
# 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-imageこれにより、3GPP FTP アーカイブをスクレイピングし、ZIP ファイルをダウンロード、.docx ファイルを抽出・解析し、構造化された内容を SQLite データベースに挿入します。
3. MCP クライアントへの登録
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
~/.config/github-copilot/cli-mcp.json に追加します(存在しない場合は作成):
{
"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
設定ファイル(macOS では ~/Library/Application Support/Claude/claude_desktop_config.json、Windows では %APPDATA%\Claude\claude_desktop_config.json)に追加します:
{
"mcpServers": {
"3gpp": {
"command": "3gpp-mcp",
"args": ["serve", "--db", "/path/to/data/3gpp.db"]
}
}
}4. Web ビューア(オプション)
HTTP トランスポートに --web を追加することで、ブラウザで仕様を閲覧できます:
3gpp-mcp serve --db data/3gpp.db --transport http --addr :8080 --web
# MCP endpoint: http://localhost:8080/mcp/
# Web viewer: http://localhost:8080/機能:フィルタリング可能な仕様一覧、目次サイドバー付きセクション表示、ページネーション対応の全文検索、過去バージョンの参照(バージョンは仕様ごとに一覧表示され、MCP ツールと同様にオンデマンドでダウンロード)、バージョン比較(構造的な概要とセクションごとの差分)、埋め込み画像、相互参照リンク、シンタックスハイライト付き OpenAPI 定義、コンバーターが出力する LaTeX 数式 の KaTeX レンダリング、ダークモード、レスポンシブデザイン。コードブロックは表記法に応じてシンタックスハイライトされます — ASN.1、Diameter、SIP/RTSP、SDP、XML(コードブロック 参照)。
WebMCP
ブラウザが W3C WebMCP API(document.modelContext、2026 年時点では Chrome origin trial)を提供している場合、ビューアはページ読み込み時にすべての MCP ツールをブラウザに登録するため、ブラウザ内のエージェントが仕様データベースを直接クエリできます。この登録は、同じオリジン内の /mcp/ エンドポイントへのシンプルなパススルーです。サーバー側で設定するものはなく、API がないブラウザには影響しません。Origin trial 期間中は、Chrome フラグ(chrome://flags)でローカルに有効にするか、共有デプロイの場合はフロントエンドプロキシから Origin-Trial ヘッダーを提供してください。
デプロイ
Streamable HTTP
HTTP トランスポートはステートレスです。MCP プロトコルバージョン 2026-07-28(initialize ハンドシェイクなし、Mcp-Session-Id なし)をサポートしつつ、古いクライアント(2024-11-05 ~ 2025-11-25)はリクエストごとのセッションを通じて引き続き動作します。
サーバーを HTTP トランスポートで起動します:
3gpp-mcp serve --db data/3gpp.db --transport http --addr :8080オプションで Bearer トークン認証を有効にします:
export THREEGPP_MCP_BEARER_TOKEN=$(openssl rand -hex 32)
3gpp-mcp serve --db data/3gpp.db --transport http --addr :8080次に、クライアントを HTTP 経由で接続するように設定します:
{
"mcpServers": {
"3gpp": {
"url": "http://your-server:8080",
"headers": {
"Authorization": "Bearer YOUR_SECRET_TOKEN"
}
}
}
}--web を使用する場合、MCP エンドポイントは /mcp/ に移動します。
本番環境への systemd を使ったデプロイについては examples/systemd/ を参照してください。
Docker
Dockerfile はマルチステージビルドで、リリースのデータベースを直接構築し、SQLite データベース(セクション、OpenAPI 定義、埋め込み画像)を組み込んだ自己完結型のイメージを生成します。ビルドコンテキストに事前構築されたデータベースは必要ありません。
# 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 のデフォルトは latest で、すべてのリリースにわたる各仕様の最新バージョンが組み込まれます。--build-arg RELEASE=<n>(例:19)を設定すると、データベースを単一のリリースに制限できます。--build-arg MAX_RELEASE=<n> を設定すると、最新リリースを上限としつつ、そのリリースにバージョンがない仕様は削除されません。この 2 つは併用できません。
Cloud Run
Cloud Run で実行するには、cloudbuild.yaml(ビルド + プッシュ + デプロイ)および service.yaml(Cloud Run サービス仕様)を参照してください。
ツール
以下に示すすべてのツールには、シェルやスクリプトで使用するための CLI 版も存在します(list_specs → 3gpp-mcp list-specs など)。詳しくはコマンドリファレンスのクエリコマンドを参照してください。
仕様の参照
ツール | 説明 | 主なパラメータ |
| 利用可能な仕様を一覧表示(ページネーション対応) |
|
| 仕様のバージョンと、各バージョンをどこから読めるかを一覧表示 |
|
| 仕様の目次を取得 |
|
| セクションの内容を取得(ページネーション対応) |
|
| 仕様の 2 バージョンを比較:構造的な概要、またはセクションのテキスト差分 |
|
get_toc、get_section、search のすべての結果は、ページネーションされた応答の各ページに、仕様名とそのバージョンを表示します。
過去のバージョン
データベースには仕様ごとに 1 つのバージョンが保持されています。別のバージョンを読むには、get_section または get_toc に version を渡します。version はドット形式(15.8.0)、アーカイブトークン(f80)、リリースセレクタ(Rel-15 または 15、そのリリース内で最新のバージョンを選択)、または latest を受け入れます。リリースセレクタと latest は 3GPP アーカイブに対して解決されるため、オンデマンドでのフェッチが必要です(--no-fetch では動作しません)。compare_versions の old_version と new_version も同じ形式を受け入れます。new_version のデフォルトはデータベース内のバージョンです。
データベースにないバージョンは、最初の使用時に 3GPP アーカイブからダウンロードされ変換されます。大規模な仕様では最大数分かかる場合があります。呼び出しの予算が切れた場合、ツールはその旨を伝え、後で同じ呼び出しを繰り返すと内容が返されます。結果はメインのデータベースとは別のサイズ制限付きキャッシュ(serve 参照)に保持されます。そのため、
searchはデータベース内のバージョンのみを対象とします。リリース間の全文検索はサポートされていません。get_referencesはデータベース内のバージョンのデータのみを持ち、アーカイブ版から読み取ったセクションはヘッダーにその旨が表示されます。get_imageとlist_imagesもversionを受け入れます。アーカイブ版の画像は、それぞれの最初の使用時にダウンロードされます(バージョンごとに追加のアーカイブダウンロードが 1 回発生し、同じリトライ動作)。EMF/WMF 図は、サーバーに LibreOffice がインストールされている場合に PNG に変換されます。セクション番号はリリース間で移動することがあります。古いバージョンのセクションを読む前に、そのバージョンの
get_tocで確認してください。
検索
ツール | 説明 | 主なパラメータ |
| 全仕様にわたる全文検索 |
|
search ツールは SQLite FTS5 のクエリ構文をサポートしています:
フレーズ検索:
"service based interface"ブール演算子:
AMF AND UE、AMF OR SMF、NOT deprecated肯定語句の後の除外:
handover -conditional前方一致:
handov*列フィルタ:
title:authentication、content:handover近接検索:
NEAR(AMF UE, 5)
ハイフンやドットを含む語句(IMS-AKA、38.101)は自動的に引用符で囲まれるため、手動エスケープは不要です。
相互参照
ツール | 説明 | 主要パラメータ |
| 仕様とRFC間の相互参照を取得する |
|
OpenAPI定義
ツール | 説明 | 主要パラメータ |
| 利用可能なOpenAPI定義を一覧表示する |
|
| OpenAPI定義を取得する(ページネーション対応) |
|
| OpenAPI定義全体を全文検索する |
|
search_openapi は独自のFTS5インデックスを使用し、search が使用するものとは別です:
search は仕様の節テキストを対象とし、OpenAPIコンテンツを返しません。
search_openapi はOpenAPIコンテンツのみを対象とします。1ヒットは1文書ではなく1定義です — components.schemas のスキーマ、または1つのパスの1つのHTTPメソッド(PUT /nf-instances/{nfInstanceID} のように命名)— そのため、どのAPI文書で定義されているかを知らなくてもデータ型やエンドポイントを見つけられ、get_openapi で全文を読むことができます。単一の裸の用語であるクエリは、その名前と完全に一致する定義を最初にランク付けするため、NFProfile は NFProfile スキーマを、それを参照するだけのスキーマよりも先に返します。
スキーマのインデックス化されたテキストは、1レベルの $ref 展開を保持します — items や additionalProperties を通じて、また直接的に(これが5G SBI定義がほとんどの関係を表現する方法です)— そのため、参照される型のフィールドはそれを使用するスキーマから検索可能です。2ホップ先の型はそのテキストには含まれません。search とは異なり、このインデックスはステミングを適用しません — 識別子は記述されたまま一致します — また -、.、_ はトークンを分割するため、Nnrf_NFManagement は NFManagement でも見つかり、/nf-instances は instances でも見つかります。camelCaseは分割されません。
インデックスは build と update の最後に構築されます。import と import-dir はそのままにします:YAMLファイルはアーカイブzipに同梱されているため、.docx をインポートしてもインデックス対象が変わることはありません。このツールが存在する前に構築されたデータベースにはインデックスがありません。build-openapi-index でその場で追加します。
ASN.1定義
ツール | 説明 | 主要パラメータ |
| ASN.1割り当てを名前で取得 — 1つの仕様内または全仕様にわたって — または仕様の割り当て名を一覧表示する |
|
ASN.1で指定されたプロトコル(RRC TS 38.331/36.331、NGAP TS 38.413、S1AP TS 36.413、XnAP、F1AP、...)は、-- ASN1START / -- ASN1STOP マーカーの間にASN.1を記述し、コンバーターはそれを ```asn1 フェンスとして保存します(コードブロック を参照)。get_asn1 はそれらのフェンスからすべてのトップレベルの割り当て(型、定数、情報オブジェクト)を抽出します。
name を指定すると、その割り当ての全文とそれを定義するセクションを返すため、回答を引用できます。これは、すべてのIEを1つの節で定義するプロトコルにとって重要です:NGAPのIE定義節は数百キロバイトあり、get_section の1ページをはるかに超えますが、「ASN.1がここで許可する範囲は何か」という質問に答える1つの定義は数行です。マッチングは大文字小文字と区切り文字を無視するため、IEテーブルの AMF UE NGAP ID はASN.1の AMF-UE-NGAP-ID を見つけます。何も一致しない名前には類似した名前が提案されます。複数回定義された名前は、それぞれのソース行の下にすべての定義を返します。
どの仕様が名前を定義しているかわからない場合は、spec_id を省略します:名前はデータベース内のすべての仕様にわたって解決され、データベース構築時(build、update、import、import-dir はすべて更新します)に構築される名前インデックスから取得されます。間違った仕様を指定したルックアップは、名前が実際に定義されている場所を通知されます。このツールが存在する前に構築されたデータベースにはインデックスがありません — build-asn1-index でその場で追加します。仕様間解決はデータベースバージョンのみをカバーします — アーカイブバージョンを読むには spec_id(およびオプションで version)を渡します。get_section と同じオンデマンドダウンロード動作です。
spec_id を指定して name を指定しない場合、定義セクションごとにグループ化されたすべての割り当て名を一覧表示します。
埋め込み画像
ツール | 説明 | 主要パラメータ |
| 仕様内の埋め込み画像を一覧表示する |
|
| 埋め込み画像をLLMが表示可能なbase64データとして取得する |
|
PNG/JPEG/GIF/WebP画像はLLMが直接表示できます。EMF/WMF画像(ほとんどの3GPP図はこの形式を使用)はデフォルトで生データとして保存されます。ビルド時に --convert-image を使用してLibreOffice経由でPNGに変換します。
図は、画像形式に関係なく、単一の表記法でセクションテキストから参照されます:本文では 、テーブルセル内では <img src="image://NAME?w=&h=" ...>。その NAME を get_image に渡します。元のファイル名(image3.emf)と変換後のファイル名(image3.png)の両方が解決されます。
コードブロック
セクションテキストにはタグ付きコードフェンスが含まれているため、LLMとWebビューアの両方が表記法を区別できます:
フェンス | 内容 |
|
|
| Diameterコマンドとグループ化されたAVP定義(RFC 6733 CCF) |
| XMLスキーマ、XML本文の例、DTD |
| SIP/RTSPメッセージ例 |
| スタンドアロンのSDPセッション説明 |
| Word OMMLから変換されたスタンドアロンの方程式 |
| ソース文書がコードとしてスタイル設定しているその他すべて |
数式
Wordの数式(OMML)は3つの表記法でLaTeXに変換されるため、数式が単独で存在する場合でも文の中にある場合でも読み取り可能です:
表記法 | 場所 |
| 唯一の内容が方程式である段落。方程式番号は |
| フェンスブロックにできない表示方程式 — テーブルセル内やリスト項目内。 |
| 文内の数式。 |
インデント
3GPPの散文はインデントに構造をエンコードします — ネストされた要件と条件リスト、多レベル定義。本文段落の先頭の空白は、改行しないスペース(U+00A0)として保持され、ソース文書の1タブは4つになります:リテラルタブまたは4つ以上の先頭スペースは、行をMarkdownのインデントされたコードブロックに変えてしまいます(その中では <sub> のようなHTMLは決して解釈されません)。一方、改行しないスペースは、どのレンダラーでも視覚的なネストを維持し、全文検索の邪魔になりません。
ヒント
モデルにツールを使用するよう指示する
サーバーをアタッチしても、それだけでモデルがそれを参照するわけではありません:選択肢がある場合、一部のモデルは記憶から3GPPの質問に答えます。ベンチマークでは、Claude Sonnet 5はTeleQnAの質問の40%で検索をスキップし、GPT 5.6 Lunaは60%でスキップし、それらの質問ではツールはまったく価値がありませんでした。クライアントのシステムプロンプトに一文を追加することで、その裁量がなくなります。測定された文言:
記憶から答えないでください。最初に仕様を検索し、取得したテキストに基づいて回答してください。たとえ答えをすでに知っていると確信している場合でも。
その一文により、Lunaのスキップ率はゼロになり、その利得は+5.9ポイントから+12.0ポイントに向上し、すでにすべての質問を検索していたモデルには影響を与えず、ツールがアタッチされていない場合は価値がありません — 回答を密輸するのではなく、検索を強制します。同じ精神のより強いハウスルール — 3GPPに関するすべての回答は、これらのツールを通じて取得された節テキストに基づき、節を引用すること — は妥当ですが、ベンチマークで測定されたのは上記の文だけです。
リリースごとに個別のデータベース
リリース間のスポット比較には、compare_versions と version パラメータで追加の設定は不要です。それでも、1つのリリースに対して継続的に作業する場合、リリースごとに個別のデータベースを構築すると効果的です:全文 search、get_references、OpenAPI定義はデータベースに組み込まれたバージョンのみをカバーするため、リリース固有のデータベースは、オンデマンドダウンロードなしでそのリリースの3つすべてを提供します。
# 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 は、その正確なリリースにバージョンがある仕様のみを保持するため、以前のリリースで凍結された仕様(たとえばTS 34.108)はデータベースから完全に欠落します。それらの仕様を失わずにリリースを固定するには、代わりに選択範囲を上限で制限します — すべての仕様は、上限以下の最新バージョンで取得されます:
# 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-docそれらを個別のMCPサーバーとして登録します:
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.db仕様を最新に保つ
update コマンドを使用して、データベース内の仕様の新しいバージョンを確認します:
3gpp-mcp update --db data/3gpp.db --convert-doc --convert-imageコマンドリファレンス
serve
MCPサーバーを起動します。
フラグ | 説明 | デフォルト |
| SQLiteデータベースへのパス |
|
| トランスポートタイプ: |
|
| HTTP リスンアドレス (環境変数: |
|
| HTTP 認証用のベアラートークン (環境変数: | |
| MCP サーバーと一緒に Web ビューアーを有効にする (HTTP トランスポートのみ) |
|
| データベースにない仕様バージョンのオンデマンドフェッチを無効にする |
|
| オンデマンドバージョンキャッシュへのパス |
|
| バージョンキャッシュのサイズ制限 (MB)。 |
|
| ツール呼び出しがオンデマンドフェッチを待ってから呼び出し元に再試行を依頼するまでの時間 (環境変数: |
|
バージョンキャッシュは別の SQLite ファイルであるため、メインデータベースは読み取り専用のままで、余分なバージョンで汚染されることはありません。キャッシュを作成できない場合(scratch ベースのコンテナイメージなど、読み取り専用またはエフェメラルなファイルシステム)、サーバーは警告をログに記録し、オンデマンドフェッチを無効にして実行します。その他の機能はすべて正常に動作します。キャッシュされたバージョンは、サイズ制限を超えると、最も最近使用されていないものから削除されます。
HTTP トランスポートは GET /health も公開し、認証なしで 200 OK を返します。このパスをプラットフォームのヘルスチェック(Cloud Run、Sakura AppRun、Kubernetes の liveness/readiness プローブなど)に使用してください。
build
データベースに仕様をダウンロードしてインポートします(初期セットアップに推奨)。エイリアス: pipeline。
フラグ | 説明 | デフォルト |
| 出力 SQLite データベースパス |
|
| 特定のリリース(例: | |
| リリースで選択を制限する(例: | |
| すべての仕様を最新バージョンで選択する(他のセレクターが指定されていない場合に使用) |
|
| 特定の仕様(例: | |
| シリーズでフィルタリング、カンマ区切り(例: | |
| 並列ワーカー数 | NumCPU |
| LibreOffice を使用して |
|
| LibreOffice を使用して EMF/WMF 画像を PNG に変換する |
|
| アーカイブをスクレイピングする代わりにファイルから仕様リストを読み取る(セレクターは引き続き必要) | |
| 仕様リストキャッシュを無効にする |
|
| 仕様リストスクレイピングの同時実行数( |
|
| HTTP タイムアウト |
|
--release、--max-release、--latest、--series、または --spec のいずれかを指定する必要があります。--spec-list を含む場合: ファイルが候補エントリを提供し、セレクターがそれらをフィルタリングします。
--release と --max-release は、指定されたリリースにバージョンがない仕様の扱いが異なります: --release 19 はそれをドロップし、--max-release 19 は制限以下の最新バージョンで保持します。これらは組み合わせて使用できません。
その他のコマンド
download— 変換せずに仕様をダウンロードします(--output-dir、デフォルトspecs)。buildと同様に、--release、--max-release、--latest、--series、または--specのいずれかが必要です。import— 単一の.docxファイルをデータベースにインポートします。エイリアス:convert。使用法:3gpp-mcp import --db data/3gpp.db path/to/spec.docximport-dir— ディレクトリ内のすべての.docxファイルをデータベースにインポートします。エイリアス:convert-dir。使用法:3gpp-mcp import-dir --db data/3gpp.db ./specsupdate— データベース内の仕様を最新バージョン、または--max-releaseで指定された上限に更新します。build-openapi-index— 既存のデータベースの OpenAPI 検索インデックス を再構築します。buildとupdateはこれを自動的に行うため、search_openapiが存在する前に構築されたデータベースにインデックスを追加するためのものです:serveはデータベースを読み取り専用で開くため、その場で作成できません。build-asn1-index— 既存のデータベースの ASN.1 名前インデックス を再構築します。build、update、import、import-dirはこれを自動的に行うため、get_asn1が存在する前に構築されたデータベースにインデックスを追加するためのものです。completion— シェル補完スクリプトを出力します:3gpp-mcp completion bash(またはzsh、fish)
上限はデータベースに保存されないため、--max-release 19 で構築されたデータベースは update でも同じフラグが必要です。そうしないと、更新によりすべての仕様がアーカイブの最新リリースに引き上げられます。上限がある場合、更新は仕様を双方向に移動するため、既に構築された上限なしのデータベースも上限まで引き下げます。すべてのバージョンが上限を超えている仕様は削除されます。これは、上限付きデータベースにはその仕様のどのバージョンも属さないためです。アーカイブリストにない仕様はそのまま残されます。これは、リストの取得に失敗した場合と仕様が撤回された場合が同じように見えるためです。
クエリコマンド
クエリコマンド(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)は MCP 読み取りツールと 1:1 で対応しているため、MCP クライアントなしでシェルからデータベースを検査およびスクリプト化できます:
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 | lessすべてに共通する規則:
フラグは位置引数の前に置く必要があります。
JSON 結果はインデントされ、ページ分割されずに stdout に出力されます —
jq、head、またはlessにパイプしてください。警告と進行状況は stderr に出力されるため、stdout は解析可能なままです。--version(およびcompare-versions)を受け入れるコマンドは、MCP ツールと同じバージョン形式(15.8.0、f80、Rel-15、latest)を受け入れ、再試行を求める代わりにオンデマンドダウンロードが完了するのを待ちます。Ctrl-C で中断します。これらはserveのフェッチフラグを共有します:--no-fetch、--version-cache、--version-cache-mb、--fetch-budget。バージョンを指定しないクエリは、バージョンキャッシュを作成しません(list-versionsは既存のキャッシュを読み取ってcachedの可用性を報告しますが、作成はしません)。すべてのコマンドは
--db(デフォルト3gpp.db)を受け入れます。
環境変数
変数 | 説明 |
|
|
|
|
| HTTP トランスポート認証用のベアラートークン |
| PaaS の慣例(Cloud Run / Heroku); |
| オンデマンドバージョンキャッシュのサイズ制限(MB)(デフォルト |
| ツール呼び出しがオンデマンドフェッチを待つ時間(デフォルト |
| ZIP ダウンロードの最大サイズ(デフォルト |
| 仕様リストキャッシュの TTL(時間)(デフォルト |
| アーカイブリストフェッチ試行間の初期バックオフ(ミリ秒)(デフォルト |
| XDG Base Directory 仕様に従ったキャッシュディレクトリルート |
Available Tools
13 toolscompare_versionsA
Compare two versions of a 3GPP specification. Without section_number, returns a structural summary: sections added, removed, renumbered, retitled, and whose content changed. With section_number, returns a line-level unified diff of that section's text. Use list_versions first to see which versions exist; a version not yet cached is downloaded and converted on first use — when the tool says a download is in progress, call it again with the same arguments.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Start line number (0-based, default: 0) | |
| spec_id | Yes | required,Specification ID (e.g. TS 23.501) | |
| max_chars | No | Maximum number of characters to return (can be combined with max_lines) | |
| max_lines | No | Maximum number of lines to return (default: 200) | |
| new_version | No | Newer version to compare to. Defaults to the version in the database. | |
| old_version | Yes | required,Older version to compare from (e.g. 17.9.0). Also accepts an archive token (h90) or a release selector (Rel-17). Use list_versions to see what exists. | |
| context_lines | No | Unchanged lines shown around each change in a section diff (default: 3) | |
| section_number | No | Compare only this section's text as a unified diff (e.g. 5.15.2). Omit for a structural summary of the whole specification. | |
| include_subsections | No | With section_number: include subsections in the diff (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It transparently discloses that uncached versions trigger a download that may require a second call. It also explains the two output modes. While it doesn't cover all potential edge cases (e.g., error handling), the key behavioral trait is well documented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: four sentences covering two distinct modes, prerequisites, and first-use behavior. No redundant words. Information is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters and no output schema, the description is remarkably complete. It explains the two output modes, how to pick versions, and the caching behavior. The only minor gap is that it doesn't describe the format of the structural summary, but that's a niche detail. Overall, it provides sufficient context for correct tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. However, the description adds significant context beyond the schema: it explains how 'section_number' changes the output type (summary vs. diff), and gives concrete examples like '5.15.2'. The 'old_version' description also clarifies it accepts archive tokens and release selectors, which is not in the schema. This adds substantial semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Compare two versions of a 3GPP specification', clearly defining the verb and resource. It then distinguishes two modes: without section_number (structural summary) and with section_number (line-level diff). This differentiates it from sibling tools like 'get_section' or 'list_versions'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use each mode and directs to use 'list_versions first to see which versions exist'. It also explains behavior on first use (download/conversion) and instructs to retry if a download is in progress. This is clear guidance on usage vs. alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_asn1A
Get ASN.1 definitions from the 3GPP specifications. The protocol specifications (RRC TS 38.331/36.331, NGAP TS 38.413, S1AP TS 36.413, XnAP, F1AP, LPP TS 37.355, ...) write their ASN.1 between -- ASN1START / -- ASN1STOP markers, and this tool extracts every top-level assignment from those blocks. With name, it returns the full text of that assignment — type, constant or information object — together with the specification and section that define it, so the answer can be cited. Use it when you know a type, IE or constant name and need its definition or constraints: the defining clause can be hundreds of kilobytes, which get_section can only page through. If you do not know which specification defines the name, omit spec_id — the name is resolved across every specification in the database. Matching ignores case and separators, so an IE table title like 'AMF UE NGAP ID' finds AMF-UE-NGAP-ID. With a spec_id and no name, it lists every assignment name grouped by the section that defines it. Pass version (with spec_id) to read a past version, which is downloaded and converted on first use; call list_versions first to see which versions exist.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ASN.1 assignment name (e.g. AMF-UE-NGAP-ID). Matching ignores case and separators, so an IE title like 'AMF UE NGAP ID' also resolves. Required when spec_id is omitted; with a spec_id, omit it to list every assignment name in the specification. | |
| offset | No | Start line number (0-based, default: 0) | |
| spec_id | No | Specification ID (e.g. TS 38.413). Omit it to look the name up across every specification in the database — use that when you do not know which specification defines the type. | |
| version | No | Specification version to read (e.g. 18.6.0). Also accepts an archive token (i60) or a release selector (Rel-18). Defaults to the version in the database, and requires spec_id. Use list_versions to see what exists. | |
| max_chars | No | Maximum number of characters to return (can be combined with max_lines) | |
| max_lines | No | Maximum number of lines to return (default: 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the scope of extraction (only top-level assignments from blocks between ASN1START/ASN1STOP markers), behavior with and without the name parameter, case-insensitive and separator-ignoring matching, and handling of past versions (downloaded and converted on first use). Since no annotations are provided, the description carries full burden, which it largely fulfills, though it could be more explicit about potential limitations (e.g., if the tool is destructive or read-only).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise for the amount of information conveyed, but it is somewhat lengthy (multiple sentences). It is front-loaded with the core purpose, then progressively adds details on usage modes, matching behavior, and version handling. Every sentence adds value, but some redundancy could be trimmed (e.g., explaining matching behavior both in the main description and in the parameter description).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, multiple usage modes, no output schema), the description provides comprehensive guidance on how the tool behaves in different scenarios (with/without name, with/without spec_id, with version). It also addresses how to cite results and how to discover versions. The only gap is the lack of information about the return format or output structure, but since there is no output schema, the description could be more explicit about what the tool returns (e.g., structured text, markdown, etc.).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented in the schema. The description adds extra context beyond the schema, such as the effect of omitting spec_id to search across all specs, the matching behavior (case-insensitive, separator-ignoring), and the fact that name is required when spec_id is omitted. It also explains the version parameter behavior and recommends list_versions. However, since schema coverage is complete, the description exceeds the baseline of 3 but does not substantially add new meaning for every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts ASN.1 definitions from 3GPP specifications, specifying verb ('Get', 'extracts') and resource ('ASN.1 definitions from the 3GPP specifications'). It distinguishes it from siblings like get_section by explaining that the defining clause can be hundreds of kilobytes, which get_section can only page through.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (e.g., 'Use it when you know a type, IE or constant name and need its definition or constraints') and when to use alternatives (e.g., 'the defining clause can be hundreds of kilobytes, which get_section can only page through'). It also provides guidance on omitting spec_id when the specification is unknown, and directs users to call list_versions first to see available versions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_imageA
Get an embedded image from a 3GPP specification. Returns the image as base64-encoded data that can be directly viewed by the LLM. Use list_images to discover available images for a spec. Pass version to read a past version's image; the images of an archived version are downloaded on first use, which takes up to a few minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | required,Image filename (e.g. image1.png) | |
| spec_id | Yes | required,Specification ID (e.g. TS 23.501) | |
| version | No | Specification version to read (e.g. 18.6.0). Also accepts an archive token (i60) or a release selector (Rel-18). Defaults to the version in the database. Use list_versions to see what exists. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and excels: it states the output is base64-encoded, mentions a latency caveat for archived versions ('up to a few minutes'), and explains the default version behavior. This fully discloses behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main action and output, and each sentence adds unique value. Could be slightly more concise by combining the first two sentences, but no superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 3 parameters, the description covers tool purpose, input semantics, latency behavior, and next steps via sibling links. It does not mention what happens if parameters are invalid or if an image doesn't exist, but the overall completeness is high for the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already explains each parameter well. The description adds value by clarifying `version` accepts both version strings and archive tokens, and defaults to the database version, which goes beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Get an embedded image') and resource ('3GPP specification'), and clearly distinguishes this tool from siblings like `list_images` by stating its function and output format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly points to `list_images` for discovering available images and `list_versions` for version discovery, providing clear guidance on when to use alternative tools. However, it does not mention when not to use this tool (e.g., for non-image content).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_openapiA
Get OpenAPI definition content for 5G service-based interface APIs (TS 29.xxx series). Use this tool to look up HTTP request/response details, API paths, parameters, request bodies, response schemas, and data type definitions. Use the path parameter to filter by API endpoint (e.g. /nf-instances) or the schema parameter to filter by data type (e.g. NFProfile). Use list_openapi first to discover available API names.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Filter by API path (e.g. /nf-instances) | |
| offset | No | Start line number for pagination (0-based, default: 0) | |
| schema | No | Filter by schema name (e.g. NFProfile) | |
| spec_id | Yes | required,Specification ID (e.g. TS 29.510) | |
| api_name | Yes | required,API name (e.g. Nnrf_NFManagement) | |
| max_lines | No | Maximum lines to return (default: 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the tool as a 'get' and 'look up' operation, implying it is read-only and non-destructive. However, it does not explicitly state that it is safe, nor does it mention pagination behavior (offset, max_lines) or what happens in edge cases like no results. The description is adequate but lacks explicit behavioral details beyond the verb choice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loading the purpose in the first sentence and then elaborating on capabilities and usage. Every sentence contributes meaningful information without redundancy or fluff. It is compact and immediately informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, no output schema, and no annotations, the description should provide a thorough understanding of the tool. It covers the main purpose, prerequisite workflow, and parameter usage, but it does not describe the output format (e.g., JSON/YAML), the meaning of offset and max_lines for pagination, or error handling. This leaves gaps in what a user can expect from the tool's response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The description adds value by providing concrete examples for the path parameter ('/nf-instances') and schema parameter ('NFProfile'), and by explaining the intended workflow for spec_id and api_name (use list_openapi to discover). This goes beyond the schema's structural descriptions, though it does not cover offset or max_lines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get OpenAPI definition content for 5G service-based interface APIs (TS 29.xxx series).' It distinguishes from siblings like list_openapi by specifying that it retrieves actual definition content, not just listing available APIs. The mention of looking up HTTP request/response details, paths, and schemas further clarifies the specific resource and action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to 'Use list_openapi first to discover available API names,' providing a clear prerequisite and directing to an alternative tool. It also gives specific usage guidance for parameters: 'Use the path parameter to filter by API endpoint (e.g. /nf-instances) or the schema parameter to filter by data type (e.g. NFProfile).' This tells the user exactly when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_referencesA
Get cross-references between 3GPP specifications and RFCs.
Directions:
outgoing (default): Find all specs/RFCs referenced by a given section. Requires spec_id and section_number. Use include_subsections to also gather refs from child sections.
incoming: Find all sections that reference a given spec (and optionally a specific section). Requires spec_id. section_number is optional.
Returns structured reference data including target spec, section, title (if available in DB), and context snippet. Responses are capped at 500 references; a separate notice reports the total, and offset pages through the rest.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Number of references to skip, for paging past a truncated response (default: 0) | |
| spec_id | Yes | required,Specification ID (e.g. TS 23.501) | |
| direction | No | outgoing (default): references FROM this section to other specs. incoming: references TO this spec/section from other specs. | |
| section_number | No | Section number (e.g. 5.1.2). Required for outgoing direction. | |
| include_subsections | No | Include subsections when collecting outgoing references (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully handles behavioral disclosure. It reveals the 500-reference cap, pagination via offset, and that responses include structured data plus a total-count notice. It does not mention rate limits or authorization, but those are not critical for a read-only lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for each direction, uses bullet-style formatting for readability, and every sentence adds essential guidance. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, two modes), the description covers all necessary details: parameter requirements per mode, default behaviors, response structure, pagination limit, and output format. Without an output schema, it still describes the return data adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. However, the description adds semantic value beyond the schema by explaining parameter roles in context (e.g., section_number is required for outgoing, optional for incoming) and linking params to use cases (include_subsections only relevant for outgoing).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: finding cross-references between 3GPP specs and RFCs. It distinguishes two modes (outgoing and incoming) with specific resource targets (specs, RFCs, sections), and the sibling context shows no other tool overlaps with this function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use outgoing vs incoming direction, lists required vs optional parameters for each, and notes a default behavior ('outgoing (default)'). It also mentions a cap of 500 references with pagination, guiding the agent on handling large result sets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sectionA
Get the markdown content of a specific section in a 3GPP specification. This tool is for reading specification document text (architecture, procedures, requirements). For API details such as HTTP request/response bodies, paths, and data models of 5G service-based interfaces (TS 29.xxx series), use get_openapi instead. Specify the section number with the section_number parameter (e.g. 5.1.2). Figures appear as  links; fetch one with get_image and that NAME. Formulas are LaTeX: a standalone equation is a ```latex code block (its equation number kept as \tag{7.3-1}), and a formula inside a sentence or a table cell is delimited with $...$, or $$...$$ when the source sets it as a display equation. Pass version to read a past version, which is downloaded and converted on first use; call list_versions first to see which versions exist. Large sections are paginated (default 200 lines). Use offset and max_lines to navigate.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Start line number (0-based, default: 0) | |
| spec_id | Yes | required,Specification ID (e.g. TS 23.501) | |
| version | No | Specification version to read (e.g. 18.6.0). Also accepts an archive token (i60) or a release selector (Rel-18). Defaults to the version in the database. Use list_versions to see what exists. | |
| max_chars | No | Maximum number of characters to return (can be combined with max_lines) | |
| max_lines | No | Maximum number of lines to return (default: 200) | |
| section_number | Yes | required,Section number to retrieve (e.g. 5.1.2) | |
| include_subsections | No | Include all subsections (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility. It transparently explains how figures appear as `` links and how to fetch them with `get_image`, details LaTeX formula formatting (standalone vs. inline), describes version handling (first-use download/conversion), and reveals pagination behavior (default 200 lines). It does not cover error cases or what happens for invalid sections, but the behavioral disclosure is rich and helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of ~150 words, dense but well-organized. It front-loads the core purpose and sibling distinction, then covers output format, version handling, and pagination. While it could benefit from bullet points or more whitespace for scanning, every sentence adds value and there is no repetition. It is concise for the amount of information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, 2 required, no output schema, and no annotations, the description covers purpose, usage alternatives, output format (figures, formulas), version behavior, and pagination. It does not describe error handling (e.g., invalid section/spec) or the exact structure of the return value, but it provides enough context for an agent to use the tool effectively in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all 7 parameters have descriptions), so baseline is 3. The description adds extra meaning beyond the schema: e.g., for `section_number` it gives an example ('5.1.2'), for `version` it explains the first-use download behavior, and for `offset`/`max_lines` it contextualizes pagination. This additional context improves parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the markdown content of a specific section in a 3GPP specification.' It also specifies the type of content (architecture, procedures, requirements) and explicitly distinguishes from the sibling tool `get_openapi` for API details. The verb 'get' and resource 'section' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides direct guidance on when to use this tool vs. `get_openapi` for API details. It advises to call `list_versions` first to check available versions and explains pagination with offset and max_lines. This explicit context helps the agent choose the correct tool and navigate parameters effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tocA
Get the table of contents (section structure) of a 3GPP specification. Pass version to see the structure of a past version, which is downloaded and converted on first use; section numbers often move between releases, so check the table of contents before reading a section of an older version.
| Name | Required | Description | Default |
|---|---|---|---|
| spec_id | Yes | required,Specification ID (e.g. TS 23.501) | |
| version | No | Specification version to read (e.g. 18.6.0). Also accepts an archive token (i60) or a release selector (Rel-18). Defaults to the version in the database. Use list_versions to see what exists. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It reveals that passing a 'version' triggers a download and conversion on first use, and notes that section numbers often change between releases. These are important behavioral traits. However, it does not state whether the operation is read-only or whether it has any side effects beyond the initial conversion (e.g., caching behavior). The transparency is good but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with no wasted words. The first sentence defines the core purpose, and the second sentence adds targeted usage guidance and a behavioral note. Every sentence serves a clear function, and the structure is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema), the description is nearly complete. It explains what the tool does, the version behavior, and a typical use case. It could be improved by briefly describing the return format (e.g., list of section numbers and titles), but the phrase 'section structure' provides enough context for an agent to infer the output. The absence of an output schema increases the value of a description, and this one is sufficient but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description adds minimal parameter-specific meaning beyond what the schema already provides. It mentions the 'version' parameter's purpose ('see the structure of a past version') and the conversion note, but the schema already describes the parameter's accepted formats and defaults. The description does not enrich the semantics of 'spec_id' beyond what is obvious.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('table of contents (section structure) of a 3GPP specification'). It distinguishes the purpose from siblings like 'get_section' (which reads a specific section) and 'list_versions' (which lists versions). The phrase 'check the table of contents before reading a section' further clarifies its role relative to sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: use this tool to inspect the section structure, especially before reading an older version. It warns that section numbers move between releases, implying when to use this tool over others. While it does not explicitly name alternative tools (e.g., 'get_section'), the guidance is direct and actionable. The version parameter description (in schema) adds additional hints like using 'list_versions', which compensates slightly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_imagesA
List embedded images in a 3GPP specification. Returns image names, MIME types, and whether they are viewable by LLMs. Use get_image to retrieve a specific image. Pass version to list a past version's images; the images of an archived version are downloaded on first use, which takes up to a few minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| spec_id | Yes | required,Specification ID (e.g. TS 23.501) | |
| version | No | Specification version to read (e.g. 18.6.0). Also accepts an archive token (i60) or a release selector (Rel-18). Defaults to the version in the database. Use list_versions to see what exists. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral traits such as the latency for archived versions ('takes up to a few minutes') and the defaulting behavior of the version parameter. No annotations are provided, so the description carries the full burden and does so effectively, though it could mention if the list is paginated or has size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) and well-structured, with the main action upfront, followed by sibling tool reference, and version handling details. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 parameters with full schema descriptions and no output schema, the description covers usage context well. It explains the version parameter's behavior and an edge case (archived version latency). A minor gap is not stating whether the returned list is complete or paginated, but overall it is sufficient for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for both parameters, so the baseline is 3. The description adds useful context for the 'version' parameter (e.g., about archive tokens and release selectors) beyond the schema's brief note, but does not add new info for 'spec_id'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('List embedded images in a 3GPP specification') and specifies what it returns ('image names, MIME types, and whether they are viewable by LLMs'). It distinguishes itself from sibling tools like 'get_image' by noting that 'list_images' lists images while 'get_image' retrieves a specific one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use this tool vs alternatives: 'Use get_image to retrieve a specific image.' It also explains how to handle versions, including past archived versions that may have a delay. However, it does not explicitly mention when not to use it or other exclusions beyond the sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_openapiA
List available OpenAPI definitions from 3GPP specifications (TS 29.xxx series). Use this to discover API names before calling get_openapi. Optionally filter by spec ID.
| Name | Required | Description | Default |
|---|---|---|---|
| spec_id | No | Filter by specification ID (e.g. TS 29.510) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It describes the basic action (listing definitions) and optional filtering, but does not disclose any behavioral traits such as return format, pagination, authentication requirements, or performance implications. For a simple read-only list tool, this is minimally adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences. The first sentence defines the action and resource; the second provides usage context and an optional filter. Every phrase earns its place, with no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one optional parameter, no output schema), the description is mostly complete. It links usage to get_openapi and mentions filtering. However, it does not explain the return data shape (e.g., list of API names) or differentiate from other sibling tools like list_specs or search_openapi. Slight room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the single parameter spec_id has a schema description). The description adds 'Optionally filter by spec ID,' which mirrors the schema. Since the schema already documents the parameter fully, the description adds minimal extra meaning, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List available OpenAPI definitions from 3GPP specifications (TS 29.xxx series).' It uses a specific verb ('list') and resource ('OpenAPI definitions'), and distinguishes from siblings like get_openapi (which gets a specific definition) and list_specs (which lists specs). The context 'discover API names before calling get_openapi' further clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: 'Use this to discover API names before calling get_openapi.' It also mentions optional filtering by spec ID. While it does not explicitly state when not to use it or list alternatives (e.g., list_specs), the guidance is clear and contextually useful for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_specsA
List available 3GPP specifications. Optionally filter by series number and/or by an ID prefix (query). Results are paginated (default 20 per page); use limit and offset to navigate.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 20) | |
| query | No | Filter specs whose ID starts with this text (e.g. '38.21' matches 38.211, 38.212, 38.213) | |
| offset | No | Number of results to skip for pagination (default: 0) | |
| series | No | Filter by series number (e.g. 23 for TS 23.xxx) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It adds pagination defaults and filter semantics beyond the schema, but does not mention authentication needs, output format, error behavior, or rate limits—leaving significant gaps for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first states purpose, second covers filtering and pagination. No wordiness, front-loaded key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with 4 optional parameters and no output schema, the description explains filters and pagination adequately but omits what the response looks like (e.g., fields returned, ordering). Without output schema, the description should hint at the return structure to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context that filters can be combined and how pagination works (limit/offset navigation), but most parameter meaning is already clear from schema descriptions. The added value is modest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb "List" and the resource "available 3GPP specifications." It mentions optional filtering by series and ID prefix, plus pagination—fully distinguishing this from sibling tools that list images, OpenAPI specs, or versions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains optional filtering and pagination, so the agent knows how to use it. However, it does not provide any guidance on when NOT to use this tool vs. alternatives (e.g., search, get_section), missing the opportunity to prevent misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_versionsA
List the versions of a 3GPP specification, newest first.
Each entry reports where the version can be read from:
database: in the prebuilt database, covered by search, images and cross-references
cached: fetched on demand earlier, available immediately
archive: exists upstream; reading it downloads and converts it first, which takes up to a few minutes for a large specification
Pass a version from this list to get_section or get_toc to read a past version.
| Name | Required | Description | Default |
|---|---|---|---|
| spec_id | Yes | required,Specification ID (e.g. TS 23.501) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description effectively discloses behavioral traits: newest-first order, the meaning of three statuses (database, cached, archive), and time cost for archive versions. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose sentence, bulleted details, and a usage recommendation. It is concise with no redundant information, though slightly more compacting is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description fully explains the output (list of versions with status meanings) and connects to sibling tools, making the tool's usage context complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds no meaning beyond the schema's own parameter description ('Specification ID (e.g. TS 23.501)'). Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List the versions of a 3GPP specification, newest first' – a specific verb and resource that clearly distinguishes from sibling tools like list_specs (list specifications) and list_images (list images).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for use: 'Pass a version from this list to get_section or get_toc to read a past version.' This guides when to use the tool, but does not explicitly exclude scenarios where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Full-text search across 3GPP specifications using SQLite FTS5 syntax.
Query syntax:
AND/OR/NOT: AMF AND authentication
Phrase: "service based interface"
Prefix: handov*
Column filter: title:authentication or content:handover
Proximity: NEAR(AMF UE, 5)
Hyphenated or dotted terms (e.g. IMS-AKA, sec-agree, 38.101) are auto-quoted to avoid FTS5 syntax errors.
After a positive term, "-term" excludes that term (e.g. AMF -SMF), same as NOT. An exclusion cannot begin a query or immediately follow AND/OR.
Stemming:
The index uses porter stemming: inflected English forms match each other (handover finds handovers).
Prefix and phrase queries operate on stemmed forms, so they can match a bit more broadly than the exact surface text.
Pagination:
Results come as {results, total_count, limit, offset}; total_count is the full match count.
Use limit (default 10, max 200) and offset to page through matches beyond the first page.
Tips:
Use exact 3GPP terms (AMF, SMF, gNB, UE, NRF, PCF, etc.)
Phrase search improves precision for multi-word concepts
title:term restricts matches to section headings only
Use spec_ids to search across multiple specifications at once
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results per page (default: 10, max: 200) | |
| query | Yes | required,FTS5 query string. Hyphenated or dotted terms like IMS-AKA and 38.101 are auto-quoted. Use AND/OR/NOT operators and double-quoted phrases for exact matches (e.g. '"core network" AND AMF'). | |
| offset | No | Number of results to skip for pagination (default: 0). Combine with total_count in the response to page through all matches. | |
| spec_id | No | Limit search to a single specification (e.g. TS 23.501). Ignored when spec_ids is provided. | |
| spec_ids | No | Limit search to one or more specifications (e.g. ["TS 23.501", "TS 23.502"]). Takes precedence over spec_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given there are no annotations, the description carries full burden for behavioral disclosure. It explicitly states key behaviors: auto-quoting of hyphenated/dotted terms, exclusion syntax, porter stemming, pagination with total_count, and the precedence of spec_ids over spec_id. This is comprehensive beyond what the schema reveals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections (Query syntax, Stemming, Pagination, Tips) and is well organized. It earns its length given the complexity of FTS5 syntax, but could be slightly more concise in the exclusion rules section, which repeats some details from the syntax list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers query syntax, stemming, pagination, and provides domain tips. There is no output schema, but the response structure is described inline (results, total_count, limit, offset). The description is complete for a search tool of this complexity. Minor gap: it does not explain what happens on an empty query or FTS5 syntax errors beyond auto-quoting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does add value for some parameters (e.g., explaining spec_ids precedence over spec_id, and specifying default/max for limit), but mostly the query syntax details are an extension of the 'query' parameter's natural behavior rather than new parameter-specific semantics. The description does not add meaning significantly beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear verb and resource: 'Full-text search across 3GPP specifications'. It specifies the technology (SQLite FTS5 syntax), and the query examples clearly differentiate it from sibling tools like search_openapi or list_specs. The purpose is specific and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides extensive query syntax and tips for effective search (tips on exact terms, phrase search, column filters), but it does not explicitly state when to use this tool versus alternatives like search_openapi or get_section. There is no 'when-not-to-use' guidance. Usage is implied through examples and tips but not formally defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_openapiA
Full-text search across the OpenAPI definitions of the 5G service-based interface APIs (TS 29.xxx series), using SQLite FTS5 syntax.
Use this when you need an API detail but do not know which API document holds it — searching for a data type (NFProfile, SmContextCreateData) or an endpoint (/nf-instances, subscriptions) finds it without guessing an api_name first. When you already know the document, get_openapi reads it directly.
This is a separate index from the search tool: search covers specification clause text and never returns OpenAPI content, and this tool covers OpenAPI content only.
Results:
One hit is one definition, not one document: either a schema (a data type from components.schemas) or an operation (one HTTP method of one path, named like "PUT /nf-instances/{nfInstanceID}").
A query that is a single bare term ranks a definition of exactly that name first, so searching NFProfile returns the NFProfile schema itself ahead of the schemas that merely reference it.
Each hit reports spec_id, api_name, kind, name and a snippet. Pass those to get_openapi (with its schema or path parameter) to read the full definition.
A schema's text carries one level of $ref expansion, so referenced field names are searchable, but a type two hops away is not. Follow it up with get_openapi.
Set include_body to get the matched definition's full text inline. It is much larger than a snippet.
Query syntax:
AND/OR/NOT: NFProfile AND heartbeat
Phrase: "nf instances"
Prefix: subscri*
Column filter: name:NFProfile or body:nfInstanceId or api_name:Nnrf_NFManagement
Hyphenated, dotted or underscored terms (e.g. nf-instances, 29.510, Nnrf_NFManagement) are auto-quoted to avoid FTS5 syntax errors.
Tokenization:
Unlike search, this index applies no stemming: identifiers are matched as written, and inflected English forms do not fold together.
'-', '.' and '_' split tokens, so Nnrf_NFManagement is indexed as "nnrf" and "nfmanagement" and /nf-instances as "nf" and "instances" — a partial name matches, but camelCase is not split (supportedFeatures is one token).
Pagination:
Results come as {results, total_count, limit, offset}; total_count is the full match count.
Use limit (default 10, max 200) and offset to page through matches beyond the first page.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Limit the search to one kind of definition: "schema" for data types or "operation" for endpoints. Both are searched when omitted. | |
| limit | No | Maximum number of results per page (default: 10, max: 200) | |
| query | Yes | required,FTS5 query string. Hyphenated or dotted terms like nf-instances and 29.510 are auto-quoted. Use AND/OR/NOT operators and double-quoted phrases for exact matches. | |
| offset | No | Number of results to skip for pagination (default: 0). Combine with total_count in the response to page through all matches. | |
| api_name | No | Limit the search to a single API document (e.g. Nnrf_NFManagement). Use list_openapi to see the available names. | |
| spec_ids | No | Limit the search to one or more specifications (e.g. ["TS 29.510", "TS 29.518"]). | |
| include_body | No | Return the full text of each matching definition instead of a snippet (default: false). Costs many more tokens; prefer the default and follow up with get_openapi. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It comprehensively discloses behavior: result granularity (one definition per hit), ranking (exact name matches first), $ref expansion depth, include_body effect, query syntax (including auto-quoting for special characters), tokenization rules (no stemming, split on hyphens/dots/underscores, no camelCase split), and pagination details. No contradictory or missing behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections (Results, Query syntax, Tokenization, Pagination) and front-loaded with the main purpose. While it is long, every sentence provides necessary information given the tool's complexity. It could be slightly more concise, but it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, no output schema, multiple sibling tools), the description is complete. It explains the result structure, how to follow up with get_openapi, the difference from search, tokenization idiosyncrasies, and pagination. It addresses all likely agent questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds substantial value beyond the schema. It explains the query syntax in detail (operators, phrases, column filters, auto-quoting), the purpose and cost of include_body, how pagination uses limit/offset with total_count, and the meaning of kind (schema vs operation). The description makes the parameters much more usable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool performs full-text search on OpenAPI definitions of 5G APIs, using SQLite FTS5 syntax. It distinguishes from sibling tools by explicitly contrasting with 'search' (covers clause text, not OpenAPI) and 'get_openapi' (for when the document is already known).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'Use this when you need an API detail but do not know which API document holds it.' It also gives a clear alternative: 'When you already know the document, get_openapi reads it directly.' Additionally, it contrasts with the sibling 'search' tool, specifying that search covers different content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v0.1.0- First observed
compare_versions - First observed
get_asn1 - First observed
get_image - First observed
get_openapi - First observed
get_references - First observed
get_section - First observed
get_toc - First observed
list_images - First observed
list_openapi - First observed
list_specs - First observed
list_versions - First observed
search - First observed
search_openapi
TDQS
Scored across 13 tools
Every tool targets a distinct content type or operation: listing vs. retrieval, specification text vs. ASN.1 vs. OpenAPI vs. images vs. cross-references. The two search tools explicitly separate specification clauses from OpenAPI definitions, eliminating ambiguity.
All tools use a consistent lowercase snake_case convention with a verb-noun pattern (list_*, get_*, search_*, compare_versions). No mixed conventions or irregular names, making it easy to infer functionality from the name.
13 tools is a well-scoped set for a specification retrieval system. Each tool adds a distinct capability—discovery, reading, searching, comparison, images, ASN.1, OpenAPI, references—without redundancy or bloat.
The tool surface covers the full lifecycle of read-only specification access: discovery (list_specs, list_versions, list_openapi, list_images), retrieval (get_section, get_image, get_asn1, get_openapi), searching (search, search_openapi), comparison (compare_versions), and cross-references (get_references). No obvious gaps for the stated domain.
Maintenance
Related MCP Connectors
Document-to-Markdown MCP server — convert PDF, Office and HTML into LLM-ready Markdown.
Hosted MCP server: convert PDFs to clean, LLM-ready Markdown with tables, formulas and OCR.
3GPP Scout connects Cursor, Claude, Codex and other MCP clients to a hosted, continuously updated 3GPP search service. Search TS/TR specifications across Rel-15 through Rel-20, retrieve cited clauses, and search text, diagrams and figures. Explore recent RAN1, RAN2, RAN3, RAN4 and SA2 TDocs, company proposals and extracted meeting decisions, with source links. Connect using Streamable HTTP at https://api.3gppscout.com/mcp/ and sign in with OAuth 2.1. No local index or API key in the MCP configuration is required. Explorer includes 150 API/MCP requests per month; Founding Engineer includes 1,000 for $8/month. Hosted Scout chat is billed separately. 3GPP Scout is an independent product and is not affiliated with, endorsed or sponsored by 3GPP, ETSI or any 3GPP Organizational Partner. 3GPP™ is a trade mark of ETSI registered for the benefit of its Members and of the 3GPP Organizational Partners. Excerpts are quoted for reference and the official documents govern. Copyright, correction or removal requests: contact@3gppscout.com.
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.444 npm29MIT
- AlicenseNot gradedqualityDmaintenanceGeneric MCP server that exposes Markdown documentation to LLMs, enabling them to search and answer questions about any software documentation.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that indexes documents and serves relevant context to LLMs via Retrieval Augmented Generation (RAG).28 npm36MIT
- AlicenseAqualityDmaintenanceA 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