3GPP Scout
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.
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
Scored across 26 tools
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.
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.
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.
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 toolsfetch_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.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Try again even if a recent on-demand attempt found no file or could not read it. | |
| include | No | Same as GET /tdocs/{tdoc_id}: units, text, revisions. | units |
| tdoc_id | Yes | ||
| text_offset | No | First text block to return when include has 'text'. | |
| max_text_chars | No | Character budget for text blocks. |
TDQS
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.
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.
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.
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.
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.
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 FollowBRead-onlyInspect
Suggest specs, work items or meetings matching a topic the user wants to follow. Does not create anything.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | User-facing name. Defaults to the query. | |
| query | No | What the user asked to follow. | |
| targets | No | The confirmed targets, usually from POST /follows/resolve after the user reviewed them. | |
| delivery | No | default | |
| confirmed | No | Set 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_via | No | ||
| source_thread_id | No |
TDQS
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.
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.
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.
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.
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.
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 PositionsBRead-onlyInspect
Summarize a company's positions on a topic from its TDocs.
| Name | Required | Description | Default |
|---|---|---|---|
| org | No | One company: name, alias, or org_id, e.g. 'Lekha Wireless'. | |
| orgs | No | Several companies to compare, comma-separated, e.g. 'lekha-wireless,mavenir'. | |
| group | No | Comma-separated working groups, e.g. R1,R2. | |
| limit | No | ||
| topic | No | Free-text topic matched by meaning, e.g. 'NTN timing advance'. | |
| cursor | No | ||
| stance | No | Comma-separated stances: proposes, supports, opposes, prefers_alternative, raises_concern, requests_clarification, observes. | |
| meeting | No | Comma-separated meeting IDs, e.g. R1-126. | |
| agenda_item | No | Agenda item, e.g. 10.7.1 (use with meeting). |
TDQS
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.
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.
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.
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.
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.
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 DocumentsBRead-onlyInspect
Get metadata for one specification by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| title | No | |
| series | Yes | |
| status | Yes | |
| release | Yes | |
| version | Yes | |
| doc_type | Yes | |
| filename | Yes | |
| created_at | No | When Scout indexed this version, not a 3GPP date; see provenance for those. |
| doc_number | Yes | |
| provenance | No | 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. |
| total_text_chunks | No | |
| total_image_chunks | No |
TDQS
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.
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.
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.
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.
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.
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 UpdatesCRead-onlyInspect
Get recent changes for one followed topic.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | Only updates that happened at or after this time. | |
| offset | No | ||
| follow_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 MeetingCRead-onlyInspect
Get details of one meeting.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Comma-separated sections: 'agenda' (agenda items with TDoc counts), 'documents' (chair notes, reports, summaries, way forwards, agendas). | agenda,documents |
| meeting_id | Yes | ||
| documents_limit | No | Most key documents to list; chair notes and reports come first. |
TDQS
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.
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.
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.
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.
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.
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 OrganizationBRead-onlyInspect
Get one organization's 3GPP participation summary.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 BatchARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sections | Yes | 1 to 10 clauses, from one or several documents. | |
| available_before | No | 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. Applies to every clause: a clause without version reads the newest version uploaded before the date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| requests_counted | Yes | API requests this call counted toward the monthly quota: one per clause for REST and MCP. |
TDQS
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.
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.
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.
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.
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.
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 GetARead-onlyInspect
Read the text of specific sections of a specification, in short excerpts.
| Name | Required | Description | Default |
|---|---|---|---|
| latest | No | If 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). | |
| prefix | No | If 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. | |
| release | No | 3GPP release, e.g. 'Rel-19'. Omit to return all indexed versions of the document. | |
| version | No | Specific document version, e.g. '19.1.0'. Usually not needed — use release instead. | |
| doc_number | Yes | Document 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_number | Yes | Section 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_before | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 TdocBRead-onlyInspect
Get metadata and status for one TDoc by number.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Comma-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_id | Yes | ||
| text_offset | No | First text block to return when include has 'text'. Use text.next_offset to page. | |
| max_text_chars | No | Character budget for text blocks. |
TDQS
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.
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.
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.
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.
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.
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 GetBRead-onlyInspect
List indexed 3GPP specifications with number, title, release and version.
| Name | Required | Description | Default |
|---|---|---|---|
| series | No | Filter by series, e.g. '38'. | |
| release | No | Filter by 3GPP release, e.g. 'Rel-19'. | |
| doc_type | No | Filter by document type: 'TS' or 'TR'. | |
| doc_number | No | Filter by document number, e.g. '38.811'. Returns only versions of that document. | |
| available_before | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 TopicsBRead-onlyInspect
List topics the signed-in user follows.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 DecisionsCRead-onlyInspect
List what a meeting agreed, approved, noted or rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Topic, matched by meaning and by exact identifiers, e.g. 'NTN timing advance' or 'ta-CommonDrift'. | |
| limit | No | ||
| cursor | No | next_cursor from a previous response. | |
| meeting_id | Yes | ||
| agenda_item | No | Comma-separated agenda items; '10.7' also matches 10.7.1. | |
| source_kind | No | Comma-separated: chair_notes, report, summary, register. | |
| decision_type | No | Comma-separated: agreement, working_assumption, conclusion, observation, ffs, approved_cr, endorsed, not_pursued, noted. Default: every type except noted. |
TDQS
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.
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.
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.
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.
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.
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 MeetingsCRead-onlyInspect
List 3GPP working group meetings by group and date.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Comma-separated groups, e.g. 'R1', 'RAN2', 'S2'. | |
| since | No | Meetings starting on or after this date (YYYY-MM-DD). | |
| state | No | planned, live, or completed. | |
| until | No | Meetings starting on or before this date (YYYY-MM-DD). |
TDQS
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.
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.
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.
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.
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.
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 GetCRead-onlyInspect
Get the table of contents of a specification.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Specific document version, e.g. '19.1.0'. Omit to get all available versions. | |
| doc_number | Yes | Document number to get the TOC for, e.g. '38.331' (NR RRC), '23.501' (5G system architecture), '38.300' (NR overview). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 TdocsCRead-onlyInspect
List TDocs for a meeting or agenda item.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Words that must all appear in the title or abstract, e.g. 'NTN timing advance'. | |
| role | No | Comma-separated source roles: submitter, co_submitter, editor. Default all roles; each item reports matched_role. | |
| spec | No | Target spec number, e.g. '38.213'. | |
| group | No | Comma-separated groups, e.g. 'R1', 'RAN2', 'S2'. | |
| limit | No | Page size. | |
| since | No | Meetings starting on or after this date (YYYY-MM-DD). | |
| until | No | Meetings starting on or before this date (YYYY-MM-DD). | |
| cursor | No | next_cursor from a previous response. | |
| source | No | Company name, alias, or org_id, e.g. 'Mavenir', 'Lekha Wireless', 'huawei'. Misspellings resolve through aliases. | |
| status | No | Comma-separated register statuses, e.g. 'agreed,approved' or 'noted'. | |
| meeting | No | Comma-separated meeting IDs, e.g. 'R1-126' or 'RAN1#126'. | |
| doc_kind | No | Comma-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_item | No | Work item code, e.g. 'NR_NTN_Ph3-Core'. | |
| agenda_item | No | Agenda item; matches the item and its sub-items, e.g. '10.7' matches 10.7.1. | |
| include_withdrawn | No | Include withdrawn TDocs. |
TDQS
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.
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.
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.
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.
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.
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 OrganizationBRead-onlyInspect
Match a company name to its 3GPP member organization.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Company name or alias to resolve, e.g. 'Manevir', 'Lekha', 'Interdigital'. | |
| limit | No | Maximum candidates. |
TDQS
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.
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.
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.
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.
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.
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 PostARead-onlyInspect
Search specification text and figures together. Use when a question may be answered by a diagram or a clause.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language search query. Searches both text and images simultaneously. | |
| rerank | No | Rerank text results for better precision. Always leave true. | |
| deduplicate | No | Collapse 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_k | No | Number of text results after reranking. Use 3–5 for focused lookups, 10–20 for research. | |
| filter_series | No | Restrict by series: '38' = NR/5G, '23' = system architecture, '36' = LTE, '33' = security. | |
| filter_release | No | Restrict to a specific 3GPP release. Examples: 'Rel-15', 'Rel-17', 'Rel-20'. Omit for all indexed releases (Rel-15 through Rel-20). | |
| filter_doc_type | No | Restrict by document type: 'TS' (Technical Specification) or 'TR' (Technical Report). | |
| available_before | No | 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. | |
| text_match_count | No | Text candidates before reranking. Default 30 balances speed and quality. | |
| filter_doc_number | No | Restrict to a specific document, e.g. '38.331', '23.501'. Numeric format only. | |
| image_match_count | No | Number of image/diagram results to return alongside text results. | |
| include_section_text | No | Include full parent section text for each text chunk. | |
| text_match_threshold | No | Text similarity threshold. Leave at 0 (default) and rely on reranking. | |
| filter_section_number | No | Restrict to a section, e.g. '5.3.5'. Only useful with filter_doc_number. | |
| image_match_threshold | No | Image similarity threshold. Default 0 returns best matches. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| reranked | Yes | |
| text_total | Yes | |
| image_total | Yes | |
| text_results | Yes | |
| image_results | Yes |
TDQS
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.
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.
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.
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.
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.
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 PostBRead-onlyInspect
Search figures and diagrams in 3GPP specifications by description. Returns figure captions and their source sections.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language query describing the diagram, figure, or table you're looking for. E.g. 'protocol stack architecture', 'random access procedure flow chart'. | |
| deduplicate | No | Collapse 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_count | No | Number of image results to return. | |
| filter_series | No | Restrict by series: '38' = NR/5G, '23' = system architecture, '36' = LTE, '33' = security. | |
| filter_release | No | Restrict to a specific 3GPP release. Examples: 'Rel-15', 'Rel-17', 'Rel-20'. Omit for all indexed releases (Rel-15 through Rel-20). | |
| match_threshold | No | Minimum similarity score. Default 0.3 filters low-quality matches. | |
| available_before | No | 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. | |
| filter_doc_number | No | Restrict to a specific document, e.g. '38.300', '23.501'. Numeric format only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| total | Yes | |
| results | Yes |
TDQS
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.
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.
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.
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.
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.
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 NewsCRead-onlyInspect
Search telecom industry news indexed by Scout.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Words to match in the title, filer or summary, e.g. 'interference'. | |
| since | No | Published on or after YYYY-MM-DD. | |
| topic | No | Comma-separated topics: ntn, 6g, ai_ml, ambient_iot, iot, redcap, xr, energy, positioning, isac, slicing, open_ran, spectrum, uav, interference. | |
| until | No | Published on or before YYYY-MM-DD. | |
| offset | No | ||
| source | No | Comma-separated sources: fcc_ecfs, sec_edgar, gdelt, and any enabled press source. | |
| company | No | Comma-separated companies (names, aliases or org_ids), e.g. 'AST SpaceMobile'. |
TDQS
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.
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.
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.
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.
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.
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 PositionsCRead-onlyInspect
Find which companies argued for or against a proposal.
| Name | Required | Description | Default |
|---|---|---|---|
| orgs | No | Limit to these companies (names, aliases, or org_ids). | |
| group | No | Working group, e.g. R1 or RAN1. | |
| limit | No | ||
| query | Yes | What to find, e.g. 'common TA drift' or 'K_offset update for LEO'. | |
| stance | No | Any of: proposes, supports, opposes, prefers_alternative, raises_concern, requests_clarification, observes. | |
| meeting | No | Meeting ID, e.g. R1-126. |
TDQS
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.
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.
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.
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.
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.
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 TdocsRead-onlyInspect
Search 3GPP meeting contributions (TDocs) by topic, company or meeting.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What the TDocs should discuss, in plain words or exact terms, e.g. 'timing advance pre-compensation for NTN', 'ta-CommonDrift', 'R2-2008188'. | |
| rerank | No | Rerank candidates for precision. Leave true. | |
| filters | No | Catalog filters, the same fields as GET /tdocs. | |
| unit_types | No | Only chunks holding these units: 'proposal', 'observation', or 'body' (text outside numbered proposals and observations). | |
| include_text | No | Include each passage's text. | |
| max_per_tdoc | No | At most this many passages from one TDoc. Use 1 for a list of distinct TDocs. | |
| rerank_top_k | No | Results to return after reranking. |
search_text_search_text_postSearch Text Search Text PostARead-onlyInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language search query. Be specific — e.g. 'RRC connection reconfiguration procedure' rather than just 'RRC'. | |
| rerank | No | Rerank results for higher precision. Always leave true (default) — the reranker dramatically improves result quality. | |
| deduplicate | No | Collapse 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_count | No | Candidate matches to retrieve before reranking. Higher = slower but more thorough. Default 30 balances speed and quality. | |
| rerank_top_k | No | Number of final results after reranking. Use 3–5 for focused lookups, 10–20 for broad research. | |
| filter_series | No | Restrict by 3GPP series number: '38' = NR/5G radio, '23' = system architecture, '24' = signalling, '36' = LTE, '33' = security, '29' = core network. | |
| prefer_latest | No | Add 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_release | No | Restrict to a specific 3GPP release. Examples: 'Rel-15', 'Rel-17', 'Rel-20'. Omit for all indexed releases (Rel-15 through Rel-20). | |
| filter_doc_type | No | Restrict by document type: 'TS' (Technical Specification) or 'TR' (Technical Report). Omit for both. | |
| match_threshold | No | Minimum similarity score. Leave at 0 (default) and rely on reranking for quality filtering. | |
| available_before | No | 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. | |
| include_children | No | 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. | |
| filter_doc_number | No | Restrict 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_text | No | Include the full parent section text alongside each chunk. Provides richer context but increases response size. | |
| filter_section_number | No | Restrict to a specific section, e.g. '5.3.5'. Only useful when combined with filter_doc_number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| total | Yes | |
| results | Yes | |
| reranked | Yes |
TDQS
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.
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.
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.
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.
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.
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 TopicADestructiveInspect
Stop following a topic and delete it from the user's account. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| follow_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 TopicBDestructiveInspect
Change a followed topic's name, targets or digest settings. Overwrites the previous settings.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| status | No | ||
| targets | No | ||
| delivery | No | ||
| follow_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 tool update
- Changed
search_tdocs1 field changed- changed
Input schema / properties / filters / properties / doc_kind / descriptionPrevious 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."
5 tool updates
- Removed
get_image_images - Removed
health_check_health_get - Changed
search_combined_search_combined_post2 fields changed- removed
Output schema / properties / elapsed_msRemoved value: -{ - "title": "Elapsed Ms", - "type": "number" -} - changed
Output schema / requiredPrevious 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" +]
- Changed
search_images_search_images_post2 fields changed- removed
Output schema / properties / elapsed_msRemoved value: -{ - "title": "Elapsed Ms", - "type": "number" -} - changed
Output schema / requiredPrevious value: -[ - "query", - "results", - "total", - "elapsed_ms" -]New value: +[ + "query", + "results", + "total" +]
- Changed
search_text_search_text_post2 fields changed- removed
Output schema / properties / elapsed_msRemoved value: -{ - "title": "Elapsed Ms", - "type": "number" -} - changed
Output schema / requiredPrevious value: -[ - "query", - "results", - "total", - "reranked", - "elapsed_ms" -]New value: +[ + "query", + "results", + "total", + "reranked" +]
3 tool updates
- Added
get_sections_batch - Changed
search_combined_search_combined_post2 fields changed- added
Output schema / properties / text_results / items / properties / childrenAdded 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" +} - added
Output schema / properties / text_results / items / properties / descendant_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "With include_children: sub-clauses at any depth.", + "title": "Descendant Count" +}
- Changed
search_text_search_text_post3 fields changed- added
Input schema / properties / include_childrenAdded 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" +} - added
Output schema / properties / results / items / properties / childrenAdded 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" +} - added
Output schema / properties / results / items / properties / descendant_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "With include_children: sub-clauses at any depth.", + "title": "Descendant Count" +}
6 tool updates
- Changed
get_document_documents2 fields changed- added
Output schema / properties / created_at / descriptionAdded value: +"When Scout indexed this version, not a 3GPP date; see provenance for those." - added
Output schema / properties / provenanceAdded 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." +}
- Changed
get_sections_sections_get2 fields changed- added
Input schema / properties / available_beforeAdded 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" +} - added
Output schema / properties / result / items / properties / provenanceAdded 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." +}
- Changed
list_documents_documents_get3 fields changed- added
Input schema / properties / available_beforeAdded 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" +} - added
Output schema / properties / result / items / properties / created_at / descriptionAdded value: +"When Scout indexed this version, not a 3GPP date; see provenance for those." - added
Output schema / properties / result / items / properties / provenanceAdded 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." +}
- Changed
search_combined_search_combined_post5 fields changed- added
Input schema / properties / available_beforeAdded 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" +} - changed
Output schema / properties / image_results / items / properties / also_in / anyOfPrevious 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" + } +] - added
Output schema / properties / image_results / items / properties / provenanceAdded 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." +} - changed
Output schema / properties / text_results / items / properties / also_in / anyOfPrevious 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" + } +] - added
Output schema / properties / text_results / items / properties / provenanceAdded 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." +}
- Changed
search_images_search_images_post3 fields changed- added
Input schema / properties / available_beforeAdded 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" +} - changed
Output schema / properties / results / items / properties / also_in / anyOfPrevious 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" + } +] - added
Output schema / properties / results / items / properties / provenanceAdded 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." +}
- Changed
search_text_search_text_post3 fields changed- added
Input schema / properties / available_beforeAdded 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" +} - changed
Output schema / properties / results / items / properties / also_in / anyOfPrevious 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" + } +] - added
Output schema / properties / results / items / properties / provenanceAdded 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." +}
27 tool updates
- First observed
fetch_tdoc - First observed
find_topics_to_follow - First observed
follow_topic - First observed
get_company_positions - First observed
get_document_documents - First observed
get_followed_topic_updates - First observed
get_image_images - First observed
get_meeting - First observed
get_organization - First observed
get_sections_sections_get - First observed
get_tdoc - First observed
health_check_health_get - First observed
list_documents_documents_get - First observed
list_followed_topics - First observed
list_meeting_decisions - First observed
list_meetings - First observed
list_sections_sections_toc_get - First observed
list_tdocs - First observed
resolve_organization - First observed
search_combined_search_combined_post - First observed
search_images_search_images_post - First observed
search_news - First observed
search_positions - First observed
search_tdocs - First observed
search_text_search_text_post - First observed
unfollow_topic - First observed
update_followed_topic
Publisher details
- Operator
- 3gppscout · Publisher source
- Operator website
- https://3gppscout.com/mcp/?src=glama · Publisher source
- Vendor relationship
- Independent · Publisher source
- Documentation
- https://3gppscout.com/mcp/ · 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
- AlicenseAqualityAmaintenanceMCP server that parses 3GPP .docx specifications into structured sections with full-text search, letting LLMs browse, search, and follow cross-references without a vector database.1318MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to retrieve and explore evidence from 3GPP meeting documents through MCP, including temporal knowledge graph queries, document section navigation, and citation-backed answers.-
- AlicenseAqualityFmaintenanceEnables AI assistants to access and search 3GPP telecommunications specifications through direct integration with the TSpec-LLM dataset. Provides real-time specification content, implementation requirements, and multi-spec comparisons for 3GPP standards development.444 npm29MIT
- AlicenseBqualityDmaintenanceEnables 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.35MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.