The connector has five read tools and one tool for adding new calls. Your assistant chooses which tool to use from what you ask; you don't need to call them yourself. For example prompts, see Using the MCP connector.

Every tool runs as the person signed in. Read tools return only projects, calls, and entities you can already access in Junior. The write tool can add a call to a project you belong to, or leave it unfiled. It can't change or delete existing content.

What each tool does

ToolWhat it doesExample ask
get_callRead one call — summary, Key Takeaways, Q&A, and optionally the transcriptSummarize the call with the former Head of Procurement
get_callsRead a whole project's calls in one request — metadata, summary, Key Takeaways and the verbatim transcript per call by default — for questions that span the corpus rather than one callRead every call on the Acme diligence and tell me what buyers said about pricing
ingest_callAdd a new call and transcript to a project — for calls from sources Junior isn't integrated with. Creates only; it can't change an existing callAdd this transcript to the Acme diligence as a call with Jane Smith
list_callsFind calls by expert network, country, job title, segment, rating, cost, duration, or dateExpert calls in France rated 4+ from GLG since March
list_entitiesSee the companies and products recognized across a project's calls, and which are flagged as competitorsWhich competitors came up on the Acme diligence?
list_projectsList your projects and the segment names their calls are tagged withWhat segments do we have calls for on the Acme diligence?

Server version 0.9.0 — this changes whenever a tool name, parameter, or response shape changes, so clients that cache tool definitions can tell they need to refresh.

get_call

Get a call · read-only · requires calls:read

Fetch one call's detail by its public ID (get the ID from list_calls first). Returns metadata, a summary, cleaned Q&A, and Key Takeaways by default. Set include_transcript=true only when you need exact quotes or precise wording — for most questions the summary and Q&A are enough and far smaller.

Parameters

ParameterTypeDescription
call_id requiredstringCall's public ID — the id field returned by list_calls. A call and its transcript share one identifier, so a transcript ID from another tool's output works here too.
include_ktasboolean · default trueInclude Key Takeaways: a curated markdown summary of the call's most important points. Defaults to true; keep on when the user wants headline insights rather than full detail.
include_notesboolean · default trueInclude your scratchpad notes from the call (the ScribblePad you type during a call). Defaults to true; set false to omit.
include_qaboolean · default trueInclude the cleaned, structured Q&A extracted from the call (question/answer pairs by section). Defaults to true; use for content and quotes organized by topic.
include_summaryboolean · default trueInclude the call's AI summary (markdown). Defaults to true; set false to omit (e.g. when you only need Q&A or metadata).
include_transcriptboolean · default falseVerbatim transcript text. Defaults to false. Set true only when you need exact quotes or precise wording — it can be large, and the summary and Q&A cover most questions.

Response

