Skip to main content
Glama

3gpp-mcp

Go Reference Go Report Card CI codecov GitHub Release

3GPP 사양을 LLM에서 접근할 수 있게 해주는 MCP(Model Context Protocol) 서버입니다.

배경

3GPP 사양은 모바일 및 통신 엔지니어링에 필수적인 참고 자료이지만, LLM이 효과적으로 활용하기에는 어려움이 있습니다:

  • 문서가 너무 많음 - 여러 시리즈에 걸쳐 수천 개의 사양이 존재하여 올바른 사양을 찾기 어렵습니다.

  • 개별 문서가 너무 큼 - 많은 사양이 수백 페이지에 달하여 일반적인 컨텍스트 창을 훨씬 초과합니다.

  • Word 파일로 배포됨 - 사양은 .docx / .doc 형식으로 게시되며 텍스트 처리를 위해 변환이 필요합니다.

  • 교차 참조가 많음 - 사양은 서로를 자주 참조하며, 단일 문서만 읽어서는 완전한 그림을 얻을 수 없습니다.

  • 표와 그림에 정보가 밀집됨 - 복잡한 표와 흐름도는 중요한 세부 정보를 담고 있습니다. 이 도구는 표를 마크다운으로 변환하고 임베디드 이미지를 추출하여 LLM이 볼 수 있도록 합니다.

  • 버전 복잡성 - 동일한 사양이 여러 3GPP 릴리스에 걸쳐 존재하며, 올바른 버전을 식별하는 것이 중요합니다.

이 도구는 .docx 파일을 구문 분석하고, 콘텐츠를 섹션별로 구조화하며, 모든 것을 SQLite 데이터베이스에 전체 텍스트 검색(FTS5)과 함께 저장하여 이러한 문제를 해결합니다. 그런 다음 MCP 서버는 검색, 섹션별 탐색, 교차 참조 추적을 위한 도구를 제공하여 LLM이 엔지니어와 같은 방식으로 사양을 탐색할 수 있도록 합니다.

왜 RAG가 아닌가?

임베딩 기반 RAG는 문서 Q&A의 정확도를 높이는 일반적인 방법이며, 3GPP 문서에 특화된 RAG 시스템(Telco-RAG, TelcoAI)이 존재합니다. 이 도구는 더 간단한 접근 방식을 취합니다. 모델 앞에 검색 파이프라인을 구축하는 대신, 모델에게 검색 및 탐색 도구를 제공하여 엔지니어처럼 사양을 스스로 탐색하게 합니다. 즉, 전체 텍스트 검색 후 섹션 계층 구조와 교차 참조를 따라 이동합니다. 검색은 구조화된 섹션에 대한 일반 FTS5 검색이므로, 임베딩 모델이나 벡터 데이터베이스를 실행할 필요가 없으며 모든 것이 단일 SQLite 파일에 저장됩니다.

TeleQnA로 측정한 결과, 이 도구는 세 가지 모델 제품군에서 3GPP 표준 질문에 대한 정확도를 6.512.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

이 명령은 3GPP FTP 아카이브를 스크래핑하고, 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

