Skip to main content
Glama

Server Details

3GPP Scout connects Cursor, Claude, Codex and other MCP clients to a hosted, continuously updated 3GPP search service. Search TS/TR specifications across Rel-15 through Rel-20, retrieve cited clauses, and search text, diagrams and figures. Explore recent RAN1, RAN2, RAN3, RAN4 and SA2 TDocs, company proposals and extracted meeting decisions, with source links. Connect using Streamable HTTP at https://api.3gppscout.com/mcp/ and sign in with OAuth 2.1. No local index or API key in the MCP configuration is required. Explorer includes 150 API/MCP requests per month; Founding Engineer includes 1,000 for $8/month. Hosted Scout chat is billed separately.

3GPP Scout is an independent product and is not affiliated with, endorsed or sponsored by 3GPP, ETSI or any 3GPP Organizational Partner. 3GPP™ is a trade mark of ETSI registered for the benefit of its Members and of the 3GPP Organizational Partners. Excerpts are quoted for reference and the official documents govern. Copyright, correction or removal requests: contact@3gppscout.com.

Ownership verified

Glama couldn't complete the latest health check. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
7.0% over 43 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
carrotlabsai/3gpp-scout-mcp
GitHub Stars
0
Server Listing
3GPP Scout

TDQS

C2.9/5.0

Scored across 26 tools

Disambiguation3/5

Several tool families overlap: fetch_tdoc vs get_tdoc, get_company_positions vs search_positions, and get_sections_batch vs get_sections_sections_get. Descriptions usually clarify, but an agent can still misselect among text, image, and combined search or between fetching and getting a TDoc.

Naming Consistency2/5

Mostly snake_case, but verbs vary widely (fetch/find/get/list/search/resolve/follow/update) and many names carry redundant HTTP-route suffixes, e.g. get_document_documents, get_sections_sections_get, search_text_search_text_post. The naming pattern is not predictable.

Tool Count2/5

26 tools is heavy for the apparent scope, and several read/search tools could be consolidated. The domain is broad, but duplicated naming artifacts and overlapping operations inflate the surface beyond what feels necessary.

Completeness4/5

Coverage of specs, TDocs, meetings, organizations, topics, positions, and news is strong and mostly lifecycle-complete. Minor gaps remain: no whole-document export and no standalone agenda-item or work-item detail tool.

Available Tools

26 tools
fetch_tdocFetch TdocAInspect

Fetch and parse one public 3GPP TDoc by number, then return capped excerpts. May download the source document and persist its parsed content in Scout's catalog. Usually completes within 60 seconds. Does not provide a whole-document export.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoTry again even if a recent on-demand attempt found no file or could not read it.
includeNoSame as GET /tdocs/{tdoc_id}: units, text, revisions.units
tdoc_idYes
text_offsetNoFirst text block to return when include has 'text'.
max_text_charsNoCharacter budget for text blocks.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, and the description explains why: it 'may download the source document and persist its parsed content in Scout's catalog', which is exactly the side-effect context an agent needs. It also discloses latency ('usually completes within 60 seconds') and that output is capped, adding value beyond the structured fields.

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?

Front-loaded with verb and resource, then side effects, then timing, then scope limitation — a sensible ordering with no filler. All four sentences carry information, though the closing negation could be folded into the opening scope statement.

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?

With no output schema, the description does cover the return shape (capped excerpts) and rules out full export, plus discloses the mutation, persistence, and timing. This is close to complete for a tool whose remaining parameters are well covered by the schema.

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 80%, so the schema already documents force/include/text_offset/max_text_chars in detail. The description only loosely gestures at the capping behavior ('capped excerpts'), adding little parameter-level meaning beyond what is already structured.

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?

States a specific verb ('fetch and parse'), a precisely scoped resource ('one public 3GPP TDoc by number'), and the output shape ('capped excerpts'). An agent can distinguish it from the search_/list_tdoc siblings, but the description never differentiates it from the very similar 'get_tdoc' sibling, which is a real ambiguity.

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?

Provides a when-not ('Does not provide a whole-document export') that usefully rules out one class of intent. However, it gives no positive guidance on when to prefer it over get_tdoc or the search/list variants, leaving alternative selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_topics_to_followFind Topics To FollowB
Read-only
Inspect

Suggest specs, work items or meetings matching a topic the user wants to follow. Does not create anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWhat to follow in plain words: a topic ('NTN timing advance'), a company ('Ericsson'), a spec ('TS 38.331'), a meeting ('RAN1 #127'), or a mix ('Qualcomm AI/ML in RAN1').

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description's only behavioral claim, 'Does not create anything,' merely restates those annotations without adding new context such as auth needs, rate limits, or return behavior. No contradiction, but no added value beyond structured fields.

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 tightly worded sentences with zero waste. The core purpose is front-loaded, and the secondary clarification about not creating anything follows efficiently.

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?

For a simple read-only discovery tool with a fully documented single parameter and clear safety annotations, the description is nearly complete. It could be slightly more explicit about the return format (e.g., a list of suggestions), but the phrase 'Suggest specs, work items or meetings' adequately implies what the agent will receive.

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%, and the schema's query parameter description already provides rich examples (topic, company, spec, meeting, mix). The description adds no parameter-specific guidance beyond what the schema supplies, so the baseline of 3 applies.

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?

States a clear verb (suggest) and resource (specs, work items, meetings) matching a topic to follow. It indirectly differentiates from follow_topic by stating 'Does not create anything,' but never names the sibling explicitly, leaving some ambiguity about where it fits in the discovery-to-follow workflow.

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?

Implies the tool is used when a user wants to discover topics to follow, but gives no explicit when-to-use guidance, no prerequisites, and no named alternatives (e.g., follow_topic or list_followed_topics). The agent must infer the context from the phrase 'wants to follow.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

follow_topicFollow TopicAInspect

Follow a topic for the signed-in user. Saves it to their Scout account and may send them email digests. Call only after the user confirms the targets.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoUser-facing name. Defaults to the query.
queryNoWhat the user asked to follow.
targetsNoThe confirmed targets, usually from POST /follows/resolve after the user reviewed them.
deliveryNodefault
confirmedNoSet true only after the user saw the label and targets. Without it, or without targets, the response is 409 confirmation_required with the resolution to show.
created_viaNo
source_thread_idNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare it is non-readonly, non-destructive and closed-world; the description adds real behavioral context beyond that: persistence to the user's account and an email-digest side effect. It does not detail the 409 confirmation_required flow in the prose (that lives in the confirmed param).

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?

Three short sentences, front-loaded with the core action and effects, then the precondition. Every sentence earns its place with no filler.

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 7-parameter mutation tool with no output schema, the description covers the main action and confirmation gate but omits the delivery modes (enum with no description), created_via, and source_thread_id. Adequate but leaves notable gaps an agent might need when invoking.

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 57%, so the schema already carries much of the parameter meaning (label, query, targets, target_id, confirmed). The description reinforces the confirmation precondition but says nothing about delivery, created_via, or source_thread_id, so it adds only marginal value over the schema.

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 states a specific verb+resource ('Follow a topic') and adds two concrete effects: saving to the Scout account and possibly sending email digests. It is clearly distinguishable from unfollow_topic and find_topics_to_follow, though it never names a sibling to sharpen the contrast.

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?

It gives a clear precondition: 'Call only after the user confirms the targets,' which pairs with the confirmed/targets parameters. It offers no explicit when-not or alternative-tool routing, so it stops short of the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_positionsGet Company PositionsB
Read-only
Inspect

Summarize a company's positions on a topic from its TDocs.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoOne company: name, alias, or org_id, e.g. 'Lekha Wireless'.
orgsNoSeveral companies to compare, comma-separated, e.g. 'lekha-wireless,mavenir'.
groupNoComma-separated working groups, e.g. R1,R2.
limitNo
topicNoFree-text topic matched by meaning, e.g. 'NTN timing advance'.
cursorNo
stanceNoComma-separated stances: proposes, supports, opposes, prefers_alternative, raises_concern, requests_clarification, observes.
meetingNoComma-separated meeting IDs, e.g. R1-126.
agenda_itemNoAgenda item, e.g. 10.7.1 (use with meeting).

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds that it summarizes from TDocs, suggesting a synthesized return, but doesn't specify pagination behavior despite a cursor parameter or any other traits beyond annotations.

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?

A single, efficient sentence that front-loads the core action and resource. It is appropriately sized with no waste, though it could be slightly more specific about scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, no output schema, and no annotations beyond safety hints, the description is too thin. It fails to explain how to combine filters like org/orgs, topic, stance, and meeting, or what the summary output includes, leaving significant gaps for such a complex tool.

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 78%, so most parameters are documented in the schema. The description doesn't add any parameter details beyond what the schema provides, making the baseline 3 appropriate.

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?

States a specific verb (summarize) and resource (company positions on a topic from its TDocs), which is clear. However, it does not differentiate from the sibling search_positions, which likely returns position documents rather than summaries, leaving the agent to infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like search_positions or fetch_tdoc. There are no prerequisites or exclusions mentioned, leaving the agent without routing context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_document_documentsGet Document DocumentsB
Read-only
Inspect

Get metadata for one specification by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
titleNo
seriesYes
statusYes
releaseYes
versionYes
doc_typeYes
filenameYes
created_atNoWhen Scout indexed this version, not a 3GPP date; see provenance for those.
doc_numberYes
provenanceNoWhen this version was uploaded to the 3GPP archive and the TSG plenary it came from, with sources. Null when the version has no provenance row yet.
total_text_chunksNo
total_image_chunksNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds the useful detail that it returns metadata rather than document content, but says nothing about auth needs, rate limits, or error behavior.

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?

A single front-loaded sentence with no filler, which is appropriately sized. It is slightly vague in wording ('specification' vs 'document') but not padded.

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?

An output schema exists, so return values need not be described, and annotations cover the read-only nature. Still missing is a tie-in to the surrounding document/tdoc tool family and any note on what 'metadata' excludes, leaving the agent to infer scope.

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 0%, so the schema gives only a name and type for document_id. The description compensates slightly by indicating the parameter is an ID lookup, but adds no format, range, or expected value detail for the integer identifier.

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 states a specific verb and resource ('get metadata for one specification') and scopes it to a single record by ID, which distinguishes it from list_documents_documents_get. However, it never names a sibling alternative and the terminology ('specification') doesn't clearly reconcile with the tool's own 'document' naming or with get_tdoc/list_tdocs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus the many sibling lookup tools (get_tdoc, fetch_tdoc, list_documents_documents_get). The 'by its ID' phrasing only weakly implies the required input form; no prerequisites, no when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_followed_topic_updatesGet Followed Topic UpdatesC
Read-only
Inspect

