Skip to main content
Glama

Generate shareable interview link

generate_interview_url
Destructive

[Interviews] Generate a signed link that works for 30 days and can be opened more than once; nothing is sent. Whoever holds the link gets its access. type picks who it is for and the ids it needs: interview-for-profile = one candidate's own interview link (interview_profile_id + interview_id); results-for-profile = that candidate's results (interview_profile_id); interview-result-candidate = one result for the candidate, interview-result-talent-seeker = one result for a reviewer (interview_result_id); interview-results-for-position = every result of an active interview or position for a reviewer (interview_id). interview_profile_id is the candidate's id from list_candidates. There is no anonymous link to an interview: invitations are sent by invite_candidates.

Every argument in full, with examples: get_tool_reference.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "type": "<type>"
    },
    "name": "generate_interview_url"
  }
}

Input Schema

NameRequiredDescriptionDefault
typeYesWhich kind of signed URL to generate.
llm_modelNoYour model id, e.g. "claude-opus-4-8"; "unknown" if unsure. For analytics.
show_menuNotrue shows the navigation menu on the page the link opens; false or left out hides it.
merchant_idNoCompany (a company `id` from list_my_merchants, a uuid) to act for. Honoured for admins and sub-merchant operators only; other callers always use their token's company.
interview_idNoThe interview (an interview `id` from list_interviews) or position (a position `id` from list_interviews), a uuid. Required for interview-for-profile and interview-results-for-position.
conversation_idNoThe conversation_id this server returned earlier in this conversation, unchanged, including after later user messages. Omit it if you have none. Recorded for the server developer's analytics.
interview_result_idNoThe interview result (a result id from list_interview_results), a uuid. Required for interview-result-candidate and interview-result-talent-seeker.
interview_profile_idNoThe candidate (the `id` of a list_candidates row, a uuid; not a `profile_id` (list_users)). Required for interview-for-profile and results-for-profile.

Output Schema

NameRequiredDescriptionDefault
resultYes
_mcp_instructionsNoServer-issued metadata for this conversation.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • removedInput schema / properties / hide_menu
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "boolean"
      -    }
      -  ],
      -  "description": "Pass the string 'false' to show the navigation menu; any other value hides it (default)."
      -}
    • changedInput schema / properties / interview_id / description
      Previous value: -"The interview (interview_def_set.id) or position (position_def_set.id), a uuid. Required for interview-for-profile and interview-results-for-position."New value: +"The interview (an interview `id` from list_interviews) or position (a position `id` from list_interviews), a uuid. Required for interview-for-profile and interview-results-for-position."
    • changedInput schema / properties / interview_profile_id / description
      Previous value: -"The candidate (profile_interview.id, a uuid; not a profile.id). Required for interview-for-profile and results-for-profile."New value: +"The candidate (the `id` of a list_candidates row, a uuid; not a `profile_id` (list_users)). Required for interview-for-profile and results-for-profile."
    • changedInput schema / properties / interview_result_id / description
      Previous value: -"The interview result (interview_result.id), a uuid. Required for interview-result-candidate and interview-result-talent-seeker."New value: +"The interview result (a result id from list_interview_results), a uuid. Required for interview-result-candidate and interview-result-talent-seeker."
    • changedInput schema / properties / merchant_id / description
      Previous value: -"Company (merchant.id, a uuid) to act for. Honoured for admins and sub-merchant operators only; other callers always use their token's company."New value: +"Company (a company `id` from list_my_merchants, a uuid) to act for. Honoured for admins and sub-merchant operators only; other callers always use their token's company."
    • addedInput schema / properties / show_menu
      Added value: +{
      +  "description": "true shows the navigation menu on the page the link opens; false or left out hides it.",
      +  "type": "boolean"
      +}
  2. Changed4 schema fields changed
    • addedInput schema / properties / llm_model
      Added value: +{
      +  "description": "Your model id, e.g. \"claude-opus-4-8\"; \"unknown\" if unsure. For analytics.",
      +  "type": "string"
      +}
    • changedInput schema / properties / type / description
      Previous value: -"Which kind of signed URL to generate. interview-for-profile: the candidate takes the interview or position (needs interview_profile_id and interview_id); results-for-profile: the candidate sees all their results (needs interview_profile_id); interview-result-candidate: the candidate sees one result (needs interview_result_id); interview-result-talent-seeker: a reviewer sees one result in the recruiter view (needs interview_result_id); interview-results-for-position: a reviewer sees every result of an interview or position (needs interview_id)."New value: +"Which kind of signed URL to generate."
    • removedOutput schema / properties / result / description
      Removed value: -"The signed interview URL."
    • removedOutput schema / properties / result / example
      Removed value: -"https://interviews.example.com/interview/take/<id>/?interview_token=<jwt>&view_hm=true"
  3. Changed5 schema fields changed
    • changedInput schema / properties / interview_id / description
      Previous value: -"Interview or position id. Required for interview-for-profile and interview-results-for-position."New value: +"The interview (interview_def_set.id) or position (position_def_set.id), a uuid. Required for interview-for-profile and interview-results-for-position."
    • changedInput schema / properties / interview_profile_id / description
      Previous value: -"Candidate profile id. Required for interview-for-profile and results-for-profile."New value: +"The candidate (profile_interview.id, a uuid; not a profile.id). Required for interview-for-profile and results-for-profile."
    • changedInput schema / properties / interview_result_id / description
      Previous value: -"Interview result id. Required for interview-result-candidate and interview-result-talent-seeker."New value: +"The interview result (interview_result.id), a uuid. Required for interview-result-candidate and interview-result-talent-seeker."
    • changedInput schema / properties / merchant_id / description
      Previous value: -"Override merchant id (admin / sub-merchant only)."New value: +"Company (merchant.id, a uuid) to act for. Honoured for admins and sub-merchant operators only; other callers always use their token's company."
    • changedInput schema / properties / type / description
      Previous value: -"Which kind of signed URL to generate."New value: +"Which kind of signed URL to generate. interview-for-profile: the candidate takes the interview or position (needs interview_profile_id and interview_id); results-for-profile: the candidate sees all their results (needs interview_profile_id); interview-result-candidate: the candidate sees one result (needs interview_result_id); interview-result-talent-seeker: a reviewer sees one result in the recruiter view (needs interview_result_id); interview-results-for-position: a reviewer sees every result of an interview or position (needs interview_id)."
  4. Changed7 schema fields changed
    • changedInput schema / properties / conversation_id / description
      Previous value: -"Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."New value: +"The conversation_id this server returned earlier in this conversation, unchanged, including after later user messages. Omit it if you have none. Recorded for the server developer's analytics."
    • changedInput schema / properties / interview_id / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / interview_profile_id / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / interview_result_id / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / merchant_id / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "interview-for-profile",
      -  "results-for-profile",
      -  "interview-result-candidate",
      -  "interview-result-talent-seeker",
      -  "interview-results-for-position",
      -  null
      -]New value: +[
      +  "interview-for-profile",
      +  "results-for-profile",
      +  "interview-result-candidate",
      +  "interview-result-talent-seeker",
      +  "interview-results-for-position"
      +]
    • changedInput schema / properties / type / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
  5. Changed1 schema field changed
    • changedInput schema / properties / conversation_id / description
      Previous value: -"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."New value: +"Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
  6. Changed2 schema fields changed
    • addedInput schema / properties / conversation_id
      Added value: +{
      +  "description": "Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _mcp_instructions
      Added value: +{
      +  "description": "Server-issued metadata for this conversation.",
      +  "properties": {
      +    "conversation_id": {
      +      "description": "The server-issued conversation identifier.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  7. First observed

TDQS

A4.5/5.0
Behavior4/5

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

With annotations already declaring destructiveHint=true, openWorldHint=true and idempotentHint=false, the description adds real security context the annotations cannot convey: the link is valid 30 days, is reusable, sends nothing, and grants access to whoever holds it, which is the practical meaning of the destructive flag here. It does not address whether repeated calls mint distinct links (relevant to the non-idempotent hint) or how a link can be revoked, so it falls short of a 5.

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

Conciseness4/5

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

The critical facts (signed, 30 days, reusable, nothing sent) are front-loaded in the first clause, and the type breakdown is packed efficiently into a single sentence. The trailing pointer to get_tool_reference is slightly promotional and the whole block is dense, but no sentence is filler.

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?

Return values are covered by an output schema and every parameter is documented in the schema, so the description's job is the behavioral and routing layer, which it handles well. The only meaningful omission for a link-minting, destructive-flagged tool is lifecycle detail beyond the 30-day window, such as revocation or whether a new call invalidates prior links.

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 baseline is 3, but the description goes beyond it by consolidating the type-to-required-ids matrix in one place (e.g. "results-for-profile = that candidate's results (interview_profile_id)") and by clarifying the intent of each result mode as candidate-facing versus reviewer-facing. It adds no meaning for the analytics parameters (llm_model, conversation_id, show_menu), which rely entirely on 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?

Opens with a specific verb and resource ("Generate a signed link") plus the concrete scope of what the link is (30-day, reusable, nothing sent). It explicitly distinguishes itself from the closest sibling by stating "invitations are sent by invite_candidates". An agent can tell this apart from invite_candidates and the list_* tools without opening another schema.

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?

It enumerates every value of `type` and pairs each with the id it requires, so the agent knows exactly which mode to pick for a candidate-level, result-level, or position-level link. It also states the negative case ("There is no anonymous link to an interview") and redirects to the correct sibling. This is explicit when-to-use and when-not-to-use guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.