Skip to main content
Glama

list_participants

Read-only

List participants

The participant set, keyset-paginated. Default sort is first-seen newest-first. Comma-array filters (country, scheme, smp, ap, doctype, transport_profile, host, provenance, and the company-register cuts entity_type, sector, size, region, postcode), the single-valued sub_provider cut, registered + vat_liable booleans, and a smart q (a full Peppol ID or a bare identifier number matches the ID; other text is a name search on the business-card name or the company-register name — see q). First-page meta carries estimated totals and rollup facets; meta.filter_count is a bounded exact count that degrades to null (never an error) if it exceeds the query timeout. A name search that exceeds the query timeout returns an empty first page with meta.search_degraded, and a 503 on a later page. Discovered participants carry no name/card fields (privacy).

Input Schema

NameRequiredDescriptionDefault
qNoSmart search. A full Peppol ID (`scheme::value`, or a bare `icd:value`) matches that ID exactly. A bare identifier number (digits only, 4 or more) matches the participants whose ID is that number under any ICD prefix, and also names that contain it. Any other text is a name search: it matches the business-card name or the company-register name. The words can be in any order. All words must match (at most 8 words are used). Case, accents and punctuation are ignored. The search needs at least one word of 3 or more characters, else 400. A name that the response withholds is not searchable: the card name of a `discovered` participant and the register name of a natural person. If a name search exceeds the query timeout, the first page is returned empty with `meta.search_degraded: true`; a later page (with `cursor`) returns 503. Neither is cacheable. Use a narrower term.
apNoComma-array of serving Access Point SeatIDs (`PBE000123,PNO000456`).
smpNoComma-array of current SMP hostnames (`smp1.example,smp2.example`).
hostNoComma-array of endpoint-URL hostnames (`ap.example.com`). Matches a participant if ANY of its current endpoints publishes an endpoint URL on one of the given hosts — the exact participant set an Access Point host serves. Case-insensitive. Used ALONE (no other filter) results are ordered by identifier and `sort` is ignored; combined with another filter the requested `sort` applies.
sizeNoComma-array of company size band codes, as stored (`12,21`): the INSEE trancheEffectifs codes for FR (`NN` = unknown), and for NO the same code set plus `1-4`.
sortNoSort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. The `name` sort lists only participants that have a business-card name: a participant with only a company-register name is NOT in a `name`-sorted list (and not in its `meta.filter_count`), although `q` can find it under the other sorts. The `country` sort lists only participants with a country. It is IGNORED when `doctype`/`transport_profile`/`host` is set WITHOUT any other narrowing filter, and when `sub_provider` is set without `q` or one of those endpoint filters — those results are driven from the matching index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Otherwise (an endpoint filter combined with `country`/`smp`/`ap`/`registered`/`provenance`/`q`, or `sub_provider` with `q`) the normal sort applies.first_seen.desc
limitNoPage size, clamped to [1, 200]. Defaults to 50.
cursorNoOpaque pagination cursor returned as `next_cursor` by the previous page.
regionNoComma-array of company seat region codes (`BE-BRU,BE-VLG`).
schemeNoComma-array of Peppol identifier schemes.
sectorNoComma-array of 2-digit NACE Rev. 2.1 divisions (`47,62`).
countryNoComma-array of ISO country codes (`BE,NL`).
doctypeNoComma-array of Peppol document type ids. Matches a participant if ANY of its current endpoints declares one of the given doctypes. Used ALONE (no other filter) results are ordered by identifier and `sort` is ignored; combined with another filter the requested `sort` applies.
not_smpNoComma-array of SMP hostnames to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.
not_sizeNoComma-array of company size band codes (as stored: `21,NN`; FR and NO only) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.
postcodeNoComma-array of company seat postcodes.
not_regionNoComma-array of company seat region codes (`NO-32,BE-BRU`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.
not_sectorNoComma-array of 2-digit NACE Rev. 2.1 divisions (`47,62`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.
provenanceNoComma-array of provenance values.
registeredNoFilter by current SML registration state.
vat_liableNoFilter by company VAT-liable / mandate-scope flag.
entity_typeNoComma-array of company legal-form families (`company`,`natural_person`,`association`,`public`), from the company-register enrichment denormalized onto the participant.
not_countryNoComma-array of country codes (`NO,SE`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.
sub_providerNoONE curated sub-provider (reseller) slug (`codabox`) — the same slugs `GET /v1/aps/{key}` reports in `sub_providers[].sub_provider`. Matches a participant the daily rollup fingerprinted to that brand on ANY of its current endpoints, from three signals: the SMP `ServiceDescription`, the SMP technical-contact domain, and the endpoint host. Only curated names resolve, so the free-text long tail is not addressable here. Unlike the other filters this one takes a single value: a comma list, or a value that is not a slug (lowercase alphanumerics, dash-separated), is a 400. The sub-provider is an ADDITIVE annotation — the `ap` seat stays the operator of record. Results are ordered by identifier (`scheme`, `value`) and `sort` is ignored, EXCEPT alongside `q` or `doctype`/`transport_profile`/`host`, where the requested `sort` applies. Combining it with any other filter (`country`, `scheme`, `smp`, `ap`, `registered`, `provenance`, `entity_type`, `sector`, `size`, `region`, `postcode`, `vat_liable`) evaluates that filter against the rollup's DAILY SNAPSHOT of those participant columns, not the live row — a participant changing SMP or country is reflected here on the next rollup. Those combinations report an exact `meta.filter_count` (`filter_count_source: "exact"`); adding `q` or an endpoint filter falls back to the bounded count.
not_entity_typeNoComma-array of company legal-form families (`company`,`natural_person`,`association`,`public`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.
transport_profileNoComma-array of transport profile ids (`peppol-transport-as4-v2_0`). Matches a participant if ANY of its current endpoints uses one of the given profiles. Used ALONE (no other filter) results are ordered by identifier and `sort` is ignored; combined with another filter the requested `sort` applies.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / not_size / description
      Previous value: -"Comma-array of company size classes (as stored; SIRENE only) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both."New value: +"Comma-array of company size band codes (as stored: `21,NN`; FR and NO only) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both."
    • changedInput schema / properties / size / description
      Previous value: -"Comma-array of company size classes (as stored; SIRENE only)."New value: +"Comma-array of company size band codes, as stored (`12,21`): the INSEE trancheEffectifs codes for FR (`NN` = unknown), and for NO the same code set plus `1-4`."
  2. Changed2 schema fields changed
    • changedInput schema / properties / q / description
      Previous value: -"Smart search: `scheme::value`/bare value → ID lookup; else name-contains."New value: +"Smart search. A full Peppol ID (`scheme::value`, or a bare `icd:value`) matches that ID exactly. A bare identifier number (digits only, 4 or more) matches the participants whose ID is that number under any ICD prefix, and also names that contain it. Any other text is a name search: it matches the business-card name or the company-register name. The words can be in any order. All words must match (at most 8 words are used). Case, accents and punctuation are ignored. The search needs at least one word of 3 or more characters, else 400. A name that the response withholds is not searchable: the card name of a `discovered` participant and the register name of a natural person. If a name search exceeds the query timeout, the first page is returned empty with `meta.search_degraded: true`; a later page (with `cursor`) returns 503. Neither is cacheable. Use a narrower term."
    • changedInput schema / properties / sort / description
      Previous value: -"Sort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. It is IGNORED when `doctype`/`transport_profile`/`host` is set WITHOUT any other narrowing filter, and when `sub_provider` is set without `q` or one of those endpoint filters — those results are driven from the matching index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Otherwise (an endpoint filter combined with `country`/`smp`/`ap`/`registered`/`provenance`/`q`, or `sub_provider` with `q`) the normal sort applies."New value: +"Sort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. The `name` sort lists only participants that have a business-card name: a participant with only a company-register name is NOT in a `name`-sorted list (and not in its `meta.filter_count`), although `q` can find it under the other sorts. The `country` sort lists only participants with a country. It is IGNORED when `doctype`/`transport_profile`/`host` is set WITHOUT any other narrowing filter, and when `sub_provider` is set without `q` or one of those endpoint filters — those results are driven from the matching index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Otherwise (an endpoint filter combined with `country`/`smp`/`ap`/`registered`/`provenance`/`q`, or `sub_provider` with `q`) the normal sort applies."
  3. Changed2 schema fields changed
    • changedInput schema / properties / not_sector / description
      Previous value: -"Comma-array of 2-digit NACE divisions (`47,62`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both."New value: +"Comma-array of 2-digit NACE Rev. 2.1 divisions (`47,62`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both."
    • changedInput schema / properties / sector / description
      Previous value: -"Comma-array of 2-digit NACE divisions (`47,62`)."New value: +"Comma-array of 2-digit NACE Rev. 2.1 divisions (`47,62`)."
  4. Changed6 schema fields changed
    • addedInput schema / properties / not_country
      Added value: +{
      +  "description": "Comma-array of country codes (`NO,SE`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / not_entity_type
      Added value: +{
      +  "description": "Comma-array of company legal-form families (`company`,`natural_person`,`association`,`public`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / not_region
      Added value: +{
      +  "description": "Comma-array of company seat region codes (`NO-32,BE-BRU`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / not_sector
      Added value: +{
      +  "description": "Comma-array of 2-digit NACE divisions (`47,62`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / not_size
      Added value: +{
      +  "description": "Comma-array of company size classes (as stored; SIRENE only) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / not_smp
      Added value: +{
      +  "description": "Comma-array of SMP hostnames to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03&not_region=NO-32` applies both.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  5. Changed2 schema fields changed
    • changedInput schema / properties / sort / description
      Previous value: -"Sort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. When `doctype`/`transport_profile`/`host`/`sub_provider` is set WITHOUT any other narrowing filter, it is IGNORED — those results are driven from the matching index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Combined with another filter (`country`/`smp`/`ap`/`registered`/`provenance`/`q`), the normal sort applies."New value: +"Sort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. It is IGNORED when `doctype`/`transport_profile`/`host` is set WITHOUT any other narrowing filter, and when `sub_provider` is set without `q` or one of those endpoint filters — those results are driven from the matching index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Otherwise (an endpoint filter combined with `country`/`smp`/`ap`/`registered`/`provenance`/`q`, or `sub_provider` with `q`) the normal sort applies."
    • changedInput schema / properties / sub_provider / description
      Previous value: -"ONE curated sub-provider (reseller) slug (`codabox`) — the same slugs `GET /v1/aps/{key}` reports in `sub_providers[].sub_provider`. Matches a participant if the SMP `ServiceDescription` on ANY of its current endpoints fingerprinted to that brand; only curated names resolve, so the free-text long tail is not addressable here. Unlike the other filters this one takes a single value: a comma list, or a value that is not a slug (lowercase alphanumerics, dash-separated), is a 400. The sub-provider is an ADDITIVE annotation — the `ap` seat stays the operator of record. Used ALONE (no other filter) results are ordered by identifier and `sort` is ignored; combined with another filter the requested `sort` applies."New value: +"ONE curated sub-provider (reseller) slug (`codabox`) — the same slugs `GET /v1/aps/{key}` reports in `sub_providers[].sub_provider`. Matches a participant the daily rollup fingerprinted to that brand on ANY of its current endpoints, from three signals: the SMP `ServiceDescription`, the SMP technical-contact domain, and the endpoint host. Only curated names resolve, so the free-text long tail is not addressable here. Unlike the other filters this one takes a single value: a comma list, or a value that is not a slug (lowercase alphanumerics, dash-separated), is a 400. The sub-provider is an ADDITIVE annotation — the `ap` seat stays the operator of record. Results are ordered by identifier (`scheme`, `value`) and `sort` is ignored, EXCEPT alongside `q` or `doctype`/`transport_profile`/`host`, where the requested `sort` applies. Combining it with any other filter (`country`, `scheme`, `smp`, `ap`, `registered`, `provenance`, `entity_type`, `sector`, `size`, `region`, `postcode`, `vat_liable`) evaluates that filter against the rollup's DAILY SNAPSHOT of those participant columns, not the live row — a participant changing SMP or country is reflected here on the next rollup. Those combinations report an exact `meta.filter_count` (`filter_count_source: \"exact\"`); adding `q` or an endpoint filter falls back to the bounded count."
  6. Changed2 schema fields changed
    • changedInput schema / properties / sort / description
      Previous value: -"Sort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. When `doctype`/`transport_profile`/`host` is set WITHOUT any other narrowing filter, it is IGNORED — those results are driven from the endpoint index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Combined with another filter (`country`/`smp`/`ap`/`registered`/`provenance`/`q`), the normal sort applies."New value: +"Sort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. When `doctype`/`transport_profile`/`host`/`sub_provider` is set WITHOUT any other narrowing filter, it is IGNORED — those results are driven from the matching index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Combined with another filter (`country`/`smp`/`ap`/`registered`/`provenance`/`q`), the normal sort applies."
    • addedInput schema / properties / sub_provider
      Added value: +{
      +  "description": "ONE curated sub-provider (reseller) slug (`codabox`) — the same slugs `GET /v1/aps/{key}` reports in `sub_providers[].sub_provider`. Matches a participant if the SMP `ServiceDescription` on ANY of its current endpoints fingerprinted to that brand; only curated names resolve, so the free-text long tail is not addressable here. Unlike the other filters this one takes a single value: a comma list, or a value that is not a slug (lowercase alphanumerics, dash-separated), is a 400. The sub-provider is an ADDITIVE annotation — the `ap` seat stays the operator of record. Used ALONE (no other filter) results are ordered by identifier and `sort` is ignored; combined with another filter the requested `sort` applies.",
      +  "type": "string"
      +}
  7. Changed2 schema fields changed
    • addedInput schema / properties / host
      Added value: +{
      +  "description": "Comma-array of endpoint-URL hostnames (`ap.example.com`). Matches a participant if ANY of its current endpoints publishes an endpoint URL on one of the given hosts — the exact participant set an Access Point host serves. Case-insensitive. Used ALONE (no other filter) results are ordered by identifier and `sort` is ignored; combined with another filter the requested `sort` applies.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / sort / description
      Previous value: -"Sort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. When `doctype`/`transport_profile` is set WITHOUT any other narrowing filter, it is IGNORED — those results are driven from the endpoint index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Combined with another filter (`country`/`smp`/`ap`/`registered`/`provenance`/`q`), the normal sort applies."New value: +"Sort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. When `doctype`/`transport_profile`/`host` is set WITHOUT any other narrowing filter, it is IGNORED — those results are driven from the endpoint index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Combined with another filter (`country`/`smp`/`ap`/`registered`/`provenance`/`q`), the normal sort applies."
  8. Changed2 schema fields changed
    • changedInput schema / properties / sort / description
      Previous value: -"Sort + keyset key. When `doctype`/`transport_profile` is set WITHOUT any other narrowing filter, it is IGNORED — those results are driven from the endpoint index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Combined with another filter (`country`/`smp`/`ap`/`registered`/`provenance`/`q`), the normal sort applies."New value: +"Sort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. When `doctype`/`transport_profile` is set WITHOUT any other narrowing filter, it is IGNORED — those results are driven from the endpoint index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Combined with another filter (`country`/`smp`/`ap`/`registered`/`provenance`/`q`), the normal sort applies."
    • changedInput schema / properties / sort / enum
      Previous value: -[
      -  "first_seen.desc",
      -  "first_seen.asc",
      -  "name.asc",
      -  "name.desc",
      -  "country.asc",
      -  "country.desc"
      -]New value: +[
      +  "first_seen.desc",
      +  "first_seen.asc",
      +  "name.asc",
      +  "name.desc",
      +  "country.asc",
      +  "country.desc",
      +  "registered.asc",
      +  "registered.desc",
      +  "entity_type.asc",
      +  "entity_type.desc",
      +  "sector.asc",
      +  "sector.desc"
      +]
  9. Changed6 schema fields changed
    • addedInput schema / properties / entity_type
      Added value: +{
      +  "description": "Comma-array of company legal-form families (`company`,`natural_person`,`association`,`public`), from the company-register enrichment denormalized onto the participant.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / postcode
      Added value: +{
      +  "description": "Comma-array of company seat postcodes.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / region
      Added value: +{
      +  "description": "Comma-array of company seat region codes (`BE-BRU,BE-VLG`).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / sector
      Added value: +{
      +  "description": "Comma-array of 2-digit NACE divisions (`47,62`).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / size
      Added value: +{
      +  "description": "Comma-array of company size classes (as stored; SIRENE only).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / vat_liable
      Added value: +{
      +  "description": "Filter by company VAT-liable / mandate-scope flag.",
      +  "type": "boolean"
      +}
  10. First observed

TDQS

A3.8/5.0
Behavior5/5

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

With only readOnlyHint=true in annotations, the description carries the behavioral burden well: it discloses keyset pagination, default sort, that meta.filter_count degrades to null rather than erroring, that an over-timeout name search returns an empty first page with meta.search_degraded and a 503 on later pages, and that discovered participants withhold name/card fields for privacy. These are non-obvious operational traits an agent must know.

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

Conciseness3/5

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

It is a single dense paragraph with no headings or bullets despite covering many distinct topics (filters, sort, meta, timeout behavior, privacy). The core purpose is front-loaded, but the middle packs filter enumeration and edge cases into an undifferentiated run-on that is harder to scan than it needs to be.

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

Completeness4/5

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

For a 26-parameter, no-output-schema tool with minimal annotations, the description does meaningfully fill the gap: it explains the shape of returned meta (estimated totals, rollup facets, bounded filter_count), pagination cursor behavior, and privacy withholding of names. Only the explicit return shape of individual participant records is left unstated.

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

Parameters3/5

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

Schema description coverage is 100%, so the per-parameter meaning is already fully documented in the schema. The description adds some framing (filter categories, smart q behavior) but largely restates what the schema provides, so the baseline 3 is appropriate.

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

Purpose4/5

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

Specific verb+resource ('List participants') and it characterizes the resource as 'the participant set, keyset-paginated' with a default sort. An agent can tell this is the broad participant listing tool rather than the single-entity get_participant or list_providers, though it never explicitly names a sibling it is not.

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

Usage Guidelines3/5

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

The description explains filter mechanics and the special timeout/degradation behavior, which implies usage, but it never states when to reach for this tool versus alternatives like get_participant or the various list_*_participants siblings. Guidance is implied through filter semantics rather than explicit routing.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources