Skip to main content
Glama

Server Details

Run AI interviews, manage candidates and read hiring analytics on JobMojito.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.2/5 across 29 of 29 tools scored. Lowest: 3.6/5.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct resource and action, with clear separation such as create_interview vs create_interview_from_questions and get_catalogue_directory vs list_catalogue_directories. Even related tools like set_interview_state and update_interview have non-overlapping purposes.

Naming Consistency5/5

The vast majority of tools follow a consistent verb_noun pattern (create_, get_, list_, update_, generate_, etc.). The only outlier, jobmojito_configuration, is a single tool that does not disrupt the overall consistency.

Tool Count4/5

With 29 tools, the set is slightly heavy but the broad scope of the platform (interviews, results, coaching catalogue, merchants, documentation, knowledge base) justifies the count. The tools are logically grouped, making the surface navigable despite the number.

Completeness4/5

The surface covers core CRUD/lifecycle for interviews and catalogue directories, including create, read, list, and update. However, missing delete operations and limited persona lifecycle management (no update/delete/list) create minor but noticeable gaps.

Available Tools

29 tools
create_catalogue_directoryCreate coaching catalogue directoryA
Destructive
Inspect

[Coaching catalogue] Create a directory (page) in the coaching portal catalogue. A directory nests other directories (tags_sub), lists coaching sessions whose own tags match its tags_interview_set_filter, and can carry a fully custom Markdown page (content_md) with [sessions], [directory:…], [session:…] and [plan-progress] directives. Coaching-platform feature.