FieldTypeDescription
anonymity_statusstring or nullRedaction state for this call: 'not_requested', 'started', 'complete', or 'errored'. 'complete' means anonymized variants of the identity fields exist — but this tool still returns the originals, so treat this as informational rather than as a description of what you received.
call_statusstring or nullWhere the call sits in the scheduling workflow: 'scheduled', 'reached_out', 'not_scheduled', 'done', 'rescheduled', 'not_interested', 'canceled', or 'candidate'. 'done' means the call actually happened.
costnumber or nullThe call's recorded spend in the project's currency — the 'Cost' column in the web call tracker. null when no cost was recorded.
created_atstring or nullISO 8601 timestamp of when the call record was created in Junior — not when the call took place. See date for that.
datestring or nullISO 8601 timestamp of when the call took place.
duration_minutesnumber or nullCall duration in minutes, derived from the recording/transcript. null when the duration is unknown.
expertobjectWho was interviewed.
expert.biostring or nullThe interviewee's background as supplied by the expert network, where one provided it.
expert.countrystring or nullThe interviewee's country, e.g. 'France'.
expert.job_titlestring or nullThe interviewee's job title, e.g. 'VP of Procurement'.
expert.namestring or nullThe interviewee's name as recorded. Identity fields are returned as-is: MCP does not substitute the anonymized variant, even for calls that have been through redaction, which matches what the Junior web app shows. (The REST API differs — it can return an anonymized name depending on organization settings.) See anonymity_status for whether this call was redacted.
expert.organizationstring or nullThe interviewee's employer.
idstringThe call's public ID — the value you passed in.
kta_approval_status"approved" or "pending" or null'pending' = AI-generated, not yet human-reviewed (treat as draft); 'approved' = reviewed. Omitted when include_ktas=false.
ktasstring or nullKey Takeaways as markdown. Omitted when include_ktas=false; null if none have been generated for the call.
notesstring or nullYour scratchpad notes from the call (the ScribblePad in the web app). Omitted when include_notes=false.
qa_blocksarrayThe call's cleaned question-and-answer pairs. Omitted when include_qa=false.
qa_blocks[].answerstring or nullThe answer, rewritten as a clean standalone statement rather than raw transcript speech.
qa_blocks[].idstringQA block UUID.
qa_blocks[].questionstring or nullThe question as asked.
qa_blocks[].sectionstring or nullThe interview-guide section this Q&A came under, e.g. 'Pricing'. null for calls with no guide.
ratingnumber or nullThe call's quality rating on a 1–5 scale, as set in the web app. null when nobody has rated it.
segmentstring or nullThe call's segment — a per-project label grouping calls by interviewee type, e.g. 'Buyer' or 'Former Employee'. Call list_projects to see a project's segment vocabulary.
sourcestring or nullWhere the call came from — free text, usually an expert-network name such as 'GLG' or 'AlphaSights', or an import label.
summarystring or nullThe call's AI summary (markdown). Omitted when include_summary=false.
transcriptstring or nullVerbatim transcript text. Present only when include_transcript=true.
transcript_public_idstring or nullSame value as id — transcript and call share one identifier in Junior's data model.

get_calls

Get all calls in a project · read-only · requires calls:read

Fetch detail for every call in one project at once — the right tool for analyzing a whole corpus rather than a sample. Returns metadata, a summary, Key Takeaways and the verbatim transcript per call by default. Requires project_id (get it from list_projects). Accepts the same filters as list_calls (country, organization, job title, source, segment, rating, cost range, duration range, date range, call type, call status), AND-combined, so you can pull 'every done call rated 4+ since March' in one request instead of looping get_call per id. Returns up to max_calls (default 50); when more match, truncated is true and next_cursor pages. Check the response size first: the transcript is ~210 tokens per minute of call, so an hour-long call is ~12.5k and forty are ~500k. If that exceeds your context, narrow with the filters or set include_transcript=false. include_qa (~5k tokens/call) is a derivative of the transcript and defaults to false — turn it on only for question-level detail.

Parameters