구성 파일(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. 웹 뷰어(선택 사항)

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/

기능: 필터링 기능이 있는 사양 목록, TOC 사이드바가 있는 섹션 뷰어, 페이지 매김 기능이 있는 전체 텍스트 검색, 과거 버전 탐색(버전은 사양별로 나열되며 MCP 도구와 마찬가지로 요청 시 다운로드), 버전 비교(구조 요약 및 섹션별 diff), 임베디드 이미지, 교차 참조 링크, 구문 강조 기능이 있는 OpenAPI 정의, 변환기가 생성하는 LaTeX 수식의 KaTeX 렌더링, 다크 모드, 반응형 디자인. 코드 블록은 표기법별로 구문이 강조됩니다. ASN.1, Diameter, SIP/RTSP, SDP 및 XML(코드 블록 참조).

WebMCP

브라우저가 W3C WebMCP API(document.modelContext, 2026년 기준 Chrome origin trial)를 제공하는 경우, 뷰어는 페이지 로드 시 모든 MCP 도구를 브라우저에 등록하여 브라우저 내 에이전트가 사양 데이터베이스를 직접 쿼리할 수 있도록 합니다. 등록은 /mcp/ 엔드포인트에 대한 동일 출처 통과(passthrough)이며 서버 측에서 구성할 것이 없으며 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/를 참조하십시오.

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

사양의 두 버전 비교: 구조 요약 또는 섹션 텍스트 diff

spec_id, old_version(필수), new_version, section_number, include_subsections, context_lines, offset, max_lines, max_chars

모든 get_toc, get_sectionsearch 결과는 페이지 매김된 응답의 모든 페이지에서 해당 사양과 버전을 명시합니다.

과거 버전

데이터베이스에는 사양당 하나의 버전만 저장됩니다. 다른 버전을 읽으려면 versionget_section 또는 get_toc에 전달합니다. version은 점으로 구분된 형식(15.8.0), 아카이브 토큰(f80), 릴리스 선택자(Rel-15 또는 15, 해당 릴리스에서 최신 버전 선택) 또는 latest를 허용합니다. 릴리스 선택자와 latest는 3GPP 아카이브를 기준으로 확인되므로 요청 시 가져오기가 필요합니다(--no-fetch에서는 작동하지 않음). compare_versionsold_versionnew_version도 동일한 형식을 허용합니다. new_version의 기본값은 데이터베이스에 있는 버전입니다.

데이터베이스에 없는 버전은 3GPP 아카이브에서 다운로드되어 첫 번째 사용 시 변환됩니다. 대규모 사양의 경우 최대 몇 분이 걸릴 수 있습니다. 호출 예산이 만료될 때까지 실행 중이면 도구에서 이를 알리고 동일한 호출을 나중에 반복하면 콘텐츠를 반환합니다. 결과는 기본 데이터베이스와 별도인 크기 제한 캐시에 저장됩니다(serve 참조). 따라서:

  • search는 데이터베이스에 있는 버전만 다룹니다. 교차 릴리스 전체 텍스트 검색은 지원되지 않습니다.

  • get_references는 데이터베이스에 있는 버전에 대한 데이터만 있으며, 아카이브된 버전에서 읽은 섹션은 해당 헤더에 명시됩니다.

  • get_imagelist_imagesversion을 허용합니다. 아카이브된 버전의 이미지는 첫 번째 사용 시 자체적으로 다운로드됩니다(버전당 추가 아카이브 다운로드 1회, 동일한 재시도 동작). EMF/WMF 그림은 서버에 LibreOffice가 설치된 경우 PNG로 변환됩니다.

  • 섹션 번호는 릴리스 간에 이동할 수 있습니다. 이전 버전의 섹션을 읽기 전에 해당 버전의 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 (필수), section_number ("outgoing"에 필수), direction ("outgoing" 또는 "incoming"), include_subsections, offset

OpenAPI 정의

도구

설명

주요 매개변수

list_openapi

사용 가능한 OpenAPI 정의 나열

spec_id (선택 사항): 사양으로 필터링, 예: "TS 29.510"

get_openapi

OpenAPI 정의 가져오기 (페이지네이션)

spec_id, api_name (필수), path, schema, offset, max_lines

search_openapi

OpenAPI 정의 전체 텍스트 검색

query (필수), spec_ids, api_name, kind ("schema" 또는 "operation"), include_body, limit, offset

search_openapisearch가 사용하는 것과 별개의 자체 FTS5 인덱스를 사용합니다: search는 사양 조항 텍스트를 다루며 OpenAPI 콘텐츠를 반환하지 않고, search_openapi는 OpenAPI 콘텐츠만 다룹니다. 하나의 검색 결과는 하나의 문서가 아닌 하나의 정의입니다 — components.schemas의 스키마, 또는 하나의 경로에 대한 하나의 HTTP 메서드 (PUT /nf-instances/{nfInstanceID}와 같이 명명됨) — 따라서 어떤 API 문서가 정의하는지 몰라도 데이터 타입이나 엔드포인트를 찾을 수 있으며, get_openapi로 전체 내용을 읽을 수 있습니다. 단일 베어 텀인 쿼리는 정확히 그 이름의 정의를 먼저 순위화하므로, NFProfileNFProfile 스키마를 참조만 하는 스키마보다 먼저 반환합니다.

스키마의 인덱싱된 텍스트는 한 단계의 $ref 확장을 전달합니다 — itemsadditionalProperties를 통해 직접적으로, 이것이 5G SBI 정의가 대부분의 관계를 명시하는 방식입니다 — 따라서 참조된 타입의 필드는 이를 사용하는 스키마에서 검색 가능합니다; 두 단계 떨어진 타입은 해당 텍스트에 포함되지 않습니다. search와 달리, 이 인덱스는 형태소 분석을 적용하지 않습니다 — 식별자는 작성된 그대로 일치됩니다 — 그리고 -, ._는 토큰을 분할하므로, Nnrf_NFManagementNFManagement로도, /nf-instancesinstances로도 찾을 수 있습니다. camelCase는 분할되지 않습니다.

인덱스는 buildupdate의 끝에 구축됩니다. importimport-dir은 이를 건드리지 않습니다: YAML 파일은 아카이브 zip에 포함되어 제공되므로, .docx를 가져와도 인덱싱할 내용이 변경될 수 없습니다. 이 도구가 존재하기 전에 구축된 데이터베이스에는 인덱스가 없습니다; build-openapi-index로 제자리에 추가하세요.

ASN.1 정의

도구

설명

주요 매개변수

get_asn1

하나의 사양 또는 모든 사양에서 이름으로 ASN.1 할당을 가져오거나 사양의 할당 이름을 나열합니다

spec_id (선택 사항; 생략 시 모든 사양에서 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, ...)은 -- ASN1START / -- ASN1STOP 마커 사이에 ASN.1을 작성하며, 변환기는 이를 ```asn1 펜스로 저장합니다 (코드 블록 참조). get_asn1은 해당 펜스에서 모든 최상위 할당(타입, 상수 및 정보 객체)을 추출합니다.

name과 함께 사용하면 해당 할당의 전체 텍스트와 이를 정의하는 섹션을 반환하므로 답변을 인용할 수 있습니다. 이는 모든 IE를 하나의 조항에 정의하는 프로토콜에 중요합니다: NGAP의 IE 정의 조항은 수백 킬로바이트로, 하나의 get_section 페이지보다 훨씬 크지만, "ASN.1이 여기서 허용하는 범위는 무엇인가"에 답하는 하나의 정의는 몇 줄에 불과합니다. 일치는 대소문자와 구분자를 무시하므로, IE 테이블의 AMF UE NGAP ID는 ASN.1의 AMF-UE-NGAP-ID를 찾습니다; 일치하는 항목이 없는 이름에는 유사한 이름이 제안됩니다. 두 번 이상 정의된 이름은 각각 자체 소스 라인 아래에 모든 정의를 반환합니다.

어떤 사양이 이름을 정의하는지 모를 때는 spec_id를 생략하세요: 이름은 데이터베이스의 모든 사양에서 확인되며, 데이터베이스 빌드 시간(build, update, importimport-dir 모두 새로 고침)에 구축된 이름 인덱스에서 가져옵니다. 잘못된 사양을 지정한 조회는 이름이 실제로 정의된 위치를 알려줍니다. 이 도구가 존재하기 전에 구축된 데이터베이스에는 인덱스가 없습니다 — build-asn1-index로 제자리에 추가하세요. 사양 간 확인은 데이터베이스 버전만 다룹니다 — spec_id(및 선택적으로 version)를 전달하여 보관된 버전을 읽으십시오. get_section과 동일한 온디맨드 다운로드 동작이 적용됩니다.

spec_idname 없이 사용하면 정의 섹션별로 그룹화된 모든 할당 이름을 나열합니다.

포함된 이미지

도구

설명

주요 매개변수

list_images

사양에 포함된 이미지 나열

spec_id (필수), version (선택 사항)

get_image

LLM이 볼 수 있는 base64 데이터로 포함된 이미지 가져오기

spec_id, name (필수): 이미지 파일명, version (선택 사항)

PNG/JPEG/GIF/WebP 이미지는 LLM이 직접 볼 수 있습니다. EMF/WMF 이미지(대부분의 3GPP 그림이 이 형식을 사용)는 기본적으로 원시 데이터로 저장됩니다. 빌드 시 LibreOffice를 통해 PNG로 변환하려면 --convert-image를 사용하세요.

그림은 이미지 형식에 관계없이 단일 표기법으로 섹션 텍스트에서 참조됩니다: 본문 텍스트에서는 ![Figure](image://NAME?w=&h=), 테이블 셀 내에서는 <img src="image://NAME?w=&h=" ...>. 해당 NAMEget_image에 전달하세요; 원본 파일명(image3.emf)과 변환된 파일명(image3.png) 모두 확인됩니다.

코드 블록

섹션 텍스트는 태그된 코드 펜스를 전달하므로 LLM과 웹 뷰어 모두 표기법을 구분할 수 있습니다:

펜스

내용

```asn1

-- ASN1START / -- ASN1STOP 마커 사이의 ASN.1 모듈

```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개가 됩니다: 리터럴 탭 또는 4개 이상의 선행 공백은 Markdown에서 들여쓰기된 코드 블록이 되고(내부의 <sub>와 같은 HTML은 해석되지 않음), 줄 바꿈 없는 공백은 모든 렌더러에서 시각적 중첩을 유지하고 전체 텍스트 검색에 방해가 되지 않습니다.

모델에 도구 사용 지시하기

서버를 연결한다고 해서 모델이 자동으로 이를 참조하는 것은 아닙니다: 선택권이 주어지면 일부 모델은 기억에서 3GPP 질문에 답합니다. 벤치마크에서 Claude Sonnet 5는 TeleQnA 질문의 40%에서 검색을 건너뛰었고 GPT 5.6 Luna는 60%에서 건너뛰었으며, 해당 질문에서 도구는 아무 소용이 없었습니다. 클라이언트의 시스템 프롬프트에 한 문장을 추가하면 그 재량권이 사라집니다. 측정된 문구:

기억에서 답하지 마십시오. 먼저 사양을 검색하고 검색한 텍스트에 답을 근거하십시오. 이미 답을 알고 있다고 확신하는 경우에도 마찬가지입니다.

해당 문장은 Luna의 건너뛰기 비율을 0으로 만들고 이득을 +5.9에서 +12.0 포인트로 높였으며, 이미 모든 질문을 검색한 모델에는 아무런 영향을 미치지 않았고, 도구가 연결되지 않으면 아무 소용이 없습니다 — 답변을 몰래 가져오는 대신 검색을 강제합니다. 같은 정신의 더 강력한 하우스 룰 — 3GPP에 관한 모든 답변은 이 도구를 통해 검색된 조항 텍스트에 근거하고 조항을 인용하십시오 — 은 합리적이지만, 위 문장만이 벤치마크에서 측정된 것입니다.

릴리스별 별도 데이터베이스

릴리스 간 부분 비교를 위해 compare_versionsversion 매개변수는 추가 설정이 필요 없습니다. 한 릴리스에 대해 지속적으로 작업할 때는 릴리스별 별도 데이터베이스를 구축하는 것이 여전히 유용합니다: 전체 텍스트 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; PORT가 설정되면 기본값은 http)

stdio

--addr

HTTP 수신 주소 (환경 변수: THREEGPP_MCP_ADDR, 또는 PORT:$PORT로 해석됨)

:8080

--bearer-token

HTTP 인증용 Bearer 토큰 (환경 변수: 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

버전 캐시 크기 제한 (MB). 0은 가장 최근에 가져온 버전만 유지, -1은 무제한 (환경 변수: THREEGPP_VERSION_CACHE_MB)

1024

--fetch-budget

도구 호출이 온디맨드 가져오기를 기다린 후 호출자에게 재시도를 요청하는 시간 (환경 변수: THREEGPP_FETCH_BUDGET)

60s

버전 캐시는 별도의 SQLite 파일이므로, 메인 데이터베이스는 읽기 전용으로 유지되며 추가 버전으로 오염되지 않습니다. 캐시를 생성할 수 없는 경우(예: scratch 기반 컨테이너 이미지와 같은 읽기 전용 또는 임시 파일 시스템), 서버는 경고를 기록하고 온디맨드 가져오기를 비활성화한 상태로 실행됩니다. 다른 모든 기능은 계속 작동합니다. 캐시된 버전은 크기 제한을 초과하면 가장 오래 사용되지 않은(LRU) 순서로 제거됩니다.

HTTP 전송은 또한 인증 없이 200 OK를 반환하는 GET /health를 노출합니다. 이 경로를 플랫폼 상태 확인(Cloud Run, Sakura AppRun, Kubernetes liveness/readiness 프로브 등)에 사용하십시오.

build

데이터베이스로 사양을 다운로드하고 가져옵니다 (초기 설정에 권장). 별칭: pipeline.

플래그

설명

기본값

--db

출력 SQLite 데이터베이스 경로

3gpp.db

--release

특정 릴리스(예: 19)에 대한 사양 처리

--max-release

릴리스를 기준으로 선택 제한 (예: 19): 각 사양을 해당 릴리스 이하의 최신 버전으로 가져옴

--latest

각 사양을 최신 버전으로 선택 (다른 선택자가 제공되지 않은 경우 사용)

false

--spec

특정 사양(예: 23.501) 처리

--series

시리즈별 필터링, 쉼표로 구분 (예: 23,29)

--workers

병렬 작업자 수

NumCPU

--convert-doc

LibreOffice를 사용하여 .doc 파일을 .docx로 변환

false

--convert-image

LibreOffice를 사용하여 EMF/WMF 이미지를 PNG로 변환

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). build와 마찬가지로 --release, --max-release, --latest, --series 또는 --spec 중 하나가 필요합니다.

  • 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 검색 인덱스를 다시 빌드합니다. buildupdate가 자체적으로 수행하므로, search_openapi가 존재하기 전에 빌드된 데이터베이스에 인덱스를 추가하기 위한 것입니다. serve는 데이터베이스를 읽기 전용으로 열고 즉시 생성할 수 없습니다.

  • build-asn1-index — 기존 데이터베이스의 ASN.1 이름 인덱스를 다시 빌드합니다. build, update, importimport-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)를 사용합니다.

환경 변수

변수

설명

THREEGPP_MCP_TRANSPORT

serve의 전송 방식 (stdio 또는 http); --transport로 재정의됨

THREEGPP_MCP_ADDR

serve의 HTTP 수신 주소; --addr로 재정의됨

THREEGPP_MCP_BEARER_TOKEN

HTTP 전송 인증용 Bearer 토큰

PORT

PaaS 규칙 (Cloud Run / Heroku); serve:$PORT에서 HTTP 전송을 기본값으로 함

THREEGPP_VERSION_CACHE_MB

온디맨드 버전 캐시 크기 제한 (MB) (기본값 1024)

THREEGPP_FETCH_BUDGET

도구 호출이 온디맨드 가져오기를 기다리는 시간 (기본값 60s)

THREEGPP_MAX_ZIP_SIZE_MB

최대 ZIP 다운로드 크기 (기본값 512)

THREEGPP_CACHE_TTL_HOURS

사양 목록 캐시 TTL (시간) (기본값 24)

THREEGPP_LISTING_RETRY_MS

아카이브 목록 가져오기 시도 간 초기 백오프 (ms) (기본값 1000)

XDG_CACHE_HOME

XDG 기본 디렉토리 사양에 따른 캐시 디렉토리 루트

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
2hResponse time
1wRelease cycle
19Releases (12mo)
Commit activity
Issues opened vs closed

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
    31
    29
    MIT
  • A
    license
    -
    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
    -
    quality
    D
    maintenance
    An MCP server that indexes documents and serves relevant context to LLMs via Retrieval Augmented Generation (RAG).
    245
    36
    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

View all related MCP servers

Related MCP Connectors

  • Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.

  • MCP server for AgentDocs (agentdocs.eu): read, search, write, comment on & share Markdown docs.

  • MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.

View all MCP Connectors

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