Creates a directory (page) in the coaching portal catalogue. A directory nests other directories through tags_sub, lists coaching sessions through tags_interview_set_filter, and can replace the default grid with a custom Markdown page through content_md. The id you choose is the catalogue URL segment and cannot be changed afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDirectory id — also the catalogue URL segment (/catalogue/<id>) and the value other directories reference in their `tags_sub`. Lowercase letters, digits and single - or _ separators. Convention is to end language-specific directories with the language code, e.g. `sales-coaching-en`.
nameYesDisplay name of the directory, shown as the page title and on its card.
statusNoLifecycle status of the catalogue directory. Options — `draft`: Not published — the directory exists but is not served to visitors. | `active`: Published and served in the catalogue. | `archived`: Retired — kept for reference but no longer served..
tags_subNoIds of the directories nested under this one, in display order. Replaces the whole list — send the full set, not just the additions. A referenced directory only appears if it exists and is visible to the viewer.
coach_planNoCoaching-plan stage this item belongs to, used by the coaching-plan progress view. Omit/null to leave it out of any plan. Options — `demo`: Demo session. | `screening`: Screening-interview practice. | `2nd`: Second-interview practice. | `3rd`: Third-interview practice. | `closing`: Closing / salary-negotiation practice. | `job-specific`: Job-specific coaching. | `other`: Anything that does not fit the other buckets..
content_mdNoMarkdown for a custom directory page. When set (even as an empty string) the markdown replaces the default grid and decides the layout itself; null renders the plain grid of sub-directories and sessions. Alongside normal Markdown you can place these directives, each ALONE on its own line: `[plan-progress]` (the learner's coaching-plan progress), `[directory:<tag-id>]` (a card for one sub-directory), `[session:<interview-id>]` (a card for one session), `[sessions]` (every session in this directory), `[sessions:<term>]` (sessions matching a term), `[sessions:filter=<term>,limit=<n>]` (a filtered, capped list). A directive on a line with other text is rendered as ordinary text.
parent_tagNoId of an existing directory to nest this new one under: the new id is appended to that directory's `tags_sub`. Omit to create a top-level directory (reachable via a direct link, or by adding it to another directory later).
visibilityNoWho can see the catalogue directory. Options — `public`: Shared across every merchant. Platform admins only — a merchant caller is rejected by row-level security. | `merchant_public`: Listed in the merchant's own catalogue — the normal choice. | `merchant_invite`: Owned by the merchant but not listed; reachable only for invited users. | `merchant_unlisted`: Owned by the merchant but not listed; reachable only via a direct link..
descriptionNoShort description shown on the directory card.
merchant_idNoMerchant that owns the directory. Admin / sub-merchant callers only; otherwise taken from your token.
cover_image_urlNoCover image URL shown on the directory card.
mojito_language_codeNoLanguage of the directory (one of the platform-languages.json codes). The catalogue groups directories by language; defaults to `en` when omitted.
tags_interview_set_filterNoTag filter selecting which coaching sessions this directory lists: a session appears when its own `tags` contain EVERY tag here (an AND, not an OR). Only `active` coaching/persona sessions with visibility `public` or `merchant_public` are listed. Set the matching tags on the session with the create-interview / job-interview-update `tags` field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesId of the created directory.
parent_tagYesThe directory this one was nested under, when `parent_tag` was supplied.
merchant_idYesOwning merchant id. Null for a platform-wide (`public`) directory.
catalogue_urlYesPublic URL of the directory page, when the merchant has a coaching-portal domain configured. Null otherwise.
Behavior4/5

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

The annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=false. The description adds important behavioral context: the id becomes the immutable catalogue URL segment, and content_md can replace the default grid layout. These details go beyond the annotations without contradicting them.

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 description contains two paragraphs that largely repeat the same information: 'Create a directory...' and the main features (nests, lists sessions, custom markdown) appear twice. While not overly long, the redundancy means not every sentence earns its place.

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

Completeness4/5

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

With 13 parameters and a rich schema, the description provides a solid high-level mental model of how directories work (nesting, session filtering, custom markdown) and warns about id immutability. It does not explain every enum or visibility detail, but those are thoroughly covered in the schema, so the description is sufficiently complete.

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 all parameters are well-documented in structured form. The description adds some overarching context (e.g., id immutability, content_md behavior) but does not significantly enhance per-parameter semantics over the schema, warranting the baseline score.

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

Purpose5/5

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

The description clearly states 'Create a directory (page) in the coaching portal catalogue' with a specific verb and resource. It distinguishes itself from sibling tools like update_catalogue_directory and get_catalogue_directory by its clear create semantics.

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 gives context about what a directory is and its core features, making the usage implicitly clear. However, it does not explicitly state when to use this tool versus alternatives or mention any exclusions or prerequisites, leaving the guidance at an implied level.

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

create_interviewCreate interviewA
Destructive
Inspect

[Interviews] Create a new interview and auto-generate its question sequence from position data. The interview_template_id you pass also sets the modality (voice-only vs realtime/pre-recorded avatar) — see list_avatars.

Creates a new interview / coaching / assessment definition, generates its description, questions and candidate expectations via AI, and provisions default steps. Optionally provisions an embed key.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoOptional external code/reference for the interview.
nameYesInterview / position name.
tagsNoFree-form tags stored on the interview. Tags are also the coaching-catalogue mapping key: a catalogue directory (see the catalogue-tag-create / catalogue-tag-update endpoints) lists a coaching or persona session when the session's tags contain EVERY tag in that directory's `tags_interview_set_filter`. Only `active` sessions with visibility `public` or `merchant_public` are listed.
typeYesProduct type of the interview. Options — `interview`: Standard candidate interview for a role — answers are AI-scored and produce a hiring recommendation. | `coaching`: Practice/coaching session — candidate-facing feedback to help them improve; not a hiring evaluation. Only available on the coaching portal, NOT the interview portal. | `assessment`: Skills/knowledge assessment — evaluates competencies and is scored like an interview..
statusYesLifecycle status of the interview. Options — `draft`: Created but not published — not visible to candidates and cannot be run yet. Use to stage an interview before going live. | `active`: Published and live — candidates can run it..
locationYesJob location.
recordingNoCheating/proctoring detection mode for candidate answers — this is NOT a full session recording. Video options also record the candidate. Omit/null to disable. Options — `audio_first_5_answers`: Audio-only cheating detection, first 5 answers only. | `audio_all`: Audio-only cheating detection on every answer. | `video_all`: Audio + video cheating detection on every answer (candidate is recorded for all answers). | `video_first_5_answers`: Audio + video cheating detection, first 5 answers only..
visibilityYesWho can discover and access the interview. Options — `merchant_public`: Listed on the merchant's public interview list — anyone with the merchant link can find and start it. | `merchant_invite`: Invite-only — only candidates explicitly invited (by email/link) can access it; not listed anywhere. | `merchant_unlisted`: Reachable only via a direct link — not listed anywhere; share the link manually..
descriptionNoShort, two-sentence job description shown to the candidate. Provide it to use it as-is; leave it null/blank and it is AI-generated from the position name and any other context.
is_embeddedNoSet true when the interview will be embedded as an iframe on an external page. Provisions an embed key and returns embed_id / embed_signing_key, which are used to authenticate/sign the iframe embed.
merchant_idNoMerchant id. Admin / sub-merchant callers only; otherwise taken from your token.
result_viewNoResult screen shown to the candidate after finishing. With any value other than `none`, the candidate sees a results screen where they can provide feedback, record an intro video and edit the transcript, and must then submit the result; the value sets how much score/result detail is shown. Options — `none`: No results screen at all — the interview is submitted immediately when the candidate finishes (no feedback, intro video, transcript edit or manual submit step). | `minimal`: Minimal results layout, no score shown. | `minimal_with_score`: Minimal results layout including the overall score. | `advanced`: Advanced results layout with more detail. | `full`: Full results layout with all sections. | `full_expand_scores`: Full results with every score breakdown expanded..
max_durationNoMaximum interview duration in seconds. Scopes how many questions are generated (see interview_length) and is stored on the interview as the live session limit and the basis for the credit multiplier. Defaults to 1200 (20 minutes) when omitted.
max_followupsNoMaximum number of AI follow-up questions. 0 disables follow-ups; presets are 0-3 (none/low/normal/high) and custom values start at 4; null uses the template default (Normal).
custom_scoringNoCustom result-scoring overrides merged with defaults and template overrides.
interview_toneNoInterview tone — configures the AI avatar's speaking style and the tone of the AI-generated questions and follow-ups; omit to default to relaxed. Suggested values — `relaxed`: Friendly and conversational tone that helps candidates feel at ease. | `simple`: Plain language at CEFR A2 level — short sentences and simple words. | `professional`: Formal and business-like approach suitable for senior roles. | `persuasive`: Engaging style that encourages candidates to elaborate.. Case-insensitive; other strings are accepted but unknown tones fall back to the default.
interview_typeNoInterview style — configures the AI avatar and shapes both the AI-generated questions and the follow-up questions asked during the interview. Defaults to pre-screening when omitted. Options — `pre-screening`: Pre-screening — quick qualification check focusing on basic requirements and availability. | `pre-screening-with-test-questions`: Pre-screening with test questions — pre-screening plus practical questions to test relevant skills. | `second-interview`: Second round interview — deeper dive for candidates who passed initial screening. | `remote-freelancer-verification`: Remote worker verification — verify remote work capabilities and communication skills. | `strength-based-interview`: Strength-based interview — focus on what candidates enjoy and excel at to predict job satisfaction. | `potential-based-interview`: Potential-based interview — assess learning ability and growth potential rather than past experience. | `process-verification-from-knowledge-base`: Knowledge Base interview — generate questions from your knowledge base documents..
cover_image_urlNoCover image URL.
seniority_levelNoTarget seniority level for the role; auto-detected from the job description when omitted. Options — `entry-level`: Early-career or graduate roles. | `intermediate`: Some experience required. | `senior`: Experienced professional. | `managerial`: Team or department lead. | `director`: Director-level responsibility. | `executive`: C-suite or executive role..
welcome_messageNoCustom welcome message shown to the candidate.
description_longNoFull job description in Markdown (Job Purpose, Responsibilities, Required & Preferred Qualifications). Provide it to use it as-is; leave it null/blank and it is AI-generated (interview and assessment types only).
interview_lengthNoNumber of questions to generate (1-40). Also capped by max_duration, which allows one question per 2 minutes: 20 min -> 10 questions, 30 min -> 15, 45 min -> 22, 60 min -> 30, 80 min -> 40. Asking for more than the cap is not an error — you get the cap, and the response reports the real count in questions_generated. Omit this field to let the AI pick 5-8.
interview_salaryNoSalary range shown for the position.
thank_you_messageNoCustom thank-you message shown after the interview.
additional_contextNoArbitrary additional context object merged into AI generation.
hiring_for_companyNoWho the position is really for. Omit/null (or an object with name null/blank) when hiring for yourself; { name: 'undisclosed' } for an unnamed external client; or { name: '<company>' } plus optional description/location/sector/company_size for a named client. Stored in creation_parameters.hiring_for_company.
interview_attemptsNoAllowed candidate attempts (1-20).
instructional_videoNoShow an instructional video before approval. Defaults to false.
interview_departmentNoDepartment the position belongs to.
mojito_language_codeYesPlatform language code used for the interview. Must be one of the platform-languages.json codes.
recruiter_profile_idNoProfile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant.
interview_template_idYesId of the interview template to base this interview on.
candidate_expectationsNoFree-text candidate expectations folded into AI generation.
include_closing_promptNoInclude a closing prompt. Defaults to true.
pdf_export_auto_configNoAuto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.
recording_full_sessionNoFull interview-session recording (includes the avatar and voice) produced as a single file. Independent of `recording`. Omit/null to disable. Options — `audio_all`: Record the whole session audio (avatar + candidate voice) into a single file. Adds +0.2 credits. | `video_all`: Record the whole session video + audio (avatar + candidate) into a single file. Adds +0.4 credits..
required_pronunciationNoRequire pronunciation assessment (restricts to pronunciation-capable languages). Defaults to false.
knowledge_base_store_idNoKnowledge base store id to source additional context from.
questions_random_subsetNoAsk only a random subset of the questions, expressed as a fraction between 0.01 and 0.9 (e.g. 0.5 = 50%). null asks all questions.
include_rapport_questionNoInclude an opening rapport question. Defaults to false.
interview_available_tillNoISO date/time after which the interview is no longer available to candidates. null keeps it always available.
use_enhanced_expectationsNoReserved flag passed through to generation.
candidate_video_introductionNoWhether a candidate video introduction is optional or required.
interview_conversation_speedNoConversation pace of the AI avatar. Omit/null keeps the template default pace. Options — `slower`: The avatar speaks more slowly — easier to follow for non-native speakers. | `normal`: Default speaking pace. | `faster`: The avatar speaks more quickly for a snappier conversation..
result_enable_edit_transcriptNoAllow editing the transcript on the result view. Defaults to true.
instructional_video_custom_textNoCustom narration text for the instructional video.

Output Schema

ParametersJSON Schema
NameRequiredDescription
embed_idNoEmbed id, present only when is_embedded=true.
max_durationYesLive session limit in seconds stored on the interview — the value sent, or the 1200 default when omitted.
embed_signing_keyNoEmbed signing key, present only when is_embedded=true.
questions_generatedYesNumber of questions actually generated. May be lower than the requested interview_length, which is capped by max_duration.
interview_def_set_idYesId of the newly created interview definition set.
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description discloses side effects such as AI generation of description/questions/candidate expectations, provisioning default steps, and optionally provisioning an embed key. It also reveals that interview_template_id sets the modality, adding context not present in the schema.

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

Conciseness4/5

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

The description is concise and front-loaded, covering the main purpose and key side effects in two sentences. It is slightly redundant (e.g., 'auto-generate its question sequence' vs 'generates its description, questions and candidate expectations') but remains efficient and readable.

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?

Given the tool's complexity (46 parameters, output schema present), the description provides a solid overview: creation, AI generation, default steps, modality, and optional embed key. It does not explain return values, but the output schema covers that. The description is complete enough for an agent to understand the tool's core behavior.

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 a baseline of 3 is appropriate. The description adds one meaningful parameter insight (interview_template_id sets modality) but does not elaborate on other parameters beyond what the schema already provides. The added value over the schema is minimal.

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

Purpose5/5

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

The description clearly states the tool's function: creating a new interview and auto-generating its question sequence from position data. It also distinguishes itself from sibling tools like create_interview_from_questions by explicitly mentioning auto-generation and AI-driven content creation.

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 implies usage context (e.g., auto-generates content, provisions embed keys) but does not explicitly state when to use this tool versus alternatives such as create_interview_from_questions. No direct exclusions or alternative recommendations are provided, making the guidance implicit rather than explicit.

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

create_interview_from_questionsCreate interview from questionsB
Destructive
Inspect

[Interviews] Create a new interview from an explicit array of questions.

Creates a new interview definition set from a caller-provided array of questions, builds its default and generated steps, optionally activates it, and optionally creates an embed key.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoOptional external code/reference.
nameYesInterview/position name.
tagsNoFree-form tags stored on the interview. Tags are also the coaching-catalogue mapping key: a catalogue directory (see the catalogue-tag-create / catalogue-tag-update endpoints) lists a coaching or persona session when the session's tags contain EVERY tag in that directory's `tags_interview_set_filter`. Only `active` sessions with visibility `public` or `merchant_public` are listed.
typeYesProduct type of the interview. Options — `interview`: Standard candidate interview for a role — answers are AI-scored and produce a hiring recommendation. | `coaching`: Practice/coaching session — candidate-facing feedback to help them improve; not a hiring evaluation. Only available on the coaching portal, NOT the interview portal. | `assessment`: Skills/knowledge assessment — evaluates competencies and is scored like an interview..
statusYesLifecycle status of the interview. Options — `draft`: Created but not published — not visible to candidates and cannot be run yet. Use to stage an interview before going live. | `active`: Published and live — candidates can run it..
locationYesInterview location.
questionsYesOrdered list of interview questions to create as steps.
recordingNoCheating/proctoring detection mode for candidate answers — this is NOT a full session recording. Video options also record the candidate. Omit/null to disable. Options — `audio_first_5_answers`: Audio-only cheating detection, first 5 answers only. | `audio_all`: Audio-only cheating detection on every answer. | `video_all`: Audio + video cheating detection on every answer (candidate is recorded for all answers). | `video_first_5_answers`: Audio + video cheating detection, first 5 answers only..
visibilityYesWho can discover and access the interview. Options — `merchant_public`: Listed on the merchant's public interview list — anyone with the merchant link can find and start it. | `merchant_invite`: Invite-only — only candidates explicitly invited (by email/link) can access it; not listed anywhere. | `merchant_unlisted`: Reachable only via a direct link — not listed anywhere; share the link manually..
descriptionYesShort interview description.
is_embeddedNoSet true when the interview will be embedded as an iframe on an external page. Creates an embed key and returns embed_id/embed_signing_key, used to authenticate/sign the iframe embed.
merchant_idNoTarget merchant id (admins / sub-merchant only).
result_viewNoResult screen shown to the candidate after finishing. With any value other than `none`, the candidate sees a results screen where they can provide feedback, record an intro video and edit the transcript, and must then submit the result; the value sets how much score/result detail is shown. Options — `none`: No results screen at all — the interview is submitted immediately when the candidate finishes (no feedback, intro video, transcript edit or manual submit step). | `minimal`: Minimal results layout, no score shown. | `minimal_with_score`: Minimal results layout including the overall score. | `advanced`: Advanced results layout with more detail. | `full`: Full results layout with all sections. | `full_expand_scores`: Full results with every score breakdown expanded..
max_followupsNoMaximum number of AI follow-up questions. 0 disables follow-ups; presets are 0-3 (none/low/normal/high) and custom values start at 4; null uses the template default (Normal).
custom_scoringNoCustom scoring overrides merged with defaults.
interview_toneNoTone — configures the AI avatar's speaking style and the follow-up questions it generates; the base `questions` you supply are not affected. Omit to default to relaxed. Suggested values — `relaxed`: Friendly and conversational tone that helps candidates feel at ease. | `simple`: Plain language at CEFR A2 level — short sentences and simple words. | `professional`: Formal and business-like approach suitable for senior roles. | `persuasive`: Engaging style that encourages candidates to elaborate.. Case-insensitive; other strings are accepted but unknown tones fall back to the default.
interview_typeNoInterview style — configures the AI avatar and the follow-up questions it generates during the interview. The base `questions` you supply are used as-is and are NOT affected by this setting. Options — `pre-screening`: Pre-screening — quick qualification check focusing on basic requirements and availability. | `pre-screening-with-test-questions`: Pre-screening with test questions — pre-screening plus practical questions to test relevant skills. | `second-interview`: Second round interview — deeper dive for candidates who passed initial screening. | `remote-freelancer-verification`: Remote worker verification — verify remote work capabilities and communication skills. | `strength-based-interview`: Strength-based interview — focus on what candidates enjoy and excel at to predict job satisfaction. | `potential-based-interview`: Potential-based interview — assess learning ability and growth potential rather than past experience. | `process-verification-from-knowledge-base`: Knowledge Base interview — generate questions from your knowledge base documents..
cover_image_urlNoCover image URL.
seniority_levelNoTarget seniority level for the role; auto-detected from the job description when omitted. Options — `entry-level`: Early-career or graduate roles. | `intermediate`: Some experience required. | `senior`: Experienced professional. | `managerial`: Team or department lead. | `director`: Director-level responsibility. | `executive`: C-suite or executive role..
welcome_messageNoCustom welcome message.
description_longNoLong-form interview description.
interview_salaryNoSalary range shown for the position.
thank_you_messageNoCustom thank-you message.
additional_contextNoExtra context forwarded to expectation generation.
hiring_for_companyNoWho the position is really for. Omit/null (or an object with name null/blank) when hiring for yourself; { name: 'undisclosed' } for an unnamed external client; or { name: '<company>' } plus optional description/location/sector/company_size for a named client. Stored in creation_parameters.hiring_for_company.
interview_attemptsNoAllowed attempts, 1-20.
instructional_videoNoEnable an instructional video before approval.
interview_departmentNoDepartment the position belongs to.
mojito_language_codeYesPlatform language code (one of the platform-languages.json codes); must also resolve to a supported language with an Azure speech mapping.
recruiter_profile_idNoProfile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant.
disable_deduplicationNoWhen true, skip step deduplication on insert.
interview_template_idYesId of the interview template to use. Must reference an existing interview_templates row.
candidate_expectationsNoFree-text candidate expectations.
pdf_export_auto_configNoAuto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.
recording_full_sessionNoFull interview-session recording (includes the avatar and voice) produced as a single file. Independent of `recording`. Omit/null to disable. Options — `audio_all`: Record the whole session audio (avatar + candidate voice) into a single file. Adds +0.2 credits. | `video_all`: Record the whole session video + audio (avatar + candidate) into a single file. Adds +0.4 credits..
required_pronunciationNoRequire pronunciation assessment (restricts to pronunciation-capable languages). Defaults to false.
knowledge_base_store_idNoOptional knowledge base store id; validated for existence.
questions_random_subsetNoFraction of questions to randomly ask, between 0.01 and 0.9.
interview_available_tillNoISO date/time after which the interview is no longer available to candidates. null keeps it always available.
candidate_expectations_jsonNoPre-generated candidate expectations, bucketed by requirement level (weak/moderate/strong); auto-generated when omitted for type=interview. Extra keys are preserved.
candidate_video_introductionNoWhether a candidate video introduction is optional or required.
interview_conversation_speedNoConversation pace of the AI avatar. Omit/null keeps the template default pace. Options — `slower`: The avatar speaks more slowly — easier to follow for non-native speakers. | `normal`: Default speaking pace. | `faster`: The avatar speaks more quickly for a snappier conversation..
result_enable_edit_transcriptNoAllow editing the transcript on the result view. Defaults to true.
instructional_video_custom_textNoCustom text for the instructional video.

Output Schema

ParametersJSON Schema
NameRequiredDescription
embed_idNoEmbed id, present only when is_embedded=true.
embed_signing_keyNoEmbed signing key, present only when is_embedded=true.
interview_def_set_idYesId of the newly created interview definition set.
Behavior1/5

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

The description states it 'Creates a new interview definition set'—a non-destructive action—but the annotations declare destructiveHint=true. This is a contradiction; the description provides no context to reconcile the destructive hint (e.g., whether it overwrites existing definitions), so it fails to disclose actual behavior beyond the annotation.

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

Conciseness5/5

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

The description is concise at two sentences, front-loaded with the core purpose, and contains no filler. Every phrase adds information about what the tool does.

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

Completeness2/5

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

Despite the rich schema and output schema, the description does not explain when to choose this over create_interview, and the destructiveHint contradiction remains unresolved. It also fails to mention any caveats about the interview creation process, so the description is incomplete for such a complex tool.

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

Parameters3/5

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

The input schema has 100% coverage with detailed descriptions for all 44 parameters. The tool description adds no additional parameter semantics beyond what schema already provides, so the baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the verb 'Create' and identifies the resource: 'a new interview from an explicit array of questions.' It distinguishes this from the sibling create_interview by emphasizing the caller-provided question array, and adds how it builds steps, activates, and creates embed keys.

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 implies this tool is for creating interviews when you have an explicit array of questions, but it does not explicitly state when to use this vs. the sibling create_interview or any other alternative. No exclusions or alternative references are given, so usage is only implied.

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

create_personaCreate role-play personaA
Destructive
Inspect

[Interviews] Create a role-play persona: an avatar that plays a defined role in a free-form conversation instead of a scored Q&A interview. Set persona_role_avatar/persona_role_user for the roles and opening_line for the avatar's first spoken line (defaults to a generic 'Hello'). Coaching-platform feature.

FIRST DECIDE portal. This endpoint creates two different products and the default is NOT the recruiter one:

  • portal: "interview" — an INTERVIEW ROLE-PLAY. Use this whenever the goal is to ASSESS or SCREEN candidates: hiring, assessments, sales role-plays for job applicants, anything a recruiter runs. Candidates are invited through the normal invitation flow, results appear in the recruiter's result list, it is billed against merchant credits, and attempts are capped via interview_attempts — exactly like an interview.

  • portal: "coaching" (THE DEFAULT) — a coaching persona for practice/training on the coaching portal. Consumed against the mentee's own coaching credits, self-started from the catalogue, and its results are NOT visible to recruiters. Omitting portal gives you this one, so pass portal: "interview" explicitly for any recruiting/assessment use case. The conversation itself behaves identically in both.

The avatar plays a defined role in a free-form conversation instead of running a scored Q&A interview. No AI question/description generation runs; the persona role fields ARE the configuration. The session runs as: a welcome message → the avatar's OPENING LINE (the first thing it says, set via opening_line) → the candidate replies and the free-form role-play begins → a closing message. Because there is no question list, opening_line is how the avatar starts the scene — set it to a concrete in-character line; if omitted it defaults to a generic "Hello". Set welcome_message and thank_you_message too — omitting them leaves the generic platform defaults. Also set candidate_expectations: it is the yardstick the session is scored against. The four avatar prompts divide up as: persona_avatar_who_is (identity and what drives it), persona_avatar_knowledge (the private facts it may use), persona_avatar_progress (how the conversation is allowed to move forward, and what gates the later personal details), and persona_avatar_end_conditions (when to stop). Without persona_avatar_progress the avatar has no defined arc and tends to either concede immediately or never concede at all. Provisions the default conversational steps and optionally an embed key.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoOptional external code/reference for the persona.
nameYesPersona / session name.
tagsNoFree-form tags stored on the persona. Tags are also the coaching-catalogue mapping key: a catalogue directory (see the catalogue-tag-create / catalogue-tag-update endpoints) lists a coaching or persona session when the session's tags contain EVERY tag in that directory's `tags_interview_set_filter`. Only `active` sessions with visibility `public` or `merchant_public` are listed.
portalNoREQUIRED IN PRACTICE — pick deliberately; the default is the coaching product, not the recruiting one. `interview`: an interview role-play. Choose this for ANY recruiting or assessment use case (screening candidates, hiring, sales role-plays for applicants). Candidates are invited through the normal invitation flow, results are visible to the recruiter alongside ordinary interview results, it is billed against your merchant credits on the same basis as an interview, and attempts are capped (see `interview_attempts`). | `coaching` (DEFAULT when omitted): the classic coaching persona for practice/training. Runs on the coaching portal, is consumed against the mentee's own coaching credits, is started by the mentee from the catalogue or a shared link, and its results are NOT visible to recruiters. The conversation itself behaves identically in both cases — only the portal, billing, visibility and attempt limits differ.
statusYesLifecycle status of the interview. Options — `draft`: Created but not published — not visible to candidates and cannot be run yet. Use to stage an interview before going live. | `active`: Published and live — candidates can run it..
recordingNoCheating/proctoring detection mode for candidate answers — this is NOT a full session recording. Video options also record the candidate. Omit/null to disable. Options — `audio_first_5_answers`: Audio-only cheating detection, first 5 answers only. | `audio_all`: Audio-only cheating detection on every answer. | `video_all`: Audio + video cheating detection on every answer (candidate is recorded for all answers). | `video_first_5_answers`: Audio + video cheating detection, first 5 answers only..
visibilityYesWho can discover and access the interview. Options — `merchant_public`: Listed on the merchant's public interview list — anyone with the merchant link can find and start it. | `merchant_invite`: Invite-only — only candidates explicitly invited (by email/link) can access it; not listed anywhere. | `merchant_unlisted`: Reachable only via a direct link — not listed anywhere; share the link manually..
descriptionNoShort persona description shown to the candidate on the pre-session poster. Candidate-visible — keep it to max 2 sentences. Unlike job-interview-create, personas run no AI generation, so this is never auto-generated: leave it null/blank and the poster simply shows no description; set it to frame the scene.
is_embeddedNoSet true when the persona will be embedded as an iframe on an external page. Provisions an embed key and returns embed_id / embed_signing_key.
merchant_idNoMerchant id. Admin / sub-merchant callers only; otherwise taken from your token.
result_viewNoResult screen shown to the candidate after finishing. With any value other than `none`, the candidate sees a results screen where they can provide feedback, record an intro video and edit the transcript, and must then submit the result; the value sets how much score/result detail is shown. Options — `none`: No results screen at all — the interview is submitted immediately when the candidate finishes (no feedback, intro video, transcript edit or manual submit step). | `minimal`: Minimal results layout, no score shown. | `minimal_with_score`: Minimal results layout including the overall score. | `advanced`: Advanced results layout with more detail. | `full`: Full results layout with all sections. | `full_expand_scores`: Full results with every score breakdown expanded..
max_durationNoMaximum conversation duration in seconds. Defaults to 1200 (20 min) when omitted.
opening_lineNoThe avatar's opening line — the FIRST thing it says out loud when the session starts, before the candidate has said anything. This is a literal spoken line, NOT a description: write the exact words the avatar should say, in character and consistent with persona_role_avatar. For an escalated scenario it should already convey that state (e.g. an angry customer opens angrily). If omitted, the platform inserts a generic default ("Hello"), which is usually a weak opener — set this for anything other than a neutral greeting.
cover_image_urlNoCover image URL.
welcome_messageNoCustom welcome message spoken to the candidate before the role-play starts — set it; omitting it leaves a generic platform default. This is the scene-setting message; the avatar's first in-character line is `opening_line`, which comes after it.
persona_role_userYesThe role the candidate (mentee) plays. Candidate-visible — shown on the pre-session poster as 'Your role', so write it as candidate-facing setup and keep it to max 2 sentences. Example: 'is to be a sales person trying to sell an additional product to the customer'.
thank_you_messageNoCustom thank-you message shown after the session — set it; omitting it leaves a generic platform default.
interview_attemptsNoAllowed candidate attempts (1-20), defaulting to 3. Only meaningful when `portal` is `interview`; coaching personas are unlimited. A recruiter can still grant an extra attempt afterwards.
interview_locationNoOptional location label shown for the session.
persona_role_avatarYesThe role the AI avatar plays. Candidate-visible — shown on the pre-session poster as 'Role of the agent', so write it as candidate-facing setup and keep it to max 2 sentences. Example: 'is to act as a happy customer responding to questions'.
mojito_language_codeYesPlatform language code used for the conversation. Must be one of the platform-languages.json codes.
recruiter_profile_idNoProfile id of the recruiter owning this persona. Must be a merchant/merchant_owner/admin profile of the same merchant.
interview_template_idYesId of the interview template (avatar) the persona uses.
persona_avatar_who_isNoWho the avatar represents: name, role, context, personality, woven with what drives them underneath (motive, fear, what they refuse until heard, what they do not know until told). One continuous description; no labelled subsections.
candidate_expectationsNoMentee assessment goals — free-text describing what the candidate is expected to achieve (max 2100 chars).
recording_full_sessionNoFull interview-session recording (includes the avatar and voice) produced as a single file. Independent of `recording`. Omit/null to disable. Options — `audio_all`: Record the whole session audio (avatar + candidate voice) into a single file. Adds +0.2 credits. | `video_all`: Record the whole session video + audio (avatar + candidate) into a single file. Adds +0.4 credits..
persona_avatar_progressNoHow the conversation moves forward — one plain-text value starting with `Mode: turning point` (resistance) or `Mode: steps` (difficult conversation protocol), then the labelled lines for that mode (Initial hold / Unlocks when / … or Framework / Steps / …), including a Gates line: do not share later personal details from persona_avatar_knowledge until progress is earned.
persona_avatar_knowledgeNoPrivate facts the avatar can use (numbers, dates, names, objections), plus any personal details shareable only after progress and only if natural — timing written inline, not as labelled subsections. Those personal details are never required for the goal.
candidate_video_introductionNoWhether a candidate video introduction is optional or required.
interview_conversation_speedNoConversation pace of the AI avatar. Omit/null keeps the template default pace. Options — `slower`: The avatar speaks more slowly — easier to follow for non-native speakers. | `normal`: Default speaking pace. | `faster`: The avatar speaks more quickly for a snappier conversation..
persona_avatar_end_conditionsNoWhen the avatar should end the session. Prefer referring to persona_avatar_progress: wrap up when progress is complete (turning point unlocked and a plan accepted, or steps "Done when" reached), or when the conversation has clearly broken down.

Output Schema

ParametersJSON Schema
NameRequiredDescription
embed_idNoEmbed id, present only when is_embedded=true.
embed_signing_keyNoEmbed signing key, present only when is_embedded=true.
interview_def_set_idYesId of the newly created persona definition set.
Behavior5/5

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

Annotations indicate mutation (readOnlyHint=false, destructiveHint=true), but the description adds substantial behavioral context: the dual-product nature, session flow (welcome → opening line → free-form → closing), default 'Hello' opener, and the consequence of omitting persona_avatar_progress (unstable concession behavior). No contradiction with annotations.

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

Conciseness4/5

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

The text is long but well-structured with bolded headings, bullet lists, and a front-loaded portal warning. Some redundancy exists—the free-form contrast is stated twice and the opening_line default is repeated—but given the tool's 31 parameters and complexity, the length is largely justified.

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 31-parameter tool with a rich schema and output schema, the description covers the non-obvious product split, session flow, defaults, scoring scale, and prompt-field semantics. It complements the schema rather than repeating it, making it a fully sufficient guide for correct invocation.

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

Parameters5/5

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

Schema has 100% parameter coverage, providing a baseline of 3, but the description adds significant meaning by grouping the four persona prompts into a coherent division, highlighting portal as the primary decision, and explaining how opening_line, welcome_message, and candidate_expectations fit the session flow. This goes far beyond the schema descriptions.

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?

Description opens with a specific verb and resource: 'Create a role-play persona', immediately contrasted with 'a scored Q&A interview', which distinguishes it from sibling tools like create_interview and create_interview_from_questions. It further specifies the persona role fields as the configuration, reinforcing its unique purpose.

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

Usage Guidelines5/5

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

Explicitly instructs 'FIRST DECIDE portal' and defines when to use the interview portal ('ASSESS or SCREEN candidates... anything a recruiter runs') versus the coaching portal, warning that the default is coaching, not recruiting. This gives clear when-to-use and when-not-to-use guidance with named alternatives.

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

generate_interview_reportGenerate interview reportA
DestructiveIdempotent
Inspect

[Results] Generate an interview result report (HTML/PDF/JSON) for a completed interview. The report is decision-support material for a human reviewer, not an automated hiring decision.

Generates an interview result report as a PDF (returns a signed URL), raw HTML, or structured JSON. Provide either interview_result_id for a single result or interview_result_ids for a combined multi-result report.

ParametersJSON Schema
NameRequiredDescriptionDefault
store_fileNoWhen true (pdf only), persist the file to storage and return a signed URL.
export_typeYes
interview_result_idNo
interview_result_idsNoGenerate a single combined report for multiple results.
export_features_resultNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYesThe generated report. Exactly one of the three shapes below is returned, selected by the request `export_type`: `pdf` → `{ pdf_export_url, pdf_export_valid_until }`; `html` → `{ html_export }`; `json` → `{ json_export }`.
Behavior4/5

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

Discloses that PDF can be persisted and returns a signed URL, and that translation costs 0.1 credit per result. Annotations indicate destructiveHint=true and idempotentHint=true, which align with the described behavior. Adds context beyond annotations without contradiction, though it could clarify the idempotent nature more explicitly.

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

Conciseness5/5

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

The description is succinct with two paragraphs: the first establishes purpose and context, the second details the two usage paths and export formats. Every sentence carries value, with no redundant or filler content.

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?

Covers the essential aspects: purpose, input parameters, and key options. Given the complexity (nested object with many flags), the description relies on the schema for sub-property details, which is acceptable. The existence of an output schema reduces the need to describe return values, though the description could briefly mention that reports are generated synchronously or any limitations.

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

Parameters4/5

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

The description adds meaningful context for the ID parameters and export types by explaining their relationship (single vs. combined report) and the three output formats. While the nested export_features_result object is not elaborated in the description, its sub-properties are well-documented in the schema. The description compensates for the 40% schema coverage by clarifying the core parameters.

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

Purpose5/5

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

The description clearly states the tool generates interview result reports in HTML/PDF/JSON formats for completed interviews, serving as decision-support material. It specifies the target audience (human reviewer) and distinguishes from siblings by focusing on report generation rather than creation, listing, or result details.

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?

Provides explicit instruction to provide either interview_result_id for a single result or interview_result_ids for a combined multi-result report. However, it does not explicitly state when not to use this tool or mention alternatives like get_interview_result_details for raw data, though the context of 'completed interview' implies applicable scenarios.

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

generate_interview_urlGenerate shareable interview linkA
Destructive
Inspect

[Interviews] Generate a signed public interview URL/token.

Generates a public, token-signed URL for an existing interview, profile, or result. The required id fields depend on type.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesWhich kind of signed URL to generate.
hide_menuNoPass the string 'false' to show the navigation menu; any other value hides it (default).
merchant_idNoOverride merchant id (admin / sub-merchant only).
interview_idNoInterview or position id. Required for interview-for-profile and interview-results-for-position.
interview_result_idNoInterview result id. Required for interview-result-candidate and interview-result-talent-seeker.
interview_profile_idNoCandidate profile id. Required for interview-for-profile and results-for-profile.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYesThe signed interview URL.
Behavior3/5

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

Annotations already provide destructiveHint=true and readOnlyHint=false, and the description adds that the URL is signed and public. However, it does not elaborate on side effects (e.g., token expiration, invalidation of previous URLs) or required permissions beyond what the schema indicates.

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

Conciseness4/5

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

The description is brief and front-loaded with a category tag and two sentences. It is efficient, though the '[Interviews]' bracket prefix is somewhat redundant.

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

Completeness3/5

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

For a tool with six parameters, one required enum, and an output schema, the description covers the core idea but lacks guidance on selecting the appropriate 'type' value. An agent would need to infer from the schema descriptions, which are present but not synthesized in the tool description.

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

Parameters3/5

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

Schema coverage is 100% with each parameter described. The description reinforces that required IDs depend on 'type', but adds little beyond the schema's parameter descriptions. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states it generates a signed public URL/token for an existing interview, profile, or result. The verb 'generate' and resource 'interview URL/token' are specific, and the tool's function is distinct from sibling tools like create_interview or list_interviews.

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 implies usage for generating shareable links for existing objects, but it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusionary guidance or conditions like when not to use it.

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

get_catalogue_directoryGet coaching catalogue directoryA
Read-onlyIdempotent
Inspect

[Coaching catalogue] Read one catalogue directory in full: its settings, its custom Markdown page (content_md), its resolved sub-directories, and the coaching sessions its tag filter currently matches — which is how you verify that a session's tags actually place it in this directory. Read before updating: content_md, tags_sub and tags_interview_set_filter are replaced wholesale, so you need the current value to extend it.

Reads one catalogue directory in full: its settings, its custom Markdown page (content_md), the sub-directories it nests, and the coaching sessions its tags_interview_set_filter currently matches. Read a directory before updating it — content_md, tags_sub and tags_interview_set_filter are replaced wholesale by catalogue-tag-update, so you need the current value to extend rather than overwrite it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId of the catalogue directory to read (the catalogue URL segment).
merchant_idNoOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesDirectory id — also the catalogue URL segment.
nameYesDisplay name.
statusYesLifecycle status.
tags_subYesIds of the directories nested under this one, in display order. Replaces the whole list — send the full set, not just the additions. A referenced directory only appears if it exists and is visible to the viewer.
coach_planYesCoaching-plan stage, when the directory belongs to one.
content_mdYesMarkdown for a custom directory page. When set (even as an empty string) the markdown replaces the default grid and decides the layout itself; null renders the plain grid of sub-directories and sessions. Alongside normal Markdown you can place these directives, each ALONE on its own line: `[plan-progress]` (the learner's coaching-plan progress), `[directory:<tag-id>]` (a card for one sub-directory), `[session:<interview-id>]` (a card for one session), `[sessions]` (every session in this directory), `[sessions:<term>]` (sessions matching a term), `[sessions:filter=<term>,limit=<n>]` (a filtered, capped list). A directive on a line with other text is rendered as ordinary text.
created_atYesCreation timestamp (ISO 8601).
updated_atYesLast update timestamp (ISO 8601).
visibilityYesWho can see it.
descriptionYesShort description shown on the directory card.
merchant_idYesOwning merchant id. Null for a platform-wide directory.
catalogue_urlYesPublic URL of this directory page, when the merchant has a coaching-portal domain configured.
cover_image_urlYesCover image URL.
sub_directoriesYesThe directories listed in `tags_sub`, resolved and in display order. An id in `tags_sub` that does not resolve (deleted, or not visible to you) is simply absent here — compare the two to spot a broken link.
matched_sessionsYesThe coaching/persona sessions this directory currently lists, applying the same rules as the live portal: `active`, type `coaching` or `persona`, visibility `public` or `merchant_public` for this merchant, and `tags` containing every tag of `tags_interview_set_filter`. Empty when the filter is null. Capped at 200.
is_start_directoryYesTrue when this is the directory the merchant's catalogue opens on.
mojito_language_codeYesDirectory language.
tags_interview_set_filterYesTag filter selecting which coaching sessions this directory lists: a session appears when its own `tags` contain EVERY tag here (an AND, not an OR). Only `active` coaching/persona sessions with visibility `public` or `merchant_public` are listed. Set the matching tags on the session with the create-interview / job-interview-update `tags` field.
matched_sessions_truncatedYesTrue when more sessions match than the 200 returned — narrow `tags_interview_set_filter` if you see this.
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is known. The description adds meaningful context about the response contents (settings, content_md, sub-directories, matched sessions) and the important update semantics that fields are replaced wholesale, requiring a prior read. This goes beyond the structured annotations.

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

Conciseness2/5

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

The description is notably redundant: two paragraphs convey essentially the same information, including the same warning about wholesale replacement. The first sentence is front-loaded and clear, but the duplication makes it less concise than it should 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?

The description adequately covers what the tool reads, why it should be used before updating, and how it can verify session tags. Since an output schema exists, the description need not detail return fields. It is contextually complete for a read operation, despite the redundancy.

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%, with both id and merchant_id having clear descriptions. The tool description does not add further parameter-specific details; it mentions update-related fields (content_md, tags_sub, tags_interview_set_filter) that are not parameters of this read operation. Baseline 3 applies because the schema handles parameter semantics well.

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

Purpose5/5

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

The description clearly states the verb 'Read' and the resource 'one catalogue directory in full', enumerating settings, custom Markdown page, sub-directories, and matched sessions. This specificity distinguishes it from sibling tools like list_catalogue_directories and update_catalogue_directory.

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?

The description explicitly says 'Read before updating' and explains that fields are replaced wholesale by the update tool, making the usage context clear. It also offers a verification use case. However, it does not name alternative tools or explicitly state when not to use this tool.

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

get_documentationRead a JobMojito documentation pageA
Read-onlyIdempotent
Inspect

Fetch the full content of a single JobMojito documentation page.

Accepts a URL returned by search_documentation. For developer docs the clean Markdown (.md) variant is fetched automatically. Only developer.jobmojito.com and help.jobmojito.com URLs are allowed.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe documentation page URL.
max_charsNoTruncate content to this many characters (default 20000).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

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

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds context: auto-fetches Markdown for developer docs, truncates based on max_chars, and domain restrictions. This provides value beyond annotations.

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

Conciseness5/5

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

The description is four concise sentences, each adding distinct information: purpose, URL source, special behavior for developer docs, and domain restrictions. No fluff, front-loaded with primary purpose.

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?

Given the tool's simplicity, the description covers essential context: what it does, how to get the URL, automatic Markdown handling, and domain restrictions. It does not detail error behavior or output format, but output schema exists and annotations cover safety.

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 descriptions cover both parameters (100% coverage), so baseline is 3. The description adds meaning by specifying that the URL must come from search_documentation and that only certain domains are allowed, which aids correct usage.

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

Purpose5/5

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

The description clearly states the tool fetches the full content of a single documentation page (specific verb+resource). It distinguishes from sibling tools like search_documentation by specifying that it accepts URLs from that tool and only allows certain domains.

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?

The description explicitly says to use a URL from search_documentation and restricts usage to specific domains. It implies when to use (after searching) but does not explicitly state when not to use or mention alternatives beyond search_documentation.

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

get_interview_definitionGet interview definitionA
Read-onlyIdempotent
Inspect

[Interviews] Get the definition/configuration of an interview (position), including its ordered questions array. The questions come back in the same format create_interview_from_questions accepts, so you can read an interview here, change the array, and send it to update_interview. Each question's id identifies it — keep the ids you did not mean to change.

Retrieves the interview definition for a given interview-definition id or position id. Returns the compiled calc_definition_json, the ordered questions array (in the same format job-interview-create-from-array accepts, so it round-trips into job-interview-update) plus basic metadata. Access is subject to the caller's row-level security.

ParametersJSON Schema
NameRequiredDescriptionDefault
position_idYesIdentifier of either an interview definition (single-stage) or a position definition (multi-stage). The function resolves whichever matches.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeYesCaller-supplied external code/reference.
nameYesInterview or position name.
slugYesURL slug of the public listing, when one was generated.
tagsYesFree-form tags. Also the coaching-catalogue mapping key: a catalogue directory lists this session when its `tags_interview_set_filter` is a subset of these tags. Null for multi-stage positions.
typeYesInterview type. Null for multi-stage positions.
stageYesHiring-pipeline stage. Null for multi-stage positions.
statusYesLifecycle status of the interview/position.
questionsYesThe interview questions, in the order they are asked, in the same format job-interview-create-from-array accepts — so this array can be edited and sent straight back to job-interview-update, or used to create a copy of this interview. Each `id` is the question's real identifier: send it back unchanged and the question keeps its existing record (and with it its answer rules and any rendered avatar video). The welcome, thank-you and instructional-video steps are NOT included — they are not questions in this format, and job-interview-update leaves them untouched. Null for multi-stage positions, whose questions live on the individual interview stages.
recordingYesPer-answer recording mode. Null for multi-stage positions.
coach_planYesCoaching-plan stage this session belongs to. Null for multi-stage positions and for sessions outside any plan.
created_atYes
updated_atYes
visibilityYesWho can see and access the interview/position.
descriptionYesShort description.
merchant_idYesOwning merchant id.
result_viewYesResult view level. Null for multi-stage positions.
type_creditYesCredit bucket the interview draws from. Null for multi-stage positions.
max_durationYesLive session limit in seconds. Null for multi-stage positions.
is_multistageYesTrue when the id resolved to a multi-stage position rather than a single interview.
is_voice_onlyYesConvenience flag derived from interview_template_type: true when voice-only (`interactive_elevenlabs`), false when avatar-based, null when the template type could not be resolved.
max_followupsYesMaximum number of AI follow-up questions; null uses the template default. Null for multi-stage positions.
result_scoringNoResolved result-scoring config (update field `custom_scoring`; its `max_retries` is the update field `interview_attempts`). Null means the platform defaults apply. Null for multi-stage positions.
cover_image_urlYesCover image URL.
interview_salaryYesSalary range shown for the position.
interview_locationYesLocation (create field `location`).
creation_parametersNoThe creation parameters recorded at build time (interview_type, interview_tone, interview_length, additional_context, include_rapport_question, include_closing_prompt, knowledge_base_store_id, seniority_level, hiring_for_company).
calc_definition_jsonNoThe compiled interview definition JSON (structure varies by interview type).
interview_departmentYesDepartment the position belongs to.
mojito_language_codeYesPlatform (mojito) language code.
recruiter_profile_idYesProfile id of the recruiter owning this interview/position.
speech_language_codeYesAzure speech language code. Null for multi-stage positions.
speech_language_nameYesAzure speech language display name. Null for multi-stage positions.
interview_template_idYesInterview template id. For multi-stage positions this is the first interview step's template.
candidate_expectationsYesFree-text candidate expectations. Null for multi-stage positions.
pdf_export_auto_configNoAuto-PDF-report options applied when the interview completes; null when auto-export is off. Null for multi-stage positions.
recording_full_sessionYesFull-session recording mode. Null for multi-stage positions.
required_pronunciationYesWhether a pronunciation assessment is required. Null for multi-stage positions.
interview_template_typeYesType of the linked interview template. `interactive_elevenlabs` is voice-only; the others (`interactive_heygen`, `offline_heygen`, `offline_elai`, `offline_synthesia`) are avatar-based. Null when the template could not be resolved.
knowledge_base_store_idYesLinked knowledge base store id. Null for multi-stage positions.
questions_random_subsetYesFraction of the questions actually asked (0.01-0.9); null asks all of them. Null for multi-stage positions.
interview_available_tillYesISO date/time after which the interview is no longer available to candidates. Null means always available.
interview_description_longYesLong description (create/update field `description_long`).
candidate_expectations_jsonNoStructured candidate expectations JSON — the scoring rubric. Null for multi-stage positions.
candidate_video_introductionYesWhether a candidate video introduction is hidden/optional/required. Null for multi-stage positions.
interview_conversation_speedYesConversation pace of the AI avatar (slower/normal/faster). Null keeps the template default. Null for multi-stage positions.
result_enable_edit_transcriptYesWhether the candidate may edit the transcript on the result view. Null for multi-stage positions.
Behavior5/5

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

Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses additional behaviors: returns compiled calc_definition_json, ordered questions in a round-trippable format, and that IDs should be preserved. It also notes row-level security, adding meaningful context beyond 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.

Conciseness2/5

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

The description is verbose and redundant: the 'same format' round-trip note appears in both paragraphs, and the second paragraph uses a different, inconsistent API name ('job-interview-create-from-array') not present in the sibling list. The front-loaded first paragraph helps, but the duplication and naming inconsistency harm structure.

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?

The description covers the return contents (compiled calc_definition_json, ordered questions array, basic metadata), the round-trip use case, and row-level security. Since an output schema exists, it need not detail every field, but it provides enough context for an agent to understand behavior and select the tool appropriately.

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?

The input schema already provides 100% coverage with a clear description of position_id as accepting either an interview definition or position definition. The tool description echoes this but adds no new parameter semantics beyond what the schema documents, so a baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool 'Gets the definition/configuration of an interview (position)' and distinguishes from siblings like list_interviews by specifying it returns the ordered questions array and compiled calc_definition_json. The verb 'get/retrieves' plus explicit resource makes purpose unambiguous.

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?

The description provides explicit usage context: it mentions the round-trip workflow (read here, modify array, send to update_interview) and mentions access is subject to row-level security. It does not explicitly exclude alternatives, but the sibling list makes the choice clear.

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

get_interview_result_detailsGet interview result detailsA
Read-onlyIdempotent
Inspect

[Results] Get full interview result details including transcript and scores. Scores are assistive output for a human reviewer.

Returns an interview result with its full transcript and AI assessment. Optionally attaches signed recording URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
interview_result_idYesThe interview result to fetch the transcript and details for.
get_signed_recordingsNoWhen true, includes short-lived signed recording URLs for the session, the video introduction, and each transcript answer.false

Output Schema

ParametersJSON Schema
NameRequiredDescription
endNoInterview end timestamp (training_end, ISO 8601).
scoreNoOverall interview score.
startNoInterview start timestamp (training_start, ISO 8601).
statusNoCoach/interview status (coach_status), e.g. started, completed.
durationNoTotal duration in deciseconds (duration_ds).
score_textNoHuman-readable score summary.
transcriptNoOrdered interactions (questions + answers) of the interview.
ai_analysisNoCandidate-facing AI analysis of the whole interview.
score_answerNoAggregate answer sub-score.
recording_urlNoSigned session-recording URL; present only when get_signed_recordings=true.
recruiter_risksNoDetected recruiter risk flags (jsonb).
score_sentimentNoSentiment sub-score.
score_simulationNoOverall simulated score.
recording_is_videoNoWhether the session recording is video.
score_pronunciationNoPronunciation sub-score.
ai_completion_reasonNoWhy the interview completed (ai_completed_reason).
recording_local_pathNoStorage path of the full session recording.
ai_analysis_recruiterNoRecruiter-facing AI analysis of the whole interview.
score_words_per_minuteNoSpeaking-pace (words per minute) sub-score.
video_introduction_urlNoSigned video-introduction URL; present only when get_signed_recordings=true.
user_feedback_recruiterNoRecruiter-entered feedback note.
video_introduction_local_pathNoStorage path of the candidate video introduction.
ai_analysis_recruiter_why_hireNoReasons to hire (list/text).
ai_interview_coverage_percentageNoPercentage of the intended interview the AI judged to be covered.
ai_analysis_recruiter_why_not_hireNoReasons not to hire (list/text).
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint, describing the safety profile. The description adds context: scores are 'assistive output for a human reviewer' and recording URLs are optional. This goes beyond annotations without contradiction.

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

Conciseness4/5

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

The description is concise with four sentences, front-loading the main purpose. The use of '[Results]' as a tag adds categorization. However, the structure is slightly fragmented; grouping optional details more tightly could improve readability.

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?

Given the tool's simplicity, presence of an output schema, and comprehensive annotations, the description covers key aspects: transcript, scores, AI assessment, and optional recordings. No further details (e.g., prerequisites, permissions) are necessary for this read-only tool.

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

Parameters3/5

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

Both parameters (interview_result_id, get_signed_recordings) have clear descriptions in the input schema (100% coverage). The tool description mentions 'Optionally attaches signed recording URLs' but does not add new meaning beyond the schema. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Get full interview result details including transcript and scores' and mentions optionally attaching recording URLs. This distinguishes it from sibling tools like list_interview_results which returns a list without details. The verb 'get' and resource 'interview result details' are specific and unambiguous.

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 implies usage when full details are needed (e.g., 'Get full interview result details') but does not explicitly state when to use this over alternatives like list_interview_results. No exclusions or 'when not to use' guidance is provided.

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

get_merchant_analyticsGet merchant analyticsA
Read-onlyIdempotent
Inspect

[Results] Get the merchant's daily event analytics.

Daily event-count time-series for a merchant over a date range (the admin-portal analytics events graph), scoped to your token's merchant (or a merchant_id override). Optionally drilled to a single interview. Capped at 1000 records per page. Note: only day/event combinations with a non-zero count are returned — any day/event pair absent from the response should be treated as a count of 0 by the caller.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (1–1000).
offsetNoNumber of records to skip from the start of the result set.
date_toYesEnd of the date range (inclusive), YYYY-MM-DD.
date_fromYesStart of the date range (inclusive), YYYY-MM-DD.
merchant_idNoOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
interview_idNoOptional interview (interview_def_set) or position (position_def_set) id to drill the event counts down. The type is detected automatically: a position aggregates the daily counts across every interview that makes up the position; an interview filters to that single definition.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesDaily event counts for the requested range, ordered by day ascending. Only day/event combinations with a non-zero count are returned; missing combinations should be treated as 0 by the caller.
paginationYes
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint: false), the description adds critical behavioral details: pagination cap at 1000 records per page, only non-zero counts returned (implicit zero padding), and optional drilling to interview. This provides valuable context for an AI agent.

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

Conciseness4/5

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

The description is clear and front-loaded with purpose, but it is a single paragraph that could be slightly more structured. It is concise, but the note about zero padding could be separated for clarity.

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?

Given the tool's complexity (6 parameters, optional drilling, pagination) and the presence of an output schema, the description adequately covers usage scope, pagination behavior, and zero-padding note. It omits explicit read-only mention, but annotations cover that.

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

Parameters3/5

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

The input schema covers all six parameters with descriptions, and the description adds minimal extra meaning beyond schema. It mentions scoping and drilling, but these are already in the schema descriptions. Baseline 3 is appropriate given 100% schema coverage.

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

Purpose5/5

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

The description clearly states the tool retrieves daily event analytics for a merchant using specific verbs and resources ('Get the merchant's daily event analytics'). It distinguishes itself from sibling tools like get_merchant_credit_usage and get_merchant_status by focusing on event-count time-series, making the purpose unambiguous.

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?

The description explains when to use the tool, including scoping to token merchant or merchant_id override and optional drilling to an interview. However, it does not explicitly state when not to use it or compare with alternatives, which would raise the score to 5.

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

get_merchant_credit_usageGet merchant credit usageA
Read-onlyIdempotent
Inspect

[Results] Get the merchant's credit usage.

Per-event credit-usage ledger for a merchant: every billable analytics event (interview, pre-screening, public avatar, simulation, …) that consumed credits, ordered most recent first. Scoped to your token's merchant, or a merchant_id override for admins / sub-merchant operators. The credits consumed by each event are in stats.credit_amount. Capped at 1000 records per page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (1–1000).
offsetNoNumber of records to skip from the start of the result set.
merchant_idNoOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
interview_idNoOptional interview (interview_def_set) or position (position_def_set) id to drill the credit-usage ledger down to a single interview or position. The type is detected automatically: for a position the response combines pre-screening and interview-result credits across the whole position; for an interview it returns that interview's credit events (including simulations and report translations).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCredit-consuming analytics events for the merchant, most recent first. Each row is one billable event; the credits it consumed are in stats.credit_amount.
paginationYes
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds that results are ordered most recent first and capped at 1000 records per page, which are useful behavioral details. No contradiction with annotations.

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

Conciseness5/5

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

The description is concise (about 5 lines), front-loaded with the main purpose, and every sentence adds value. No redundancy or fluff.

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?

Given the annotations (readOnlyHint, idempotentHint, etc.) and the presence of an output schema, the description provides sufficient context: it explains the return format (ledger with credit_amount), ordering, pagination limit, and parameter behavior. It is complete for a read-only tool.

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

Parameters5/5

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

The description adds significant meaning beyond the input schema: it explains the merchant_id scope permission, and the interview_id parameter's dual behavior (detecting interview vs. position and combining credits accordingly). Schema coverage is 100%, but the description enriches understanding.

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

Purpose5/5

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

The description clearly states the tool returns a per-event credit-usage ledger for a merchant, listing billable analytics events that consumed credits. It distinguishes from siblings like get_merchant_analytics and get_merchant_status by focusing on detailed credit consumption events rather than aggregated analytics or status.

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 scoping (token's merchant or merchant_id override for admins) and drilling down via interview_id or position_id. However, it does not explicitly compare to sibling tools or state when to prefer this tool over alternatives, leaving some inference required.

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

get_merchant_statusGet merchant statusA
Read-onlyIdempotent
Inspect

[Admin] Get a merchant status snapshot: credit balances, subscription, pending-work counts, candidate/result totals, and invitation headroom.

Status snapshot for a merchant: interview-credit balances, subscription type/status, pending-work counts (undecided / ongoing / uncredited interviews), candidate & result totals with 14-day history, and invitation headroom. Scoped to your token's merchant (or a merchant_id override for admins / sub-merchant operators). Also echoes the caller's profile_id and default_merchant_id from the token, plus the effective merchant_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
merchant_idNoOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.

Output Schema

ParametersJSON Schema
NameRequiredDescription
candidatesYesTotal candidates (non-archived profile_interview rows) for the merchant.
profile_idYesThe calling user's profile id (auth user id), taken from the JWT.
merchant_idYesThe merchant this status is scoped to — the default_merchant_id unless an admin / sub-merchant operator overrode it via the merchant_id query param.
invitations_sentYesInterview invitations sent during the current subscription period.
interview_resultsYesTotal non-archived interview results for the merchant.
invitations_limitYesMaximum invitations allowed this period (4x available credits). Null for unlimited (Special) plans.
subscription_typeYesSubscription plan name (e.g. Free, Starter, Growth, Special).
candidates_historyYesDaily new-candidate counts for the last 14 days, most recent first.
definitions_activeYesCount of active interview + position definitions.
interviews_ongoingYesInterviews currently in progress (coach_status = started).
default_merchant_idYesThe caller's home merchant id pinned in the JWT (app_metadata.merchant_id). Null if the token carries no merchant.
subscription_statusYesSubscription status (e.g. active, past_due, canceled). Null when no subscription.
interviews_undecidedYesCompleted interviews awaiting a recruiter decision.
invitations_availableYesRemaining invitations this period. Null for unlimited (Special) plans.
credits_interview_extraYesExtra (top-up) interview credits available on top of the monthly allowance.
credits_interview_singleYesSingle-position interview credits available.
interview_result_historyYesDaily new-interview-result counts for the last 14 days, most recent first.
credits_interview_monthlyYesRemaining monthly interview credits.
interviews_without_creditsYesCompleted interviews that have not yet consumed a credit.
credits_interview_monthly_limitYesMonthly interview-credit allowance for the current plan.
Behavior5/5

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

Annotations include readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. Description adds that the tool echoes caller's profile_id and default_merchant_id, and clarifies authorization boundaries for the merchant_id parameter. No contradictions with annotations.

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

Conciseness5/5

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

The description is two sentences: a high-level summary followed by a detailed list of components. It is front-loaded with the purpose and succinctly expands without unnecessary words.

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?

Given the presence of an output schema, the description need not cover return values. It fully describes all components of the snapshot and the caller info echo, making it complete for a read-only, idempotent tool.

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% with description for the only parameter (merchant_id). The tool description adds valuable context about who can use the override (admins/sub-merchant operators), improving clarity beyond the schema.

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

Purpose5/5

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

The description clearly states it retrieves a 'merchant status snapshot' and lists specific components like credit balances, subscription, pending-work counts, etc. It distinguishes from sibling tools such as 'get_merchant_analytics' and 'get_merchant_credit_usage' by detailing the unique fields included.

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?

The description explains scope: default to token's merchant, with optional merchant_id for admins/sub-merchant operators. While it doesn't explicitly name alternatives, it provides clear context on when to use the optional parameter and who can use it.

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

jobmojito_configurationChoose a JobMojito merchantA
Read-onlyIdempotent
Inspect

Show the interactive JobMojito merchant picker (UI).

ALWAYS call this when the user wants to choose, switch, or set a merchant, or when a tool needs a merchant_id and none is selected. It renders a searchable picker with clickable options. Do NOT list merchants as text or ask the user to type a name — render this picker instead. After calling it, STOP and wait for the user's selection; then pass merchant_id=<chosen id> on every JobMojito call (omit it for the user's own account).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior5/5

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

Annotations already indicate readOnlyHint, idempotentHint, destructiveHint. The description adds useful behavioral context: it renders a UI, is interactive, and instructs the agent to pass merchant_id on subsequent calls. No contradictions.

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

Conciseness5/5

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

The description is concise and front-loaded with the main purpose. Every sentence adds value, and it efficiently conveys usage instructions.

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 simple tool with no parameters and no output schema, the description is complete. It explains the action, when to use it, and the expected behavior, including integration with other tools.

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?

There are no parameters (empty input schema), so baseline is 4. The description correctly handles this by not needing to add parameter info.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Show the interactive JobMojito merchant picker (UI).' It uses a specific verb and resource, and the context differentiates it from sibling tools like list_my_merchants.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'ALWAYS call this when the user wants to choose, switch, or set a merchant...' and includes what not to do ('Do NOT list merchants as text...'). It also instructs the agent to stop and wait for the user's selection.

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

list_avatarsList avatars and voice templatesA
Read-onlyIdempotent
Inspect

[Admin] List available avatar/voice templates. Each item's type decides the interview modality: interactive_elevenlabs = voice-only (no video avatar); interactive_heygen = realtime interactive avatar (video); offline_heygen = pre-recorded, non-interactive avatar. An item's id is the interview_template_id you pass to the create-interview tools, so pick the template whose type matches the experience you want. Note: offline_elai and offline_synthesia are legacy integrations that may still appear here but cannot be used to create new interviews.

Paginated list of a merchant's avatar templates (the admin-portal avatars list), scoped to your token's merchant (or a merchant_id override). Capped at 1000 records per page.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by avatar template type. Omit for all.
limitNoMaximum number of records to return (1–1000).
offsetNoNumber of records to skip from the start of the result set.
statusNoFilter by status. Omit for all except archived (see include_archived).
filter_textNoCase-insensitive search on template name or voice language name.
merchant_idNoOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
include_publicNoAlso include public templates shared across merchants, in addition to this merchant's own.false
include_archivedNoInclude archived templates (excluded by default).false
mojito_language_codeNoFilter by platform language code.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe merchant's avatar templates for this page, newest-updated first.
paginationYes
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds behavior details: pagination with 1000 cap, merchant scoping, and the inclusion of legacy types. This is valuable context beyond annotations.

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

Conciseness4/5

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

The description is two concise paragraphs, front-loading the key purpose and usage guidance. It avoids unnecessary repetition but could be slightly more structured (e.g., separating param details).

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?

Given the presence of an output schema, the description adequately covers purpose, usage, behavioral nuances, and parameter intent. It mentions pagination limits and legacy types, making it complete for a list tool.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all 9 parameters. The description does not add per-parameter details but provides overall context (e.g., meaning of 'type' values). Since schema covers parameters, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool lists avatar/voice templates, explains how the 'type' field maps to interview modalities, and notes that the 'id' is used as interview_template_id in creation tools. This distinguishes it from sibling list tools and adds context beyond a simple 'list avatars'.

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?

Provides guidance on selecting templates by type for the desired experience, warns about legacy types that cannot be used, and mentions merchant scope and pagination. However, it does not explicitly compare to other list tools or state when to avoid this tool.

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

list_candidatesList candidatesA
Read-onlyIdempotent
Inspect

[Candidates] List the merchant's candidates.

Paginated list of a merchant's candidates (the admin-portal candidates list), scoped to your token's merchant (or a merchant_id override). Capped at 1000 records per page.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoFilter candidates by recent activity. Omit (or empty) to include all.
limitNoMaximum number of records to return (1–1000).
offsetNoNumber of records to skip from the start of the result set.
sourceNoFilter by how the candidate entered: invited or self-registered. Omit for both.
order_byNoSort order of the result set.created_at_newest
filter_textNoCase-insensitive search on candidate name or email.
merchant_idNoOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
filter_emojiNoFilter by the candidate emoji marker.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe merchant's candidates for this page.
paginationYes
Behavior4/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds useful behavioral details: pagination with a 1000-record cap, scoping to merchant, and optional merchant_id override. No contradictions with annotations.

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

Conciseness4/5

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

The description is concise with three short sentences, no redundant information. It is front-loaded with the core purpose. Could be slightly more structured, but no wasted words.

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?

Given the presence of an output schema, the description adequately covers the tool's behavior (pagination, scoping, cap). It could mention filtering options, but the schema handles that. Completeness is sufficient for an AI agent.

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 descriptions cover all 8 parameters (100% coverage), so the description's contribution is minimal. It mentions pagination cap but does not explain individual parameters beyond what the schema provides. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool lists the merchant's candidates, with pagination and scoping to the token's merchant or an override. The verb 'list' and resource 'candidates' are explicit, and there is no sibling tool with a similar purpose to cause confusion.

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?

The description provides clear context on when to use the tool (listing candidates) and constraints like scoping and pagination limits. However, it does not explicitly state alternatives or when not to use it, though no direct alternatives exist among siblings.

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

list_catalogue_directoriesList coaching catalogue directoriesA
Read-onlyIdempotent
Inspect

[Coaching catalogue] List the coaching-catalogue directories you can see (your merchant's own plus the platform-wide public ones). Start here to find a directory id, to pick a parent for a new one, or to walk the tree with parent_tag; is_start_directory marks the page the catalogue opens on. The custom Markdown page is not included — read it with get_catalogue_directory.

Paginated list of the coaching-catalogue directories visible to you: your merchant's own, plus the platform-wide public ones unless you set include_public=false. Use it to find a directory id before updating one, to pick a parent_tag, or to walk the tree with parent_tag. The custom Markdown page is not included — fetch it per directory with catalogue-tag-get.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (1–1000).
offsetNoNumber of records to skip from the start of the result set.
statusNoFilter by lifecycle status. Omit to include every status you can see (deleted directories are never returned).
parent_tagNoReturn only the directories nested directly under this one (its `tags_sub`), in the parent's own order. Combine with the other filters to narrow further.
visibilityNoFilter by visibility.
filter_textNoCase-insensitive search on the directory id, name and description.
merchant_idNoOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
include_publicNoInclude the platform-wide `public` directories shared across merchants.true
mojito_language_codeNoFilter by the directory language (a platform-languages.json code, e.g. `en`).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe catalogue directories for this page, ordered by id.
paginationYes
Behavior4/5

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

Given the annotations already declare readOnlyHint and idempotentHint, the description adds useful behavioral context beyond the annotations: it states the list is paginated, includes public directories unless include_public=false, and notes that the custom Markdown page is excluded. It also describes how 'is_start_directory' marks the catalogue's default page, which is not in 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.

Conciseness2/5

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

The description contains two paragraphs that largely repeat the same information with slightly different wording. The first paragraph is a concise summary, while the second re-states the same points (list scope, use cases, custom Markdown exclusion). This redundancy wastes tokens and violates the 'every sentence should earn its place' principle.

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?

The tool has 9 parameters and some complexity, but the description orients the user well: it explains the result scope, typical use cases, the exclusion of the custom Markdown page, and pagination. The output schema exists, so return values are covered there. Despite not detailing every filter, the schema covers them, and the description provides enough context for effective selection and invocation.

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

Parameters4/5

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

The schema has 100% parameter description coverage, so the baseline is 3. The description adds extra meaning for key parameters: it explains that include_public controls whether public directories are included ('unless you set include_public=false') and elaborates on parent_tag usage ('walk the tree with parent_tag'). This goes beyond the schema's basic field descriptions.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'List the coaching-catalogue directories you can see' and distinguishes it from the sibling tool get_catalogue_directory by noting the custom Markdown page is not included and should be read with get_catalogue_directory. It also specifies the scope (merchant's own plus public) and typical use cases.

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

Usage Guidelines5/5

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

The description explicitly tells when to use this tool ('Start here to find a directory id, to pick a parent for a new one, or to walk the tree with parent_tag') and provides an alternative for a specific case: 'The custom Markdown page is not included — read it with get_catalogue_directory.' This gives clear context and exclusions.

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

list_interview_resultsList interview resultsA
Read-onlyIdempotent
Inspect

[Results] List the merchant's interview results.

Paginated list of a merchant's interview results (the admin-portal results list), scoped to your token's merchant (or a merchant_id override). Capped at 1000 records per page.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNoFilter by decision/completion state. Omit (or empty) to include all.
stepNoFilter by pipeline step (pre-screening vs interview). Omit for both.
typeNoProduct type of results to list.interview
limitNoMaximum number of records to return (1–1000).
risksNoComma-separated list of recruiter-risk keys to filter by (matches any).
offsetNoNumber of records to skip from the start of the result set.
order_byNoSort order of the result set.created_at_newest
filter_textNoCase-insensitive search on candidate name or email.
merchant_idNoOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
filter_emojiNoFilter by the candidate emoji marker.
interview_idNoFilter to a single interview definition id.
profile_interview_idNoFilter to a single candidate (profile_interview) id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe merchant's interview results for this page.
paginationYes
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds valuable behavioral context: pagination cap of 1000 records, scoping rules, and that it's the admin-portal results list.

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

Conciseness5/5

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

The description is concise, front-loaded with purpose, and uses two short paragraphs. Every sentence adds value without unnecessary elaboration.

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?

Given the complexity (12 parameters, output schema exists), the description covers the purpose, pagination, scoping, and cap. It could mention the default type or sort order, but the output schema compensates. Overall adequate.

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 baseline is 3. The tool-level description does not add significant per-parameter meaning beyond what the schema provides. It mentions the 1000 cap, which is reflected in the limit 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?

The description clearly states the action (list), resource (interview results), and scope (merchant's, admin-portal). It differentiates from siblings like get_interview_result_details and list_candidates by focusing on a paginated list of results.

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?

The description implicitly indicates when to use this tool (to list results, paginated, scoped) but does not explicitly state when not to use it or suggest alternatives. The context of scoping is clear.

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

list_interviewsList interviewsA
Read-onlyIdempotent
Inspect

[Interviews] List the merchant's interview definitions.

Paginated list of a merchant's interview definitions (the admin-portal interview list), scoped to your token's merchant (or a merchant_id override). Capped at 1000 records per page.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoProduct type of interviews to list.interview
limitNoMaximum number of records to return (1–1000).
offsetNoNumber of records to skip from the start of the result set.
statusNoFilter by lifecycle status. Omit to include all statuses.
show_demoNoInclude demo/sample interviews.false
filter_textNoCase-insensitive search on the interview name.
merchant_idNoOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
show_publicNoInclude interviews shared publicly across merchants (coaching/avatars).false
filter_emojiNoFilter by the interview emoji marker.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe merchant's interview definitions for this page, newest-updated first.
paginationYes
Behavior4/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds behavioral details: paginated list, capped at 1000 records, scoped to merchant, and optional merchant_id override for admins. No contradictions.

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

Conciseness5/5

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

The description is concise with two sentences plus a header. It front-loads the action and every sentence adds value without redundancy.

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?

Given the tool's complexity (9 params, many siblings, output schema exists), the description covers the main purpose, scoping, pagination cap, and merchant override. Output details are handled by the existing output schema.

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?

With 100% schema description coverage, baseline is 3. The description adds value by explaining merchant_id scoping and the 1000 cap, which relate to parameters not fully covered in schema descriptions.

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

Purpose5/5

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

The description clearly states 'List the merchant's interview definitions' and 'Paginated list of a merchant's interview definitions'. It identifies the verb (list) and resource (interview definitions), distinguishing it from sibling tools like get_interview_definition (singular) and create_interview.

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 mentions scoping to token's merchant or merchant_id override and a cap of 1000 records per page, providing usage context. However, it does not explicitly state when to use this tool versus alternatives like get_interview_definition or create_interview.

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

list_languagesList supported languagesA
Read-onlyIdempotent
Inspect

[Admin] List supported platform (mojito) languages: the code to pass as mojito_language_code, English/local names, SVG flag URL, per-interface enablement flags, and Azure speech accents.

Returns all supported platform (mojito) languages: the mojito language code, English and local names, and an SVG flag image URL. Use the code as mojito_language_code when creating interviews or personas.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
languagesYesSupported platform languages, sorted by English name.
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds admin restriction and specifies exact return fields (code, names, flag URL, etc.), adding value beyond annotations.

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

Conciseness3/5

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

Two paragraphs restate similar information, with redundancy. Could be condensed into one sentence with bullet points for fields. Not excessively long but not optimally concise.

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?

Given zero parameters and presence of output schema, the description still adds valuable context (admin requirement, usage of code) and lists return fields. Complete for its purpose.

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?

No parameters, so baseline is 4. Description explains returned fields, though it is somewhat repetitive. Still provides clarity on what is returned.

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?

Clearly states it lists supported platform languages, including specific fields like code, names, and flag URL. Distinct from siblings which are about interviews and personas.

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?

Includes [Admin] prefix indicating intended audience, and mentions using the code in interviews/personas. Lacks explicit when-to-use vs alternatives, but context is sufficient for a simple list tool.

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

list_my_merchantsList merchants you can act asA
Read-onlyIdempotent
Inspect

FALLBACK merchant list for clients WITHOUT UI support.

Do NOT use this to choose or switch merchants when a UI is available — call jobmojito_configuration instead (it renders an interactive picker), and do not hand-format a merchant list as text. Use this tool only when the client cannot render MCP App UI. Returns the user's own account plus any sub-merchants; after a pick, pass merchant_id=<chosen id> on subsequent calls (OMIT for the own account).

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoOptional case-insensitive filter on sub-merchant name.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

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

Annotations already declare readOnlyHint true and destructiveHint false. The description adds behavioral context: it is a fallback, returns own account plus sub-merchants, and advises how to use the result. No contradictions, and the extra context is helpful, though it doesn't detail rate limits or authentication.

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

Conciseness5/5

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

The description is concise, using three sentences that front-load the key purpose ('FALLBACK merchant list') and then efficiently cover usage, return content, and follow-up actions. No unnecessary verbiage.

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?

Given the tool's simplicity (one optional parameter, output schema present), the description is complete: it explains purpose, when to use, what it returns, and how to use the output. The presence of an output schema relieves the need for return value details.

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

Parameters3/5

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

Schema coverage is 100% with one parameter described. The description does not add new semantic information beyond the schema's parameter description; it merely restates 'sub-merchant name' implicitly. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: a fallback merchant list for clients without UI support. It explicitly distinguishes from the interactive picker (jobmojito_configuration) and implies differentiation from list_sub_merchants by indicating it returns both own account and sub-merchants.

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

Usage Guidelines5/5

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

Explicit guidance on when to use (only when client cannot render UI), when not to use (when UI is available, use jobmojito_configuration instead), and what not to do (do not hand-format as text). Also provides usage instructions for the returned merchant IDs.

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

list_sub_merchantsList sub-merchantsA
Read-onlyIdempotent
Inspect

[Admin] List sub-merchants under the merchant account.

Paginated list of the sub-merchants the caller administers (the admin-portal sub-merchants list). Visibility is enforced by row-level security. Capped at 1000 records per page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (1–1000).
offsetNoNumber of records to skip from the start of the result set.
order_byNoSort order of the result set.created_at_newest
filter_textNoCase-insensitive search on the sub-merchant name.
merchant_idNoOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe sub-merchants the caller administers for this page.
paginationYes
Behavior4/5

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

Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable behavioral details: pagination capped at 1000 records, row-level security, and admin scope, which go beyond annotations.

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

Conciseness5/5

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

Two concise sentences front-load the admin context and purpose, followed by pagination and security details. No unnecessary words.

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

Completeness4/5

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

With full schema coverage and annotations, the description covers core purpose, pagination cap, and security. Output schema exists, so return values are not needed. Lacks mention of sorting/filtering but schema handles that.

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

Parameters3/5

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

Schema coverage is 100% with detailed descriptions for all 5 parameters. The description adds minimal new meaning, only reiterating the pagination cap already present in the schema. Baseline of 3 applies.

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

Purpose5/5

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

The description explicitly states 'List sub-merchants under the merchant account' with a clear verb (list) and resource (sub-merchants). No sibling tool has a similar name, so differentiation is inherent.

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?

The description specifies admin context and row-level security, giving clear usage context. However, it does not explicitly exclude alternative tools or provide when-not guidance, though naming makes it unique.

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

register_users_for_interviewRegister candidates for interviewA
Destructive
Inspect

[Interviews] Register users/candidates for a specific interview and return their personal interview links.

Registers (or updates) one or more candidate profiles for an interview and returns a one-time interview URL for each. Accepts a Supabase user JWT (merchant/admin) or the service key (merchant_id then required).

ParametersJSON Schema
NameRequiredDescriptionDefault
usersYesCandidates to register for the interview. Each gets a one-time interview URL.
is_testNoWhen true (or the string "true"), mints a test token that can take a draft/unpublished interview and flags the result as a test. For a DRAFT interview it also recompiles the definition (interview_recalc_definition) first, so the test session includes the current questions/welcome. This makes it a single-call "trigger interview test".
hide_menuNoWhen true (or the string "true"), the interview UI hides its menu (view_hm).
send_emailNoWhether to send an invitation email to each registered candidate.
hide_iframeNoWhen true (or the string "true"), the interview UI hides its iframe chrome (view_hi).
merchant_idNoMerchant id. Required when authenticating with the service key; for user tokens it is optional and only honored for admin / sub-merchant accounts.
interview_idYesInterview definition (interview_def_set) or position (position_def_set) id to register users for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYesThe input users, each annotated with its registration result and (on success) interview URL.
Behavior3/5

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

The description adds value beyond annotations by specifying authentication requirements and the return of one-time URLs, but does not detail side effects like email sending or error conditions. Annotations already indicate destructiveHint=true, so no contradiction.

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

Conciseness5/5

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

The description is concise, front-loaded with the core purpose, and every sentence adds value without fluff.

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?

The description covers core functionality, authentication, and return value, and the schema covers all parameters. It is complete enough for an AI agent to understand usage, though it could mention edge cases like duplicate registration.

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 baseline is 3. The description summarizes the purpose but does not add significant meaning beyond the schema's per-parameter descriptions.

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

Purpose5/5

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

The description clearly states the verb 'register' and the resource 'users/candidates for a specific interview', and specifies the outcome 'return their personal interview links'. It distinguishes from sibling tools like 'create_interview' or 'generate_interview_url'.

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 provides context on authentication (JWT vs service key) and mentions it can update existing profiles, but does not explicitly state when to use this tool vs alternatives or when not to use it.

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

request_another_interview_attemptRe-open interview for another attemptA
Destructive
Inspect

[Results] Re-open a submitted interview result so the candidate can retry.

Marks a submitted (active + completed) interview result as unsuccessful so the candidate can retake it. Resets the result to draft and clears the recruiter decision.

ParametersJSON Schema
NameRequiredDescriptionDefault
interview_result_idYesThe interview result to reopen for another attempt.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

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

Annotations indicate destructiveHint=true, and the description elaborates on the destructive actions: marking unsuccessful, resetting to draft, and clearing the recruiter decision. This adds context beyond annotations about the specific state changes.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, followed by detailed effects. No redundant information. Every sentence adds value.

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?

The description explains the preconditions (submitted+completed) and the effects. With an output schema present, return values are not needed. It is sufficiently complete for a mutation tool with clear annotations.

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

Parameters3/5

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

Schema coverage is 100%, and the single parameter 'interview_result_id' is described in the schema. The description does not add extra meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool reopens a submitted interview result for another attempt. It specifies the action, resource, and effects (marks unsuccessful, resets to draft, clears decision), distinguishing it from siblings like set_interview_state.

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?

The description provides context on when to use the tool: for submitted (active+completed) interview results. It implies preconditions but does not explicitly mention when not to use or alternatives. This is clear enough for most agents.

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

search_documentationSearch JobMojito documentationA
Read-onlyIdempotent
Inspect

Search ALL JobMojito documentation. This is the single entry point.

One call searches both documentation sources in parallel and returns a merged, source-labeled list — you do not need to choose a source or call a separate tool: • "developer" — developer.jobmojito.com: API reference, request/response schemas, tables, webhooks, code examples, integration guides. • "help" — help.jobmojito.com: recruiter, candidate, and administrator product guides (how the platform behaves for end users).

Use this whenever you need to understand how a feature, endpoint, field, or workflow works — including before calling an action tool you're unsure about. Then call get_documentation(url) with a returned URL to read the full page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results per source (1-25).
queryYesNatural-language search query or keywords.
sourceNo"all" (default), "developer", or "help" to restrict the search.all

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

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

Annotations already provide readOnlyHint=true and idempotentHint=true. The description goes beyond by detailing the parallel search across two sources, merging with source labels, and serving as the single entry point. No contradiction with annotations.

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

Conciseness5/5

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

The description is concise with clear structure: purpose, behavior, usage guidance, and a note about subsequent use of `get_documentation`. Bullet points effectively list the two documentation sources. Every sentence contributes meaning without redundancy.

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?

Given the tool's complexity (search with merging) and the presence of an output schema (confirmed by context), the description fully explains the return format (merged, source-labeled list) and the role of the tool alongside `get_documentation`. It is complete for effective use.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents the parameters. The description adds value by explaining the content of the 'developer' source (API reference, schemas, etc.) and 'help' source (product guides), enriching understanding of the `source` parameter beyond its enum values.

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

Purpose5/5

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

The description clearly states the tool searches all JobMojito documentation, merging results from two sources (developer and help) with labels. It distinguishes itself from the sibling tool `get_documentation` by positioning itself as the entry point and advising subsequent use of `get_documentation` for full pages.

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

Usage Guidelines5/5

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

Explicitly tells when to use the tool: 'Use this whenever you need to understand how a feature, endpoint, field, or workflow works — including before calling an action tool you're unsure about.' It also clarifies that the user does not need to choose a source or call a separate tool because it handles both sources in parallel.

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

set_interview_stateChange interview stateA
DestructiveIdempotent
Inspect

[Interviews] Change the state of an interview/position (e.g. open, closed).

Changes the lifecycle status of an interview or position (draft, active, archived, preparing, completed, deleted) and/or manages its embed key. Provide at least one of status or is_embedded.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoNew lifecycle status to apply.
is_embeddedNoControls iframe embedding of the interview on an external page. When true, ensures an embed key exists (returns embed_id/embed_signing_key, used to authenticate/sign the iframe embed). When false, removes the embed keys (disables embedding).
position_idYesInterview definition id or position id whose state should change.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYesReturns `{ embed_id, embed_signing_key }` when an embed key was created/returned (is_embedded=true), otherwise `{ success: true }`.
Behavior4/5

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

The description adds behavioral context beyond annotations: it explains that the embed key is managed via is_embedded, and lists all possible statuses including 'deleted' (destructive). However, it does not mention irreversible effects of deletion or behavior when both parameters are provided.

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

Conciseness5/5

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

The description is two sentences: the first front-loads the core purpose, the second adds detail. No unnecessary words, efficient structure.

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?

Given the presence of annotations, full schema coverage, and an output schema, the description covers the main behaviors and parameter constraints. It lacks information about side effects (e.g., reversible? error conditions?) but is largely complete for the tool's complexity.

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?

With 100% schema coverage, the baseline is 3. The description adds value by clarifying the constraint 'Provide at least one of status or is_embedded' and explaining the purpose of is_embedded (managing embed key), which supplements the schema.

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

Purpose4/5

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

The description clearly states the tool changes the lifecycle status of an interview/position and manages its embed key. The examples 'draft, active, archived' give specificity. However, the parenthetical '(e.g. open, closed)' is slightly inconsistent with the listed enum values, causing minor confusion.

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 provides a parameter usage guideline ('Provide at least one of status or is_embedded') but does not explicitly tell when to use this tool versus siblings like create_interview or list_interviews. The context is implied but not stated.

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

update_catalogue_directoryUpdate coaching catalogue directoryA
DestructiveIdempotent
Inspect

[Coaching catalogue] Update a coaching catalogue directory: rename it, change which sessions it lists (tags_interview_set_filter), re-order its sub-directories (tags_sub), or author its custom Markdown page (content_md). Only the fields you send are changed. Coaching-platform feature.

Updates a directory (page) of the coaching portal catalogue. Only the fields present in the request body are written — everything else keeps its current value, and sending null clears a nullable field. Use it to rename a directory, re-point which sessions it lists (tags_interview_set_filter), re-order or replace its sub-directories (tags_sub), or author its custom Markdown page (content_md).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId of the directory to update (the catalogue URL segment). The id itself cannot be changed — create a new directory instead.
nameNoDisplay name of the directory.
statusNoLifecycle status of the catalogue directory. Options — `draft`: Not published — the directory exists but is not served to visitors. | `active`: Published and served in the catalogue. | `archived`: Retired — kept for reference but no longer served..
tags_subNoIds of the directories nested under this one, in display order. Replaces the whole list — send the full set, not just the additions. A referenced directory only appears if it exists and is visible to the viewer.
coach_planNoCoaching-plan stage this item belongs to, used by the coaching-plan progress view. Omit/null to leave it out of any plan. Options — `demo`: Demo session. | `screening`: Screening-interview practice. | `2nd`: Second-interview practice. | `3rd`: Third-interview practice. | `closing`: Closing / salary-negotiation practice. | `job-specific`: Job-specific coaching. | `other`: Anything that does not fit the other buckets..
content_mdNoMarkdown for the custom directory page. Sending null removes the custom page and restores the default grid; sending a string replaces the whole page. Directives, each ALONE on its own line: `[plan-progress]`, `[directory:<tag-id>]`, `[session:<interview-id>]`, `[sessions]`, `[sessions:<term>]`, `[sessions:filter=<term>,limit=<n>]`.
visibilityNoWho can see the catalogue directory. Options — `public`: Shared across every merchant. Platform admins only — a merchant caller is rejected by row-level security. | `merchant_public`: Listed in the merchant's own catalogue — the normal choice. | `merchant_invite`: Owned by the merchant but not listed; reachable only for invited users. | `merchant_unlisted`: Owned by the merchant but not listed; reachable only via a direct link..
descriptionNoShort description shown on the directory card.
cover_image_urlNoCover image URL shown on the directory card. null clears it.
mojito_language_codeNoLanguage of the directory (one of the platform-languages.json codes). The catalogue groups directories by language.
tags_interview_set_filterNoTag filter selecting which coaching sessions this directory lists: a session appears when its own `tags` contain EVERY tag here (an AND, not an OR). Only `active` coaching/persona sessions with visibility `public` or `merchant_public` are listed. Set the matching tags on the session with the create-interview / job-interview-update `tags` field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesId of the updated directory.
catalogue_urlYesPublic URL of the directory page, when the merchant has a coaching-portal domain configured. Null otherwise.
updated_fieldsYesNames of the fields that were written.
Behavior5/5

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

Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses key side-effects: partial updates keep unspecified values, null clears a nullable field, tags_sub replaces the whole list, and content_md null restores the default grid. This gives the agent a clear mental model of how the mutation behaves.

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 description is split into two redundant paragraphs, with the first summarizing and the second expanding slightly. While both are concise, the duplication of the core 'update a directory' concept and parameter list is unnecessary and could be tightened into a single paragraph without losing information.

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

Completeness4/5

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

For an 11-parameter mutation tool, the combined schema coverage (100%), annotations, output schema, and description provide sufficient context to understand the tool's behavior and parameters. The description highlights the most nuanced update paths, and the schema covers the rest, so nothing critical is missing.

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 schema already documents all 11 parameters in detail. The description adds value by referencing the most complex parameters (tags_interview_set_filter, tags_sub, content_md) and their high-level effects, but does not add details beyond what the schema provides for the remaining parameters.

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

Purpose5/5

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

The description clearly states the tool's purpose using a specific verb ('Update') and resource ('coaching catalogue directory'), and enumerates distinct capabilities: rename, change session listing filter, re-order sub-directories, and author custom Markdown. This unambiguously distinguishes it from sibling create/get/list tools.

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?

The description provides clear usage context by explaining partial-update semantics ('Only the fields present in the request body are written') and null-clears behavior. It does not explicitly name alternatives (e.g., 'use create_catalogue_directory for new directories'), but the action of updating an existing directory is well implied.

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

update_interviewUpdate interview or positionA
DestructiveIdempotent
Inspect

[Interviews] Update the configuration of an existing interview/position: name, description, avatar template, recording, scoring, tags and the rest of the create-time settings. Only the fields you send are changed. To change the questions, send questions — the WHOLE list you want the interview to end up with, in order, in the format get_interview_definition returns. OMIT questions and the existing questions are left completely alone; there is no way to change one question on its own, so read the interview first, edit that array, and send it back. Resending an unchanged array does nothing. Not updated by this tool at all: the welcome and thank-you messages and the instructional-video screen (stored as steps, not questions), and the language, which the existing questions are already written in. Use tags to place a coaching session into a catalogue directory.

Updates the configuration of an existing interview (single-stage) or position (multi-stage). Only the fields present in the request body are written — everything else keeps its current value, and sending null clears a nullable field. The question list is only touched when you send questions; omit that field and the questions are left exactly as they are. When sent, it must be the complete list and is applied as a diff against what is stored (matched on external_id, then id, then identical content), so unchanged questions keep their existing records, edited ones are unlinked and re-created, and dropped ones are unlinked — and re-sending the array job-interview-get returned changes nothing. See the field description, and questions_diff in the response for what was decided. Questions of an interview that is already active can only be changed on interactive avatar templates, where re-publishing is instant; on the offline (pre-rendered video) templates set the interview back to draft first. The welcome / thank-you messages and the instructional-video screen are stored as steps rather than questions and are never changed here. mojito_language_code cannot be changed — the existing questions and rendered videos are in the original language — so create a new interview to change language. A multi-stage position only carries the shared identity fields (name, code, location, description, description_long, cover_image_url, department, salary, available_till, recruiter, status, visibility, hiring_for_company); sending an interview-only field for a position is a 422.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoExternal code/reference. Blank is stored as null.
nameNoInterview / position name.
tagsNoFree-form tags stored on the interview. Tags are also the coaching-catalogue mapping key: a catalogue directory (see the catalogue-tag-create / catalogue-tag-update endpoints) lists a coaching or persona session when the session's tags contain EVERY tag in that directory's `tags_interview_set_filter`. Only `active` sessions with visibility `public` or `merchant_public` are listed.
typeNoProduct type of the interview. Changing it also re-derives `type_credit` (null for interview/assessment, otherwise interview_coach_manager) unless you send `type_credit` explicitly. Single-stage interviews only.
statusNoNew lifecycle status. Applied through the same interview_set_status routine as job-interview-set-state (which is also where you manage the iframe embed key).
locationNoInterview location (column `interview_location`). Blank is stored as null.
questionsNoOPTIONAL. Omit this field entirely and the interview's questions are left exactly as they are — this endpoint only touches questions when you send the array. When you do send it, send the COMPLETE list you want the interview to end up with, in order, in the same format job-interview-create-from-array accepts and job-interview-get returns: there is no way to change a single question on its own, so read the interview, edit that array, and send the whole thing back. An empty array is rejected. It is applied as a DIFF, not a replace, so resending the array job-interview-get gave you changes nothing at all. Each entry is matched against what is stored — first on `external_id`, then on `id`, then on identical content — and: an entry matching an unchanged question keeps that question exactly as it is, including its answer rules and any rendered avatar video; an entry matching a question whose content differs unlinks the old question and creates a new one in its place (fields you omit are carried over from the old one); an entry matching nothing is created; and a stored question no entry matches is unlinked. `questions_diff` in the response reports exactly what was decided. Questions are shared records, so nothing is ever deleted — removing one only unlinks it from this interview, and an edit is always unlink-old + create-new so the change cannot leak into another interview reusing the same question. The welcome, thank-you and instructional-video steps are not part of this array and are left in place. Single-stage interviews only; for a multi-stage position, update its interview stages individually.
recordingNoCheating/proctoring detection mode for candidate answers — this is NOT a full session recording. Video options also record the candidate. Omit/null to disable. Options — `audio_first_5_answers`: Audio-only cheating detection, first 5 answers only. | `audio_all`: Audio-only cheating detection on every answer. | `video_all`: Audio + video cheating detection on every answer (candidate is recorded for all answers). | `video_first_5_answers`: Audio + video cheating detection, first 5 answers only..
coach_planNoCoaching-plan stage this item belongs to, used by the coaching-plan progress view. Omit/null to leave it out of any plan. Options — `demo`: Demo session. | `screening`: Screening-interview practice. | `2nd`: Second-interview practice. | `3rd`: Third-interview practice. | `closing`: Closing / salary-negotiation practice. | `job-specific`: Job-specific coaching. | `other`: Anything that does not fit the other buckets..
visibilityNoWho can discover and access the interview. Options — `merchant_public`: Listed on the merchant's public interview list — anyone with the merchant link can find and start it. | `merchant_invite`: Invite-only — only candidates explicitly invited (by email/link) can access it; not listed anywhere. | `merchant_unlisted`: Reachable only via a direct link — not listed anywhere; share the link manually..
descriptionNoShort interview description.
position_idYesId of the interview definition (single-stage) or position definition (multi-stage) to update. The same id you pass to job-interview-get.
result_viewNoResult screen shown to the candidate after finishing. With any value other than `none`, the candidate sees a results screen where they can provide feedback, record an intro video and edit the transcript, and must then submit the result; the value sets how much score/result detail is shown. Options — `none`: No results screen at all — the interview is submitted immediately when the candidate finishes (no feedback, intro video, transcript edit or manual submit step). | `minimal`: Minimal results layout, no score shown. | `minimal_with_score`: Minimal results layout including the overall score. | `advanced`: Advanced results layout with more detail. | `full`: Full results layout with all sections. | `full_expand_scores`: Full results with every score breakdown expanded..
type_creditNoCredit bucket the session draws from. Only meaningful for candidate-paid coaching/persona sessions; hiring interviews and assessments are merchant-billed and carry null. Options — `resume_check`: Resume-check credits. | `interview_coach_starter`: Coaching credits — starter tier. | `interview_coach_contributor`: Coaching credits — contributor tier. | `interview_coach_manager`: Coaching credits — manager tier. | `cover_letter`: Cover-letter credits..
max_durationNoLive session limit in seconds. Also the basis for the credit multiplier.
max_followupsNoMaximum number of AI follow-up questions. 0 disables follow-ups; presets are 0-3 (none/low/normal/high) and custom values start at 4; null uses the template default (Normal).
custom_scoringNoResult-scoring overrides (max_score, early_stop, speech_cadence, ai_pronunciation, sentiment_analysis, ai_assessment_answer, ai_assessment_resume, ai_assessment_session). Merged onto the stored configuration, so keys you omit keep their current value.
interview_toneNoTone — configures the AI avatar's speaking style and the follow-up questions it generates. Stored in creation_parameters; existing questions are NOT regenerated. Suggested values — `relaxed`: Friendly and conversational tone that helps candidates feel at ease. | `simple`: Plain language at CEFR A2 level — short sentences and simple words. | `professional`: Formal and business-like approach suitable for senior roles. | `persuasive`: Engaging style that encourages candidates to elaborate.. Case-insensitive; other strings are accepted but unknown tones fall back to the default.
interview_typeNoInterview style — configures the AI avatar and the follow-up questions it generates during the interview. Stored in creation_parameters; existing questions are NOT regenerated. Options — `pre-screening`: Pre-screening — quick qualification check focusing on basic requirements and availability. | `pre-screening-with-test-questions`: Pre-screening with test questions — pre-screening plus practical questions to test relevant skills. | `second-interview`: Second round interview — deeper dive for candidates who passed initial screening. | `remote-freelancer-verification`: Remote worker verification — verify remote work capabilities and communication skills. | `strength-based-interview`: Strength-based interview — focus on what candidates enjoy and excel at to predict job satisfaction. | `potential-based-interview`: Potential-based interview — assess learning ability and growth potential rather than past experience. | `process-verification-from-knowledge-base`: Knowledge Base interview — generate questions from your knowledge base documents..
cover_image_urlNoCover image URL.
seniority_levelNoTarget seniority level for the role; auto-detected from the job description when omitted. Options — `entry-level`: Early-career or graduate roles. | `intermediate`: Some experience required. | `senior`: Experienced professional. | `managerial`: Team or department lead. | `director`: Director-level responsibility. | `executive`: C-suite or executive role..
description_longNoLong-form interview description (column `interview_description_long`), Markdown.
interview_salaryNoSalary range shown for the position. Blank is stored as null.
hiring_for_companyNoWho the position is really for. null (or an object with name null/blank) means hiring for yourself; { name: 'undisclosed' } for an unnamed external client; or { name: '<company>' } plus optional description/location/sector/company_size. Stored in creation_parameters.hiring_for_company.
interview_attemptsNoAllowed candidate attempts (1-20). Stored as result_scoring.max_retries.
interview_departmentNoDepartment the position belongs to. Blank is stored as null.
recruiter_profile_idNoProfile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant. null clears it.
interview_template_idNoId of the interview template (avatar/voice) to use. Must reference an existing interview_templates row. Also decides the modality — see list_avatars / merchant-avatar-list.
candidate_expectationsNoFree-text candidate expectations.
pdf_export_auto_configNoAuto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.
recording_full_sessionNoFull interview-session recording (includes the avatar and voice) produced as a single file. Independent of `recording`. Omit/null to disable. Options — `audio_all`: Record the whole session audio (avatar + candidate voice) into a single file. Adds +0.2 credits. | `video_all`: Record the whole session video + audio (avatar + candidate) into a single file. Adds +0.4 credits..
required_pronunciationNoRequire pronunciation assessment (restricts to pronunciation-capable languages).
knowledge_base_store_idNoKnowledge base store id the interview draws context from; validated for existence. null unlinks it.
questions_random_subsetNoAsk only a random subset of the questions, as a fraction between 0.01 and 0.9. null asks all questions.
interview_available_tillNoISO date/time after which the interview is no longer available to candidates. null keeps it always available.
candidate_expectations_jsonNoStructured candidate expectations (the scoring rubric), bucketed by requirement level (weak/moderate/strong). null clears the rubric. Extra keys are preserved.
candidate_video_introductionNoWhether a candidate video introduction is hidden, optional or required. null is treated like hidden.
interview_conversation_speedNoConversation pace of the AI avatar. Omit/null keeps the template default pace. Options — `slower`: The avatar speaks more slowly — easier to follow for non-native speakers. | `normal`: Default speaking pace. | `faster`: The avatar speaks more quickly for a snappier conversation..
result_enable_edit_transcriptNoAllow editing the transcript on the result view.
regenerate_candidate_expectationsNoRe-derive the interview-level `candidate_expectations_json` scoring rubric from the resulting question list, the way job-interview-create-from-array derives it at creation time. Only applies when `questions` is sent, the interview type is `interview`, and `candidate_expectations_json` is not also being set explicitly (an explicit value wins).

Output Schema

ParametersJSON Schema
NameRequiredDescription
position_idYesThe id that was updated.
is_multistageYesTrue when the id resolved to a multi-stage position (position_def_set) rather than a single interview.
questions_diffNoWhat the question diff decided, question by question. Absent when `questions` was not sent.
updated_fieldsYesNames of the stored columns that were written, plus `status` when the lifecycle status was changed and `questions` when the question list was diffed.
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=true), the description details exact behaviors: partial updates, null clearing, diff-based question handling (unlink old, create new, never delete), no-op on resending unchanged array, and limitations on active interviews and language. This far exceeds the structured annotation information.

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 description contains two paragraphs that repeat key points: 'Only the fields you send are changed' and 'welcome/thank-you messages are never changed' both appear twice. While front-loaded and structured, the redundancy makes it less concise than necessary. Still, it is organized and readable.

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 tool with 40 parameters and an output schema, the description covers all major behavioral traps: question diff semantics, null clearing, position vs interview field restrictions, active-interview limitations, and language immutability. It is complete enough for an agent to use the tool correctly without additional lookup.

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

Parameters5/5

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

Even though schema coverage is 100%, the description adds significant meaning: it explains the diff algorithm for `questions`, the relationship between `status` and `interview_set_status`, that `recording` is not a full session recording, and which fields apply to single-stage vs multi-stage positions. This is essential context not captured in the schema.

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

Purpose5/5

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

The description uses a specific verb ('Updates') and identifies the exact resource: 'the configuration of an existing interview (single-stage) or position (multi-stage).' It clearly distinguishes from siblings by focusing on updating existing entities, and explicitly notes what is not updated (e.g., welcome/thank-you messages, language), setting it apart from create/set-state tools.

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

Usage Guidelines5/5

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

Provides explicit guidance on when to use the tool vs alternatives: tells the user to read the interview first before changing questions, explains how to handle active interviews (set to draft for offline templates), and directs users to create a new interview to change language. It also warns that sending interview-only fields to a position results in a 422, clearly scoping valid usage.

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

upload_knowledge_base_documentUpload knowledge base documentA
Destructive
Inspect

[Knowledge base] Upload and process a knowledge base document (multipart form-data).

Uploads a document to a knowledge base store and queues it for processing. Accepts the file either as multipart/form-data (binary file) or as application/json (base64 file).

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesThe document file (binary).
nameNoDocument name (with extension). Falls back to the uploaded file name for multipart.
merchant_idNoOverride merchant id (admin / sub-merchant only).
knowledge_base_store_idYesThe knowledge base store to add the document to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
knowledge_base_idYesId of the created knowledge_base record.
Behavior3/5

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

Annotations indicate destructiveHint=true (modifies data). The description adds that uploading queues the document for processing, implying asynchronous behavior. However, it does not detail what happens after processing, whether overwriting occurs, or error scenarios. The description adds some context beyond annotations but lacks depth.

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

Conciseness4/5

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

The description is two paragraphs, front-loaded with the purpose, and provides necessary details succinctly. It is slightly verbose in repeating file formats but overall efficient. No unnecessary sentences.

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?

Given that an output schema exists (return values are handled separately), the tool description covers the main behavior: uploading, queuing, and accepted formats. It lacks details about processing time, error handling, or file size limits, but annotations and schema mitigate some gaps. For a 4-parameter tool, it is fairly complete.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds value by explaining that the file parameter can be binary or base64 depending on Content-Type, and that the name falls back to the uploaded file name for multipart. This clarifies parameter usage beyond the schema.

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

Purpose5/5

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

The title and description clearly state that the tool uploads and processes a knowledge base document. It uses specific verbs (upload, process) and identifies the resource (knowledge base document), distinguishing it from sibling tools focused on interviews, personas, and merchants.

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?

The description explains that the tool accepts file as multipart/form-data or JSON, and mentions queuing for processing. However, it does not explicitly state when to use this tool versus alternatives, nor does it provide prerequisites (e.g., store must exist) or exclusion cases. Nonetheless, no direct sibling tool performs similar uploading, so the guidance is adequate.

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • F
    license
    -
    quality
    C
    maintenance
    Generate tailored job descriptions, hire senior developers and pull technical interview questions without leaving the conversation.
  • A
    license
    A
    quality
    D
    maintenance
    Manage Job using MCP: Manage Job, Candidates, Resumes, Salaries all within this one MCP tools It can solve problems like: You have 50 resumes to screen. Your AI assistant can reason about candidates, but it can't: Read PDFs/DOCX — The AI can't open binary files Extract structured data — Copy-pasting loses formatting, metrics, and context Compare at scale — No consistent scoring across candida
    24
    49
    1
    MIT

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources