Skip to main content
Glama

3gpp-mcp

Go Reference Go Report Card CI codecov GitHub Release

Сервер MCP (Model Context Protocol), который предоставляет LLM доступ к спецификациям 3GPP.

Предыстория

Спецификации 3GPP — это важнейшие справочные материалы для инженерии мобильной связи и телекоммуникаций, но LLM сложно эффективно с ними работать:

  • Слишком много документов — существуют тысячи спецификаций в нескольких сериях, что затрудняет поиск нужной.

  • Отдельные документы слишком объемны — многие спецификации насчитывают сотни страниц, что значительно превышает типичный размер контекстного окна.

  • Распространяются в формате Word — спецификации публикуются в форматах .docx / .doc и требуют конвертации для текстовой обработки.

  • Интенсивные перекрестные ссылки — спецификации часто ссылаются друг на друга; чтение одного документа в отрыве от других дает неполную картину.

  • Информация в таблицах и рисунках — сложные таблицы и блок-схемы содержат важные детали. Этот инструмент преобразует таблицы в Markdown и извлекает встроенные изображения для просмотра LLM.

  • Сложность версий — одна и та же спецификация существует в нескольких релизах 3GPP, и определение правильной версии имеет значение.

Этот инструмент решает эти проблемы путем разбора файлов .docx, структурирования содержимого по разделам и хранения всего в базе данных SQLite с полнотекстовым поиском (FTS5). Затем сервер MCP предоставляет инструменты для поиска, просмотра по разделам и перехода по перекрестным ссылкам — позволяя LLM перемещаться по спецификациям так, как это делал бы инженер.

Почему не RAG?

RAG на основе эмбеддингов — распространенный способ повышения точности ответов на вопросы по документам, и существуют RAG-системы, специализированные для документов 3GPP (Telco-RAG, TelcoAI). Этот инструмент использует более простой подход: вместо создания конвейера поиска перед моделью, он предоставляет модели инструменты поиска и навигации, позволяя ей исследовать спецификации так, как это делал бы инженер — полнотекстовый поиск, затем переход по иерархии разделов и перекрестным ссылкам. Поскольку поиск — это обычный FTS5 по структурированным разделам, не требуется ни модель эмбеддингов, ни векторная база данных, и все хранится в одном файле SQLite.

