TalentLMS MCP by usefulapi
Server Details
Read TalentLMS users, courses, groups, branches and progress; create learners and enroll users.
- Status
- Healthy
- Uptime
- 96.7% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 23 tools
Each tool targets a distinct resource+action, and the inverse-pair tools (list_course_users vs list_user_courses, list_group_users vs list_user_groups, list_branch_users vs list_user_branches) are clearly separated by their descriptions. The only mild overlap is between talentlms_list_course_users (course-wide progress report) and talentlms_get_course_progress (single user's progress in a course), but the descriptions make the granularity distinction reasonably clear.
All 23 tools share a uniform talentlms_ prefix plus snake_case verb_noun pattern (get_, list_, create_, add_, enroll_). The verb choice tracks the action semantics precisely (add for group membership vs enroll for course enrollment), so deviations are meaningful rather than arbitrary.
23 tools sits just above the comfortable band, but the domain genuinely spans many distinct resources (users, courses, categories, groups, branches, learning paths, certificates, timeline, statistics, progress). Almost every tool maps to a unique endpoint rather than duplicating another, so the surface is broad but not padded.
Read coverage is thorough across the resource graph, but the write surface is thin: only create_user, add_user_to_group and enroll_user_in_course exist, with no update/delete for any resource, no deactivation, no remove-from-group or unenroll operation, and no single-object fetch for learning paths or categories. Agents can inspect the portal fully but cannot manage its lifecycle.
Available Tools
23 toolstalentlms_add_user_to_groupAdd a user to a groupADestructiveInspect
WRITE: add an existing user to a group, which also enrolls them in the group's courses. Set enroll_to_courses to enroll synchronously. POST /api/v2/group-memberships.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user id (a positive integer). | |
| group_id | Yes | The group id (a positive integer). | |
| enroll_to_courses | No | Enroll the user in the group's active courses right away (synchronously). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply destructiveHint=true and a title, so the description carries most of the burden. It delivers real value by disclosing the hidden side effect (the user is also enrolled in the group's courses) and the endpoint, and the 'WRITE' prefix aligns with destructiveHint. Missing: duplicate-membership behavior and whether removal is possible.
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?
One compact sentence front-loaded with the WRITE marker and the core action, followed by parameter guidance and the endpoint. Every clause carries information; nothing is wasted.
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 three-parameter write tool with no output schema and sparse annotations, the description covers action, side effect, parameter nuance, and endpoint. It stops short of covering error cases (already a member, invalid ids) or what the response contains.
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 all three params are documented, giving a baseline of 3. The note about enroll_to_courses adds the consequence (synchronous course enrollment) rather than just repeating the flag's type, but doesn't clarify defaults or behavior when omitted.
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 ('add an existing user to a group') plus the non-obvious consequence (enrollment in the group's courses). An agent can distinguish it from talentlms_create_user and talentlms_enroll_user_in_course because both the 'existing user' constraint and the group scope are explicit.
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?
'Add an existing user' implies the user must already exist, which is useful context, but the description never names the alternative tools (create_user, enroll_user_in_course) or states when-not to use it. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_create_userCreate a learnerADestructiveInspect
WRITE: create a new LEARNER account in the portal (TalentLMS may email the user, depending on the portal's settings). The user type is always the portal's built-in Learner-Type; this tool cannot create administrators, instructors or any other type (the portal's default type is never used, since it may be an admin type). If the portal has no type named Learner-Type, the tool refuses. Returns the new user's id and type. POST /api/v2/users.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | First name. | |
| Yes | Email address. | ||
| login | Yes | Username (must be unique in the portal). | |
| locale | No | Locale, e.g. en-US. | |
| surname | Yes | Last name. | |
| password | Yes | Initial password (the portal's password rules apply). | |
| timezone | No | IANA timezone, e.g. Europe/Athens. | |
| description | No | Short bio. | |
| deactivation_date | No | Date the account becomes inactive automatically (YYYY-MM-DD). | |
| email_notifications | No | Whether the user receives email notifications. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the single destructiveHint annotation: discloses the email side effect and that it depends on portal settings, the type-forcing behavior and its rationale, the hard failure mode when Learner-Type is absent, and the return payload (new user's id and type). That is exactly the operational context an agent needs before a write.
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-loads 'WRITE: create a new LEARNER account', then layers constraints and the refusal case in short clauses. Every sentence carries distinct decision-relevant information; nothing is redundant with the title or schema.
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?
No output schema exists, but the description compensates by stating what is returned (id and type). With 10 parameters at full schema coverage, side effects, refusal behavior and endpoint all disclosed, an agent has everything needed 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 every one of the 10 parameters is already documented in the schema, including password rules, unique login, and deactivation date format. The description adds no per-parameter meaning, which is acceptable but places it at the baseline.
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 ('create a new LEARNER account') and immediately narrows scope to the built-in Learner-Type only, so it cannot be confused with generic user management or the group/enrollment siblings. It also names the endpoint (POST /api/v2/users), anchoring what resource is written.
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?
Explicitly states when-not to use it: it cannot create administrators, instructors or any other type, and explains why the portal default type is not used. It also gives a concrete refusal condition ('if the portal has no type named Learner-Type'). It stops short of naming a sibling alternative for non-learner creation, so it is clear context but not a full when/when-not/alternatives triad.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_enroll_user_in_courseEnroll a user in a courseADestructiveInspect
WRITE: enroll an existing user in a course (as a learner). Returns the assigned role. POST /api/v2/enrollments.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user id (a positive integer). | |
| course_id | Yes | The course id (a positive integer). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real information beyond annotations: it is a write operation, the enrollment role is 'learner', the return value is the assigned role, and the underlying endpoint is POST /api/v2/enrollments. It does not explain idempotency or what happens on duplicate enrollment, and does not reconcile with the destructiveHint=true annotation, which is unexplained for an enroll action.
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 the write marker first, followed by the return value and endpoint. No waste, nothing redundant.
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 two-parameter tool with no output schema, the description covers purpose, mutation nature, return value, and endpoint — enough to call it correctly. Only duplicate-enrollment behavior and the meaning of destructiveHint remain 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 coverage is 100% and both parameters are fully documented, so the schema carries the load. The description adds no parameter-specific semantics, which is the expected baseline when coverage is complete.
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 (enroll), resource (user in a course), scope qualifier (as a learner), and even the endpoint. It is clearly distinguishable from siblings like talentlms_add_user_to_group or talentlms_create_user.
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 phrase 'an existing user' implies a prerequisite (the user must already exist), which is useful. However, it never names alternatives or exclusions, and doesn't address what to do if the user is already enrolled.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_get_branchGet a branchBRead-onlyInspect
Details of one branch: URL, title, theme, default locale/timezone/user type/group, signup and verification settings, e-commerce settings. GET /api/v2/branches/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| branch_id | Yes | The branch id (a positive integer). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered and the bar is lower. The description adds the concrete endpoint (GET /api/v2/branches/{id}) and the shape of returned data, but says nothing about error behavior for unknown ids, permissions, or response envelope.
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?
One front-loaded sentence with the core purpose first, followed by a useful field inventory and the endpoint. Dense but every clause carries information, given there is no output schema.
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 carries the burden of explaining return values and does so with a reasonably thorough field list. It leaves gaps around error cases and whether the field list is exhaustive, but an agent can call this correctly from what is given.
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?
Only one parameter with 100% schema description coverage, so the schema fully documents branch_id as a positive integer. The description adds no syntax, format, or lookup hints beyond that, making baseline 3 correct here.
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 pair ('Details of one branch') and enumerates the fields returned, so an agent instantly knows this is a single-branch detail read. It implicitly contrasts with talentlms_list_branches by saying 'one branch', but never names the sibling 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?
There is no guidance on when to call this versus talentlms_list_branches or talentlms_list_branch_users, and no stated preconditions beyond the required branch_id in the schema. The agent must infer usage entirely from the name and field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_get_courseGet a courseARead-onlyInspect
Full details of one course: description, category, status, price, capacity, time limit, start/expiration, settings. GET /api/v2/courses/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| course_id | Yes | The course id (a positive integer). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful context by enumerating returned fields and the REST endpoint, but it does not describe error behavior, permissions, or rate limits.
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, front-loaded with the core purpose and followed by the returned detail list and endpoint. 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?
For a simple read-one-resource tool with a fully documented single parameter and readOnlyHint, the description is largely complete. It compensates for the missing output schema by listing key returned fields, though it omits failure/not-found 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?
There is a single course_id parameter with 100% schema description coverage, so the schema already explains its meaning. The description reinforces that it retrieves one course by id but adds no format or edge-case detail 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 pair: retrieving full details of one course. It clearly distinguishes a single-course lookup from list-style siblings by saying 'one course' and listing returned fields, though it does not explicitly name alternatives such as list_courses.
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: call it when you need full details for a known course id. The description does not explicitly say when to use this versus list_courses or get_course_progress, so guidance stops short of explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_get_course_progressGet a user's progress in a courseARead-onlyInspect
One user's status in one course: enrolled or not, role, completion status, completion percentage and date, score, total time, last viewed unit and certificate. GET /api/v2/course-progress?user_id=&course_id=.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user id (a positive integer). | |
| course_id | Yes | The course id (a positive integer). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, so the description's added value is limited. It does disclose the returned data fields (completion %, score, time, certificate) but doesn't say what happens for a non-enrolled user, whether an error or a null status is 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?
One dense sentence plus the endpoint path, front-loaded with the resource ('One user's status in one course'). The field enumeration is compact but slightly list-like.
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 field enumeration is the most useful part of the description and it's included. Missing only the non-enrolled/empty-result behavior, which matters for a progress lookup.
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 params are documented with types and constraints in the schema. The description adds only the query-string form user_id=&course_id=, which is marginal value, so 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 precise verb and resource with exact scope: one user in one course, plus the endpoint. It's clearly not a list tool, so the agent won't confuse it with list_user_courses or list_course_users, though no sibling is named 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?
Usage is implied by 'one user's status in one course' rather than stated. There's no explicit 'use this when you need X, use list_course_users when you need Y' routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_get_groupGet a groupARead-onlyInspect
Details of one group: name, description, branch, group key, max key redemptions, price. GET /api/v2/groups/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes | The group id (a positive integer). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a harmless read. The description adds the concrete REST endpoint and the exact field set returned, which is useful context, but says nothing about permission requirements, rate limits, or error behavior for invalid ids.
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, front-loaded sentences with the field list first and the endpoint second; no filler. The endpoint string is somewhat redundant for an agent but does aid traceability to the API docs.
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 compensates by enumerating the returned fields, which is the main thing an agent needs to know before calling a single-resource getter. A note on error behavior for a missing id is the only notable 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?
Schema coverage is 100% and the group_id parameter is fully described as a positive integer, so the description adds nothing beyond 'one group' scoping. Nothing about id semantics (e.g. where to obtain the id) is added, but the schema already carries the burden.
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 ('Details of one group') and even enumerates the returned fields (name, description, branch, group key, max key redemptions, price), so the agent knows exactly what a call yields. It does not explicitly name talentlms_list_groups as the plural alternative, so sibling differentiation is only implied by 'one group'.
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 singular 'one group' versus the sibling list tool makes the intended usage inferable, but there is no explicit when-to-use statement, no mention of what happens for a nonexistent group id, and no alternative routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_get_portal_statisticsGet portal statisticsARead-onlyInspect
Portal-wide totals (users, courses, categories, groups, branches, monthly active users) and settings (signup method, date format, branch limit). A good first call. GET /api/v2/statistics.
| 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, so safety is covered; the description adds that the payload includes both totals and portal settings, which is meaningful since no output schema exists. It says nothing about permissions, auth scope, or result size/caching, so it adds context but not rich behavioral detail.
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 clauses: what is returned, why it matters, and the underlying endpoint. Front-loaded with the payload contents and free of 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?
With zero parameters and no output schema, the description's enumeration of returned fields is the main thing the agent needs and it is present. Minor gap: no indication of response shape (flat object vs nested) or freshness of the statistics.
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 no parameters, so the schema imposes no semantic burden and the baseline is 4. The description correctly frames the call as parameter-free by describing it as a portal-wide snapshot.
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 (portal statistics), then enumerates exactly what is aggregated: users, courses, categories, groups, branches, MAU, plus settings. That aggregate scope clearly separates it from entity-listing siblings like talentlms_list_courses or talentlms_list_users.
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?
'A good first call' gives an explicit positional recommendation, so the agent knows to reach for this before drilling into per-entity tools. It stops short of naming an alternative or stating when not to use it, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_get_timelineGet timelineARead-onlyInspect
Recent portal events (logins, user/course/group/branch changes, course completions, certificates...) with the user and related course/group/branch/unit. Filter by event type (e.g. course_completion, user_login_user, user_create_user) and a date range. GET /api/v2/timeline.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). | |
| created_to | No | Events on or before this ISO 8601 date-time. | |
| event_type | No | Only this event type, e.g. course_completion, user_login_user, user_create_user. | |
| created_from | No | Events on or after this ISO 8601 date-time, e.g. 2025-05-07T00:00:00+00:00. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds that results are augmented with related user, course, group, branch and unit records, which materially affects how output should be interpreted. It does not clarify default behavior when no date range is supplied ('recent' is undefined) or ordering of results, which are real gaps.
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 sentences, front-loaded with the content description, then filters, then the endpoint. Nothing is redundant or 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?
With no output schema, the description usefully sketches the shape of returned records (user plus related course/group/branch/unit). Combined with readOnlyHint and fully documented parameters, an agent can call it confidently; only the default date window and result ordering remain unspecified.
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%, so all five parameters already carry descriptions including example values and ISO 8601 formatting. The description reinforces the event_type and date-range filters with the same example values but adds no syntax or constraint detail beyond the schema, so 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 resource (recent portal events) with a concrete inventory of what those events cover (logins, user/course/group/branch changes, completions, certificates) and the underlying endpoint. It is clearly distinguishable from sibling aggregate tools like get_portal_statistics, though no sibling is named 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?
Filtering guidance ('Filter by event type ... and a date range') is implied, giving the agent a sense of how to narrow results. There is no explicit statement of when to prefer this tool over siblings such as get_portal_statistics or per-user list tools, nor any prerequisite or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_get_userGet a userARead-onlyInspect
Full profile of one user: login, name, email, user type, status, timezone, locale, credits, custom fields, deactivation date. GET /api/v2/users/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user id (a positive integer). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this is a safe read, so the description's added value is the concrete payload inventory (status, credits, custom fields, deactivation date) and the REST endpoint. It does not cover not-found behavior or permission requirements, which would have pushed this higher.
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 sentences, payload summary front-loaded, endpoint tacked on as a compact reference. The field list is long but earns its place as a substitute for a missing output schema; no filler text.
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 one-parameter read tool with no output schema, the description supplies the return-field inventory and the underlying endpoint, which is exactly the missing context. Nothing essential for correct invocation is absent.
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 the single user_id parameter is fully documented in the schema, so the baseline applies. The description's only contribution is the '{id}' path placeholder, which restates rather than extends 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?
Specific verb (get) and resource (a single user), with the returned payload enumerated field-by-field so the agent knows exactly what it receives. It distinguishes itself implicitly from the list_* siblings by saying 'one user', but never names talentlms_list_users as the search alternative.
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 only implied: fetch a user when you already have its id. There is no explicit statement of when to prefer this over talentlms_list_users to find an id, nor any prerequisite/error guidance (e.g., what happens for an unknown id).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_branchesList branchesARead-onlyInspect
List the portal's branches (sub-portals: id, name, URL, description, active), paginated. GET /api/v2/branches.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this as a safe read, so the bar is lower. The description does add value beyond annotations by disclosing the returned field set and that results are paginated, plus the underlying endpoint. It does not mention total counts, default/max page behavior beyond what the schema says, or rate/auth considerations.
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 compact sentence with the core purpose front-loaded, and the parenthetical field list is dense but earns its place since there is no output schema. Minor cost: the trailing 'GET /api/v2/branches' is implementation detail an agent rarely needs to act on.
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 two-parameter, no-required-input read tool with no output schema, the description supplies what's missing: the shape of returned branch records and the fact that enumeration is paginated. Remaining gaps are sibling disambiguation rather than anything blocking a correct invocation.
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% — both 'page' and 'page_size' carry their own defaults and 1-100 range — so the schema does the heavy lifting. The description's 'paginated' wording reinforces intent but adds no syntax, format, or edge-case meaning beyond the schema, 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?
Specific verb ('List') plus resource ('the portal's branches'), with a clarifying gloss that branches are sub-portals and an enumeration of returned fields (id, name, URL, description, active). It is clear what the tool returns, but it never distinguishes itself from near-name siblings like talentlms_get_branch (single branch) or talentlms_list_user_branches (branches per user).
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 only implied: the plural 'List' and 'paginated' signal a collection-overview call, so an agent can infer this is for enumerating all branches. However, nothing states when to prefer talentlms_get_branch for a single lookup or talentlms_list_user_branches, and no prerequisites or pagination-stopping guidance are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_branch_usersList a branch's usersBRead-onlyInspect
Users in a branch (id, login, name, email, user type, status, last login), paginated. GET /api/v2/branches/{id}/users.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| branch_id | Yes | The branch id (a positive integer). | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read. The description adds useful context by listing returned fields and the paginated nature of the response, but says nothing about rate limits, ordering, or what an empty branch 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 compact sentence that front-loads the resource and field list, then the endpoint. Nothing is padded or redundant.
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 compensates by enumerating the returned fields, and pagination params are fully covered by the schema. Only the absence of result ordering and edge-case behavior keeps it from a 5.
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%, with page, branch_id and page_size all documented including the 1-100 bound and default page size. The description only adds the word 'paginated', so 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?
The description names the resource (users of a specific branch) and enumerates the returned fields, plus the underlying endpoint. Branch scoping implicitly differentiates it from list_users, list_group_users and list_course_users, though siblings are never named 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?
No statement of when to use this versus talentlms_list_users, talentlms_list_user_branches or talentlms_list_group_users. The only guidance is the implicit scoping in the phrase 'Users in a branch'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_categoriesList course categoriesBRead-onlyInspect
The course category tree (id, parent, name, price, children), paginated. GET /api/v2/categories.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this as a safe read, so the description's added value is the pagination behavior and the flat field list describing the tree shape. It does not disclose default ordering, whether the full hierarchy is returned in one call, or depth limits, which are the traits an agent would still need.
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 compact sentences with the return shape front-loaded and no filler. The endpoint reference is arguably redundant with the tool name but is cheap and useful for debugging.
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 listing the returned fields (id, parent, name, price, children) is genuinely necessary and supplied here. Pagination is noted, but the absence of any note about tree depth or total-count behavior leaves a small gap for a hierarchical listing 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 coverage is 100%, with page and page_size fully documented including bounds and the TalentLMS default of 10. The description only restates 'paginated' and adds no syntax or format 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?
The description names the specific resource (the course category tree) and enumerates the returned fields (id, parent, name, price, children) plus the underlying endpoint. The listing verb is only implied by the name/title, but the resource is unambiguous and clearly distinct from siblings like list_courses or list_branches.
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 call this versus alternatives such as list_courses or get_course (which likely embed category info), and no prerequisites or exclusions are stated. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_coursesList coursesARead-onlyInspect
List the portal's courses (id, name, code, category, status, price, dates, catalog visibility), paginated. Optionally only courses with a given custom course field value. GET /api/v2/courses.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). | |
| custom_field_value | No | Courses with this value in one of their custom course fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds genuinely useful context beyond that: the endpoint, the fact that results are paginated, and the exact field set returned (id, name, code, category, status, price, dates, catalog visibility). It does not describe the pagination envelope (total counts, next page), but the safety and shape profile is otherwise solid.
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 sentence with the resource and scope front-loaded, the returned fields in a compact parenthetical, and the filter and endpoint trailing. There is no redundant preamble or 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 read-only list tool with no output schema, the description handily covers what is returned, that results are paginated, and how filtering works. Minor gaps remain around pagination metadata and default page size (though that is in the schema), which keeps it short of a 5.
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 schema already documents page, page_size, and custom_field_value. The description only restates the custom-field filter in slightly different words and notes pagination; it adds no syntax, matching behavior, or edge-case 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 and resource ('List the portal's courses') and enumerates the returned fields, so an agent knows this is a portal-wide course listing rather than a single-course fetch. It does not explicitly distinguish itself from siblings like talentlms_get_course or talentlms_list_user_courses, leaving that inference to the agent.
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 portal's courses' and the optional custom-field filter, which hints at when a filter is appropriate. There is no explicit when-to-use / when-not-to-use guidance and no mention of when to prefer talentlms_get_course or talentlms_list_user_courses instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_course_usersList a course's usersARead-onlyInspect
Users enrolled in a course with their enrollment date, completion status, completion percentage, completion date and total time: the course's progress report. GET /api/v2/courses/{id}/users.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| course_id | Yes | The course id (a positive integer). | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the bar is lower. The description usefully states what the records contain, but adds nothing about ordering, whether inactive/enrolled-only users are included, or permission requirements — the practical behavioral unknowns for this endpoint.
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 that leads with the resource and ends with the endpoint; the field list is dense but earns its place since no output schema exists. Slightly list-heavy but 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?
With no output schema, the description compensates by enumerating the returned fields, and pagination is fully covered by the schema. Remaining gaps (ordering, eligibility of users shown) are minor for a read-only list operation.
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 course_id, page and page_size are already fully documented with defaults and bounds. The description adds no parameter meaning beyond restating the course id in the endpoint path, so 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?
Specific verb+resource (users enrolled in a course) plus a precise payload enumeration and the underlying endpoint, which makes it easily separable from siblings like talentlms_list_user_courses or talentlms_list_users. It stops short of naming a sibling explicitly, so 4 rather than 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?
Calling this 'the course's progress report' implies when it is appropriate, but there is no explicit when/when-not guidance and no mention of the nearest overlapping sibling, talentlms_get_course_progress, which an agent could easily pick by mistake.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_groupsList groupsARead-onlyInspect
List the portal's groups (id, name, description, branch, price, key redemptions), paginated. GET /api/v2/groups.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, and the description adds useful context beyond it: the exact fields returned, pagination behavior, and the underlying endpoint. It does not mention rate limits or ordering, but for a read-only list this is a solid add over the 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 compact sentence that front-loads the resource and returned fields, with the endpoint as a trailing technical note. 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?
With no output schema, the description compensates by listing the returned fields and noting pagination; input parameters are fully covered by the schema. Only minor gaps remain (ordering, empty-result 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 coverage is 100% and both parameters (page, page_size) are fully documented in the schema, so baseline 3 applies. The description only echoes 'paginated' and adds no format or default detail 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 (List) and resource (portal's groups), enumerates the fields returned (id, name, description, branch, price, key redemptions), and names the endpoint GET /api/v2/groups. An agent can distinguish it from talentlms_get_group (single) and talentlms_list_group_users (membership-scoped) without opening a 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?
Usage is implied by the verb and scope — a paginated collection read — but there is no explicit when-to-use/when-not statement and no naming of alternatives such as talentlms_get_group or talentlms_list_group_users. The agent must infer selection from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_group_usersList a group's usersBRead-onlyInspect
Members of a group (id, login, name, email, user type, status, last login), paginated. GET /api/v2/groups/{id}/users.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| group_id | Yes | The group id (a positive integer). | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safe-read profile, so the bar is lower. The description adds pagination context and the returned field list, which is useful. It omits anything about auth/scope requirements, ordering, or behavior when the group has no members.
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 compact fragments: the field list and the endpoint. Zero filler, and the identifying resource ('Members of a group') is front-loaded.
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 paginated read with complete schema documentation and a readOnlyHint annotation, the definition is sufficient to invoke correctly. It could optionally note ordering or an empty-group behavior, but no output schema means return shape matters little beyond the field list already given.
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%, with page, page_size (1-100, default 10) and group_id fully documented in the schema. The description's 'paginated' adds only a hint of what page/page_size do, so this is the expected baseline rather than added value.
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 ('Members of a group', GET /api/v2/groups/{id}/users) and enumerates returned fields, so purpose is unmistakable. It doesn't explicitly contrast with the sibling talentlms_list_branch_users or talentlms_list_group_users-adjacent listers, but the group scoping is clear from the endpoint.
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 statement of when to use this instead of talentlms_list_users, talentlms_list_branch_users, or talentlms_get_group. The endpoint path implies group-scoped membership, but the agent gets no explicit selection criteria or caveats about empty/paginated results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_learning_pathsList learning pathsBRead-onlyInspect
Learning paths (sequences of courses) with status, category, price, dates and rules, paginated. GET /api/v2/learning-paths.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| status | No | Only active or inactive learning paths. | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful context by naming the GET endpoint, confirming pagination, and listing returned fields, but it does not cover auth requirements, rate limits, or detailed pagination 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?
The description is two short sentences with no wasted text. The core resource description is front-loaded, followed by the concrete endpoint.
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 list endpoint with fully described parameters and no output schema, the description gives enough return-field context for an agent to understand what is returned. It stops short of describing response structure or pagination metadata in detail, but no major calling information 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 meanings of page, status, and page_size are already fully documented in the input schema. The description does not add parameter-level meaning beyond noting that results are paginated, so the baseline score of 3 is 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?
The description clearly identifies the resource as learning paths, explains they are sequences of courses, and lists the returned fields and pagination. It is specific enough to distinguish this from course listing tools, though it does not explicitly contrast itself with siblings such as talentlms_list_courses.
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 does not state when to use this tool versus alternatives, nor does it provide exclusions or prerequisites. Usage is only implied by the tool name and the resource being listed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_user_branchesList a user's branchesBRead-onlyInspect
The branches a user belongs to (id, name). GET /api/v2/users/{id}/branches.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user id (a positive integer). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's main added value is naming the returned fields (id, name) and the underlying endpoint, which is genuinely useful with no output schema. It says nothing about result ordering, empty results, or whether a nonexistent user errors or returns an empty list.
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 terse fragments, resource first, with zero padding. The telegraphic style is efficient, though a complete sentence for the usage clause would cost nothing and read more clearly.
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?
This is a simple single-parameter read whose safety profile is covered by annotations and whose return fields are disclosed inline. An agent has everything needed to call it correctly; only edge-case behavior (unknown user, empty membership) is left unstated.
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 the single parameter is already documented as a positive integer user id, so the description need not restate it. The endpoint path {id} loosely confirms the mapping but adds no syntax or constraint detail 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?
The description states a specific resource and scope: the branches a given user belongs to, plus the fields returned (id, name). The scoping distinguishes it implicitly from talentlms_list_branches (all branches) and talentlms_list_branch_users (users within a branch), though neither sibling is named.
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, even though talentlms_list_branches is an obvious near-neighbor. The agent must infer from the phrase 'a user belongs to' that this is the per-user lookup rather than the global listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_user_certificatesList a user's certificatesBRead-onlyInspect
Certificates a user has earned (course, issue and expiration dates, download/public URLs). GET /api/v2/users/{id}/certificates.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| user_id | Yes | The user id (a positive integer). | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuine value by disclosing what the response contains (dates, download and public URLs) and the endpoint, but says nothing about pagination behavior, empty results, or whether certificates require the user to be enrolled. With annotations carrying the read-only signal, a 3 fits.
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 compact fragments with zero filler; the payload contents are front-loaded ahead of the endpoint reference. It is slightly telegraphic (no verb, parenthetical field list), but every element earns its place.
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 list tool with three fully documented parameters, the description covers what is returned and where it comes from. The absence of an output schema is offset by the field enumeration. Only the lack of pagination/result-count context keeps it from a 5.
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%, with page, page_size and user_id all documented including defaults and bounds, so the schema does the heavy lifting. The description only echoes user scoping via the {id} path template and adds no semantics beyond that. 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?
The description names a specific resource (certificates earned by a user) and enumerates the returned fields (course, issue/expiration dates, download and public URLs), plus the underlying endpoint. That clearly separates it from siblings like talentlms_list_user_courses. It lacks an explicit verb, reading as a noun phrase, which keeps it just below 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?
There is no statement of when to use this versus alternatives such as talentlms_get_user or talentlms_list_user_courses, and no prerequisites or exclusions. The only guidance is implicit in the tool name and the path template. An agent must infer the selection criteria on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_user_coursesList a user's coursesARead-onlyInspect
The courses a user is enrolled in, with their role (learner/instructor), enrollment and completion dates, completion status and percentage, score and total time. GET /api/v2/users/{id}/courses.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user id (a positive integer). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safety profile, so the description's added value is the return-shape disclosure: role per course, enrollment and completion dates, completion status and percentage, score and total time. That is genuinely useful context beyond annotations. It stops short of stating pagination behavior or what an empty result means, which keeps it off a 5.
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 zero filler, and the substantive content (returned fields) is front-loaded. The trailing GET path adds traceability but is mostly noise for an agent already given the required parameter.
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 single-parameter read tool with annotations covering safety and no output schema, the description supplies the returned-field inventory an agent would otherwise lack. Only listing-completeness details (pagination, empty-result semantics) are 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 coverage is 100% and the single user_id parameter is fully documented in the schema as a positive integer. The description adds no syntax or format guidance for user_id, so the baseline 3 for high-coverage schemas 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?
Names a specific verb+resource: the courses a user is enrolled in, plus the exact fields returned (role, enrollment/completion dates, status, percentage, score, time). This clearly separates it from list_course_users (users in a course) and list_courses (catalog), though it does not explicitly name those siblings.
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 only implied: you have a user_id and want their enrollments. There is no explicit when-to-use, no mention of alternatives such as get_course_progress for unit-level detail or list_user_certificates, and no preconditions (e.g., user must exist, empty list when not enrolled).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_user_groupsList a user's groupsARead-onlyInspect
The groups a user belongs to (id, name). GET /api/v2/users/{id}/groups.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user id (a positive integer). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the returned fields (id, name) and the underlying endpoint, which is useful given there is no output schema, but it says nothing about pagination, empty-result behavior, or error cases such as an unknown user id.
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 terse fragments with zero padding, and the resource scope is front-loaded before the endpoint detail. A leading verb ('Lists…') would make it read as a description rather than a label, but nothing needs to be cut.
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 single-parameter read tool with readOnlyHint set and no output schema, the description covers scope, the return shape (id, name), and the backing endpoint. There is no material gap an agent would need before calling it 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 coverage is 100% for the single required user_id, so the schema already documents the type, positivity, and meaning. The description adds nothing beyond confirming the user scope in the endpoint path template; 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?
The fragment 'the groups a user belongs to' states the resource and the scope (a single user) well enough to distinguish it from sibling list_groups (all groups) and list_group_users (members of a group). It is a noun phrase rather than a verb phrase, so the action is only implied, but the resource and filter are unambiguous.
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 scoping ('a user') rather than stated: an agent can infer this is the right tool when it has a user id and wants that user's group memberships. There is no explicit exclusion or pointer to the related write tool (add_user_to_group) or the inverse listing, so the routing must be derived by the caller.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
talentlms_list_usersList usersARead-onlyInspect
List the portal's users (id, login, name, email, user type, status, registration, last login), paginated. Filter by keyword (name/login/email), exact email or login, status, branch, group, last-updated range or a custom field value. GET /api/v2/users.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| No | Exact email address. | ||
| login | No | Exact username (login). | |
| status | No | Only active or inactive users. | |
| keyword | No | Search across name, surname, login and email. | |
| group_id | No | Only users in this group. | |
| branch_id | No | Only users in this branch. | |
| page_size | No | Items per page, 1-100 (TalentLMS default 10). | |
| updated_to | No | Users updated on or before this ISO 8601 date-time. | |
| updated_from | No | Users updated on or after this ISO 8601 date-time, e.g. 2025-01-01T00:00:00. | |
| custom_field_value | No | Users with this value in one of their custom user fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description is consistent with a read-only GET. It adds that results are paginated and names the endpoint, but says nothing about total counts, default page size behavior, or ordering — modest added value over 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?
Two front-loaded sentences: the returns paragraph first, then the filtering capabilities. Dense and low-waste; the trailing endpoint is a small but justifiable addition.
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 11 optional parameters and no output schema, the description usefully compensates by enumerating the returned user fields, which is otherwise unavailable. Missing only behavioral detail such as ordering and whether pagination metadata is returned, so it falls short of fully complete.
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 one of the 11 parameters is already documented in the schema. The description merely summarizes the filter set without adding syntax, precedence, or combination rules (e.g. whether keyword and email can be combined), 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 ('List the portal's users') and even enumerates the fields returned plus the backing endpoint (GET /api/v2/users). It is clear what the tool does, but it never distinguishes itself from closely related siblings like talentlms_list_branch_users or talentlms_list_group_users, which overlap in scope.
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 filter inventory (keyword, email, login, status, branch, group, updated range, custom field) implies when the tool is useful, but there is no explicit when-to-use or when-not-to-use guidance, nor any pointer to the branch/group-scoped list siblings as alternatives.
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.
46 tool updates
- Removed
add_user_to_group - Removed
create_user - Removed
enroll_user_in_course - Removed
get_branch - Removed
get_course - Removed
get_course_progress - Removed
get_group - Removed
get_portal_statistics - Removed
get_timeline - Removed
get_user - Removed
list_branch_users - Removed
list_branches - Removed
list_categories - Removed
list_course_users - Removed
list_courses - Removed
list_group_users - Removed
list_groups - Removed
list_learning_paths - Removed
list_user_branches - Removed
list_user_certificates - Removed
list_user_courses - Removed
list_user_groups - Removed
list_users - Added
talentlms_add_user_to_group - Added
talentlms_create_user - Added
talentlms_enroll_user_in_course - Added
talentlms_get_branch - Added
talentlms_get_course - Added
talentlms_get_course_progress - Added
talentlms_get_group - Added
talentlms_get_portal_statistics - Added
talentlms_get_timeline - Added
talentlms_get_user - Added
talentlms_list_branch_users - Added
talentlms_list_branches - Added
talentlms_list_categories - Added
talentlms_list_course_users - Added
talentlms_list_courses - Added
talentlms_list_group_users - Added
talentlms_list_groups - Added
talentlms_list_learning_paths - Added
talentlms_list_user_branches - Added
talentlms_list_user_certificates - Added
talentlms_list_user_courses - Added
talentlms_list_user_groups - Added
talentlms_list_users
Related MCP Connectors
Read Axis LMS users, courses, learning paths, certifications and reports; manage enrollments.
Check LearnWorlds courses, learners, progress, grades and payments, and enroll or tag users.
Read intelliHR people, jobs, leave, skills and training; create and update people records.
Read Taleez recruiting data; create or update candidates and add them to pools or jobs.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables users to manage courses, assignments, enrollments, grades, users, reports, discussions, quizzes, and files through the Canvas LMS API, with support for student, instructor, and account-administrator workflows.21 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables users to manage courses, assignments, enrollments, grades, account administration, reports, and student/instructor workflows through the Canvas LMS API.21 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables students, instructors, and account administrators to interact with Canvas LMS through its API, supporting course and assignment management, submissions, grading, enrollments, discussions, quizzes, files, reports, and account administration.21 npmMIT
- FlicenseBqualityDmaintenanceProvides read-only access to Canvas LMS data including courses, assignments, grades, and deadlines through 23 structured tools.23-
Glama MCP Gateway
Add one secure layer between your agents and this server.