Junior's MCP connector exposes 4 read-only tools. Every tool is scoped to the signed-in user: it returns only the projects, calls, and entities that user can already see in the Junior web app.
You don't call these yourself — the assistant picks the right one from what you ask. This page is here so you can see exactly what it can reach. For phrasing that works well, see What you can ask.
| Tool | What it does | Example ask |
|---|---|---|
get_call | Read one call — summary, Key Takeaways, Q&A, and optionally the transcript | Summarise the call with the former Head of Procurement |
list_calls | Find calls by expert network, country, job title, segment, rating, cost, duration, or date | Expert calls in France rated 4+ from GLG since March |
list_entities | See the companies and products recognized across a project's calls | Which competitors came up most across the diligence? |
list_projects | List your projects and the segment names their calls are tagged with | What segments do we have calls for on the Acme diligence? |
Server version 0.5.0 — this changes whenever a tool name, parameter, or response shape changes, so clients that cache tool definitions can tell they need to refresh.
Parameters and response fields for each tool — useful for security review or for anyone building against the same data.
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.
| Parameter | Type | Description |
|---|---|---|
call_id required | string | Call's public ID — the id field returned by list_calls. Under the hood this is transcript.public_id (transcript and call share one identifier in Junior's data model). |
include_ktas | boolean · default true | Include 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_notes | boolean · default true | Include your scratchpad notes from the call (the ScribblePad you type during a call). Defaults to true; set false to omit. |
include_qa | boolean · default true | Include 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_summary | boolean · default true | Include the call's AI summary (markdown). Defaults to true; set false to omit (e.g. when you only need Q&A or metadata). |
include_transcript | boolean · default false | Verbatim 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. |
| Field | Type | Description |
|---|---|---|
anonymity_status | string | null | Redaction 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_status | string | null | Where 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. |
cost | number | null | — |
created_at | string | null | ISO 8601 timestamp of when the call record was created in Junior — not when the call took place. See date for that. |
date | string | null | ISO 8601 timestamp of when the call took place. |
duration_minutes | number | null | Call duration in minutes, derived from the recording/transcript. null when the duration is unknown. |
expert | object | Who was interviewed. |
expert.bio | string | null | — |
expert.country | string | null | The interviewee's country, e.g. 'France'. |
expert.job_title | string | null | The interviewee's job title, e.g. 'VP of Procurement'. |
expert.name | string | null | The 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.organization | string | null | The interviewee's employer. |
id | string | The call's public ID — the value you passed in. |
kta_approval_status | "approved" | "pending" | null | 'pending' = AI-generated, not yet human-reviewed (treat as draft); 'approved' = reviewed. Omitted when include_ktas=false. |
ktas | string | null | Key Takeaways as markdown. Omitted when include_ktas=false; null if none have been generated for the call. |
notes | string | null | Your scratchpad notes from the call (the ScribblePad — transcript.scribble_pad). Omitted when include_notes=false. |
qa_blocks | array | The call's cleaned question-and-answer pairs. Omitted when include_qa=false. |
qa_blocks[].answer | string | null | The answer, rewritten as a clean standalone statement rather than raw transcript speech. |
qa_blocks[].id | string | QA block UUID. |
qa_blocks[].question | string | null | The question as asked. |
qa_blocks[].section | string | null | — |
rating | number | null | — |
segment | string | null | The 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. |
source | string | null | Where the call came from — free text, usually an expert-network name such as 'GLG' or 'AlphaSights', or an import label. |
summary | string | null | The call's AI summary (markdown). Omitted when include_summary=false. |
transcript | string | null | Verbatim transcript text. Present only when include_transcript=true. |
transcript_public_id | string | null | Same value as id — transcript and call share one identifier in Junior's data model. |
List calls · read-only · requires calls:read
List calls (interviews) most recent first. Defaults to calls the authenticated user personally conducted (scope="mine"). Pass scope="all" to widen to every call you can access — project calls, teammates' calls, and your own uncategorized (not-yet-filed) calls. 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.
| Parameter | Type | Description |
|---|---|---|
call_status | string (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 in queries is 'done' (the call actually happened). |
call_type | "interview" | "meeting" | Filter on transcript.call_type. 'interview' = expert call, 'meeting' = internal/recorded meeting. |
country | string (1–64) | Filter on interview.country. Case-insensitive exact match (e.g. 'France', 'United States'). |
cursor | string | — |
date_after | string (date-time) | ISO 8601 timestamp. Returns calls with interview.date >= this. Use for date-range queries. |
date_before | string (date-time) | ISO 8601 timestamp. Returns calls with interview.date <= this. |
job_title_contains | string (1–128) | Case-insensitive substring match on interview.job_title (e.g. 'VP', 'CFO', 'Engineer'). |
limit | integer (1–100) · default 25 | — |
max_cost | number (min 0) | Return only calls with interview.cost <= 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_minutes | number (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_cost | number (min 0) | Return only calls with interview.cost >= this. See max_cost. |
min_duration_minutes | number (min 0) | Return only calls whose transcript duration >= this many minutes. See max_duration_minutes. |
min_rating | integer (1–5) | Return only calls with interview.rating >= this. 1–5 scale. |
organization_contains | string (1–128) | Case-insensitive substring match on interview.organization (e.g. 'Goldman', 'Microsoft'). |
project_id | string (uuid) | Project UUID. Omit to list calls across every accessible project. |
scope | "mine" | "all" | "project" · default "mine" | Which calls to list. "mine" (default) = calls you personally conducted (interview.created_by = you). "all" = every call you can access: project calls, teammates' calls, and your own uncategorized (not-yet-filed) calls. ("project" is a deprecated alias for "all".) Combine with project_id to narrow to a single project. |
segment_contains | string (1–128) | Case-insensitive substring match on the call's segment name (interview_segment.segment) — 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_contains | string (1–128) | Case-insensitive substring match on interview.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'). |
| Field | Type | Description |
|---|---|---|
calls | array | Matching calls, most recent first. |
calls[].call_status | string | null | Where 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[].cost | number | null | — |
calls[].country | string | null | The interviewee's country, e.g. 'France'. |
calls[].created_at | string | null | ISO 8601 timestamp of when the call record was created in Junior — not when the call took place. See date for that. |
calls[].date | string | null | ISO 8601 timestamp of when the call took place. |
calls[].duration_minutes | number | null | Call duration in minutes, derived from the recording/transcript. null when the duration is unknown. |
calls[].id | string | The call's public ID. Pass as call_id to get_call for the transcript, Questions & Answers, and Key Takeaways. |
calls[].job_title | string | null | The interviewee's job title, e.g. 'VP of Procurement'. |
calls[].name | string | null | The 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[].organization | string | null | The interviewee's employer. |
calls[].rating | number | null | — |
calls[].segment | string | null | The 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[].source | string | null | Where the call came from — free text, usually an expert-network name such as 'GLG' or 'AlphaSights', or an import label. |
next_cursor | string | null | Pass as cursor to fetch the next page. null when this is the last page. |
List entities in a project · read-only · requires entities:read
List entities (companies, products, etc.) recognized across the calls in a project.
| Parameter | Type | Description |
|---|---|---|
cursor | string | — |
limit | integer (1–200) · default 50 | — |
project_id required | string (uuid) | Project UUID |
type | string | Optional entity-type filter (e.g. "company", "product"). Omit to return all types. |
| Field | Type | Description |
|---|---|---|
entities | array | Entities recognized across the project's calls. |
entities[].category | string | null | — |
entities[].competitor_tier | string | null | — |
entities[].created_at | string | null | ISO 8601 timestamp of when the entity was first recognized in this project. |
entities[].description | string | null | — |
entities[].domain | string | null | The entity's web domain, where one has been resolved. |
entities[].id | string | Entity UUID. |
entities[].is_competitor | boolean | null | — |
entities[].name | string | null | Entity name as recognized across the project's calls. |
entities[].overview | string | null | — |
entities[].type | string | null | Entity type, e.g. 'company' or 'product'. Pass as type to filter. |
next_cursor | string | null | Pass as cursor to fetch the next page. null when this is the last page. |
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.
| Parameter | Type | Description |
|---|---|---|
cursor | string | Opaque pagination cursor from a previous response |
include_archived | boolean · default false | Include archived projects in the result |
limit | integer (1–100) · default 25 | Max rows to return (1–100, default 25) |
scope | "mine" | "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. |
| Field | Type | Description |
|---|---|---|
next_cursor | string | null | Pass as cursor to fetch the next page. null when this is the last page. |
projects | array | Your projects, most recently created first. |
projects[].created_at | string | null | ISO 8601 timestamp of when the project was created. |
projects[].id | string | Project UUID. Pass as project_id elsewhere. |
projects[].is_archived | boolean | null | Archived projects are hidden by default; pass include_archived to list them. |
projects[].name | string | null | Project name. |
projects[].role | string | null | Your role on this project — 'lead' or 'member'. null on a project you created but were never explicitly added to. |
projects[].sector | string | null | Reserved. Currently returns null. |
projects[].segments | array of string | The 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[].status | string | null | — |
projects[].summary | string | null | Short description of the project's research scope. |