Get recent changes for one followed topic.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceNoOnly updates that happened at or after this time.
offsetNo
follow_idYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. Beyond that, the description discloses nothing: no pagination behavior despite limit/offset params, no freshness semantics for 'recent', and no hint at what the updates contain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with no padding, which is good structure, but its brevity comes at the cost of under-specification for a four-parameter tool. Appropriate size, insufficient substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and four parameters, the description would need to carry more weight. It omits pagination semantics, what a 'change' object looks like, and how follow_id is obtained, leaving real gaps for an agent to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only 'since' is documented). The description mentions 'one followed topic', weakly implying follow_id is required, but says nothing about limit, offset, or pagination defaults, so it does not compensate for the coverage gap.

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?

States a specific verb (Get) and resource (recent changes for one followed topic), which distinguishes it from list_followed_topics and update_followed_topic. It is clear but does not explicitly name how it differs from its closest siblings, so it stops just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites, and does not point to any alternative such as list_followed_topics for discovering follow_ids. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_meetingGet MeetingC
Read-only
Inspect

Get details of one meeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoComma-separated sections: 'agenda' (agenda items with TDoc counts), 'documents' (chair notes, reports, summaries, way forwards, agendas).agenda,documents
meeting_idYes
documents_limitNoMost key documents to list; chair notes and reports come first.

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context beyond 'Get details' and does not describe permissions, side effects, or return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single front-loaded sentence with no wasted words, but it is under-specified for a tool with three parameters. The brevity is efficient yet leaves important context unstated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should explain what details are returned, but it does not. Combined with no usage guidance and incomplete parameter coverage, the definition is too thin for an agent to use confidently beyond the basics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, with 'include' and 'documents_limit' well documented in the schema but 'meeting_id' undocumented anywhere. The description adds no parameter meaning beyond the schema, and it does not compensate for the uncovered required parameter.

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?

States a clear verb and resource ('Get details of one meeting'), which distinguishes it from list_meetings by focusing on a single meeting. It does not explicitly name or differentiate from siblings beyond the singular object, so it is clear but not maximally specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as list_meetings or get_tdoc. It simply states what it does, leaving context and exclusions entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_organizationGet OrganizationB
Read-only
Inspect

Get one organization's 3GPP participation summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds useful payload context by naming the return as a '3GPP participation summary,' but says nothing about what that summary contains or whether results are paged. With annotations carrying the burden, this is adequate but thin.

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?

A single front-loaded sentence with no filler, no redundancy, and nothing that could be trimmed. Well structured for a simple lookup tool.

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 no output schema, the description is the only source on what comes back, and '3GPP participation summary' is too vague to tell an agent what fields or level of detail to expect. For a one-parameter read tool it is minimally sufficient, but the vague return description and unspecified org_id format leave real gaps.

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 0% and org_id has no description in the schema, so the description must compensate; it only implies that the identifier refers to a single organization. It does not state the expected format (numeric ID vs. name/slug), which matters given the resolve_organization sibling exists precisely to map names to identifiers.

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 gives a specific verb and resource (get an organization) plus a scope for the payload (3GPP participation summary), which tells an agent this returns participation data rather than raw org metadata. It is clear on its own, but it never distinguishes itself from the sibling resolve_organization, which plausibly serves a related org-lookup need.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives such as resolve_organization, which an agent might reasonably pick instead when it only holds an org name. The phrase 'one organization's' weakly implies a single-org lookup but gives no preconditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sections_batchGet Sections BatchA
Read-only
Inspect

Read up to 10 clauses in one call, from one or several documents.

Each clause comes back as get_sections returns it with latest=true (one version: the given version, else the newest of the given release, else the newest indexed), plus its sub-clauses as numbers and titles only (all of them up to 40, else the direct ones). Results are in request order and each has a status: a missing clause does not fail the call; it gets nearest_sections, the closest existing clause numbers.

Quota: for REST and MCP this call counts as one request per clause (requests_counted), the same as calling get_sections once per clause. If fewer requests remain than clauses asked for, it fails with 402 before reading anything.

Excerpt limit: each clause carries at most 2,000 words of spec text, cut like get_sections with truncated=true and truncation_reason="word_limit"; read the rest at official_url.

Dates for prior art: each clause has provenance (3GPP archive upload time and approving TSG plenary of its version). available_before applies to every clause, like get_sections with latest=true: a clause that only exists in later versions gets status no_version_before_cutoff.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionsYes1 to 10 clauses, from one or several documents.
available_beforeNoOnly versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here. Applies to every clause: a clause without version reads the newest version uploaded before the date.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes
requests_countedYesAPI requests this call counted toward the monthly quota: one per clause for REST and MCP.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavior well beyond the readOnlyHint/destructiveHint annotations: one-request-per-clause quota accounting, a pre-read 402 failure when quota is insufficient, per-clause status handling for missing clauses (nearest_sections), the 2,000-word excerpt cap with truncation flags, and provenance/available_before semantics. This is the kind of context an agent cannot derive from structured fields.

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?

Front-loaded with the core action, then organized under bold headers (Quota, Excerpt limit, Dates for prior art). It is dense and slightly long, but nearly every sentence carries behavioral detail that would otherwise be invisible.

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?

An output schema exists and annotations cover the safety profile, yet the description still explains return shape (statuses, sub-clauses, truncation) sufficiently for correct invocation. Nothing an agent needs to call this batch tool correctly is missing.

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 the baseline is 3, but the description adds genuine semantics: the version-then-release-then-newest fallback chain, that available_before applies uniformly to every clause, and that results follow request order with per-clause statuses. This goes beyond restating the schema.

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?

States a specific verb ('Read'), resource ('clauses'), and scope ('up to 10 in one call, from one or several documents'). The batching scope implicitly distinguishes it from the single-clause sibling get_sections_sections_get without needing to name it.

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 quota paragraph tells the agent the cost is identical to calling get_sections once per clause, which is useful decision context, but there is no explicit statement of when to prefer this batch call over the single-clause sibling or when-not to use it. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sections_sections_getGet Sections Sections GetA
Read-only
Inspect

Read the text of specific sections of a specification, in short excerpts.

ParametersJSON Schema
NameRequiredDescriptionDefault
latestNoIf true, return one version only: the given version, else the newest version of the given release, else the newest indexed version. Each result then has latest_version and latest_release; an older result also has same_text_as_latest, whether the newest version's same section has the same text (null when the newest version lacks it).
prefixNoIf true, also list sub-sections. E.g. '5.3' returns 5.3 with text plus 5.3.1, 5.3.1.1, 5.3.2, etc. as numbers and titles only (API and MCP return one clause of text per call). Also works for annex prefixes: 'A' with prefix=true lists A, A.1, A.2.3, etc.
releaseNo3GPP release, e.g. 'Rel-19'. Omit to return all indexed versions of the document.
versionNoSpecific document version, e.g. '19.1.0'. Usually not needed — use release instead.
doc_numberYesDocument number, e.g. '38.331' (NR RRC), '23.501' (system architecture), '38.300' (NR overview). Required — section numbers like '5.1' exist in hundreds of unrelated documents. Use the numeric format without the 'TS'/'TR' prefix.
section_numberYesSection number to look up. Numeric ('5.3.5', '6.3.2'), trailing-letter ('5.3.1a'), or 3GPP annex ('A.1', 'B.2.3') identifiers are all supported. Use the same dot-delimited numbering as it appears in the spec; case-sensitive (annex letters are uppercase).
available_beforeNoOnly versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here. With latest=true and no version, returns the newest version uploaded before the date.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false). The description adds a genuinely useful behavioral fact not in structured data: results are returned as 'short excerpts', warning the agent that the full clause text may be truncated and that another call or tool may be needed for complete text.

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?

A single front-loaded sentence with no filler; the scope constraint ('specific sections') and the output-shape caveat ('short excerpts') are both delivered immediately.

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?

With an output schema present, return-value detail is not required, annotations cover safety, and all 7 parameters are documented in the schema. The one remaining gap is that it does not route the agent to get_sections_batch for multi-section retrieval, which would be a natural exclusion to state.

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% and the parameter docs are unusually rich (version inheritance, prefix sub-section behavior, available_before date semantics), so the schema carries the burden. The description adds no parameter-level information beyond it, which matches the baseline 3.

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?

States a specific verb (Read) and resource (text of specific sections of a specification), which clearly separates it from document-level siblings like get_document_documents or list_sections_sections_toc_get. It stops short of naming the closely related get_sections_batch, so a 4 rather than a 5.

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?

Usage is implied by the resource: look up the text of a named section. There is no explicit statement of when to prefer this over get_sections_batch (multiple sections), list_sections_sections_toc_get (titles only), or the search tools, so the agent must infer the routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tdocGet TdocB
Read-only
Inspect

Get metadata and status for one TDoc by number.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoComma-separated extras: 'units' (labeled proposals, observations, agreements, and other units as quotes with anchors), 'text' (document text blocks with anchors), 'revisions' (revision chain). Example: include=units,revisions.
tdoc_idYes
text_offsetNoFirst text block to return when include has 'text'. Use text.next_offset to page.
max_text_charsNoCharacter budget for text blocks.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds that metadata and status are returned, which is modest extra value, but it says nothing about pagination or how the 'include' extras change the fetch behavior.

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?

A single tight sentence with the resource and scope front-loaded and zero filler. It is arguably too terse for a 4-parameter tool, but there is no wasted language.

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 no output schema, the description should carry more of the return-shape burden, yet it only says 'metadata and status.' The input schema is self-documenting and annotations cover safety, so the gaps are moderate rather than severe.

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 75%, and the schema itself richly documents include, text_offset, and max_text_chars (including an example and paging hint). The description adds no parameter meaning beyond that, so the baseline of 3 applies.

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?

States a specific verb and resource ('Get metadata and status for one TDoc by number'), and the scope (single TDoc, addressed by number) clearly differentiates it from list_tdocs and search_tdocs. It does not, however, address the near-identical sibling fetch_tdoc, so an agent cannot tell those two apart from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no exclusions, and no mention of the alternative sibling fetch_tdoc. The only implied usage is 'you already have a TDoc number,' which is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documents_documents_getList Documents Documents GetB
Read-only
Inspect

List indexed 3GPP specifications with number, title, release and version.

ParametersJSON Schema
NameRequiredDescriptionDefault
seriesNoFilter by series, e.g. '38'.
releaseNoFilter by 3GPP release, e.g. 'Rel-19'.
doc_typeNoFilter by document type: 'TS' or 'TR'.
doc_numberNoFilter by document number, e.g. '38.811'. Returns only versions of that document.
available_beforeNoOnly versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only the returned field list, which is redundant given an output schema exists, and says nothing about ordering, pagination, or result-size behavior.

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?

A single front-loaded sentence with zero filler; the purpose and returned fields come first. Nothing needs trimming.

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 an output schema present, return values need not be explained, and the schema documents filters thoroughly. Still missing is any statement about default behavior, result ordering, or how this list differs from the get/search siblings, which an agent needs to route 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?

Schema description coverage is 100% and the filter parameters carry very rich descriptions in the schema (notably available_before, which explains UTC cutoff semantics and indexing gaps). The description contributes no parameter meaning beyond that, so the baseline 3 applies.

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?

