3GPP Scout API & MCP Server

Hosted semantic search over 3GPP technical specifications: 8,700+ document versions across Rel-15 through Rel-20: via REST and a remote MCP server at https://api.3gppscout.com/mcp/.

8,700+
Document versions
1.3M+
Sections indexed
6
Releases (Rel-15 through Rel-20)

The 3GPP Scout API lets you search across the full text of 3GPP specifications using natural language. Your query is semantically matched against indexed content, reranked for precision, and returned with the matching text along with full section context. Agents can use the same corpus through the hosted MCP server without running a local index.

All endpoints are read-only and require an API key for access.

FAQ

Is 3GPP Scout a hosted 3GPP MCP server? Yes. The remote MCP endpoint is https://api.3gppscout.com/mcp/ (Streamable HTTP, OAuth 2.1). Product page: https://3gppscout.com/mcp. You do not need to run a local index or clone a self-hosted GitHub MCP project.

What is the public name? The product is 3GPP Scout. Public names are 3GPP Scout, Scout API, Scout MCP Server, and Scout Agent Skill. “3gpt” is an internal codebase name and is not a product name.

Which 3GPP documents are indexed? The full published TS/TR corpus for Rel-15 through Rel-20 (8,700+ document versions), kept current as 3GPP publishes new and revised specifications. This is not a Rel-15 + Rel-19 subset.

REST or MCP? Same corpus either way. REST at https://api.3gppscout.com with an API key; MCP at https://api.3gppscout.com/mcp/ with OAuth.

Base URL

https://api.3gppscout.com

All endpoints are relative to this base URL. The API is served over HTTPS only.

Quick Start

Search for anything in the 3GPP spec corpus with a single request:

Request
curl -X POST https://api.3gppscout.com/search/text \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "How does RRC connection setup work in NR?",
    "rerank_top_k": 5
  }'
Response (abbreviated)
{
  "query": "How does RRC connection setup work in NR?",
  "results": [
    {
      "id": 42,
      "doc_number": "38.331",
      "doc_type": "TS",
      "version": "19.1.0",
      "release": "Rel-19",
      "section_number": "5.3.3",
      "section_title": "RRC connection establishment",
      "content": "The purpose of this procedure is to establish an RRC connection...",
      "similarity": 0.8234,
      "relevance_score": 0.9512,
      "section_text": "...full section text..."
    }
  ],
  "total": 5,
  "reranked": true,
  "elapsed_ms": 420.3
}

That's it. The API handles search, content retrieval, and reranking in a single call.

Authentication

All API requests require a valid API key passed as a Bearer token in the Authorization header.

Authorization Header
Authorization: Bearer YOUR_API_KEY

Getting an API Key

Sign in to the 3GPP Scout Dashboard and navigate to API Keys to create and manage your keys.

Error Responses

StatusMeaning
401Missing, malformed, or invalid API key
401API key has been deactivated
402Monthly API/MCP/BYOK retrieval allowance exhausted

The /health, /docs, /skill.md, and /agent-setup/prompt.md endpoints do not require authentication.

API, MCP, and BYOK Retrieval Quotas

REST API keys, OAuth-authenticated MCP tools, and BYOK hosted-chat retrieval share one monthly allowance. Regular Scout-funded hosted chat uses prepaid credits instead. Explorer includes 150 requests per calendar month. Founding Engineer includes 1,000 requests per calendar month for $8/month.

An exhausted allowance returns HTTP 402. FastAPI places the contract in detail, and FastMCP-generated tools preserve the same actionable payload.

HTTP 402 response
{
  "detail": {
    "code": "api_quota_exhausted",
    "message": "Monthly API request quota exhausted. Upgrade to Founding Engineer for $8/month and 1,000 requests per month.",
    "current_plan": "explorer",
    "used": 150,
    "limit": 150,
    "remaining": 0,
    "reset_at": "2026-09-01T00:00:00Z",
    "upgrade": {
      "plan": "Founding Engineer",
      "price": {"amount": 8, "currency": "USD", "interval": "month"},
      "monthly_price_cents": 800,
      "requests_per_month": 1000,
      "url": "https://dashboard.3gppscout.com/dashboard/billing"
    }
  }
}
Client behavior: do not retry while remaining is zero. Wait until the UTC reset_at timestamp or direct the user to the absolute upgrade.url. Error responses and enforcement logs do not contain API keys, request bodies, or query text.

Filtering

All search endpoints support metadata filters that narrow results before similarity matching. Filters are applied server-side for efficient pre-filtering.

FilterExample ValueDescription
filter_release"Rel-19"3GPP release (Rel-15 through Rel-20 indexed)
filter_doc_type"TS"Document type: TS (technical specification) or TR (technical report)
filter_doc_number"38.331"Specific document number
filter_series"38"3GPP series (e.g. 38 = NR/5G, 23 = system architecture)
filter_section_number"5.4"Exact section number (text search only)

Filters can be combined. For example, filter_series: "38" + filter_release: "Rel-19" searches only the latest 5G NR specs.