Согласно измерениям на TeleQnA, это повышает точность ответов на вопросы по стандартам 3GPP на 6,5–12,0 процентных пунктов в трех семействах моделей. Большая часть этого эффекта достигается за счет самого наличия текста: один запрос BM25 по той же базе данных дает +7,8–9,6 п.п. Собственный поиск инструмента дает преимущество на вопросах, ответ на которые находится на расстоянии более одного перехода от первого найденного отрывка — на задачах, сгенерированных из самих спецификаций (коды протоколов, структура 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

Этот процесс загружает данные из FTP-архива 3GPP, скачивает ZIP-файлы, извлекает и разбирает файлы .docx и вставляет структурированное содержимое в базу данных SQLite.

3. Регистрация в вашем MCP-клиенте

Claude Code

claude mcp add --scope user 3gpp -- 3gpp-mcp serve --db /path/to/data/3gpp.db

VS 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.db

Claude Desktop

Добавьте в ваш конфигурационный файл (~/Library/Application Support/Claude/claude_desktop_config.json на macOS, %APPDATA%\Claude\claude_desktop_config.json на Windows):

{
  "mcpServers": {
    "3gpp": {
      "command": "3gpp-mcp",
      "args": ["serve", "--db", "/path/to/data/3gpp.db"]
    }
  }
}

4. Веб-просмотрщик (опционально)

Просматривайте спецификации в браузере, добавив --web к HTTP-транспорту:

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-формул (LaTeX formulas), которые выдает конвертер, темная тема, адаптивный дизайн. Блоки кода подсвечиваются в соответствии с нотацией — ASN.1, Diameter, SIP/RTSP, SDP и XML (см. Code blocks).

WebMCP

Когда браузер предоставляет API W3C WebMCP (document.modelContext, на момент 2026 года — Chrome origin trial), просмотрщик регистрирует все свои инструменты MCP в браузере при загрузке страницы, поэтому внутрибраузерный агент может напрямую запрашивать базу данных спецификаций. Регистрация представляет собой тонкий прокси-сервер с тем же источником к конечной точке /mcp/ — на стороне сервера ничего настраивать не нужно, а браузеры без этого API не затрагиваются. Во время origin trial включите его локально через флаги Chrome (chrome://flags) или для общего развертывания передавайте заголовок Origin-Trial от прокси-сервера на границе сети.

Развертывание

Streamable HTTP

HTTP-транспорт не имеет состояния: он поддерживает версию протокола MCP 2026-07-28 (без рукопожатия инициализации, без 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/.

См. examples/systemd/ для производственного развертывания с 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 :8080

RELEASE по умолчанию имеет значение latest, что включает последнюю версию каждой спецификации во всех релизах. Установите --build-arg RELEASE=<n> (например, 19), чтобы ограничить базу данных одним релизом, или --build-arg MAX_RELEASE=<n>, чтобы ограничить самый новый релиз, не удаляя спецификации, у которых нет версии в нем. Эти два параметра нельзя комбинировать.

Cloud Run

Для запуска на Cloud Run см. cloudbuild.yaml (сборка + отправка + развертывание) и service.yaml (спецификация сервиса Cloud Run).

Инструменты

У каждого инструмента ниже также есть двойник в CLI (list_specs3gpp-mcp list-specs и так далее) для использования в оболочке и скриптах — см. команды запросов в Справочнике команд.

Просмотр спецификаций

Инструмент

Описание

Ключевые параметры

list_specs

Вывод списка доступных спецификаций (с пагинацией)

series (опционально): фильтр по номеру серии, например "23"; query (опционально): префикс ID спецификации, например "38.21"; limit, offset

list_versions

Вывод списка версий спецификации и мест, откуда их можно прочитать

spec_id (обязательно): например "TS 23.501"

get_toc

Получение оглавления спецификации

spec_id (обязательно), version

get_section

Получение содержимого раздела (с пагинацией)

spec_id, section_number (обязательно), version, include_subsections, offset, max_lines, max_chars

compare_versions

Сравнение двух версий спецификации: структурная сводка или различия в тексте раздела

spec_id, old_version (обязательно), new_version, section_number, include_subsections, context_lines, offset, max_lines, max_chars

Каждый результат get_toc, get_section и search указывает спецификацию и версию, из которой он получен, на каждой странице пагинированного ответа.

Прошлые версии

База данных содержит одну версию каждой спецификации. Чтобы прочитать другую версию, передайте version в get_section или get_toc. version принимает точечную форму (15.8.0), токен архива (f80), селектор релиза (Rel-15 или 15, выбирает самую новую версию в этом релизе) или latest. Селекторы релизов и latest разрешаются через архив 3GPP, поэтому они требуют загрузки по запросу (не работают с --no-fetch). old_version и new_version в compare_versions принимают те же формы; new_version по умолчанию равен версии в базе данных.

Версия, которой нет в базе данных, загружается из архива 3GPP и конвертируется при первом использовании. Это может занять до нескольких минут для большой спецификации; если процесс все еще выполняется, когда истекает время вызова, инструмент сообщает об этом, и при повторении того же вызова позже возвращается содержимое. Результаты хранятся в кэше ограниченного размера (см. serve), который отделен от основной базы данных, поэтому:

  • search охватывает только версию в базе данных — полнотекстовый поиск по всем релизам не поддерживается

  • get_references содержит данные только для версии в базе данных, и раздел, прочитанный из архивной версии, сообщает об этом в своем заголовке

  • get_image и list_images также принимают version: изображения архивной версии загружаются при первом использовании (одна дополнительная загрузка архива на версию, с тем же поведением повторных попыток), а рисунки EMF/WMF конвертируются в PNG, если на сервере установлен LibreOffice

  • номера разделов меняются между релизами; перед чтением раздела старой версии проверьте get_toc для этой версии

Поиск

Инструмент

Описание

Ключевые параметры

search

Полнотекстовый поиск по всем спецификациям

query (обязательно), spec_ids (опционально), limit, offset

Инструмент 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), заключаются в кавычки автоматически, поэтому ручное экранирование не требуется.

Перекрестные ссылки

Инструмент

Описание

Ключевые параметры

get_references

Получить перекрестные ссылки между спецификациями и RFC

spec_id (required), section_number (required for "outgoing"), direction ("outgoing" or "incoming"), include_subsections, offset

Определения OpenAPI

Инструмент

Описание

Ключевые параметры

list_openapi

Список доступных определений OpenAPI

spec_id (optional): фильтр по спецификации, например "TS 29.510"

get_openapi

Получить определение OpenAPI (с постраничной выдачей)

spec_id, api_name (required), path, schema, offset, max_lines

search_openapi

Полнотекстовый поиск по определениям OpenAPI

query (required), spec_ids, api_name, kind ("schema" or "operation"), include_body, limit, offset

search_openapi использует собственный индекс FTS5, отдельный от того, который использует search: search охватывает текст пунктов спецификации и никогда не возвращает содержимое OpenAPI, search_openapi охватывает только содержимое OpenAPI. Один результат — это одно определение, а не один документ — схема из components.schemas или один HTTP-метод одного пути (названный, например, PUT /nf-instances/{nfInstanceID}) — так что вы можете найти тип данных или конечную точку, не зная, какой документ API её определяет, а затем прочитать её полностью с помощью get_openapi. Запрос, состоящий из одного простого термина, ранжирует определение с точно таким же именем первым, поэтому NFProfile возвращает схему NFProfile раньше схем, которые только ссылаются на неё.

Индексированный текст схемы содержит один уровень раскрытия $ref — через items и additionalProperties, а также напрямую, что соответствует тому, как определения 5G SBI описывают большинство своих связей — поэтому поля ссылочного типа доступны для поиска из схемы, которая его использует; тип, находящийся на два шага дальше, в этом тексте отсутствует. В отличие от search, этот индекс не применяет стемминг — идентификаторы сопоставляются как написаны — а -, . и _ разделяют токены, поэтому Nnrf_NFManagement также находится по NFManagement, а /nf-instances — по instances. camelCase не разделяется.

Индекс строится в конце build и update. import и import-dir его не трогают: YAML-файлы поставляются в архиве zip, поэтому импорт .docx не может изменить то, что нужно индексировать. База данных, созданная до появления этого инструмента, не имеет индекса; добавьте его на месте с помощью build-openapi-index.

Определения ASN.1

Инструмент

Описание

Ключевые параметры

get_asn1

Получить назначение ASN.1 по имени — в одной спецификации или во всех сразу — или вывести имена назначений спецификации

spec_id (optional; опустите для разрешения name по всем спецификациям), name (имя назначения, например AMF-UE-NGAP-ID; обязательно без spec_id), version (требует spec_id), offset, max_lines, max_chars

Протоколы, определённые через ASN.1 (RRC TS 38.331/36.331, NGAP TS 38.413, S1AP TS 36.413, XnAP, F1AP, ...), записывают свой ASN.1 между маркерами -- ASN1START / -- ASN1STOP, которые конвертер сохраняет как блоки ```asn1 (см. Блоки кода). get_asn1 извлекает все назначения верхнего уровня — типы, константы и информационные объекты — из этих блоков.

С параметром name он возвращает полный текст этого назначения вместе с разделом, который его определяет, чтобы ответ можно было цитировать. Это важно для протоколов, которые определяют все свои IE в одном пункте: пункт определений IE NGAP занимает сотни килобайт, что намного больше одной страницы get_section, в то время как одно определение, отвечающее на вопрос «какой диапазон допускает здесь ASN.1», состоит из нескольких строк. Сопоставление игнорирует регистр и разделители, поэтому AMF UE NGAP ID из таблицы IE находит AMF-UE-NGAP-ID из ASN.1; имя, не соответствующее ничему, получает предложения похожих имён. Имя, определённое более одного раза, возвращает все определения, каждое под своей исходной строкой.

Если вы не знаете, какая спецификация определяет имя, опустите spec_id: имя разрешается по всем спецификациям в базе данных из индекса имён, построенного во время сборки базы данных (build, update, import и import-dir все обновляют его). Поиск, указывающий неправильную спецификацию, сообщает, где имя определено на самом деле. База данных, созданная до появления этого инструмента, не имеет индекса — добавьте его на месте с помощью build-asn1-index. Межспецификационное разрешение охватывает только версии базы данных — передайте spec_id (и опционально version), чтобы прочитать архивную версию, с тем же поведением загрузки по запросу, что и у get_section.

С spec_id и без name он выводит все имена назначений, сгруппированные по определяющему разделу.

Встроенные изображения

Инструмент

Описание

Ключевые параметры

list_images

Список встроенных изображений в спецификации

spec_id (required), version (optional)

get_image

Получить встроенное изображение в формате base64, доступное для просмотра LLM

spec_id, name (required): имя файла изображения, version (optional)

Изображения PNG/JPEG/GIF/WebP напрямую просматриваются LLM. Изображения EMF/WMF (большинство рисунков 3GPP используют этот формат) по умолчанию хранятся как необработанные данные; используйте --convert-image для преобразования их в PNG через LibreOffice во время сборки.

Рисунки ссылаются из текста раздела в единой нотации, независимо от формата изображения: ![Рисунок](image://NAME?w=&h=) в основном тексте и <img src="image://NAME?w=&h=" ...> внутри ячеек таблицы. Передайте это NAME в get_image; разрешаются как исходное имя файла (image3.emf), так и преобразованное (image3.png).

Блоки кода

Текст раздела содержит помеченные блоки кода, чтобы и LLM, и веб-просмотрщик могли различать нотации:

Блок

Содержание

```asn1

Модули ASN.1 между маркерами -- ASN1START / -- ASN1STOP

```diameter

Определения команд Diameter и сгруппированных AVP (RFC 6733 CCF)

```xml

XML-схемы, примеры XML-тела и DTD

```sip

Примеры сообщений SIP/RTSP

```sdp

Отдельные описания сеансов SDP

```latex

Отдельные уравнения, преобразованные из Word OMML

```

Всё остальное, что исходный документ оформляет как код

Формулы

Формулы Word (OMML) преобразуются в LaTeX в трёх нотациях, чтобы формула была читаема как отдельно, так и внутри предложения:

Нотация

Где

Блок ```latex

Абзац, единственным содержимым которого является уравнение. Его номер уравнения сохраняется как \tag{7.3-1}, что отображается как выровненное вправо (7.3-1).

$$...$$

Отображаемые уравнения, которые не могут быть блоком — внутри ячейки таблицы или элемента списка.

$...$

Формула внутри предложения.

Отступы

Проза 3GPP кодирует структуру с помощью отступов — вложенные списки требований и условий, многоуровневые определения. Начальные пробелы абзаца тела сохраняются как неразрывные пробелы (U+00A0), одна табуляция исходного документа становится четырьмя: литеральная табуляция или 4+ начальных пробела превратили бы строку в блок кода с отступом в Markdown (внутри которого HTML, например <sub>, никогда не интерпретируется), в то время как неразрывные пробелы сохраняют визуальную вложенность в любом рендерере и не мешают полнотекстовому поиску.

Советы

Сообщите модели использовать инструменты

Подключение сервера само по себе не заставляет модель обращаться к нему: при наличии выбора некоторые модели отвечают на вопросы по 3GPP по памяти. В эталонном тесте Claude Sonnet 5 пропустил извлечение в 40% вопросов TeleQnA, а GPT 5.6 Luna — в 60%, и на этих вопросах инструменты не принесли пользы. Одно предложение в системном промпте клиента устраняет это усмотрение. Измеренная формулировка:

Не отвечайте по памяти. Сначала ищите в спецификациях и основывайте ответ на извлечённом тексте, даже если вы уверены, что уже знаете ответ.

Это предложение снизило долю пропусков Luna до нуля, а её прирост — с +5,9 до +12,0 баллов, не повлияло на модель, которая уже искала каждый вопрос, и не имеет ценности без подключённых инструментов — оно принуждает к извлечению, а не к протаскиванию ответа. Более строгие правила в том же духе — основывайте каждый ответ о 3GPP на тексте пунктов, извлечённых с помощью этих инструментов, и цитируйте пункт — разумны, но только приведённое выше предложение было измерено в бенчмарке.

Отдельные базы данных по релизам

Для точечных сравнений между релизами compare_versions и параметр version не требуют дополнительной настройки. Создание отдельной базы данных для каждого релиза всё же окупается, когда вы постоянно работаете с одним релизом: полнотекстовый search, get_references и определения OpenAPI охватывают только версию, встроенную в базу данных, поэтому база данных для конкретного релиза даёт вам все три для этого релиза без загрузок по запросу.

# 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.

Флаг

Описание

По умолчанию

--db

Путь к базе данных SQLite

3gpp.db

--transport

Тип транспорта: stdio или http (переменная окружения: THREEGPP_MCP_TRANSPORT; по умолчанию http, если установлен PORT)

stdio

--addr

HTTP-адрес для прослушивания (переменная окружения: THREEGPP_MCP_ADDR, или PORT интерпретируется как :$PORT)

:8080

--bearer-token

Bearer-токен для HTTP-аутентификации (переменная окружения: THREEGPP_MCP_BEARER_TOKEN)

--web

Включить веб-просмотрщик вместе с MCP-сервером (только для HTTP-транспорта)

false

--no-fetch

Отключить загрузку по запросу версий спецификаций, которых нет в базе данных

false

--version-cache

Путь к кешу версий, загружаемых по запросу

$XDG_CACHE_HOME/3gpp-mcp/versions.db (~/.cache/3gpp-mcp/versions.db, если не задан)

--version-cache-mb

Ограничение размера кеша версий в МБ. 0 сохраняет только самую последнюю загруженную версию, -1 без ограничений (переменная окружения: THREEGPP_VERSION_CACHE_MB)

1024

--fetch-budget

Как долго вызов инструмента ожидает загрузки по запросу, прежде чем попросить вызывающего повторить попытку (переменная окружения: THREEGPP_FETCH_BUDGET)

60s

Кеш версий — это отдельный файл SQLite, поэтому основная база данных остается только для чтения и никогда не загрязняется дополнительными версиями. Если кеш не может быть создан — в файловой системе только для чтения или эфемерной, такой как образ контейнера на основе scratch, — сервер записывает предупреждение и работает с отключенной загрузкой по запросу; все остальное продолжает работать. Кешированные версии удаляются по принципу наименее недавно использованных (LRU) после превышения лимита размера.

HTTP-транспорт также предоставляет GET /health, который возвращает 200 OK без аутентификации. Используйте этот путь для проверок работоспособности платформы (Cloud Run, Sakura AppRun, пробы liveness/readiness Kubernetes и т.д.).

build

Загрузить и импортировать спецификации в базу данных (рекомендуется для первоначальной настройки). Псевдоним: pipeline.

Флаг

Описание

По умолчанию

--db

Путь к выходной базе данных SQLite

3gpp.db

--release

Обработать спецификации для конкретного релиза (например, 19)

--max-release

Ограничить выборку релизом (например, 19): взять каждую спецификацию в ее самой новой версии на уровне или ниже него

--latest

Выбрать каждую спецификацию в ее последней версии (используйте, если не задан другой селектор)

false

--spec

Обработать конкретную спецификацию (например, 23.501)

--series

Фильтровать по серии, разделенной запятыми (например, 23,29)

--workers

Количество параллельных рабочих процессов

NumCPU

--convert-doc

Конвертировать файлы .doc в .docx с помощью LibreOffice

false

--convert-image

Конвертировать изображения EMF/WMF в PNG с помощью LibreOffice

false

--spec-list

Прочитать список спецификаций из файла вместо парсинга архива (селектор все равно требуется)

--no-cache

Отключить кеш списка спецификаций

false

--scrape-workers

Параллельность для парсинга списков спецификаций (0 = авто)

0

--timeout

HTTP-таймаут

30s

Должен быть задан один из --release, --max-release, --latest, --series или --spec, включая --spec-list: файл предоставляет кандидатов, а селектор фильтрует их.

--release и --max-release различаются тем, что происходит со спецификацией, у которой нет версии в указанном релизе: --release 19 отбрасывает ее, --max-release 19 оставляет ее в самой новой версии ниже ограничения. Их нельзя комбинировать.

Другие команды

  • download — Загрузить спецификации без конвертации (--output-dir, по умолчанию specs). Требуется один из --release, --max-release, --latest, --series или --spec, как и build.

  • import — Импортировать один файл .docx в базу данных. Псевдоним: convert. Использование: 3gpp-mcp import --db data/3gpp.db path/to/spec.docx

  • import-dir — Импортировать все файлы .docx из каталога в базу данных. Псевдоним: convert-dir. Использование: 3gpp-mcp import-dir --db data/3gpp.db ./specs

  • update — Обновить спецификации в базе данных до последних версий или до ограничения с помощью --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 остается парсируемым.

  • Команды, принимающие --versioncompare-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).

Переменные окружения

Переменная

Описание

THREEGPP_MCP_TRANSPORT

Транспорт для serve (stdio или http); переопределяется --transport

THREEGPP_MCP_ADDR

HTTP-адрес для прослушивания для serve; переопределяется --addr

THREEGPP_MCP_BEARER_TOKEN

Bearer-токен для аутентификации HTTP-транспорта

PORT

Соглашение PaaS (Cloud Run / Heroku); serve по умолчанию использует HTTP-транспорт на :$PORT

THREEGPP_VERSION_CACHE_MB

Ограничение размера кеша версий по запросу в МБ (по умолчанию 1024)

THREEGPP_FETCH_BUDGET

Как долго вызов инструмента ожидает загрузки по запросу (по умолчанию 60s)

THREEGPP_MAX_ZIP_SIZE_MB

Максимальный размер загружаемого ZIP (по умолчанию 512)

THREEGPP_CACHE_TTL_HOURS

Время жизни кеша списка спецификаций в часах (по умолчанию 24)

THREEGPP_LISTING_RETRY_MS

Начальная задержка между попытками получения списка архива в мс (по умолчанию 1000)

XDG_CACHE_HOME

Корневой каталог кеша, согласно спецификации XDG Base Directory

Available Tools

13 tools
compare_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoStart line number (0-based, default: 0)
spec_idYesrequired,Specification ID (e.g. TS 23.501)
max_charsNoMaximum number of characters to return (can be combined with max_lines)
max_linesNoMaximum number of lines to return (default: 200)
new_versionNoNewer version to compare to. Defaults to the version in the database.
old_versionYesrequired,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_linesNoUnchanged lines shown around each change in a section diff (default: 3)
section_numberNoCompare only this section's text as a unified diff (e.g. 5.15.2). Omit for a structural summary of the whole specification.
include_subsectionsNoWith section_number: include subsections in the diff (default: false)

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoASN.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.
offsetNoStart line number (0-based, default: 0)
spec_idNoSpecification 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.
versionNoSpecification 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_charsNoMaximum number of characters to return (can be combined with max_lines)
max_linesNoMaximum number of lines to return (default: 200)

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesrequired,Image filename (e.g. image1.png)
spec_idYesrequired,Specification ID (e.g. TS 23.501)
versionNoSpecification 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

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoFilter by API path (e.g. /nf-instances)
offsetNoStart line number for pagination (0-based, default: 0)
schemaNoFilter by schema name (e.g. NFProfile)
spec_idYesrequired,Specification ID (e.g. TS 29.510)
api_nameYesrequired,API name (e.g. Nnrf_NFManagement)
max_linesNoMaximum lines to return (default: 200)

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoNumber of references to skip, for paging past a truncated response (default: 0)
spec_idYesrequired,Specification ID (e.g. TS 23.501)
directionNooutgoing (default): references FROM this section to other specs. incoming: references TO this spec/section from other specs.
section_numberNoSection number (e.g. 5.1.2). Required for outgoing direction.
include_subsectionsNoInclude subsections when collecting outgoing references (default: false)

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ![...](image://NAME) 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoStart line number (0-based, default: 0)
spec_idYesrequired,Specification ID (e.g. TS 23.501)
versionNoSpecification 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_charsNoMaximum number of characters to return (can be combined with max_lines)
max_linesNoMaximum number of lines to return (default: 200)
section_numberYesrequired,Section number to retrieve (e.g. 5.1.2)
include_subsectionsNoInclude all subsections (default: false)

TDQS

A4.5/5.0
Behavior4/5

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 `![...](image://NAME)` 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYesrequired,Specification ID (e.g. TS 23.501)
versionNoSpecification 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

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYesrequired,Specification ID (e.g. TS 23.501)
versionNoSpecification 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

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idNoFilter by specification ID (e.g. TS 29.510)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 20)
queryNoFilter specs whose ID starts with this text (e.g. '38.21' matches 38.211, 38.212, 38.213)
offsetNoNumber of results to skip for pagination (default: 0)
seriesNoFilter by series number (e.g. 23 for TS 23.xxx)

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYesrequired,Specification ID (e.g. TS 23.501)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoLimit the search to one kind of definition: "schema" for data types or "operation" for endpoints. Both are searched when omitted.
limitNoMaximum number of results per page (default: 10, max: 200)
queryYesrequired,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.
offsetNoNumber of results to skip for pagination (default: 0). Combine with total_count in the response to page through all matches.
api_nameNoLimit the search to a single API document (e.g. Nnrf_NFManagement). Use list_openapi to see the available names.
spec_idsNoLimit the search to one or more specifications (e.g. ["TS 29.510", "TS 29.518"]).
include_bodyNoReturn 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

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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. Dates show when Glama detected each change.

  1. 13 tool updatesv0.1.0
    • First observedcompare_versions
    • First observedget_asn1
    • First observedget_image
    • First observedget_openapi
    • First observedget_references
    • First observedget_section
    • First observedget_toc
    • First observedlist_images
    • First observedlist_openapi
    • First observedlist_specs
    • First observedlist_versions
    • First observedsearch
    • First observedsearch_openapi

TDQS

A4.4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Enables 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.
    4
    46
    29
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Generic MCP server that exposes Markdown documentation to LLMs, enabling them to search and answer questions about any software documentation.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that indexes documents and serves relevant context to LLMs via Retrieval Augmented Generation (RAG).
    48
    37
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A 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.
    10
    MIT

Latest Blog Posts

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