States a specific verb ('List') and resource ('indexed 3GPP specifications') plus the fields returned (number, title, release, version). It is distinguishable from the singular get_document_documents by the plural/list framing, but the description never explicitly contrasts itself with that sibling or with search_tdocs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use statement, no mention of when a filtered list is preferable to search_tdocs/search_text, and no note on defaults (e.g. does an unfiltered call return all indexed specs?). Usage must be inferred purely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_followed_topicsList Followed TopicsB
Read-only
Inspect

List topics the signed-in user follows.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description's only added behavior is the implicit user-scoping ('signed-in user'), which is useful but minimal; it says nothing about result ordering, pagination, or volume.

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?

A single eight-word sentence, front-loaded with the verb and resource. Nothing extraneous.

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 zero-parameter list tool with annotations covering safety, the description is adequate but thin: with no output schema, an agent gets no signal about what a returned 'topic' looks like or whether results are paginated. A brief note on return shape or ordering would close the gap.

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 tool takes zero parameters, so the baseline is 4. There is nothing for the description to disambiguate at the parameter level, and it correctly implies no filtering options exist.

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?

States a specific verb (List) and resource (topics), with a useful scoping qualifier: 'the signed-in user follows.' This distinguishes it from sibling find_topics_to_follow (discovery) and follow_topic/unfollow_topic (mutation), though it doesn't name those siblings directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no exclusions, and no pointer to related siblings like get_followed_topic_updates or find_topics_to_follow. An agent must infer from the name alone that this is the read side of the follow lifecycle.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_meeting_decisionsList Meeting DecisionsC
Read-only
Inspect

List what a meeting agreed, approved, noted or rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoTopic, matched by meaning and by exact identifiers, e.g. 'NTN timing advance' or 'ta-CommonDrift'.
limitNo
cursorNonext_cursor from a previous response.
meeting_idYes
agenda_itemNoComma-separated agenda items; '10.7' also matches 10.7.1.
source_kindNoComma-separated: chair_notes, report, summary, register.
decision_typeNoComma-separated: agreement, working_assumption, conclusion, observation, ffs, approved_cr, endorsed, not_pursued, noted. Default: every type except noted.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not mention the default exclusion of 'noted' decisions, pagination via cursor/limit, or that results are scoped to one meeting — behavioral facts an agent needs and that only the schema hints at.

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?

A single well-formed sentence with no filler, front-loading the operation and its scope. However, its brevity comes at the cost of the operational detail the tool actually needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, paginated, filterable read tool with no output schema, the description is too thin. It never mentions the pagination loop, the default decision-type filter, or how the filters combine, leaving the agent to reconstruct behavior from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 71%, and the description supplies no parameter meaning at all. It does not explain q's semantic matching, agenda_item's prefix behavior, the 50/200 limit bounds, cursor continuation, or the fact that decision_type defaults to everything except 'noted' — leaving the description unable to compensate for the coverage gap.

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 gives a clear verb (List) and resource (meeting decisions), and enumerates the outcome categories — agreed, approved, noted, rejected — so an agent knows it returns decision records rather than raw meeting content. It does not distinguish itself from siblings like get_meeting or list_documents, which may also surface meeting outcomes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool over alternatives such as get_meeting, nor any prerequisite or exclusion information. The agent must infer usage entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_meetingsList MeetingsC
Read-only
Inspect

List 3GPP working group meetings by group and date.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNoComma-separated groups, e.g. 'R1', 'RAN2', 'S2'.
sinceNoMeetings starting on or after this date (YYYY-MM-DD).
stateNoplanned, live, or completed.
untilNoMeetings starting on or before this date (YYYY-MM-DD).

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered externally; the description contributes no additional behavioral context. It does not say what happens when all filters are omitted (all meetings returned?), how results are ordered, or how large the result set can be — relevant because zero parameters are required.

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?

A single front-loaded sentence with no filler, which is appropriate for a simple list endpoint. It is terse rather than padded, though the terseness edges toward under-specification rather than elegant brevity.

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 four-parameter, fully-documented read-only list tool with no output schema, the description is minimally viable: the schema carries parameter detail and annotations carry the safety profile. What is missing is disambiguation from the many sibling list/get tools and any note on unfiltered result behavior, which an agent needs to call this 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?

Schema description coverage is 100%, so each parameter (group, since, until, state) is already documented with format and semantics. The description's 'by group and date' only echoes two of the four filters and omits state entirely, so it adds nothing beyond the schema. Baseline 3 applies.

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?

States a specific verb and resource ('List 3GPP working group meetings') and scopes it to group and date, which distinguishes it from the singular sibling get_meeting. It does not, however, acknowledge list_meeting_decisions or clarify how it differs from the other list_* tools in the family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no alternatives named. An agent cannot tell from the description whether to call this or get_meeting for a single meeting, or how this relates to list_meeting_decisions. Usage is only implied by the verb 'List'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sections_sections_toc_getList Sections Sections Toc GetC
Read-only
Inspect

Get the table of contents of a specification.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoSpecific document version, e.g. '19.1.0'. Omit to get all available versions.
doc_numberYesDocument number to get the TOC for, e.g. '38.331' (NR RRC), '23.501' (5G system architecture), '38.300' (NR overview).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds nothing behavioral beyond that: no note on ordering, pagination, or how much of the TOC is returned. With annotations doing the work, the description is purely a purpose restatement.

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?

A single front-loaded sentence with no waste. It is efficient, though the brevity contributes to the missing sibling and usage context rather than being a virtue in itself.

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 an output schema present and full parameter coverage, the description needn't explain return values, so the remaining gap is narrower. However, in a namespace crowded with list_sections/get_sections siblings, one clarifying sentence about scope would materially help; its absence keeps this at minimum viable.

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%, and both parameters (doc_number, version) are well documented in the schema with examples. The description adds no additional parameter meaning, so the baseline 3 applies.

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?

States a specific verb and resource: retrieving the table of contents for a specification. It clearly identifies the operation, though it never distinguishes this from close siblings such as get_sections_sections_get or get_sections_batch, leaving the agent to infer the boundary between 'TOC' and 'sections'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is provided. Nothing states when to pick this over get_sections_sections_get (full sections) or get_sections_batch, so the agent has no signal for choosing among the three related tools except a guess at naming.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tdocsList TdocsC
Read-only
Inspect

List TDocs for a meeting or agenda item.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoWords that must all appear in the title or abstract, e.g. 'NTN timing advance'.
roleNoComma-separated source roles: submitter, co_submitter, editor. Default all roles; each item reports matched_role.
specNoTarget spec number, e.g. '38.213'.
groupNoComma-separated groups, e.g. 'R1', 'RAN2', 'S2'.
limitNoPage size.
sinceNoMeetings starting on or after this date (YYYY-MM-DD).
untilNoMeetings starting on or before this date (YYYY-MM-DD).
cursorNonext_cursor from a previous response.
sourceNoCompany name, alias, or org_id, e.g. 'Mavenir', 'Lekha Wireless', 'huawei'. Misspellings resolve through aliases.
statusNoComma-separated register statuses, e.g. 'agreed,approved' or 'noted'.
meetingNoComma-separated meeting IDs, e.g. 'R1-126' or 'RAN1#126'.
doc_kindNoComma-separated kinds: contribution, pcr, cr, draft_cr, summary, way_forward, ls_in, ls_out, report, chair_notes, agenda, wid, sid, status_report, work_plan, draft_spec.
work_itemNoWork item code, e.g. 'NR_NTN_Ph3-Core'.
agenda_itemNoAgenda item; matches the item and its sub-items, e.g. '10.7' matches 10.7.1.
include_withdrawnNoInclude withdrawn TDocs.

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered structurally. The description adds nothing behavioral: no pagination semantics, no note that withdrawn TDocs are excluded by default, no indication of result volume or ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence is front-loaded and waste-free, which is good. But the brevity here reflects under-specification rather than disciplined concision: a 15-filter tool is described with only two of its capabilities, so the sentence is too thin to be genuinely concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter, zero-required filter/search surface with no output schema, the description omits the bulk of the tool's behavior (free-text search, source/company resolution, status/doc_kind/work_item filters, date ranges, cursor paging) and gives no sense of return shape. It is not adequate for the tool's complexity.

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 every filter is already documented in the schema; the baseline of 3 applies. The description adds no parameter meaning beyond the two filters it names ('meeting', 'agenda item'), which the schema itself documents in more detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a verb (list) and resource (TDocs), so the basic purpose is clear. However, 'for a meeting or agenda item' falsely implies those are the scoping parameters when the schema exposes 15 optional filters (source, spec, status, doc_kind, work_item, dates, free-text q, etc.), and it does nothing to distinguish this from the sibling search_tdocs or list_documents_documents_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no when-to-use guidance, no mention of when to prefer search_tdocs, and no stated prerequisites. The phrase 'for a meeting or agenda item' hints at a context but never explains how it differs from the other listing/search siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_organizationResolve OrganizationB
Read-only
Inspect

Match a company name to its 3GPP member organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesCompany name or alias to resolve, e.g. 'Manevir', 'Lekha', 'Interdigital'.
limitNoMaximum candidates.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The word 'match' implies fuzzy resolution returning candidate organizations rather than an exact hit, but the description does not confirm ranking, scoring, or how multiple candidates are returned.

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?

A single front-loaded sentence with no filler; every word earns its place. It is arguably too terse for a tool whose main ambiguity is sibling selection, but there is no structural waste.

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 low-complexity read-only lookup with full schema coverage, the definition is minimally viable. What is missing is the behavioral context an agent needs to call it correctly: whether results are ranked candidates, what a no-match looks like, and why to choose this over get_organization.

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 both parameters are documented in-schema, including examples for 'q' and the 1-25 bound for 'limit'. The description adds no format or syntax detail beyond the schema, so the baseline 3 applies.

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?

States a specific verb (match) and both ends of the transformation (company name -> 3GPP member organization), which is far more informative than the title's restatement. It does not name or contrast itself with the closely related sibling get_organization, so the differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus get_organization, which appears to retrieve an organization directly. The description also omits when-not-to-use conditions and any hint that inputs may be aliases or approximate names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_combined_search_combined_postSearch Combined Search Combined PostA
Read-only
Inspect