Reranking

Text search results are reranked by default using a cross-encoder reranking model. The flow is:

  1. Embed query → retrieve match_count nearest matches (default 50)
  2. Fetch the text content for each match
  3. Pass query + all candidate texts to the reranker
  4. Return the top rerank_top_k results sorted by relevance score

Reranked results include both similarity (semantic similarity, 0–1) and relevance_score (reranker output, 0–1). The relevance score is generally a better signal for result quality.

Set "rerank": false to skip reranking and return results sorted by similarity only.

List Documents

GET /documents

Returns metadata for available documents. Use filters to check if a specific document is indexed (fast): without filters returns all ~3,200 documents (slower, cached for 60 minutes).

Query Parameters

ParameterTypeDescription
doc_numberstringFilter by document number, e.g. "38.811". Recommended: avoids scanning all documents.
releasestringFilter by release, e.g. "Rel-19"
seriesstringFilter by series, e.g. "38"
doc_typestringFilter by type: "TS" or "TR"

Examples

Check if a specific document is indexed
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.3gppscout.com/documents?doc_number=38.811"
List all TR documents in Rel-19
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.3gppscout.com/documents?doc_type=TR&release=Rel-19"
▶ Show example response
[
  {
    "id": 1,
    "doc_number": "38.811",
    "doc_type": "TR",
    "version": "15.4.0",
    "release": "Rel-15",
    "series": "38",
    "title": null,
    "filename": "38811-f40.zip",
    "total_text_chunks": 812,
    "total_image_chunks": 45,
    "status": "complete"
  }
]

Get Document

GET /documents/{document_id}

Fetch a single document by its numeric ID (as returned by /documents).

Path Parameters

ParameterTypeDescription
document_id requiredintNumeric document ID

Example

curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://api.3gppscout.com/documents/42

Get Sections

GET /sections

Fetch full section text by section number. Section numbers are not unique across documents, so doc_number is required.

Query Parameters

ParameterTypeDescription
section_number requiredstringSection to look up. Numeric ("5.3.3"), trailing-letter ("5.3.1a"), or annex ("A.1", "B.2.3").
doc_number requiredstringDocument number, e.g. "38.331", "38.874".
versionstringVersion, e.g. "19.1.0"
releasestringRelease, e.g. "Rel-19"
prefixboolMatch sub-sections too ("5.4""5.4.1", "5.4.6"; "A""A.1", "A.2.3"). Default false
If no section matches, the API returns HTTP 200 with an empty list []. Use /sections/toc to see the actual section IDs available for a document.

Example

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.3gppscout.com/sections?section_number=5.3.3&doc_number=38.331&release=Rel-19"

Annex example

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.3gppscout.com/sections?section_number=A.1&doc_number=38.874"

Table of Contents

GET /sections/toc

Lists all section numbers and titles for a document without full text: useful for browsing a spec's structure.

Query Parameters

ParameterTypeDescription
doc_number requiredstringDocument number, e.g. "38.321"
versionstringVersion, e.g. "19.1.0"

Example

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.3gppscout.com/sections/toc?doc_number=38.321"

Get Image

GET /images/{doc_number}/{version}/{image_index}

Serve an extracted figure or diagram as a PNG image. The image_path field from image search results maps directly to this endpoint.

Path Parameters

ParameterTypeDescription
doc_number requiredstringDocument number, e.g. "38.300"
version requiredstringDocument version, e.g. "19.1.0"
image_index requiredintImage index within the document (from search results)

Response

Returns the raw PNG bytes with Content-Type: image/png. No JSON wrapper.

StatusMeaning
200PNG image bytes
400Invalid document number, version, or index
404Image not found for this document/version/index
429Per-IP rate or concurrency limit exceeded
No authentication required. Image URLs are designed to be embeddable directly in <img> tags, chat messages, or markdown without needing an API key. This endpoint does not consume Explorer request quota. Responses are cacheable for 24 hours.

Usage with Image Search

The typical flow is: search for images, then use the image_path from results to fetch the actual PNG.

# 1. Search for images
curl -X POST https://api.3gppscout.com/search/images \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "user plane protocol stack", "filter_doc_number": "38.300"}'

# Response includes: "image_path": "/images/38.300/19.1.0/8"

# 2. Fetch the image (no auth needed)
curl https://api.3gppscout.com/images/38.300/19.1.0/8 --output figure.png

Embedding in HTML

<img src="https://api.3gppscout.com/images/38.300/19.1.0/8"
     alt="User Plane Protocol Stack (TS 38.300)" />

MCP Server

The 3GPP Scout API includes an MCP (Model Context Protocol) server for Cursor, Claude, Codex, OpenCode, and other compatible agents.

Explorer accounts include 150 Scout requests per UTC month for free. Your external agent or model provider may charge separately.

Add to Cursor (one click)

Add to Cursor

Clicking the button opens Cursor and installs the 3GPP Scout MCP server automatically.

Agent-guided setup

