Skip to main content
Glama

Validate survey participants

limesurvey_validate_participants
Read-onlyIdempotent

Read-only check of the whole participant table before an invitation run: leading/trailing whitespace (email, firstname, lastname, token), duplicate email addresses (trimmed, case-insensitive) and tokens, address format (every address of a…

Instructions

Read-only check of the whole participant table before an invitation run: leading/trailing whitespace (email, firstname, lastname, token), duplicate email addresses (trimmed, case-insensitive) and tokens, address format (every address of a comma/semicolon list, with the pattern LimeSurvey's invite_participants uses), validfrom/validuntil against the server time, validfrom after validuntil, emailstatus other than OK, and missing email or token. Returns issues [{tid, field, code, detail}] and counts_by_code (codes WHITESPACE, DUPLICATE_EMAIL, DUPLICATE_TOKEN, INVALID_EMAIL, NOT_YET_VALID, EXPIRED, INVALID_VALIDITY_RANGE, EMAILSTATUS_NOT_OK, MISSING_EMAIL, MISSING_TOKEN). The server time is the HTTP Date header of the LimeSurvey answer; validfrom/validuntil are read in the server's local time, whose UTC offset is server_utc_offset_minutes or, without it, the timezone of the MCP host (time_basis says which). Entries within 60 minutes of the current time are listed under borderline. Uses only list_participants. The answer stays within LIMESURVEY_MAX_RESPONSE_CHARS: with too many issues, issues and borderline are cut (issues_truncated, issues_total) while counts_by_code stays complete.

Input Schema

NameRequiredDescriptionDefault
survey_idYesNumeric LimeSurvey survey ID.
server_utc_offset_minutesNoMCP-only, never sent to LimeSurvey. UTC offset of the LimeSurvey server's local time in minutes (for example 120 for UTC+2). validfrom and validuntil are stored without a zone in that local time; without this value the timezone of the MCP host is assumed (reported as time_basis.offset_source).

Output Schema

NameRequiredDescriptionDefault
resultYes
workflowYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.6.0

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description still adds substantial behavioral context: the exact validation categories performed, the returned issue codes, the server-time basis (HTTP Date header, server_utc_offset_minutes, timezone fallback), the 60-minute borderline window, and truncation behavior under LIMESURVEY_MAX_RESPONSE_CHARS.

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?

The purpose is front-loaded, but the body is essentially two enormous sentences packed with nested parentheses and code lists. Almost all content is relevant for a tool this complex, yet the near-total absence of sentence breaks makes it hard to scan, which costs it delineation points.

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

Completeness5/5

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

For a validation tool operating over an entire participant table with no annotation-level detail, the description covers inputs, semantics, return shape, edge cases (borderline timestamps, truncation) and the timezone model comprehensively. An output schema exists, so explaining return codes is arguably redundant but it leaves no correctness gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining how validfrom/validuntil are interpreted against server_utc_offset_minutes, how the offset is inferred when omitted, and that time_basis reports the source. This adds real meaning for the offset parameter.

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

Purpose5/5

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

States a specific verb and resource ('read-only check of the whole participant table') and pins the moment of use ('before an invitation run'). It is clearly distinguishable from siblings like invite_participants, list_participants, and get_participant_table_status.

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

Usage Guidelines4/5

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

Gives a clear usage context ('before an invitation run') and notes it 'Uses only list_participants', which signals it is a pure analysis pass. It does not, however, explicitly route the agent to an alternative (e.g. list_participants or get_participant_table_status) or state when-not to use it, so it stops short of a 5.

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

Deploy Server

Other Tools