Search specification text and figures together. Use when a question may be answered by a diagram or a clause.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language search query. Searches both text and images simultaneously.
rerankNoRerank text results for better precision. Always leave true.
deduplicateNoCollapse near-duplicate text and image results from different releases/versions; collapsed matches appear in each winner's 'also_in' with release, version, and scores. Ignored when filter_release is set.
rerank_top_kNoNumber of text results after reranking. Use 3–5 for focused lookups, 10–20 for research.
filter_seriesNoRestrict by series: '38' = NR/5G, '23' = system architecture, '36' = LTE, '33' = security.
filter_releaseNoRestrict to a specific 3GPP release. Examples: 'Rel-15', 'Rel-17', 'Rel-20'. Omit for all indexed releases (Rel-15 through Rel-20).
filter_doc_typeNoRestrict by document type: 'TS' (Technical Specification) or 'TR' (Technical Report).
available_beforeNoOnly versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here.
text_match_countNoText candidates before reranking. Default 30 balances speed and quality.
filter_doc_numberNoRestrict to a specific document, e.g. '38.331', '23.501'. Numeric format only.
image_match_countNoNumber of image/diagram results to return alongside text results.
include_section_textNoInclude full parent section text for each text chunk.
text_match_thresholdNoText similarity threshold. Leave at 0 (default) and rely on reranking.
filter_section_numberNoRestrict to a section, e.g. '5.3.5'. Only useful with filter_doc_number.
image_match_thresholdNoImage similarity threshold. Default 0 returns best matches.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
rerankedYes
text_totalYes
image_totalYes
text_resultsYes
image_resultsYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context of its own — nothing about ranking, latency, result mixing, or cost of the combined search — so it clears the lower bar set by annotations but adds no extra value.

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 short sentences, purpose first, usage condition second, with zero filler. Nothing can be trimmed without losing routing 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?

For a 15-parameter tool with an output schema and full schema-level documentation, the description's job is narrow: state what it searches and when to pick it over the text-only or image-only siblings. It does the first well and the second adequately, leaving only explicit sibling routing unaddressed.

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% and every parameter carries a detailed inline description (rerank, deduplicate, available_before semantics, match counts). The description adds no parameter guidance, so the baseline of 3 applies.

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?

States a specific verb+resource and a clear scope: 'Search specification text and figures together.' The word 'together' distinguishes it from the sibling text-only and image-only search tools, though it does not name them explicitly.

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?

'Use when a question may be answered by a diagram or a clause' gives a concrete triggering condition that separates this from a plain text search. It stops short of naming the alternatives (search_text_search_text_post, search_images_search_images_post) or stating when to prefer them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_images_search_images_postSearch Images Search Images PostB
Read-only
Inspect

Search figures and diagrams in 3GPP specifications by description. Returns figure captions and their source sections.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language query describing the diagram, figure, or table you're looking for. E.g. 'protocol stack architecture', 'random access procedure flow chart'.
deduplicateNoCollapse near-duplicate image results from different releases/versions (same doc_number, section_number, and caption). Keeps the highest-similarity result (the newest release when similarities tie) and annotates 'also_in' with each collapsed match's release, version, and similarity. Ignored when filter_release is set.
match_countNoNumber of image results to return.
filter_seriesNoRestrict by series: '38' = NR/5G, '23' = system architecture, '36' = LTE, '33' = security.
filter_releaseNoRestrict to a specific 3GPP release. Examples: 'Rel-15', 'Rel-17', 'Rel-20'. Omit for all indexed releases (Rel-15 through Rel-20).
match_thresholdNoMinimum similarity score. Default 0.3 filters low-quality matches.
available_beforeNoOnly versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here.
filter_doc_numberNoRestrict to a specific document, e.g. '38.300', '23.501'. Numeric format only.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
totalYes
resultsYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered externally. The description adds the useful behavioral fact that results are figure captions plus their source sections, but says nothing about ranking behavior, thresholds, or pagination beyond what the schema documents.

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?

Two tight sentences with the purpose front-loaded and no filler. It is efficient, though it is arguably under-specified rather than truly concise for an 8-parameter tool.

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?

An output schema exists, so return values need not be explained, and annotations cover safety. However, for a tool with 8 parameters spanning series, release, doc number, and an upload-date cutoff, the description leaves the whole filtering model and its sibling relationship unexplained.

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% across all 8 parameters, including rich per-parameter docs for deduplicate, available_before, and the filters, so the baseline is 3. The description only echoes the 'by description' notion already captured by the query parameter and adds no syntax or semantics beyond the schema.

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?

States a specific verb+resource ('Search figures and diagrams in 3GPP specifications by description') and adds the return shape (figure captions and source sections). The resource is narrow enough to distinguish it from text search at a glance, but it never names the sibling search tools it overlaps with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, when-not-to-use, or alternative guidance is given. With siblings like search_text_search_text_post and search_combined_search_combined_post in the list, an agent has no stated basis for choosing image search over those; it must infer solely from the word 'figures'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_newsSearch NewsC
Read-only
Inspect

Search telecom industry news indexed by Scout.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoWords to match in the title, filer or summary, e.g. 'interference'.
sinceNoPublished on or after YYYY-MM-DD.
topicNoComma-separated topics: ntn, 6g, ai_ml, ambient_iot, iot, redcap, xr, energy, positioning, isac, slicing, open_ran, spectrum, uav, interference.
untilNoPublished on or before YYYY-MM-DD.
offsetNo
sourceNoComma-separated sources: fcc_ecfs, sec_edgar, gdelt, and any enabled press source.
companyNoComma-separated companies (names, aliases or org_ids), e.g. 'AST SpaceMobile'.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds only the vague 'indexed by Scout' framing and says nothing about pagination, result limits, total counts, or what an unfiltered search returns.

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?

A single front-loaded sentence with zero waste. It is efficient, though arguably under-specified rather than concise given the tool's eight-parameter surface.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With eight optional parameters, no output schema, and no required arguments, the description should explain what happens when no filters are supplied, how results are paged or ordered, and how this corpus relates to the sibling search endpoints. None of that is present.

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 75% with concrete examples and enumerated topic/source values for query, topic, source and company, so most semantics live in the schema. The description adds nothing for parameters, and limit/offset remain undocumented beyond min/max/default, but the baseline of 3 applies when the schema carries the weight.

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?

States a specific verb and resource ('Search telecom industry news'), with the added scope that results come from a corpus 'indexed by Scout.' It does not differentiate from siblings like search_tdocs or search_combined, so an agent cannot tell from the description alone which search corpus to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the many sibling search tools (search_tdocs, search_positions, search_combined), and no mention of prerequisites or exclusions. The agent is left to infer usage entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_positionsSearch PositionsC
Read-only
Inspect

Find which companies argued for or against a proposal.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgsNoLimit to these companies (names, aliases, or org_ids).
groupNoWorking group, e.g. R1 or RAN1.
limitNo
queryYesWhat to find, e.g. 'common TA drift' or 'K_offset update for LEO'.
stanceNoAny of: proposes, supports, opposes, prefers_alternative, raises_concern, requests_clarification, observes.
meetingNoMeeting ID, e.g. R1-126.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and a closed-world scope, so the safety profile is covered. The description adds nothing behavioral beyond that — no indication of result shape, ordering, or how stances map to companies.

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?

A single, front-loaded sentence with no waste or filler. It is arguably too terse for a 6-parameter tool, but structure and economy are strong.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter search tool with no output schema, one sentence is thin: it omits how results relate to companies/stances, whether filtering by org or meeting narrows scope, and when to prefer the sibling get_company_positions. An agent can call it, but not confidently.

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 83%, so the schema already documents orgs, group, query, stance, and meeting with examples and enum-like values. The description adds no parameter meaning over the schema, which is the expected baseline at this coverage level.

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?

States a specific verb ('Find') and resource ('which companies argued for or against a proposal'), making the semantic purpose clear. However, it never distinguishes itself from siblings like get_company_positions or search_tdocs, which a name like 'search_positions' invites confusion with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no exclusions, and no mention of alternatives such as get_company_positions or search_tdocs despite many overlapping siblings. The agent must infer usage purely from the one-line purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_tdocsSearch Tdocs
Read-only
Inspect

Search 3GPP meeting contributions (TDocs) by topic, company or meeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWhat the TDocs should discuss, in plain words or exact terms, e.g. 'timing advance pre-compensation for NTN', 'ta-CommonDrift', 'R2-2008188'.
rerankNoRerank candidates for precision. Leave true.
filtersNoCatalog filters, the same fields as GET /tdocs.
unit_typesNoOnly chunks holding these units: 'proposal', 'observation', or 'body' (text outside numbered proposals and observations).
include_textNoInclude each passage's text.
max_per_tdocNoAt most this many passages from one TDoc. Use 1 for a list of distinct TDocs.
rerank_top_kNoResults to return after reranking.
search_text_search_text_postSearch Text Search Text PostA
Read-only
Inspect

Search 3GPP specification text by meaning. Returns matching clauses with spec number, version, section and a short excerpt. Use for "what does TS X say about Y".

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language search query. Be specific — e.g. 'RRC connection reconfiguration procedure' rather than just 'RRC'.
rerankNoRerank results for higher precision. Always leave true (default) — the reranker dramatically improves result quality.
deduplicateNoCollapse near-duplicate results from different releases/versions (same doc_number + section_number), so rerank_top_k counts distinct sections. Keeps the highest-scored result (the newest release when scores tie, as identical text across releases does) and annotates it with an 'also_in' list showing each collapsed match's release, version, and scores. Ignored when filter_release is set.
match_countNoCandidate matches to retrieve before reranking. Higher = slower but more thorough. Default 30 balances speed and quality.
rerank_top_kNoNumber of final results after reranking. Use 3–5 for focused lookups, 10–20 for broad research.
filter_seriesNoRestrict by 3GPP series number: '38' = NR/5G radio, '23' = system architecture, '24' = signalling, '36' = LTE, '33' = security, '29' = core network.
prefer_latestNoAdd latest_version and latest_release (the newest indexed version of the document) to each result, and when deduplicating keep the newest matched version of each section instead of the highest-scored one.
filter_releaseNoRestrict to a specific 3GPP release. Examples: 'Rel-15', 'Rel-17', 'Rel-20'. Omit for all indexed releases (Rel-15 through Rel-20).
filter_doc_typeNoRestrict by document type: 'TS' (Technical Specification) or 'TR' (Technical Report). Omit for both.
match_thresholdNoMinimum similarity score. Leave at 0 (default) and rely on reranking for quality filtering.
available_beforeNoOnly versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here.
include_childrenNoAdd each result's sub-clauses (number, title, token count; all of them up to 12, else the direct ones) and descendant_count, so you can pick the clause to read without a table-of-contents call.
filter_doc_numberNoRestrict to a specific document, e.g. '38.331' (NR RRC), '23.501' (system architecture), '38.300' (NR overview). Use the numeric format without the 'TS'/'TR' prefix.
include_section_textNoInclude the full parent section text alongside each chunk. Provides richer context but increases response size.
filter_section_numberNoRestrict to a specific section, e.g. '5.3.5'. Only useful when combined with filter_doc_number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
totalYes
resultsYes
rerankedYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true/openWorldHint=false, so the safety profile is covered; the description usefully states the return shape (spec number, version, section, short excerpt). It adds little beyond that, but since an output schema exists, that is acceptable rather than a gap.

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 short sentences plus a quoted example, with purpose front-loaded and zero filler. Every sentence carries information an agent needs.

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?