Ask any supported agent to fetch and execute the appropriate instructions from https://api.3gppscout.com/agent-setup/prompt.md. The public Markdown prompt covers Cursor, Claude, Codex, OpenCode, and generic MCP clients, including OAuth and a small verification request.

Manual Configuration

For Cursor, add to .cursor/mcp.json in your workspace or user settings:

{
  "mcpServers": {
    "3gpp-scout": {
      "url": "https://api.3gppscout.com/mcp/"
    }
  }
}

For current Claude, Codex, and OpenCode commands and configuration, use the agent-guided setup prompt above.

Authentication

The MCP server uses OAuth 2.1: no API key is needed in the config. On first use, your browser will open for you to sign in with your 3GPP Scout account. After approving access, the MCP client handles tokens automatically.

Available Tools

Once connected, your agent has access to all API endpoints as MCP tools:

  • search_text: semantic search over specification text
  • search_images: search diagrams, figures, and tables
  • search_combined: text + image search in one call
  • list_documents / get_document: browse available documents
  • get_sections / list_sections: fetch section text and table of contents
  • get_image: fetch extracted figures as PNG images

MCP Resource

The MCP server also provides a scout://skill-guide resource: a comprehensive guide your agent can read to understand the API, recommended workflows, and best practices.

Skill File

For agents that don't support MCP, we provide a Skill File: a standalone markdown document containing everything an LLM agent needs to use the API effectively: endpoints, parameters, workflows, and tips.

Download

https://api.3gppscout.com/skill.md

How to Use

  1. Download or copy the file from the link above
  2. Save it as SKILL.md in your project (e.g. .cursor/skills/3gpp-scout/SKILL.md)
  3. Your agent will read it automatically and know how to call the API

The skill file covers the same information as the MCP resource (scout://skill-guide) but works with any agent framework: just include it in the agent's context.

OpenClaw

The 3GPP Scout skill is published on ClawHub, the skill registry for OpenClaw. If you use an OpenClaw-compatible agent, you can install the skill directly from the registry.

Install

https://clawhub.ai/chriscarrotlabs/3gpp-scout

Configure your API key

Once installed, set your API key as the SCOUT_API_KEY environment variable:

export SCOUT_API_KEY="sk-your-key-here"

Or add it to ~/.openclaw/openclaw.json under skills."3gpp-scout".env.SCOUT_API_KEY.

The ClawHub listing has passed OpenClaw's security scan (benign, high confidence) and is updated whenever the skill file here changes.

Models & Embeddings

The API uses three Voyage AI models:

ModelPurposeDimensions
voyage-context-3Text query & chunk embedding1024
voyage-multimodal-3Image query & chunk embedding1024
rerank-2Cross-encoder reranking for text results-

Text chunks are contextualized embeddings: each chunk is embedded along with metadata about the document and section it belongs to, improving retrieval quality for domain-specific queries.

Architecture

The API is a stateless server backed by cloud infrastructure:

  Client Request
       │
       ▼
  ┌──────────────────────┐
  │  3GPP Scout API      │  api.3gppscout.com
  └──────────┬───────────┘
             │
   ┌─────────┼──────────┬──────────┐
   ▼         ▼          ▼          ▼
Embedding   Vector     Content    Image
 Model      Search     Store      Store
                     (text/JSON)  (PNGs)

Request flow for text search:

  1. Embed the query string using the text embedding model
  2. Run vector similarity search with optional metadata filters
  3. Resolve matches to their source document and chunk
  4. Fetch chunk text and section context
  5. Optionally rerank candidates for higher precision
  6. Return the final results

Request flow for image serving:

  1. Image search returns results with image_path (e.g. /images/38.300/19.1.0/8)
  2. Client fetches the image URL directly
  3. API proxies the PNG from Google Cloud Storage

Corpus Coverage

The index covers all six 3GPP releases from Rel-15 through Rel-20: 8,700+ document versions and 1.3M+ sections across 2.6M+ text vectors and 225K+ image vectors.

ReleaseDocument versionsSections
Rel-151,504199K+
Rel-161,607221K+
Rel-171,714260K+
Rel-181,788285K+
Rel-192,028378K+
Rel-2010029K+
Total8,7411.37M+

Processing Pipeline

Each document goes through a multi-stage pipeline: parsing, semantic chunking, embedding, section extraction, and image extraction. The chunking stage produces optimized chunks of 400–800 tokens for high-quality retrieval. Images are extracted as individual PNGs and served via the /images endpoint.

Health Check

GET /health

Returns API status and model info. Use this to verify the server is running.

Example

curl https://api.3gppscout.com/health
▶ Show example response
{
  "status": "ok",
  "version": "0.2.0",
  "models": {
    "text_embedding": "voyage-context-3",
    "image_embedding": "voyage-multimodal-3",
    "reranker": "rerank-2"
  }
}

OpenAPI / Swagger

The auto-generated interactive API docs are available at /swagger (Swagger UI) and /redoc (ReDoc). The raw OpenAPI schema is at /openapi.json.