ParameterTypeDescription
call_statusstring (1–64)Exact-match filter on interview.call_status. Case-sensitive. Valid values: 'scheduled', 'reached_out', 'not_scheduled', 'done', 'rescheduled', 'not_interested', 'canceled', 'candidate'. Most common is 'done' (the call happened).
call_type"interview" or "meeting"Filter on transcript.call_type. 'interview' = expert call, 'meeting' = internal/recorded meeting.
countrystring (1–64)Filter on interview.country. Case-insensitive exact match (e.g. 'France').
cursorstringOpaque pagination cursor from a previous get_calls response's next_cursor. Pass it to fetch the next page of the same filtered corpus.
date_afterstring (date-time)ISO 8601 timestamp. Returns calls with interview.date ≥ this.
date_beforestring (date-time)ISO 8601 timestamp. Returns calls with interview.date ≤ this.
include_ktasboolean · default trueInclude each call's Key Takeaways (curated markdown summary). Defaults to true — the highest signal per token in the response.
include_notesboolean · default trueInclude each call's ScribblePad notes — the scratchpad the conductor typed during the call. Defaults to true; set false to omit.
include_qaboolean · default falseInclude each call's cleaned, structured Q&A (question/answer pairs by section). Defaults to false: budget ~5,000 tokens per call, and it is a restructured derivative of the verbatim transcript rather than new content. Turn it on for a narrow, filtered set when you want question-level structure.
include_summaryboolean · default trueInclude each call's AI summary (markdown). Defaults to true. Set false to trim the response when you only need Q&A or metadata — across a whole project the summaries add up.
include_transcriptboolean · default trueInclude each call's verbatim transcript. Defaults to true — this is the primary source and usually what a corpus question needs. Budget ~210 tokens per minute of call (an hour-long call is ~12.5k), multiply by max_calls, and if that exceeds your remaining context, narrow with the filters or lower max_calls before setting this false.
job_title_containsstring (1–128)Case-insensitive substring match on interview.job_title (e.g. 'VP', 'CFO').
max_callsinteger (1–200) · default 50Maximum number of calls to return in this response (1-200, default 50). Lower it when the content you asked for is large relative to your remaining context; when more calls match than you asked for, truncated is true and next_cursor pages the rest. Each page you fetch stays in your context, so paging spreads the cost out rather than reducing it.
max_costnumber (min 0)Return only calls with interview.cost ≤ this.
max_duration_minutesnumber (min 0)Return only calls whose transcript duration ≤ this many minutes.
min_costnumber (min 0)Return only calls with interview.cost ≥ this.
min_duration_minutesnumber (min 0)Return only calls whose transcript duration ≥ this many minutes.
min_ratinginteger (1–5)Return only calls with interview.rating ≥ this. 1-5 scale.
organization_containsstring (1–128)Case-insensitive substring match on interview.organization (e.g. 'Goldman').
project_id requiredstring (uuid)Project UUID to pull the corpus from (required). Get it from list_projects.
segment_containsstring (1–128)Case-insensitive substring match on the call's segment name (interview_segment.segment).
source_containsstring (1–128)Case-insensitive substring match on interview.source (e.g. 'GLG', 'AlphaSights').

Response

FieldTypeDescription
callsarrayThe matching calls, most recent first (ordered by creation time, then ID). Array order is the only ordering signal — no rank or position field is returned.
calls[].anonymity_statusstring or nullRedaction state for this call: 'not_requested', 'started', 'complete', or 'errored'. 'complete' means anonymized variants of the identity fields exist — but this tool still returns the originals, so treat this as informational rather than as a description of what you received.
calls[].call_statusstring or nullWhere the call sits in the scheduling workflow: 'scheduled', 'reached_out', 'not_scheduled', 'done', 'rescheduled', 'not_interested', 'canceled', or 'candidate'. 'done' means the call actually happened.
calls[].costnumber or nullThe call's recorded spend in the project's currency — the 'Cost' column in the web call tracker. null when no cost was recorded.
calls[].created_atstring or nullISO 8601 timestamp of when the call record was created in Junior — not when the call took place. See date for that.
calls[].datestring or nullISO 8601 timestamp of when the call took place.
calls[].duration_minutesnumber or nullCall duration in minutes, derived from the recording/transcript. null when the duration is unknown.
calls[].expertobjectWho was interviewed.
calls[].expert.biostring or nullThe interviewee's background as supplied by the expert network, where one provided it.
calls[].expert.countrystring or nullThe interviewee's country, e.g. 'France'.
calls[].expert.job_titlestring or nullThe interviewee's job title, e.g. 'VP of Procurement'.
calls[].expert.namestring or nullThe interviewee's name as recorded. Identity fields are returned as-is: MCP does not substitute the anonymized variant, even for calls that have been through redaction, which matches what the Junior web app shows. (The REST API differs — it can return an anonymized name depending on organization settings.) See anonymity_status for whether this call was redacted.
calls[].expert.organizationstring or nullThe interviewee's employer.
calls[].idstringThe call's public ID. Pass it to get_call to re-fetch this one call on its own.
calls[].kta_approval_status"approved" or "pending" or null'pending' = AI-generated, not yet human-reviewed (treat as draft); 'approved' = reviewed. Omitted when include_ktas=false.
calls[].ktasstring or nullKey Takeaways as markdown. Omitted when include_ktas=false; null if none have been generated for the call.
calls[].notesstring or nullYour scratchpad notes from the call (the ScribblePad in the web app). Omitted when include_notes=false.
calls[].qa_blocksarrayThe call's cleaned question-and-answer pairs. Omitted when include_qa=false.
calls[].qa_blocks[].answerstring or nullThe answer, rewritten as a clean standalone statement rather than raw transcript speech.
calls[].qa_blocks[].idstringQA block UUID.
calls[].qa_blocks[].questionstring or nullThe question as asked.
calls[].qa_blocks[].sectionstring or nullThe interview-guide section this Q&A came under, e.g. 'Pricing'. null for calls with no guide.
calls[].ratingnumber or nullThe call's quality rating on a 1–5 scale, as set in the web app. null when nobody has rated it.
calls[].segmentstring or nullThe call's segment — a per-project label grouping calls by interviewee type, e.g. 'Buyer' or 'Former Employee'. Call list_projects to see a project's segment vocabulary.
calls[].sourcestring or nullWhere the call came from — free text, usually an expert-network name such as 'GLG' or 'AlphaSights', or an import label.
calls[].summarystring or nullThe call's AI summary (markdown). Omitted when include_summary=false.
calls[].transcriptstring or nullVerbatim transcript text. Present only when include_transcript=true.
calls[].transcript_public_idstring or nullSame value as id — transcript and call share one identifier in Junior's data model.
next_cursorstring or nullOpaque cursor for the next page. Pass it back as cursor to continue; null when this response covered every matching call.
total_matchingnumberHow many calls match the filters in total, across every page — not just the ones in this response. Use it to say what you did and did not read ("25 of 137"), to size your pages deliberately rather than discovering the corpus by sweeping it, and to decide before spending context whether to fetch cheaper content instead.
truncatedbooleanTrue when more calls matched the filters than max_calls returned. Pair with next_cursor to fetch the rest — do not treat a truncated response as the whole corpus.

ingest_call

Add a call · requires calls:write

Add a call and its transcript to a project. Use this for calls from sources Junior has no integration with — an expert network that isn't wired up, notes from another tool. The transcript is processed like any upload (cleaning, Q&A extraction, Key Takeaways, entities, search indexing), so it becomes a normal call afterwards. This only creates new calls; it cannot change or delete an existing call. Returns before the call exists: poll list_calls to see it appear.

Parameters

ParameterTypeDescription
attendee_emailsarray of stringPeople to invite to the call. Emails that don't belong to users in your organization are skipped rather than rejected.
datestring (date-time)When the call took place (RFC 3339). UTC or a numeric offset both work; a local time with no offset is rejected.
expert_organizationstring (max 255)The expert's employer — not your own organization.
external_idstring (1–255)The source system's own id for this call. Supply it when you have one: it makes re-sending the same call a no-op instead of creating a duplicate.
job_titlestring (max 255)The expert's role at that employer, e.g. VP Procurement.
name requiredstring (1–255)The expert's name.
project_idstring (uuid)Project to file the call under (get it from list_projects). Omit to leave the call unmatched for someone to assign later.
sourcestring (max 255)Where the call came from, e.g. the expert network's name.
transcript requiredstringThe transcript text (plain text or markdown). Not a file upload.

Response

FieldTypeDescription
external_idstringThe deduplication key used — the one you supplied, or a fingerprint derived from the call's content and identity fields. Reuse it to make a retry a no-op instead of a second call.
project_idstring or nullThe project the call was filed under, or null if it was left unmatched.
statusstringThe call is created and processed asynchronously — it doesn't exist yet when this returns. Poll list_calls to see it appear; expect minutes, not seconds.

list_calls

List calls · read-only · requires calls:read

List calls (interviews) most recent first. Defaults to calls the authenticated user created (scope="mine"). Pass scope="all" to widen to every call you can access, in a project or not. Access comes from membership of the call's project, being its creator, or a per-call invite — not from sharing an organization with whoever recorded it. Pass project_id to narrow to a single project (works with any scope). Filter params (country, organization, job title, source, segment, rating, cost range, duration range, date range, call type, call status) are AND-combined and applied at query time, so you can fetch 'expert calls with people in France rated 4+ from GLG since March' without paginating through everything. Returns metadata only — use get_call for the transcript, Questions & Answers, and Key Takeaways.

Parameters

ParameterTypeDescription
call_statusstring (1–64)Exact-match filter on the call's status. Case-sensitive. Valid values: 'scheduled', 'reached_out', 'not_scheduled', 'done', 'rescheduled', 'not_interested', 'canceled', 'candidate'. Most common in queries is 'done' (the call actually happened).
call_type"interview" or "meeting"Filter by call type. 'interview' = expert call, 'meeting' = recorded internal meeting.
countrystring (1–64)Filter by the expert's country (expert.country). Case-insensitive exact match (e.g. 'France', 'United States').
cursorstringOpaque page token from a previous call's next_cursor. Omit for the first page.
date_afterstring (date-time)ISO 8601 timestamp. Returns calls whose date is at or after this. Use for date-range queries.
date_beforestring (date-time)ISO 8601 timestamp. Returns calls whose date is at or before this.
job_title_containsstring (1–128)Case-insensitive substring match on the expert's job title (expert.job_title) (e.g. 'VP', 'CFO', 'Engineer').
limitinteger (1–100) · default 25How many calls to return per page. 1–100.
max_costnumber (min 0)Return only calls whose cost is at or below this. Cost is the call's recorded spend in the project's currency — the 'Cost' column in the web call tracker. Combine with min_cost for a range.
max_duration_minutesnumber (min 0)Return only calls whose transcript duration ≤ this many minutes — the 'Duration' column in the web call tracker. Combine with min_duration_minutes for a range.
min_costnumber (min 0)Return only calls whose cost is at or above this. See max_cost.
min_duration_minutesnumber (min 0)Return only calls whose transcript duration ≥ this many minutes. See max_duration_minutes.
min_ratinginteger (1–5)Return only calls whose rating is at or above this. 1–5 scale.
organization_containsstring (1–128)Case-insensitive substring match on the expert's employer (expert.organization) (e.g. 'Goldman', 'Microsoft').
project_idstring (uuid)Project UUID. Omit to list calls across every accessible project.
scope"mine" or "all" or "project" · default "mine"Which calls to list. "mine" (default) = calls you created — not necessarily ones you recorded or attended. "all" = every call you can access; see the tool description for what grants access. ("project" is a deprecated alias for "all".) Combine with project_id to narrow to a single project.
segment_containsstring (1–128)Case-insensitive substring match on the call's segment name — the 'Segment' column in the web call tracker. Segments are per-project labels grouping calls by interviewee type (e.g. 'Buyer', 'Competitor', 'Former Employee').
source_containsstring (1–128)Case-insensitive substring match on the call's source (e.g. 'GLG', 'AlphaSights'). The source field is free text — usually an expert-network name or import label — so substring match handles common variants ('GLG' vs 'Gerson Lehrman').

Response

FieldTypeDescription
callsarrayMatching calls, most recent first.
calls[].call_statusstring or nullWhere the call sits in the scheduling workflow: 'scheduled', 'reached_out', 'not_scheduled', 'done', 'rescheduled', 'not_interested', 'canceled', or 'candidate'. 'done' means the call actually happened.
calls[].costnumber or nullThe call's recorded spend in the project's currency — the 'Cost' column in the web call tracker. null when no cost was recorded.
calls[].countrystring or nullThe interviewee's country, e.g. 'France'.
calls[].created_atstring or nullISO 8601 timestamp of when the call record was created in Junior — not when the call took place. See date for that.
calls[].datestring or nullISO 8601 timestamp of when the call took place.
calls[].duration_minutesnumber or nullCall duration in minutes, derived from the recording/transcript. null when the duration is unknown.
calls[].idstringThe call's public ID. Pass as call_id to get_call for the transcript, Questions & Answers, and Key Takeaways.
calls[].job_titlestring or nullThe interviewee's job title, e.g. 'VP of Procurement'.
calls[].namestring or nullThe interviewee's name as recorded. Not anonymized: MCP returns the original even for calls that have been through redaction, matching the Junior web app. get_call returns anonymity_status if you need to know whether a call was redacted.
calls[].organizationstring or nullThe interviewee's employer.
calls[].ratingnumber or nullThe call's quality rating on a 1–5 scale, as set in the web app. null when nobody has rated it.
calls[].segmentstring or nullThe call's segment — a per-project label grouping calls by interviewee type, e.g. 'Buyer' or 'Former Employee'. Call list_projects to see a project's segment vocabulary.
calls[].sourcestring or nullWhere the call came from — free text, usually an expert-network name such as 'GLG' or 'AlphaSights', or an import label.
next_cursorstring or nullPass as cursor to fetch the next page. null when this is the last page.

list_entities

List entities in a project · read-only · requires entities:read

List entities (companies, products, etc.) recognized across the calls in a project.

Parameters

ParameterTypeDescription
cursorstringOpaque page token from a previous call's next_cursor. Omit for the first page.
limitinteger (1–200) · default 50How many entities to return per page. 1–200.
project_id requiredstring (uuid)Project UUID
typestringOptional entity-type filter (e.g. "company", "product"). Omit to return all types.

Response

FieldTypeDescription
entitiesarrayEntities recognized across the project's calls.
entities[].categorystring or nullFree-text market category Junior assigned, e.g. 'Electronics' or 'Grocery'. null when none was inferred.
entities[].competitor_tierstring or nullHow close a competitor this is, e.g. 'tier-1'. null for entities that aren't competitors, or when no tier was assigned. Not a mention count — it says nothing about how often the entity came up.
entities[].created_atstring or nullISO 8601 timestamp of when the entity was first recognized in this project.
entities[].descriptionstring or nullOne-line description of what the entity is. null when Junior hasn't generated one.
entities[].domainstring or nullThe entity's web domain, where one has been resolved.
entities[].idstringEntity UUID.
entities[].is_competitorboolean or nullTrue when this entity is flagged as a competitor in the project. Use it to answer "which competitors came up" without reading every call.
entities[].namestring or nullEntity name as recognized across the project's calls.
entities[].overviewstring or nullLonger profile of the entity, where one has been generated. null otherwise.
entities[].typestring or nullEntity type, e.g. 'company' or 'product'. Pass as type to filter.
next_cursorstring or nullPass as cursor to fetch the next page. null when this is the last page.

list_projects

List projects · read-only · requires projects:read

List projects in your organization (most recent first). Defaults to projects you actively run as creator or lead (scope="mine"). Pass scope="all" to include projects you were auto-added to as a member. Each project includes its segments — the segment names calls in that project are tagged with. Read these first when a user asks to filter calls by segment, then pass the exact value to list_calls' segment_contains.

Parameters

ParameterTypeDescription
cursorstringOpaque pagination cursor from a previous response
limitinteger (1–100) · default 25Max rows to return (1–100, default 25)
scope"mine" or "all" · default "mine"Which projects to list. "mine" (default) = projects you created or are a lead of. "all" = every project you have any membership in.

Response

FieldTypeDescription
next_cursorstring or nullPass as cursor to fetch the next page. null when this is the last page.
projectsarrayYour projects, most recently created first.
projects[].created_atstring or nullISO 8601 timestamp of when the project was created.
projects[].idstringProject UUID. Pass as project_id elsewhere.
projects[].is_archivedboolean or nullAlways false — archived projects are excluded from all MCP reads.
projects[].namestring or nullProject name.
projects[].rolestring or nullYour role on this project — 'lead' or 'member'. null on a project you created but were never explicitly added to.
projects[].sectorstring or nullReserved. Currently returns null.
projects[].segmentsarray of stringThe segment names calls in this project are tagged with, e.g. 'Buyer', 'Competitor', 'Former Employee'. Segments are per-project — read these before filtering list_calls by segment_contains rather than guessing a value.
projects[].statusstring or nullLifecycle state of the project, e.g. 'active' or 'pending_deletion'. null when unset.
projects[].summarystring or nullShort description of the project's research scope.