With a rich schema, full annotations, and an output schema, the description only needs to convey scope and intent, which it does. It omits pagination/result-size expectations, but the schema's match_count/rerank_top_k fields largely cover that.

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% and the schema is unusually detailed (rerank, deduplicate, match_count, filters, etc.), so all parameter meaning is already carried. The description contributes nothing param-specific; baseline 3 applies.

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?

States a specific verb+resource (search 3GPP specification text) and qualifies it as semantic ('by meaning'), which separates it from metadata-searching siblings like search_tdocs. It does not explicitly name search_combined_search_combined_post, so the boundary with the most similar sibling is left to inference.

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 example '"what does TS X say about Y"' implicitly frames the use case and is genuinely helpful, but there is no explicit when-to-use/when-not guidance or named alternative for keyword or metadata lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unfollow_topicUnfollow TopicA
Destructive
Inspect

Stop following a topic and delete it from the user's account. Cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
follow_idYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds important context beyond that: it deletes the follow from the user's account and the action cannot be undone. It still does not mention auth requirements or rate limits, but the irreversibility disclosure is valuable.

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 short sentences with zero waste. The core action is front-loaded and the irreversible consequence follows immediately, making it easy to parse quickly.

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 simple one-parameter destructive tool with annotations covering the safety profile, the description covers the action and irreversibility. However, it omits any guidance on the required follow_id, which is a notable gap given the schema provides no parameter description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the sole parameter follow_id has no description. The tool description says nothing about what follow_id is or where to obtain it, so it fails to compensate for the schema gap.

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 states a specific verb+resource ('Stop following a topic') and adds the consequence ('delete it from the user's account'), clearly distinguishing it from siblings like follow_topic and update_followed_topic. An agent can identify the core action without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance or alternatives are provided. The description does not mention prerequisites, where the follow_id comes from, or how this relates to update_followed_topic or list_followed_topics, leaving usage entirely implied by the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_followed_topicUpdate Followed TopicB
Destructive
Inspect

Change a followed topic's name, targets or digest settings. Overwrites the previous settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNo
statusNo
targetsNo
deliveryNo
follow_idYes

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds the key operational detail that it 'Overwrites the previous settings' – clarifying that this is a replacement rather than a merge. It stops short of saying which fields are optional or whether omissions clear existing values.

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?

Two tight sentences with the core action front-loaded and the destructive caveat second. No filler, though the brevity contributes to the parameter gaps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation with no annotations beyond safety hints and no output schema, the description is too thin: it omits the status/delivery parameters, doesn't clarify partial-update semantics, and gives no success/error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, yet it only gestures at three concepts ('name, targets or digest settings') against five parameters. The status enum ('active'/'paused'), the delivery enum ('email'/'dashboard'), and the required follow_id are all left unexplained.

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?

States a specific verb (Change) and resource (a followed topic) plus the affected fields (name, targets, digest settings). It reads clearly against siblings like follow_topic and unfollow_topic, though it doesn't explicitly differentiate itself from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no mention of prerequisites, and no indication of how to obtain the required follow_id (e.g., via list_followed_topics). The sibling list is the only hint that this is the edit counterpart to follow_topic.

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.

  1. 1 tool update
    • Changedsearch_tdocs1 field changed
      • changedInput schema / properties / filters / properties / doc_kind / description
        Previous value: -"Kinds: contribution, pcr, cr, draft_cr, summary, way_forward, ls_in, ls_out, report, chair_notes, agenda, wid, sid, status_report, work_plan, draft_spec."New value: +"Kinds: contribution, pcr, cr, draft_cr, cr_pack, summary, way_forward, ls_in, ls_out, report, chair_notes, agenda, wid, sid, status_report, work_plan, draft_spec."
  2. 5 tool updates
    • Removedget_image_images
    • Removedhealth_check_health_get
    • Changedsearch_combined_search_combined_post2 fields changed
      • removedOutput schema / properties / elapsed_ms
        Removed value: -{
        -  "title": "Elapsed Ms",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "text_results",
        -  "image_results",
        -  "text_total",
        -  "image_total",
        -  "reranked",
        -  "elapsed_ms"
        -]New value: +[
        +  "query",
        +  "text_results",
        +  "image_results",
        +  "text_total",
        +  "image_total",
        +  "reranked"
        +]
    • Changedsearch_images_search_images_post2 fields changed
      • removedOutput schema / properties / elapsed_ms
        Removed value: -{
        -  "title": "Elapsed Ms",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "results",
        -  "total",
        -  "elapsed_ms"
        -]New value: +[
        +  "query",
        +  "results",
        +  "total"
        +]
    • Changedsearch_text_search_text_post2 fields changed
      • removedOutput schema / properties / elapsed_ms
        Removed value: -{
        -  "title": "Elapsed Ms",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "results",
        -  "total",
        -  "reranked",
        -  "elapsed_ms"
        -]New value: +[
        +  "query",
        +  "results",
        +  "total",
        +  "reranked"
        +]
  3. 3 tool updates
    • Addedget_sections_batch
    • Changedsearch_combined_search_combined_post2 fields changed
      • addedOutput schema / properties / text_results / items / properties / children
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "properties": {
        +          "section_number": {
        +            "title": "Section Number",
        +            "type": "string"
        +          },
        +          "section_title": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "title": "Section Title"
        +          },
        +          "token_count": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "title": "Token Count"
        +          }
        +        },
        +        "required": [
        +          "section_number"
        +        ],
        +        "title": "SectionChild",
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "With include_children: the section's sub-clauses, without text.",
        +  "title": "Children"
        +}
      • addedOutput schema / properties / text_results / items / properties / descendant_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "With include_children: sub-clauses at any depth.",
        +  "title": "Descendant Count"
        +}
    • Changedsearch_text_search_text_post3 fields changed
      • addedInput schema / properties / include_children
        Added value: +{
        +  "default": false,
        +  "description": "Add each result's sub-clauses (number, title, token count; all of them up to 12, else the direct ones) and descendant_count, so you can pick the clause to read without a table-of-contents call.",
        +  "title": "Include Children",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / results / items / properties / children
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "properties": {
        +          "section_number": {
        +            "title": "Section Number",
        +            "type": "string"
        +          },
        +          "section_title": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "title": "Section Title"
        +          },
        +          "token_count": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "title": "Token Count"
        +          }
        +        },
        +        "required": [
        +          "section_number"
        +        ],
        +        "title": "SectionChild",
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "With include_children: the section's sub-clauses, without text.",
        +  "title": "Children"
        +}
      • addedOutput schema / properties / results / items / properties / descendant_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "With include_children: sub-clauses at any depth.",
        +  "title": "Descendant Count"
        +}
  4. 6 tool updates
    • Changedget_document_documents2 fields changed
      • addedOutput schema / properties / created_at / description
        Added value: +"When Scout indexed this version, not a 3GPP date; see provenance for those."
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "When this spec version reached the public 3GPP archive, and the TSG plenary it came from.\n\nEvery value comes from the 3GPP FTP server: archive and dated plenary folder listings, 3GPP's lists of\nspecifications arising from each TSG round, and the 3GPP change request database. Unknown values stay null.",
        +      "properties": {
        +        "archive_date_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'ftp_archive_listing' (the spec's folder under /ftp/Specs/archive/) or 'ftp_plenary_folder_listing' (a dated plenary folder that showed an earlier time).",
        +          "title": "Archive Date Source"
        +        },
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version's zip was uploaded to the 3GPP archive (ISO 8601, UTC), as the 3GPP FTP folder listing at archive_url shows it. If 3GPP re-uploaded the file, the earliest time seen. Null when not found; see unknown_reasons.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "archive_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The zip on the 3GPP FTP server whose folder listing gives archive_uploaded_at; open its folder to verify the time.",
        +          "title": "Archive Url"
        +        },
        +        "notes": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Anything a reviewer should know, e.g. the file was re-uploaded or two sources name different meetings.",
        +          "title": "Notes"
        +        },
        +        "plenary_batch": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "YYYY-MM of the plenary round whose batch of specifications includes this version (3GPP's dated folders, /ftp/Specs/YYYY-MM/).",
        +          "title": "Plenary Batch"
        +        },
        +        "plenary_batch_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'tsg_spec_list' (stated in 3GPP's list of specifications arising from that TSG round), 'tsg_meeting_start' (the month the plenary in tsg_meeting started) or 'ftp_plenary_folder' (the earliest dated folder holding the zip).",
        +          "title": "Plenary Batch Source"
        +        },
        +        "statement": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The known facts as plain sentences, ready to quote, e.g. 'Uploaded to the 3GPP archive on 2026-09-24 at 16:47 UTC. Approved at TSG SA #113 (2026-09-15 to 2026-09-18).' It says 'uploaded to the 3GPP archive' and 'approved at', never 'published': no source states a publication date.",
        +          "title": "Statement"
        +        },
        +        "tsg_meeting": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Plenary meeting ID: 'SP-113' (TSG SA #113), 'RP-109' (TSG RAN), 'CP-110' (TSG CT); a trailing '-e' marks an electronic meeting.",
        +          "title": "Tsg Meeting"
        +        },
        +        "tsg_meeting_end": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Last day of the plenary meeting.",
        +          "title": "Tsg Meeting End"
        +        },
        +        "tsg_meeting_name": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The meeting as 3GPP names it, e.g. 'TSG SA #113'.",
        +          "title": "Tsg Meeting Name"
        +        },
        +        "tsg_meeting_relation": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'approved': change requests approved at this meeting created this version (3GPP CR database). 'arising_from': 3GPP lists this version among the specifications arising from this meeting. 'presented': a draft (below version 3.0.0) presented to this meeting.",
        +          "title": "Tsg Meeting Relation"
        +        },
        +        "tsg_meeting_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'cr_database' (3GPP change request database export) or 'tsg_spec_list' (3GPP's list of specifications arising from that TSG round).",
        +          "title": "Tsg Meeting Source"
        +        },
        +        "tsg_meeting_source_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The 3GPP file that names the meeting.",
        +          "title": "Tsg Meeting Source Url"
        +        },
        +        "tsg_meeting_start": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "First day of the plenary meeting.",
        +          "title": "Tsg Meeting Start"
        +        },
        +        "unknown_reasons": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "type": "string"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Why a field is null, by field name. archive_uploaded_at: 'not_in_archive_listing'. tsg_meeting: 'before_tsg_lists_no_approved_cr' (uploaded before March 2023, when 3GPP's per-round spec lists start, and created by no approved change request, e.g. a release upgrade), 'draft_not_listed', or 'not_in_cr_database_or_tsg_lists'. Nothing is guessed.",
        +          "title": "Unknown Reasons"
        +        }
        +      },
        +      "title": "SpecProvenance",
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When this version was uploaded to the 3GPP archive and the TSG plenary it came from, with sources. Null when the version has no provenance row yet."
        +}
    • Changedget_sections_sections_get2 fields changed
      • addedInput schema / properties / available_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here. With latest=true and no version, returns the newest version uploaded before the date.",
        +  "title": "Available Before"
        +}
      • addedOutput schema / properties / result / items / properties / provenance
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "When this spec version reached the public 3GPP archive, and the TSG plenary it came from.\n\nEvery value comes from the 3GPP FTP server: archive and dated plenary folder listings, 3GPP's lists of\nspecifications arising from each TSG round, and the 3GPP change request database. Unknown values stay null.",
        +      "properties": {
        +        "archive_date_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'ftp_archive_listing' (the spec's folder under /ftp/Specs/archive/) or 'ftp_plenary_folder_listing' (a dated plenary folder that showed an earlier time).",
        +          "title": "Archive Date Source"
        +        },
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version's zip was uploaded to the 3GPP archive (ISO 8601, UTC), as the 3GPP FTP folder listing at archive_url shows it. If 3GPP re-uploaded the file, the earliest time seen. Null when not found; see unknown_reasons.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "archive_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The zip on the 3GPP FTP server whose folder listing gives archive_uploaded_at; open its folder to verify the time.",
        +          "title": "Archive Url"
        +        },
        +        "notes": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Anything a reviewer should know, e.g. the file was re-uploaded or two sources name different meetings.",
        +          "title": "Notes"
        +        },
        +        "plenary_batch": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "YYYY-MM of the plenary round whose batch of specifications includes this version (3GPP's dated folders, /ftp/Specs/YYYY-MM/).",
        +          "title": "Plenary Batch"
        +        },
        +        "plenary_batch_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'tsg_spec_list' (stated in 3GPP's list of specifications arising from that TSG round), 'tsg_meeting_start' (the month the plenary in tsg_meeting started) or 'ftp_plenary_folder' (the earliest dated folder holding the zip).",
        +          "title": "Plenary Batch Source"
        +        },
        +        "statement": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The known facts as plain sentences, ready to quote, e.g. 'Uploaded to the 3GPP archive on 2026-09-24 at 16:47 UTC. Approved at TSG SA #113 (2026-09-15 to 2026-09-18).' It says 'uploaded to the 3GPP archive' and 'approved at', never 'published': no source states a publication date.",
        +          "title": "Statement"
        +        },
        +        "tsg_meeting": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Plenary meeting ID: 'SP-113' (TSG SA #113), 'RP-109' (TSG RAN), 'CP-110' (TSG CT); a trailing '-e' marks an electronic meeting.",
        +          "title": "Tsg Meeting"
        +        },
        +        "tsg_meeting_end": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Last day of the plenary meeting.",
        +          "title": "Tsg Meeting End"
        +        },
        +        "tsg_meeting_name": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The meeting as 3GPP names it, e.g. 'TSG SA #113'.",
        +          "title": "Tsg Meeting Name"
        +        },
        +        "tsg_meeting_relation": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'approved': change requests approved at this meeting created this version (3GPP CR database). 'arising_from': 3GPP lists this version among the specifications arising from this meeting. 'presented': a draft (below version 3.0.0) presented to this meeting.",
        +          "title": "Tsg Meeting Relation"
        +        },
        +        "tsg_meeting_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'cr_database' (3GPP change request database export) or 'tsg_spec_list' (3GPP's list of specifications arising from that TSG round).",
        +          "title": "Tsg Meeting Source"
        +        },
        +        "tsg_meeting_source_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The 3GPP file that names the meeting.",
        +          "title": "Tsg Meeting Source Url"
        +        },
        +        "tsg_meeting_start": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "First day of the plenary meeting.",
        +          "title": "Tsg Meeting Start"
        +        },
        +        "unknown_reasons": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "type": "string"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Why a field is null, by field name. archive_uploaded_at: 'not_in_archive_listing'. tsg_meeting: 'before_tsg_lists_no_approved_cr' (uploaded before March 2023, when 3GPP's per-round spec lists start, and created by no approved change request, e.g. a release upgrade), 'draft_not_listed', or 'not_in_cr_database_or_tsg_lists'. Nothing is guessed.",
        +          "title": "Unknown Reasons"
        +        }
        +      },
        +      "title": "SpecProvenance",
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When this version was uploaded to the 3GPP archive and the TSG plenary it came from, with sources. Null when the version has no provenance row yet."
        +}
    • Changedlist_documents_documents_get3 fields changed
      • addedInput schema / properties / available_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here.",
        +  "title": "Available Before"
        +}
      • addedOutput schema / properties / result / items / properties / created_at / description
        Added value: +"When Scout indexed this version, not a 3GPP date; see provenance for those."
      • addedOutput schema / properties / result / items / properties / provenance
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "When this spec version reached the public 3GPP archive, and the TSG plenary it came from.\n\nEvery value comes from the 3GPP FTP server: archive and dated plenary folder listings, 3GPP's lists of\nspecifications arising from each TSG round, and the 3GPP change request database. Unknown values stay null.",
        +      "properties": {
        +        "archive_date_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'ftp_archive_listing' (the spec's folder under /ftp/Specs/archive/) or 'ftp_plenary_folder_listing' (a dated plenary folder that showed an earlier time).",
        +          "title": "Archive Date Source"
        +        },
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version's zip was uploaded to the 3GPP archive (ISO 8601, UTC), as the 3GPP FTP folder listing at archive_url shows it. If 3GPP re-uploaded the file, the earliest time seen. Null when not found; see unknown_reasons.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "archive_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The zip on the 3GPP FTP server whose folder listing gives archive_uploaded_at; open its folder to verify the time.",
        +          "title": "Archive Url"
        +        },
        +        "notes": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Anything a reviewer should know, e.g. the file was re-uploaded or two sources name different meetings.",
        +          "title": "Notes"
        +        },
        +        "plenary_batch": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "YYYY-MM of the plenary round whose batch of specifications includes this version (3GPP's dated folders, /ftp/Specs/YYYY-MM/).",
        +          "title": "Plenary Batch"
        +        },
        +        "plenary_batch_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'tsg_spec_list' (stated in 3GPP's list of specifications arising from that TSG round), 'tsg_meeting_start' (the month the plenary in tsg_meeting started) or 'ftp_plenary_folder' (the earliest dated folder holding the zip).",
        +          "title": "Plenary Batch Source"
        +        },
        +        "statement": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The known facts as plain sentences, ready to quote, e.g. 'Uploaded to the 3GPP archive on 2026-09-24 at 16:47 UTC. Approved at TSG SA #113 (2026-09-15 to 2026-09-18).' It says 'uploaded to the 3GPP archive' and 'approved at', never 'published': no source states a publication date.",
        +          "title": "Statement"
        +        },
        +        "tsg_meeting": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Plenary meeting ID: 'SP-113' (TSG SA #113), 'RP-109' (TSG RAN), 'CP-110' (TSG CT); a trailing '-e' marks an electronic meeting.",
        +          "title": "Tsg Meeting"
        +        },
        +        "tsg_meeting_end": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Last day of the plenary meeting.",
        +          "title": "Tsg Meeting End"
        +        },
        +        "tsg_meeting_name": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The meeting as 3GPP names it, e.g. 'TSG SA #113'.",
        +          "title": "Tsg Meeting Name"
        +        },
        +        "tsg_meeting_relation": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'approved': change requests approved at this meeting created this version (3GPP CR database). 'arising_from': 3GPP lists this version among the specifications arising from this meeting. 'presented': a draft (below version 3.0.0) presented to this meeting.",
        +          "title": "Tsg Meeting Relation"
        +        },
        +        "tsg_meeting_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'cr_database' (3GPP change request database export) or 'tsg_spec_list' (3GPP's list of specifications arising from that TSG round).",
        +          "title": "Tsg Meeting Source"
        +        },
        +        "tsg_meeting_source_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The 3GPP file that names the meeting.",
        +          "title": "Tsg Meeting Source Url"
        +        },
        +        "tsg_meeting_start": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "First day of the plenary meeting.",
        +          "title": "Tsg Meeting Start"
        +        },
        +        "unknown_reasons": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "type": "string"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Why a field is null, by field name. archive_uploaded_at: 'not_in_archive_listing'. tsg_meeting: 'before_tsg_lists_no_approved_cr' (uploaded before March 2023, when 3GPP's per-round spec lists start, and created by no approved change request, e.g. a release upgrade), 'draft_not_listed', or 'not_in_cr_database_or_tsg_lists'. Nothing is guessed.",
        +          "title": "Unknown Reasons"
        +        }
        +      },
        +      "title": "SpecProvenance",
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When this version was uploaded to the 3GPP archive and the TSG plenary it came from, with sources. Null when the version has no provenance row yet."
        +}
    • Changedsearch_combined_search_combined_post5 fields changed
      • addedInput schema / properties / available_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here.",
        +  "title": "Available Before"
        +}
      • changedOutput schema / properties / image_results / items / properties / also_in / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "description": "Reference to another release/version that matched the same section.",
        -      "properties": {
        -        "release": {
        -          "title": "Release",
        -          "type": "string"
        -        },
        -        "relevance_score": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "title": "Relevance Score"
        -        },
        -        "similarity": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "title": "Similarity"
        -        },
        -        "version": {
        -          "title": "Version",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "release",
        -        "version"
        -      ],
        -      "title": "AlsoIn",
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "description": "Reference to another release/version that matched the same section.",
        +      "properties": {
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version was uploaded to the 3GPP archive (ISO 8601, UTC); null when unknown.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "release": {
        +          "title": "Release",
        +          "type": "string"
        +        },
        +        "relevance_score": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "title": "Relevance Score"
        +        },
        +        "similarity": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "title": "Similarity"
        +        },
        +        "version": {
        +          "title": "Version",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "release",
        +        "version"
        +      ],
        +      "title": "AlsoIn",
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / image_results / items / properties / provenance
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "When this spec version reached the public 3GPP archive, and the TSG plenary it came from.\n\nEvery value comes from the 3GPP FTP server: archive and dated plenary folder listings, 3GPP's lists of\nspecifications arising from each TSG round, and the 3GPP change request database. Unknown values stay null.",
        +      "properties": {
        +        "archive_date_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'ftp_archive_listing' (the spec's folder under /ftp/Specs/archive/) or 'ftp_plenary_folder_listing' (a dated plenary folder that showed an earlier time).",
        +          "title": "Archive Date Source"
        +        },
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version's zip was uploaded to the 3GPP archive (ISO 8601, UTC), as the 3GPP FTP folder listing at archive_url shows it. If 3GPP re-uploaded the file, the earliest time seen. Null when not found; see unknown_reasons.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "archive_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The zip on the 3GPP FTP server whose folder listing gives archive_uploaded_at; open its folder to verify the time.",
        +          "title": "Archive Url"
        +        },
        +        "notes": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Anything a reviewer should know, e.g. the file was re-uploaded or two sources name different meetings.",
        +          "title": "Notes"
        +        },
        +        "plenary_batch": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "YYYY-MM of the plenary round whose batch of specifications includes this version (3GPP's dated folders, /ftp/Specs/YYYY-MM/).",
        +          "title": "Plenary Batch"
        +        },
        +        "plenary_batch_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'tsg_spec_list' (stated in 3GPP's list of specifications arising from that TSG round), 'tsg_meeting_start' (the month the plenary in tsg_meeting started) or 'ftp_plenary_folder' (the earliest dated folder holding the zip).",
        +          "title": "Plenary Batch Source"
        +        },
        +        "statement": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The known facts as plain sentences, ready to quote, e.g. 'Uploaded to the 3GPP archive on 2026-09-24 at 16:47 UTC. Approved at TSG SA #113 (2026-09-15 to 2026-09-18).' It says 'uploaded to the 3GPP archive' and 'approved at', never 'published': no source states a publication date.",
        +          "title": "Statement"
        +        },
        +        "tsg_meeting": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Plenary meeting ID: 'SP-113' (TSG SA #113), 'RP-109' (TSG RAN), 'CP-110' (TSG CT); a trailing '-e' marks an electronic meeting.",
        +          "title": "Tsg Meeting"
        +        },
        +        "tsg_meeting_end": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Last day of the plenary meeting.",
        +          "title": "Tsg Meeting End"
        +        },
        +        "tsg_meeting_name": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The meeting as 3GPP names it, e.g. 'TSG SA #113'.",
        +          "title": "Tsg Meeting Name"
        +        },
        +        "tsg_meeting_relation": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'approved': change requests approved at this meeting created this version (3GPP CR database). 'arising_from': 3GPP lists this version among the specifications arising from this meeting. 'presented': a draft (below version 3.0.0) presented to this meeting.",
        +          "title": "Tsg Meeting Relation"
        +        },
        +        "tsg_meeting_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'cr_database' (3GPP change request database export) or 'tsg_spec_list' (3GPP's list of specifications arising from that TSG round).",
        +          "title": "Tsg Meeting Source"
        +        },
        +        "tsg_meeting_source_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The 3GPP file that names the meeting.",
        +          "title": "Tsg Meeting Source Url"
        +        },
        +        "tsg_meeting_start": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "First day of the plenary meeting.",
        +          "title": "Tsg Meeting Start"
        +        },
        +        "unknown_reasons": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "type": "string"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Why a field is null, by field name. archive_uploaded_at: 'not_in_archive_listing'. tsg_meeting: 'before_tsg_lists_no_approved_cr' (uploaded before March 2023, when 3GPP's per-round spec lists start, and created by no approved change request, e.g. a release upgrade), 'draft_not_listed', or 'not_in_cr_database_or_tsg_lists'. Nothing is guessed.",
        +          "title": "Unknown Reasons"
        +        }
        +      },
        +      "title": "SpecProvenance",
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When this version was uploaded to the 3GPP archive and the TSG plenary it came from, with sources. Null when the version has no provenance row yet."
        +}
      • changedOutput schema / properties / text_results / items / properties / also_in / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "description": "Reference to another release/version that matched the same section.",
        -      "properties": {
        -        "release": {
        -          "title": "Release",
        -          "type": "string"
        -        },
        -        "relevance_score": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "title": "Relevance Score"
        -        },
        -        "similarity": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "title": "Similarity"
        -        },
        -        "version": {
        -          "title": "Version",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "release",
        -        "version"
        -      ],
        -      "title": "AlsoIn",
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "description": "Reference to another release/version that matched the same section.",
        +      "properties": {
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version was uploaded to the 3GPP archive (ISO 8601, UTC); null when unknown.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "release": {
        +          "title": "Release",
        +          "type": "string"
        +        },
        +        "relevance_score": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "title": "Relevance Score"
        +        },
        +        "similarity": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "title": "Similarity"
        +        },
        +        "version": {
        +          "title": "Version",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "release",
        +        "version"
        +      ],
        +      "title": "AlsoIn",
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / text_results / items / properties / provenance
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "When this spec version reached the public 3GPP archive, and the TSG plenary it came from.\n\nEvery value comes from the 3GPP FTP server: archive and dated plenary folder listings, 3GPP's lists of\nspecifications arising from each TSG round, and the 3GPP change request database. Unknown values stay null.",
        +      "properties": {
        +        "archive_date_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'ftp_archive_listing' (the spec's folder under /ftp/Specs/archive/) or 'ftp_plenary_folder_listing' (a dated plenary folder that showed an earlier time).",
        +          "title": "Archive Date Source"
        +        },
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version's zip was uploaded to the 3GPP archive (ISO 8601, UTC), as the 3GPP FTP folder listing at archive_url shows it. If 3GPP re-uploaded the file, the earliest time seen. Null when not found; see unknown_reasons.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "archive_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The zip on the 3GPP FTP server whose folder listing gives archive_uploaded_at; open its folder to verify the time.",
        +          "title": "Archive Url"
        +        },
        +        "notes": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Anything a reviewer should know, e.g. the file was re-uploaded or two sources name different meetings.",
        +          "title": "Notes"
        +        },
        +        "plenary_batch": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "YYYY-MM of the plenary round whose batch of specifications includes this version (3GPP's dated folders, /ftp/Specs/YYYY-MM/).",
        +          "title": "Plenary Batch"
        +        },
        +        "plenary_batch_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'tsg_spec_list' (stated in 3GPP's list of specifications arising from that TSG round), 'tsg_meeting_start' (the month the plenary in tsg_meeting started) or 'ftp_plenary_folder' (the earliest dated folder holding the zip).",
        +          "title": "Plenary Batch Source"
        +        },
        +        "statement": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The known facts as plain sentences, ready to quote, e.g. 'Uploaded to the 3GPP archive on 2026-09-24 at 16:47 UTC. Approved at TSG SA #113 (2026-09-15 to 2026-09-18).' It says 'uploaded to the 3GPP archive' and 'approved at', never 'published': no source states a publication date.",
        +          "title": "Statement"
        +        },
        +        "tsg_meeting": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Plenary meeting ID: 'SP-113' (TSG SA #113), 'RP-109' (TSG RAN), 'CP-110' (TSG CT); a trailing '-e' marks an electronic meeting.",
        +          "title": "Tsg Meeting"
        +        },
        +        "tsg_meeting_end": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Last day of the plenary meeting.",
        +          "title": "Tsg Meeting End"
        +        },
        +        "tsg_meeting_name": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The meeting as 3GPP names it, e.g. 'TSG SA #113'.",
        +          "title": "Tsg Meeting Name"
        +        },
        +        "tsg_meeting_relation": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'approved': change requests approved at this meeting created this version (3GPP CR database). 'arising_from': 3GPP lists this version among the specifications arising from this meeting. 'presented': a draft (below version 3.0.0) presented to this meeting.",
        +          "title": "Tsg Meeting Relation"
        +        },
        +        "tsg_meeting_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'cr_database' (3GPP change request database export) or 'tsg_spec_list' (3GPP's list of specifications arising from that TSG round).",
        +          "title": "Tsg Meeting Source"
        +        },
        +        "tsg_meeting_source_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The 3GPP file that names the meeting.",
        +          "title": "Tsg Meeting Source Url"
        +        },
        +        "tsg_meeting_start": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "First day of the plenary meeting.",
        +          "title": "Tsg Meeting Start"
        +        },
        +        "unknown_reasons": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "type": "string"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Why a field is null, by field name. archive_uploaded_at: 'not_in_archive_listing'. tsg_meeting: 'before_tsg_lists_no_approved_cr' (uploaded before March 2023, when 3GPP's per-round spec lists start, and created by no approved change request, e.g. a release upgrade), 'draft_not_listed', or 'not_in_cr_database_or_tsg_lists'. Nothing is guessed.",
        +          "title": "Unknown Reasons"
        +        }
        +      },
        +      "title": "SpecProvenance",
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When this version was uploaded to the 3GPP archive and the TSG plenary it came from, with sources. Null when the version has no provenance row yet."
        +}
    • Changedsearch_images_search_images_post3 fields changed
      • addedInput schema / properties / available_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here.",
        +  "title": "Available Before"
        +}
      • changedOutput schema / properties / results / items / properties / also_in / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "description": "Reference to another release/version that matched the same section.",
        -      "properties": {
        -        "release": {
        -          "title": "Release",
        -          "type": "string"
        -        },
        -        "relevance_score": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "title": "Relevance Score"
        -        },
        -        "similarity": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "title": "Similarity"
        -        },
        -        "version": {
        -          "title": "Version",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "release",
        -        "version"
        -      ],
        -      "title": "AlsoIn",
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "description": "Reference to another release/version that matched the same section.",
        +      "properties": {
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version was uploaded to the 3GPP archive (ISO 8601, UTC); null when unknown.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "release": {
        +          "title": "Release",
        +          "type": "string"
        +        },
        +        "relevance_score": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "title": "Relevance Score"
        +        },
        +        "similarity": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "title": "Similarity"
        +        },
        +        "version": {
        +          "title": "Version",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "release",
        +        "version"
        +      ],
        +      "title": "AlsoIn",
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / results / items / properties / provenance
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "When this spec version reached the public 3GPP archive, and the TSG plenary it came from.\n\nEvery value comes from the 3GPP FTP server: archive and dated plenary folder listings, 3GPP's lists of\nspecifications arising from each TSG round, and the 3GPP change request database. Unknown values stay null.",
        +      "properties": {
        +        "archive_date_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'ftp_archive_listing' (the spec's folder under /ftp/Specs/archive/) or 'ftp_plenary_folder_listing' (a dated plenary folder that showed an earlier time).",
        +          "title": "Archive Date Source"
        +        },
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version's zip was uploaded to the 3GPP archive (ISO 8601, UTC), as the 3GPP FTP folder listing at archive_url shows it. If 3GPP re-uploaded the file, the earliest time seen. Null when not found; see unknown_reasons.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "archive_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The zip on the 3GPP FTP server whose folder listing gives archive_uploaded_at; open its folder to verify the time.",
        +          "title": "Archive Url"
        +        },
        +        "notes": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Anything a reviewer should know, e.g. the file was re-uploaded or two sources name different meetings.",
        +          "title": "Notes"
        +        },
        +        "plenary_batch": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "YYYY-MM of the plenary round whose batch of specifications includes this version (3GPP's dated folders, /ftp/Specs/YYYY-MM/).",
        +          "title": "Plenary Batch"
        +        },
        +        "plenary_batch_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'tsg_spec_list' (stated in 3GPP's list of specifications arising from that TSG round), 'tsg_meeting_start' (the month the plenary in tsg_meeting started) or 'ftp_plenary_folder' (the earliest dated folder holding the zip).",
        +          "title": "Plenary Batch Source"
        +        },
        +        "statement": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The known facts as plain sentences, ready to quote, e.g. 'Uploaded to the 3GPP archive on 2026-09-24 at 16:47 UTC. Approved at TSG SA #113 (2026-09-15 to 2026-09-18).' It says 'uploaded to the 3GPP archive' and 'approved at', never 'published': no source states a publication date.",
        +          "title": "Statement"
        +        },
        +        "tsg_meeting": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Plenary meeting ID: 'SP-113' (TSG SA #113), 'RP-109' (TSG RAN), 'CP-110' (TSG CT); a trailing '-e' marks an electronic meeting.",
        +          "title": "Tsg Meeting"
        +        },
        +        "tsg_meeting_end": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Last day of the plenary meeting.",
        +          "title": "Tsg Meeting End"
        +        },
        +        "tsg_meeting_name": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The meeting as 3GPP names it, e.g. 'TSG SA #113'.",
        +          "title": "Tsg Meeting Name"
        +        },
        +        "tsg_meeting_relation": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'approved': change requests approved at this meeting created this version (3GPP CR database). 'arising_from': 3GPP lists this version among the specifications arising from this meeting. 'presented': a draft (below version 3.0.0) presented to this meeting.",
        +          "title": "Tsg Meeting Relation"
        +        },
        +        "tsg_meeting_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'cr_database' (3GPP change request database export) or 'tsg_spec_list' (3GPP's list of specifications arising from that TSG round).",
        +          "title": "Tsg Meeting Source"
        +        },
        +        "tsg_meeting_source_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The 3GPP file that names the meeting.",
        +          "title": "Tsg Meeting Source Url"
        +        },
        +        "tsg_meeting_start": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "First day of the plenary meeting.",
        +          "title": "Tsg Meeting Start"
        +        },
        +        "unknown_reasons": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "type": "string"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Why a field is null, by field name. archive_uploaded_at: 'not_in_archive_listing'. tsg_meeting: 'before_tsg_lists_no_approved_cr' (uploaded before March 2023, when 3GPP's per-round spec lists start, and created by no approved change request, e.g. a release upgrade), 'draft_not_listed', or 'not_in_cr_database_or_tsg_lists'. Nothing is guessed.",
        +          "title": "Unknown Reasons"
        +        }
        +      },
        +      "title": "SpecProvenance",
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When this version was uploaded to the 3GPP archive and the TSG plenary it came from, with sources. Null when the version has no provenance row yet."
        +}
    • Changedsearch_text_search_text_post3 fields changed
      • addedInput schema / properties / available_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here.",
        +  "title": "Available Before"
        +}
      • changedOutput schema / properties / results / items / properties / also_in / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "description": "Reference to another release/version that matched the same section.",
        -      "properties": {
        -        "release": {
        -          "title": "Release",
        -          "type": "string"
        -        },
        -        "relevance_score": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "title": "Relevance Score"
        -        },
        -        "similarity": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "title": "Similarity"
        -        },
        -        "version": {
        -          "title": "Version",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "release",
        -        "version"
        -      ],
        -      "title": "AlsoIn",
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "description": "Reference to another release/version that matched the same section.",
        +      "properties": {
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version was uploaded to the 3GPP archive (ISO 8601, UTC); null when unknown.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "release": {
        +          "title": "Release",
        +          "type": "string"
        +        },
        +        "relevance_score": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "title": "Relevance Score"
        +        },
        +        "similarity": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "title": "Similarity"
        +        },
        +        "version": {
        +          "title": "Version",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "release",
        +        "version"
        +      ],
        +      "title": "AlsoIn",
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / results / items / properties / provenance
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "When this spec version reached the public 3GPP archive, and the TSG plenary it came from.\n\nEvery value comes from the 3GPP FTP server: archive and dated plenary folder listings, 3GPP's lists of\nspecifications arising from each TSG round, and the 3GPP change request database. Unknown values stay null.",
        +      "properties": {
        +        "archive_date_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'ftp_archive_listing' (the spec's folder under /ftp/Specs/archive/) or 'ftp_plenary_folder_listing' (a dated plenary folder that showed an earlier time).",
        +          "title": "Archive Date Source"
        +        },
        +        "archive_uploaded_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "When this version's zip was uploaded to the 3GPP archive (ISO 8601, UTC), as the 3GPP FTP folder listing at archive_url shows it. If 3GPP re-uploaded the file, the earliest time seen. Null when not found; see unknown_reasons.",
        +          "title": "Archive Uploaded At"
        +        },
        +        "archive_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The zip on the 3GPP FTP server whose folder listing gives archive_uploaded_at; open its folder to verify the time.",
        +          "title": "Archive Url"
        +        },
        +        "notes": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Anything a reviewer should know, e.g. the file was re-uploaded or two sources name different meetings.",
        +          "title": "Notes"
        +        },
        +        "plenary_batch": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "YYYY-MM of the plenary round whose batch of specifications includes this version (3GPP's dated folders, /ftp/Specs/YYYY-MM/).",
        +          "title": "Plenary Batch"
        +        },
        +        "plenary_batch_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'tsg_spec_list' (stated in 3GPP's list of specifications arising from that TSG round), 'tsg_meeting_start' (the month the plenary in tsg_meeting started) or 'ftp_plenary_folder' (the earliest dated folder holding the zip).",
        +          "title": "Plenary Batch Source"
        +        },
        +        "statement": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The known facts as plain sentences, ready to quote, e.g. 'Uploaded to the 3GPP archive on 2026-09-24 at 16:47 UTC. Approved at TSG SA #113 (2026-09-15 to 2026-09-18).' It says 'uploaded to the 3GPP archive' and 'approved at', never 'published': no source states a publication date.",
        +          "title": "Statement"
        +        },
        +        "tsg_meeting": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Plenary meeting ID: 'SP-113' (TSG SA #113), 'RP-109' (TSG RAN), 'CP-110' (TSG CT); a trailing '-e' marks an electronic meeting.",
        +          "title": "Tsg Meeting"
        +        },
        +        "tsg_meeting_end": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Last day of the plenary meeting.",
        +          "title": "Tsg Meeting End"
        +        },
        +        "tsg_meeting_name": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The meeting as 3GPP names it, e.g. 'TSG SA #113'.",
        +          "title": "Tsg Meeting Name"
        +        },
        +        "tsg_meeting_relation": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'approved': change requests approved at this meeting created this version (3GPP CR database). 'arising_from': 3GPP lists this version among the specifications arising from this meeting. 'presented': a draft (below version 3.0.0) presented to this meeting.",
        +          "title": "Tsg Meeting Relation"
        +        },
        +        "tsg_meeting_source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "'cr_database' (3GPP change request database export) or 'tsg_spec_list' (3GPP's list of specifications arising from that TSG round).",
        +          "title": "Tsg Meeting Source"
        +        },
        +        "tsg_meeting_source_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The 3GPP file that names the meeting.",
        +          "title": "Tsg Meeting Source Url"
        +        },
        +        "tsg_meeting_start": {
        +          "anyOf": [
        +            {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "First day of the plenary meeting.",
        +          "title": "Tsg Meeting Start"
        +        },
        +        "unknown_reasons": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "type": "string"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Why a field is null, by field name. archive_uploaded_at: 'not_in_archive_listing'. tsg_meeting: 'before_tsg_lists_no_approved_cr' (uploaded before March 2023, when 3GPP's per-round spec lists start, and created by no approved change request, e.g. a release upgrade), 'draft_not_listed', or 'not_in_cr_database_or_tsg_lists'. Nothing is guessed.",
        +          "title": "Unknown Reasons"
        +        }
        +      },
        +      "title": "SpecProvenance",
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When this version was uploaded to the 3GPP archive and the TSG plenary it came from, with sources. Null when the version has no provenance row yet."
        +}
  5. 27 tool updates
    • First observedfetch_tdoc
    • First observedfind_topics_to_follow
    • First observedfollow_topic
    • First observedget_company_positions
    • First observedget_document_documents
    • First observedget_followed_topic_updates
    • First observedget_image_images
    • First observedget_meeting
    • First observedget_organization
    • First observedget_sections_sections_get
    • First observedget_tdoc
    • First observedhealth_check_health_get
    • First observedlist_documents_documents_get
    • First observedlist_followed_topics
    • First observedlist_meeting_decisions
    • First observedlist_meetings
    • First observedlist_sections_sections_toc_get
    • First observedlist_tdocs
    • First observedresolve_organization
    • First observedsearch_combined_search_combined_post
    • First observedsearch_images_search_images_post
    • First observedsearch_news
    • First observedsearch_positions
    • First observedsearch_tdocs
    • First observedsearch_text_search_text_post
    • First observedunfollow_topic
    • First observedupdate_followed_topic

Publisher details

Operator
3gppscout · Publisher source
Vendor relationship
Independent · Publisher source
Trust center
Not available
Restrictions
OAuth 2.1 browser sign-in required. Explorer includes 150 API/MCP requests per UTC calendar month with no card required. Founding Engineer includes 1,000 for $8/month. Hosted Scout chat is billed separately. No local index or API key in MCP configuration is required. · Publisher source

Related MCP Connectors

  • Remote MCP server that gives Claude, ChatGPT, Cursor or any MCP client Google search volume, CPC, competition and similar keywords for 50+ countries. Works with no signup at 20 lookups a day; sign in with OAuth or an API key for higher limits, or $4.99 a month for unlimited.

  • Hosted MCP memory: save sessions/decisions once, search from Claude, Cursor, ChatGPT. EU-hosted FTS.

  • AMZScout Skill + MCP gives AI agents live access to real Amazon marketplace data across 14 Amazon marketplaces. Analyze any ASIN, validate product ideas, research niches, compare competitors, discover profitable keywords, and build data-driven PPC strategies using trusted Amazon insights instead of AI assumptions. Works with Claude, ChatGPT, Cursor, and any other MCP-compatible AI client. To connect, you'll need an AMZScout API plan and authorize your account. Get access and view pricing here: https://learn.amzscout.net/amazon-product-api-for-ai-agents

  • Your agent needs the open web — searched by more than one engine, and read as clean markdown rather than raw HTML. **What you can ask for** • "Search this question with two providers and tell me where they disagree." • "Scrape these 40 URLs into markdown, in one batch." • "Crawl this documentation site and give me every page." • "Do deep research on this topic and cite the sources." • "Find the academic papers behind this claim." **How to use it** Point any MCP client at https://mcp.aisa.one/search/mcp and sign in with OAuth — there is no key to create or paste. 30 tools across several independent providers: Tavily and Exa search, answers, contents and agent runs; Firecrawl scrape, batch scrape, crawl, map and search; Perplexity Sonar, Sonar Pro, reasoning and deep research; Oxylabs AI search and LLM jobs; OpenAI and Anthropic web search; and scholarly search. **Why this rather than the source** Several independent indexes behind one account, because one engine's blind spot is not visible from inside it. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Find the page here, then ask the same agent who links to it or how much traffic it gets — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/seo-serp/mcp for the Google results page itself, https://mcp.aisa.one/seo-serp-other-engines/mcp for Bing, Baidu and Naver.

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
    44 npm
    29
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to search and retrieve information from 3GPP specification documents, including full-text search and specific lookup for LTE and 5G NAS cause values. It comes with pre-processed data for major specifications covering NAS, RRC, and protocol conformance testing.
    3
    5
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.