Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

JobMojito

REMOTE · MCP.JOBMOJITO.COM · SCANNED SEP 21

Run AI interviews, simulated personas and coaching sessions on JobMojito.

0 this week 84 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security89
Transport & Reachability100
Schema Quality & AI Usability35
  • 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Fail
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 17901 tokens (~596/item across 30 items; 29 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
  • Structured output schemas are declared (97% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 29 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 31 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
  • Supports UI / widget rendering.Pass
Install

How do I install the JobMojito MCP server?

JobMojito is a hosted endpoint at https://mcp.jobmojito.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.jobmojito.com

# add to Claude Code
claude mcp add --transport http com-jobmojito-jobmojito 'https://mcp.jobmojito.com/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "com-jobmojito-jobmojito": {
      "url": "https://mcp.jobmojito.com/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-jobmojito-jobmojito": {
      "type": "http",
      "url": "https://mcp.jobmojito.com/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.com-jobmojito-jobmojito]
url = "https://mcp.jobmojito.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-jobmojito-jobmojito": {
      "type": "remote",
      "url": "https://mcp.jobmojito.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-jobmojito-jobmojito --url 'https://mcp.jobmojito.com/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  com-jobmojito-jobmojito:
    url: "https://mcp.jobmojito.com/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-jobmojito-jobmojito": {
      "Transport": "http",
      "Url": "https://mcp.jobmojito.com/mcp"
    }
  }
}
# add to Vellum
assistant mcp add com-jobmojito-jobmojito -t streamable-http -u 'https://mcp.jobmojito.com/mcp'
// mcp.json
{
  "mcpServers": {
    "com-jobmojito-jobmojito": {
      "type": "http",
      "url": "https://mcp.jobmojito.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 16 Sept 26 0
    • Tool “list_avatars” rewrote its description, which is the text the model reads security
    • Tool “list_catalogue_directories” rewrote its description, which is the text the model reads security
    • Tool “list_interview_results” rewrote its description, which is the text the model reads security
    • Tool “update_interview” rewrote its description, which is the text the model reads security
    • Server version: 1.2.2 → 1.3.0 functional
  • 14 Sept 26 0
    • Server version: 1.2.1 → 1.2.2 functional
    • “generate_interview_report” added an optional parameter “template” cosmetic
  • 10 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “create_persona” rewrote its description, which is the text the model reads security
    • Tool “get_interview_result_details” rewrote its description, which is the text the model reads security
    • Server version: 1.2.0 → 1.2.1 functional
    • Server version: 1.1.2 → 1.2.0 functional
    • “get_interview_result_details” added an optional parameter “view” cosmetic
  • 31 Aug 26 0
    • Server version: 1.1.1 → 1.1.2 functional
    • Server version: 1.1.0 → 1.1.1 functional
  • 29 Aug 26 0
    • Stability: 0.97 → pass security
  • 28 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 26 Aug 26 +9
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Aug 26 −6
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “list_avatars” rewrote its description, which is the text the model reads security
    • Schema quality: excellent → unverified functional
    • Server version: 1.0.2 → 1.1.0 functional
    • “create_catalogue_directory” reworded the description of “content_md” cosmetic
    • “create_interview” reworded the description of “description_long” cosmetic
    • “create_interview_from_questions” reworded the description of “description_long” cosmetic
    • “update_catalogue_directory” reworded the description of “content_md” cosmetic
    • “update_interview” reworded the description of “description_long” cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Probed https://mcp.jobmojito.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.jobmojito.com CN=Amazon RSA 2048 M01,O=Amazon,C=US 30 Jul 2026 12 Feb 2027 RSA 2048 SHA256-RSA 4e3ed70afd73438a4498c22dac8a188
SANs: mcp.jobmojito.com
CN=Amazon RSA 2048 M01,O=Amazon,C=US (CA) CN=Amazon Root CA 1,O=Amazon,C=US 23 Aug 2022 23 Aug 2030 RSA 2048 SHA256-RSA 77312380b9d6688a33b1ed9bf9ccda68e0e0f
CN=Amazon Root CA 1,O=Amazon,C=US (CA) CN=Starfield Services Root Certificate Authority - G2,O=Starfield Technologies\, Inc.,L=Scottsdale,ST=Arizona,C=US 25 May 2015 31 Dec 2037 RSA 2048 SHA256-RSA 67f944a2a27cdf3fac2ae2b01f908eeb9c4c6

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.jobmojito.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
jobmojito.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://mcp.jobmojito.com/.well-known/oauth-protected-resource/mcp", scope="openid email offline_access"

Bearer resource_metadata="https://mcp.jobmojito.com/.well-known/oauth-protected-resource/mcp", scope="openid email offline_access"

Protected resource metadata

Document https://mcp.jobmojito.com/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://mcp.jobmojito.com/mcp
Authorisation server https://momsbvnltsydezmoesqt.supabase.co/auth/v1

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.jobmojito.com/mcp Verified 200
http (plaintext) http://mcp.jobmojito.com/mcp HTTPS enforced 301 https://mcp.jobmojito.com/mcp
MCP tools · 29 exposed · ~16,638 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
create_catalogue_directory ~1,006

[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.

NameTypeReqDescription
coach_planstring|nullCoaching-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.…
content_mdstring|nullMarkdown 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 sessi…
cover_image_urlstring|nullCover image URL shown on the directory card.
descriptionstring|nullShort description shown on the directory card.
idstring|nullyesDirectory 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…
merchant_idstring|nullMerchant that owns the directory. Admin / sub-merchant callers only; otherwise taken from your token.
mojito_language_codestring|nullLanguage of the directory (one of the platform-languages.json codes). The catalogue groups directories by language; defaults to `en` when omitted.
namestring|nullyesDisplay name of the directory, shown as the page title and on its card.
parent_tagstring|nullId 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 an…
statusstring|nullLifecycle 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`: Re…
tags_interview_set_filterarray|nullTag 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 visib…
tags_subarray|nullIds 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…
visibilitystring|nullWho 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 m…
NameTypeReqDescription
catalogue_urlstring|nullyesPublic URL of the directory page, when the merchant has a coaching-portal domain configured. Null otherwise.
idstring|nullyesId of the created directory.
merchant_idstring|nullyesOwning merchant id. Null for a platform-wide (`public`) directory.
parent_tagstring|nullyesThe directory this one was nested under, when `parent_tag` was supplied.

No examples provided.

create_interview ~2,328

[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.

NameTypeReqDescription
additional_contextobject|nullArbitrary additional context object merged into AI generation.
candidate_expectationsstring|nullFree-text candidate expectations folded into AI generation.
candidate_video_introductionstring|nullWhether a candidate video introduction is optional or required.
codestring|nullOptional external code/reference for the interview.
cover_image_urlstring|nullCover image URL.
custom_scoringobject|nullCustom result-scoring overrides merged with defaults and template overrides.
descriptionstring|nullShort, 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.
description_longstring|nullFull 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…
hiring_for_companyobject|nullWho 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…
include_closing_promptboolean|nullInclude a closing prompt. Defaults to true.
include_rapport_questionboolean|nullInclude an opening rapport question. Defaults to false.
instructional_videoboolean|nullShow an instructional video before approval. Defaults to false.
instructional_video_custom_textstring|nullCustom narration text for the instructional video.
interview_attemptsnumber|nullAllowed candidate attempts (1-20).
interview_available_tillstring|nullISO date/time after which the interview is no longer available to candidates. null keeps it always available.
interview_conversation_speedstring|nullConversation 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 speaki…
interview_departmentstring|nullDepartment the position belongs to.
interview_lengthNumber 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 fo…
interview_salarystring|nullSalary range shown for the position.
interview_template_idstring|nullyesId of the interview template to base this interview on.
interview_tonestring|nullInterview 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 conversati…
interview_typestring|nullInterview 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-sc…
is_embeddedboolean|nullSet 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.
knowledge_base_store_idstring|nullKnowledge base store id to source additional context from.
locationstring|nullyesJob location.
max_durationnumber|nullMaximum 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.…
max_followupsinteger|nullMaximum 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).
merchant_idstring|nullMerchant id. Admin / sub-merchant callers only; otherwise taken from your token.
mojito_language_codestring|nullyesPlatform language code used for the interview. Must be one of the platform-languages.json codes.
namestring|nullyesInterview / position name.
pdf_export_auto_configobject|nullAuto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.
questions_random_subsetnumber|nullAsk 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.
recordingstring|nullCheating/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`: Audi…
recording_full_sessionstring|nullFull 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 (av…
recruiter_profile_idstring|nullProfile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant.
required_pronunciationboolean|nullRequire pronunciation assessment (restricts to pronunciation-capable languages). Defaults to false.
result_enable_edit_transcriptboolean|nullAllow editing the transcript on the result view. Defaults to true.
result_viewstring|nullResult 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 transcr…
seniority_levelstring|nullTarget 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. | `senio…
statusstring|nullyesLifecycle 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 a…
tagsarray|nullFree-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 per…
thank_you_messagestring|nullCustom thank-you message shown after the interview.
typestring|nullyesProduct 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 — ca…
use_enhanced_expectationsboolean|nullReserved flag passed through to generation.
visibilitystring|nullyesWho 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`: Invi…
welcome_messagestring|nullCustom welcome message shown to the candidate.
NameTypeReqDescription
embed_idstring|nullEmbed id, present only when is_embedded=true.
embed_signing_keystring|nullEmbed signing key, present only when is_embedded=true.
interview_def_set_idstring|nullyesId of the newly created interview definition set.
max_durationnumber|nullyesLive session limit in seconds stored on the interview — the value sent, or the 1200 default when omitted.
questions_generatednumber|nullyesNumber of questions actually generated. May be lower than the requested interview_length, which is capped by max_duration.

No examples provided.

create_interview_from_questions ~2,048

[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.

NameTypeReqDescription
additional_contextobject|nullExtra context forwarded to expectation generation.
candidate_expectationsstring|nullFree-text candidate expectations.
candidate_expectations_jsonobject|nullPre-generated candidate expectations, bucketed by requirement level (weak/moderate/strong); auto-generated when omitted for type=interview. Extra keys are preserved.
candidate_video_introductionstring|nullWhether a candidate video introduction is optional or required.
codestring|nullOptional external code/reference.
cover_image_urlstring|nullCover image URL.
custom_scoringobject|nullCustom scoring overrides merged with defaults.
descriptionstring|nullyesShort interview description.
description_longstring|nullLong-form interview description. Rendered as Markdown on the candidate-facing position page, including chips, callouts, cards, columns and buttons — formatting guide: https://developer.jobmojito.com/…
disable_deduplicationboolean|nullWhen true, skip step deduplication on insert.
hiring_for_companyobject|nullWho 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…
instructional_videoboolean|nullEnable an instructional video before approval.
instructional_video_custom_textstring|nullCustom text for the instructional video.
interview_attemptsnumber|nullAllowed attempts, 1-20.
interview_available_tillstring|nullISO date/time after which the interview is no longer available to candidates. null keeps it always available.
interview_conversation_speedstring|nullConversation 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 speaki…
interview_departmentstring|nullDepartment the position belongs to.
interview_salarystring|nullSalary range shown for the position.
interview_template_idstring|nullyesId of the interview template to use. Must reference an existing interview_templates row.
interview_tonestring|nullTone — 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`:…
interview_typestring|nullInterview 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…
is_embeddedboolean|nullSet 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.
knowledge_base_store_idstring|nullOptional knowledge base store id; validated for existence.
locationstring|nullyesInterview location.
max_followupsinteger|nullMaximum 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).
merchant_idstring|nullTarget merchant id (admins / sub-merchant only).
mojito_language_codestring|nullyesPlatform language code (one of the platform-languages.json codes); must also resolve to a supported language with an Azure speech mapping.
namestring|nullyesInterview/position name.
pdf_export_auto_configobject|nullAuto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.
questionsarray|nullyesOrdered list of interview questions to create as steps.
questions_random_subsetnumber|nullFraction of questions to randomly ask, between 0.01 and 0.9.
recordingstring|nullCheating/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`: Audi…
recording_full_sessionstring|nullFull 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 (av…
recruiter_profile_idstring|nullProfile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant.
required_pronunciationboolean|nullRequire pronunciation assessment (restricts to pronunciation-capable languages). Defaults to false.
result_enable_edit_transcriptboolean|nullAllow editing the transcript on the result view. Defaults to true.
result_viewstring|nullResult 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 transcr…
seniority_levelstring|nullTarget 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. | `senio…
statusstring|nullyesLifecycle 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 a…
tagsarray|nullFree-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 per…
thank_you_messagestring|nullCustom thank-you message.
typestring|nullyesProduct 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 — ca…
visibilitystring|nullyesWho 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`: Invi…
welcome_messagestring|nullCustom welcome message.
NameTypeReqDescription
embed_idstring|nullEmbed id, present only when is_embedded=true.
embed_signing_keystring|nullEmbed signing key, present only when is_embedded=true.
interview_def_set_idstring|nullyesId of the newly created interview definition set.

No examples provided.

create_persona ~2,488

[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. FIRST CHOOSE `portal`, because it selects between two different products: `portal="interview"` builds a SIMULATED PERSONA a recruiter invites candidates to — scored, billed to merchant credits, and listed with the recruiter's other results; `portal="coaching"` (THE DEFAULT) builds a coaching persona learners start themselves from the catalogue, billed to their own coaching credits and never visible to recruiters. Pass `portal="interview"` explicitly for any hiring, screening or assessment use. Then 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'). 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 fi…

NameTypeReqDescription
candidate_expectationsstring|nullMentee assessment goals — free-text describing what the candidate is expected to achieve (max 2100 chars).
candidate_video_introductionstring|nullWhether a candidate video introduction is optional or required.
codestring|nullOptional external code/reference for the persona.
cover_image_urlstring|nullCover image URL.
descriptionstring|nullShort 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 neve…
interview_attemptsnumber|nullAllowed 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_conversation_speedstring|nullConversation 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 speaki…
interview_locationstring|nullOptional location label shown for the session.
interview_template_idstring|nullyesId of the interview template (avatar) the persona uses.
is_embeddedboolean|nullSet 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.
max_durationnumber|nullMaximum conversation duration in seconds. Defaults to 1200 (20 min) when omitted.
merchant_idstring|nullMerchant id. Admin / sub-merchant callers only; otherwise taken from your token.
mojito_language_codestring|nullyesPlatform language code used for the conversation. Must be one of the platform-languages.json codes.
namestring|nullyesPersona / session name.
opening_linestring|nullThe 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 t…
persona_avatar_end_conditionsstring|nullWhen 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 w…
persona_avatar_knowledgestring|nullPrivate 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.…
persona_avatar_progressstring|nullHow 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 (I…
persona_avatar_who_isstring|nullWho 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 desc…
persona_role_avatarstring|nullyesThe 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…
persona_role_userstring|nullyesThe 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 s…
portalstring|nullREQUIRED 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 (scre…
recordingstring|nullCheating/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`: Audi…
recording_full_sessionstring|nullFull 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 (av…
recruiter_profile_idstring|nullProfile id of the recruiter owning this persona. Must be a merchant/merchant_owner/admin profile of the same merchant.
result_viewstring|nullResult 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 transcr…
statusstring|nullyesLifecycle 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 a…
tagsarray|nullFree-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 perso…
thank_you_messagestring|nullCustom thank-you message shown after the session — set it; omitting it leaves a generic platform default.
visibilitystring|nullyesWho 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`: Invi…
welcome_messagestring|nullCustom 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…
NameTypeReqDescription
embed_idstring|nullEmbed id, present only when is_embedded=true.
embed_signing_keystring|nullEmbed signing key, present only when is_embedded=true.
interview_def_set_idstring|nullyesId of the newly created persona definition set.

No examples provided.

generate_interview_report ~171

[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.

NameTypeReqDescription
export_features_resultobject
export_typestring|nullyes
interview_result_idstring|null
interview_result_idsarray|nullGenerate a single combined report for multiple results.
store_fileboolean|nullWhen true (pdf only), persist the file to storage and return a signed URL.
template
NameTypeReqDescription
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…

No examples provided.

generate_interview_url ~183

[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`.

NameTypeReqDescription
hide_menuPass the string 'false' to show the navigation menu; any other value hides it (default).
interview_idstring|nullInterview or position id. Required for interview-for-profile and interview-results-for-position.
interview_profile_idstring|nullCandidate profile id. Required for interview-for-profile and results-for-profile.
interview_result_idstring|nullInterview result id. Required for interview-result-candidate and interview-result-talent-seeker.
merchant_idstring|nullOverride merchant id (admin / sub-merchant only).
typestring|nullyesWhich kind of signed URL to generate.
NameTypeReqDescription
resultstringyesThe signed interview URL.

No examples provided.

get_catalogue_directory ~238

[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.

NameTypeReqDescription
idstringyesId of the catalogue directory to read (the catalogue URL segment).
merchant_idstringOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
NameTypeReqDescription
catalogue_urlstring|nullyesPublic URL of this directory page, when the merchant has a coaching-portal domain configured.
coach_planstring|nullyesCoaching-plan stage, when the directory belongs to one.
content_mdstring|nullyesMarkdown 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 sessi…
cover_image_urlstring|nullyesCover image URL.
created_atstring|nullyesCreation timestamp (ISO 8601).
descriptionstring|nullyesShort description shown on the directory card.
idstring|nullyesDirectory id — also the catalogue URL segment.
is_start_directoryboolean|nullyesTrue when this is the directory the merchant's catalogue opens on.
matched_sessionsarray|nullyesThe 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 mer…
matched_sessions_truncatedboolean|nullyesTrue when more sessions match than the 200 returned — narrow `tags_interview_set_filter` if you see this.
merchant_idstring|nullyesOwning merchant id. Null for a platform-wide directory.
mojito_language_codestring|nullyesDirectory language.
namestring|nullyesDisplay name.
statusstring|nullyesLifecycle status.
sub_directoriesarray|nullyesThe 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 broke…
tags_interview_set_filterarray|nullyesTag 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 visib…
tags_subarray|nullyesIds 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…
updated_atstring|nullyesLast update timestamp (ISO 8601).
visibilitystring|nullyesWho can see it.

No examples provided.

get_documentation ~99

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.

NameTypeReqDescription
max_charsintegerTruncate content to this many characters (default 20000).
urlstringyesThe documentation page URL.

Structured output declared, but exposes no named fields.

No examples provided.

get_interview_definition ~186

[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.

NameTypeReqDescription
position_idstringyesIdentifier of either an interview definition (single-stage) or a position definition (multi-stage). The function resolves whichever matches.
NameTypeReqDescription
calc_definition_jsonThe compiled interview definition JSON (structure varies by interview type).
candidate_expectationsstring|nullyesFree-text candidate expectations. Null for multi-stage positions.
candidate_expectations_jsonStructured candidate expectations JSON — the scoring rubric. Null for multi-stage positions.
candidate_video_introductionstring|nullyesWhether a candidate video introduction is hidden/optional/required. Null for multi-stage positions.
coach_planstring|nullyesCoaching-plan stage this session belongs to. Null for multi-stage positions and for sessions outside any plan.
codestring|nullyesCaller-supplied external code/reference.
cover_image_urlstring|nullyesCover image URL.
created_atstring|nullyes
creation_parametersThe creation parameters recorded at build time (interview_type, interview_tone, interview_length, additional_context, include_rapport_question, include_closing_prompt, knowledge_base_store_id, senior…
descriptionstring|nullyesShort description.
interview_available_tillstring|nullyesISO date/time after which the interview is no longer available to candidates. Null means always available.
interview_conversation_speedstring|nullyesConversation pace of the AI avatar (slower/normal/faster). Null keeps the template default. Null for multi-stage positions.
interview_departmentstring|nullyesDepartment the position belongs to.
interview_description_longstring|nullyesLong description (create/update field `description_long`). Rendered as Markdown on the candidate-facing position page — formatting guide: https://developer.jobmojito.com/cookbooks/format-content-with…
interview_locationstring|nullyesLocation (create field `location`).
interview_salarystring|nullyesSalary range shown for the position.
interview_template_idstring|nullyesInterview template id. For multi-stage positions this is the first interview step's template.
interview_template_typestring|nullyesType of the linked interview template. `interactive_elevenlabs` is voice-only; the others (`interactive_spatius`, `interactive_heygen`, `offline_heygen`, `offline_elai`, `offline_synthesia`) are avat…
is_multistageboolean|nullyesTrue when the id resolved to a multi-stage position rather than a single interview.
is_voice_onlyboolean|nullyesConvenience 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.
knowledge_base_store_idstring|nullyesLinked knowledge base store id. Null for multi-stage positions.
max_durationnumber|nullyesLive session limit in seconds. Null for multi-stage positions.
max_followupsnumber|nullyesMaximum number of AI follow-up questions; null uses the template default. Null for multi-stage positions.
merchant_idstring|nullyesOwning merchant id.
mojito_language_codestring|nullyesPlatform (mojito) language code.
namestring|nullyesInterview or position name.
pdf_export_auto_configAuto-PDF-report options applied when the interview completes; null when auto-export is off. Null for multi-stage positions.
questionsarray|nullyesThe 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…
questions_random_subsetnumber|nullyesFraction of the questions actually asked (0.01-0.9); null asks all of them. Null for multi-stage positions.
recordingstring|nullyesPer-answer recording mode. Null for multi-stage positions.
recording_full_sessionstring|nullyesFull-session recording mode. Null for multi-stage positions.
recruiter_profile_idstring|nullyesProfile id of the recruiter owning this interview/position.
required_pronunciationboolean|nullyesWhether a pronunciation assessment is required. Null for multi-stage positions.
result_enable_edit_transcriptboolean|nullyesWhether the candidate may edit the transcript on the result view. Null for multi-stage positions.
result_scoringResolved 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.
result_viewstring|nullyesResult view level. Null for multi-stage positions.
slugstring|nullyesURL slug of the public listing, when one was generated.
speech_language_codestring|nullyesAzure speech language code. Null for multi-stage positions.
speech_language_namestring|nullyesAzure speech language display name. Null for multi-stage positions.
stagestring|nullyesHiring-pipeline stage. Null for multi-stage positions.
statusstring|nullyesLifecycle status of the interview/position.
tagsarray|nullyesFree-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.
typestring|nullyesInterview type. Null for multi-stage positions.
type_creditstring|nullyesCredit bucket the interview draws from. Null for multi-stage positions.
updated_atstring|nullyes
visibilitystring|nullyesWho can see and access the interview/position.

No examples provided.

get_interview_result_details ~296

[Results] Get full interview result details including transcript and scores. Scores are assistive output for a human reviewer. One result is a large record, so `view` controls how much of it comes back — the default (`standard`) omits only the raw machine assessment data. Returns an interview result with its full transcript and AI assessment. Optionally attaches signed recording URLs.

NameTypeReqDescription
get_signed_recordingsstringWhen true, includes short-lived signed recording URLs for the session, the video introduction, and each transcript answer.
interview_result_idstringyesThe interview result to fetch the transcript and details for.
viewstringHow much of the record to return. Handled by the MCP server, not the JobMojito API — it only narrows the response, never the query. - `summary`: scores, the overall AI analysis, and each question wi…
NameTypeReqDescription
ai_analysisstring|nullCandidate-facing AI analysis of the whole interview.
ai_analysis_otherSession-level AI analyses keyed by analysis name (jsonb). `strengths_concerns`: { strengths: string[], concerns: string[] } (0-4 items each, recruiter-facing; called `hiring_reasons` with `reasons_to…
ai_analysis_recruiterstring|nullRecruiter-facing AI analysis of the whole interview.
ai_analysis_recruiter_why_hireReasons to hire (list). Deprecated: a copy of ai_analysis_other.strengths_concerns.strengths, kept for existing integrations.
ai_analysis_recruiter_why_not_hireReasons not to hire (list). Deprecated: a copy of ai_analysis_other.strengths_concerns.concerns, kept for existing integrations.
ai_completion_reasonstring|nullWhy the interview completed (ai_completed_reason).
ai_interview_coverage_percentagenumber|nullPercentage of the intended interview the AI judged to be covered.
durationnumber|nullTotal duration in deciseconds (duration_ds).
endstring|nullInterview end timestamp (training_end, ISO 8601).
recording_is_videoboolean|nullWhether the session recording is video.
recording_local_pathstring|nullStorage path of the full session recording.
recording_urlstring|nullSigned session-recording URL; present only when get_signed_recordings=true.
recruiter_risksDetected recruiter risk flags (jsonb).
scorenumber|nullOverall interview score.
score_answernumber|nullAggregate answer sub-score.
score_pronunciationnumber|nullPronunciation sub-score.
score_sentimentnumber|nullSentiment sub-score.
score_simulationnumber|nullOverall simulated score.
score_textstring|nullHuman-readable score summary.
score_words_per_minutenumber|nullSpeaking-pace (words per minute) sub-score.
startstring|nullInterview start timestamp (training_start, ISO 8601).
statusstring|nullCoach/interview status (coach_status), e.g. started, completed.
transcriptarray|nullOrdered interactions (questions + answers) of the interview.
user_feedback_recruiterstring|nullRecruiter-entered feedback note.
video_introduction_local_pathstring|nullStorage path of the candidate video introduction.
video_introduction_urlstring|nullSigned video-introduction URL; present only when get_signed_recordings=true.

No examples provided.

get_merchant_analytics ~274

[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.

NameTypeReqDescription
date_fromstringyesStart of the date range (inclusive), YYYY-MM-DD.
date_tostringyesEnd of the date range (inclusive), YYYY-MM-DD.
interview_idstringOptional 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 interv…
limitintegerMaximum number of records to return (1–1000).
merchant_idstringOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
offsetintegerNumber of records to skip from the start of the result set.
NameTypeReqDescription
dataarray|nullyesDaily 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.
paginationobjectyes

No examples provided.

get_merchant_credit_usage ~249

[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.

NameTypeReqDescription
interview_idstringOptional 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 th…
limitintegerMaximum number of records to return (1–1000).
merchant_idstringOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
offsetintegerNumber of records to skip from the start of the result set.
NameTypeReqDescription
dataarray|nullyesCredit-consuming analytics events for the merchant, most recent first. Each row is one billable event; the credits it consumed are in stats.credit_amount.
paginationobjectyes

No examples provided.

get_merchant_status ~153

[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.

NameTypeReqDescription
merchant_idstringOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
NameTypeReqDescription
candidatesnumber|nullyesTotal candidates (non-archived profile_interview rows) for the merchant.
candidates_historyarray|nullyesDaily new-candidate counts for the last 14 days, most recent first.
credits_interview_extranumber|nullyesExtra (top-up) interview credits available on top of the monthly allowance.
credits_interview_monthlynumber|nullyesRemaining monthly interview credits.
credits_interview_monthly_limitnumber|nullyesMonthly interview-credit allowance for the current plan.
credits_interview_singlenumber|nullyesSingle-position interview credits available.
default_merchant_idstring|nullyesThe caller's home merchant id pinned in the JWT (app_metadata.merchant_id). Null if the token carries no merchant.
definitions_activenumber|nullyesCount of active interview + position definitions.
interview_result_historyarray|nullyesDaily new-interview-result counts for the last 14 days, most recent first.
interview_resultsnumber|nullyesTotal non-archived interview results for the merchant.
interviews_ongoingnumber|nullyesInterviews currently in progress (coach_status = started).
interviews_undecidednumber|nullyesCompleted interviews awaiting a recruiter decision.
interviews_without_creditsnumber|nullyesCompleted interviews that have not yet consumed a credit.
invitations_availablenumber|nullyesRemaining invitations this period. Null for unlimited (Special) plans.
invitations_limitnumber|nullyesMaximum invitations allowed this period (4x available credits). Null for unlimited (Special) plans.
invitations_sentnumber|nullyesInterview invitations sent during the current subscription period.
merchant_idstring|nullyesThe merchant this status is scoped to — the default_merchant_id unless an admin / sub-merchant operator overrode it via the merchant_id query param.
profile_idstring|nullyesThe calling user's profile id (auth user id), taken from the JWT.
subscription_statusstring|nullyesSubscription status (e.g. active, past_due, canceled). Null when no subscription.
subscription_typestring|nullyesSubscription plan name (e.g. Free, Starter, Growth, Special).

No examples provided.

jobmojito_configuration ~128

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).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_avatars ~426

[Admin] List available avatar/voice templates. Each item's `type` decides the interview modality: `interactive_elevenlabs` = voice-only (no video avatar); `interactive_spatius` = realtime interactive 3D avatar (rendered in the candidate's browser, 1.25 credits, no early stop); `interactive_heygen` = premium realtime interactive video avatar; `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. Rows are large, so this returns 15 at a time; page with `offset` while `pagination.has_more` is true, or narrow with `type`/`filter_text`. 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.

NameTypeReqDescription
filter_textstringCase-insensitive search on template name or voice language name.
include_archivedstringInclude archived templates (excluded by default).
include_publicstringAlso include public templates shared across merchants, in addition to this merchant's own.
limitintegerMaximum number of records to return (1–1000).
merchant_idstringOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
mojito_language_codestringFilter by platform language code.
offsetintegerNumber of records to skip from the start of the result set.
statusstringFilter by status. Omit for all except archived (see include_archived).
typestringFilter by avatar template type. Omit for all.
NameTypeReqDescription
dataarray|nullyesThe merchant's avatar templates for this page, newest-updated first.
paginationobjectyes

No examples provided.

list_candidates ~216

[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.

NameTypeReqDescription
filter_emojistringFilter by the candidate emoji marker.
filter_textstringCase-insensitive search on candidate name or email.
limitintegerMaximum number of records to return (1–1000).
merchant_idstringOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
offsetintegerNumber of records to skip from the start of the result set.
order_bystringSort order of the result set.
sourcestringFilter by how the candidate entered: invited or self-registered. Omit for both.
tabstringFilter candidates by recent activity. Omit (or empty) to include all.
NameTypeReqDescription
dataarray|nullyesThe merchant's candidates for this page.
paginationobjectyes

No examples provided.

list_catalogue_directories ~405

[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. Returns 25 at a time; page with `offset` while `pagination.has_more` is true. 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.

NameTypeReqDescription
filter_textstringCase-insensitive search on the directory id, name and description.
include_publicstringInclude the platform-wide `public` directories shared across merchants.
limitintegerMaximum number of records to return (1–1000).
merchant_idstringOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
mojito_language_codestringFilter by the directory language (a platform-languages.json code, e.g. `en`).
offsetintegerNumber of records to skip from the start of the result set.
parent_tagstringReturn 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.
statusstringFilter by lifecycle status. Omit to include every status you can see (deleted directories are never returned).
visibilitystringFilter by visibility.
NameTypeReqDescription
dataarray|nullyesThe catalogue directories for this page, ordered by id.
paginationobjectyes

No examples provided.

list_interview_results ~340

[Results] List the merchant's interview results. Rows carry the candidate's scores and recruiter risk flags, so this returns 20 at a time; page with `offset` while `pagination.has_more` is true, or narrow with `tab`/`interview_id`/`filter_text`. 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.

NameTypeReqDescription
filter_emojistringFilter by the candidate emoji marker.
filter_textstringCase-insensitive search on candidate name or email.
interview_idstringFilter to a single interview definition id.
limitintegerMaximum number of records to return (1–1000).
merchant_idstringOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
offsetintegerNumber of records to skip from the start of the result set.
order_bystringSort order of the result set.
profile_interview_idstringFilter to a single candidate (profile_interview) id.
risksstringComma-separated list of recruiter-risk keys to filter by (matches any).
stepstringFilter by pipeline step (pre-screening vs interview). Omit for both.
tabstringFilter by decision/completion state. Omit (or empty) to include all.
typestringProduct type of results to list.
NameTypeReqDescription
dataarray|nullyesThe merchant's interview results for this page.
paginationobjectyes

No examples provided.

list_interviews ~221

[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.

NameTypeReqDescription
filter_emojistringFilter by the interview emoji marker.
filter_textstringCase-insensitive search on the interview name.
limitintegerMaximum number of records to return (1–1000).
merchant_idstringOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
offsetintegerNumber of records to skip from the start of the result set.
show_demostringInclude demo/sample interviews.
show_publicstringInclude interviews shared publicly across merchants (coaching/avatars).
statusstringFilter by lifecycle status. Omit to include all statuses.
typestringProduct type of interviews to list.
NameTypeReqDescription
dataarray|nullyesThe merchant's interview definitions for this page, newest-updated first.
paginationobjectyes

No examples provided.

list_languages ~102

[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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
languagesarray|nullyesSupported platform languages, sorted by English name.

No examples provided.

list_my_merchants ~129

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).

NameTypeReqDescription
searchstringOptional case-insensitive filter on sub-merchant name.

Structured output declared, but exposes no named fields.

No examples provided.

list_sub_merchants ~162

[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.

NameTypeReqDescription
filter_textstringCase-insensitive search on the sub-merchant name.
limitintegerMaximum number of records to return (1–1000).
merchant_idstringOptional merchant to scope to. Admins and sub-merchant operators only; other callers always use their token's merchant.
offsetintegerNumber of records to skip from the start of the result set.
order_bystringSort order of the result set.
NameTypeReqDescription
dataarray|nullyesThe sub-merchants the caller administers for this page.
paginationobjectyes

No examples provided.

register_users_for_interview ~309

[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).

NameTypeReqDescription
hide_iframeWhen true (or the string "true"), the interview UI hides its iframe chrome (view_hi).
hide_menuWhen true (or the string "true"), the interview UI hides its menu (view_hm).
interview_idstring|nullyesInterview definition (interview_def_set) or position (position_def_set) id to register users for.
is_testWhen 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_rec…
merchant_idstring|nullMerchant id. Required when authenticating with the service key; for user tokens it is optional and only honored for admin / sub-merchant accounts.
send_emailboolean|nullWhether to send an invitation email to each registered candidate.
usersarray|nullyesCandidates to register for the interview. Each gets a one-time interview URL.
NameTypeReqDescription
resultarrayyesThe input users, each annotated with its registration result and (on success) interview URL.

No examples provided.

request_another_interview_attempt ~77

[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.

NameTypeReqDescription
interview_result_idstring|nullyesThe interview result to reopen for another attempt.

Structured output declared, but exposes no named fields.

No examples provided.

search_documentation ~225

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.

NameTypeReqDescription
limitintegerMax results per source (1-25).
querystringyesNatural-language search query or keywords.
sourcestring"all" (default), "developer", or "help" to restrict the search.

Structured output declared, but exposes no named fields.

No examples provided.

set_interview_state ~162

[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`.

NameTypeReqDescription
is_embeddedboolean|nullControls 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, re…
position_idstring|nullyesInterview definition id or position id whose state should change.
statusstring|nullNew lifecycle status to apply.
NameTypeReqDescription
resultyesReturns `{ embed_id, embed_signing_key }` when an embed key was created/returned (is_embedded=true), otherwise `{ success: true }`.

No examples provided.

update_catalogue_directory ~789

[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`).

NameTypeReqDescription
coach_planstring|nullCoaching-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.…
content_mdstring|nullMarkdown 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-pr…
cover_image_urlstring|nullCover image URL shown on the directory card. null clears it.
descriptionstring|nullShort description shown on the directory card.
idstring|nullyesId of the directory to update (the catalogue URL segment). The id itself cannot be changed — create a new directory instead.
mojito_language_codestring|nullLanguage of the directory (one of the platform-languages.json codes). The catalogue groups directories by language.
namestring|nullDisplay name of the directory.
statusstring|nullLifecycle 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`: Re…
tags_interview_set_filterarray|nullTag 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 visib…
tags_subarray|nullIds 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…
visibilitystring|nullWho 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 m…
NameTypeReqDescription
catalogue_urlstring|nullyesPublic URL of the directory page, when the merchant has a coaching-portal domain configured. Null otherwise.
idstring|nullyesId of the updated directory.
updated_fieldsarray|nullyesNames of the fields that were written.

No examples provided.

update_interview ~3,087

[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. MULTI-STAGE POSITIONS: some per-interview settings do not exist at position level and are rejected with a 422 naming the field — `candidate_expectations_json` is the one seen in practice. Read the position with get_interview_definition, then update the individual stage you mean instead of sending that field to the position. 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…

NameTypeReqDescription
candidate_expectationsstring|nullFree-text candidate expectations.
candidate_expectations_jsonobject|nullStructured candidate expectations (the scoring rubric), bucketed by requirement level (weak/moderate/strong). null clears the rubric. Extra keys are preserved.
candidate_video_introductionstring|nullWhether a candidate video introduction is hidden, optional or required. null is treated like hidden.
coach_planstring|nullCoaching-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.…
codestring|nullExternal code/reference. Blank is stored as null.
cover_image_urlstring|nullCover image URL.
custom_scoringobject|nullResult-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 confi…
descriptionstring|nullShort interview description.
description_longstring|nullLong-form interview description (column `interview_description_long`). Rendered as Markdown on the candidate-facing position page, including chips, callouts, cards, columns and buttons — formatting g…
hiring_for_companyobject|nullWho 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 desc…
interview_attemptsnumber|nullAllowed candidate attempts (1-20). Stored as result_scoring.max_retries.
interview_available_tillstring|nullISO date/time after which the interview is no longer available to candidates. null keeps it always available.
interview_conversation_speedstring|nullConversation 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 speaki…
interview_departmentstring|nullDepartment the position belongs to. Blank is stored as null.
interview_salarystring|nullSalary range shown for the position. Blank is stored as null.
interview_template_idstring|nullId 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.
interview_tonestring|nullTone — 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`: Friendl…
interview_typestring|nullInterview 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-screeni…
knowledge_base_store_idstring|nullKnowledge base store id the interview draws context from; validated for existence. null unlinks it.
locationstring|nullInterview location (column `interview_location`). Blank is stored as null.
max_durationnumber|nullLive session limit in seconds. Also the basis for the credit multiplier.
max_followupsinteger|nullMaximum 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).
namestring|nullInterview / position name.
pdf_export_auto_configobject|nullAuto-generate a candidate PDF report with these options once the interview completes. null disables auto-export.
position_idstring|nullyesId of the interview definition (single-stage) or position definition (multi-stage) to update. The same id you pass to job-interview-get.
questionsarray|nullOPTIONAL. 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 li…
questions_random_subsetnumber|nullAsk only a random subset of the questions, as a fraction between 0.01 and 0.9. null asks all questions.
recordingstring|nullCheating/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`: Audi…
recording_full_sessionstring|nullFull 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 (av…
recruiter_profile_idstring|nullProfile id of the recruiter owning this interview. Must be a merchant/merchant_owner/admin profile of the same merchant. null clears it.
regenerate_candidate_expectationsboolean|nullRe-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 `qu…
required_pronunciationboolean|nullRequire pronunciation assessment (restricts to pronunciation-capable languages).
result_enable_edit_transcriptboolean|nullAllow editing the transcript on the result view.
result_viewstring|nullResult 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 transcr…
seniority_levelstring|nullTarget 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. | `senio…
statusstring|nullNew 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).
tagsarray|nullFree-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 per…
typestring|nullProduct 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 inte…
type_creditstring|nullCredit 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`: Res…
visibilitystring|nullWho 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`: Invi…
NameTypeReqDescription
is_multistageboolean|nullyesTrue when the id resolved to a multi-stage position (position_def_set) rather than a single interview.
position_idstring|nullyesThe id that was updated.
questions_diffobjectWhat the question diff decided, question by question. Absent when `questions` was not sent.
updated_fieldsarray|nullyesNames of the stored columns that were written, plus `status` when the lifecycle status was changed and `questions` when the question list was diffed.

No examples provided.

Common questions

What is the JobMojito MCP server?

JobMojito is an MCP server listed in the public MCP registry as com.jobmojito/jobmojito. Run AI interviews, simulated personas and coaching sessions on JobMojito. This page covers its hosted endpoint (https://mcp.jobmojito.com/mcp).

Is the JobMojito MCP server safe to use?

JobMojito scores 84 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the JobMojito MCP server expose?

JobMojito exposes 29 tools: search_documentation, get_documentation, list_my_merchants, create_interview, create_interview_from_questions, and 24 more. Their descriptions and schemas cost roughly 16,638 tokens of context every time the server is loaded.

Does the JobMojito MCP server require authentication?

Yes. JobMojito asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the JobMojito MCP server still maintained?

JobMojito is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.