LeaderboardBack to leaderboard — loading return destination
Opening report…
Loading report overview
M
MCP server
server.example.com/mcp
Tools and resources for your MCP client, with a public quality report and detailed checks.
Protocol
MCP 2025-11-25
Server version
1.0.0
Website
server.example.com
Supports
Tools · Resources
Overall score
90 /100
How is this score calculated?
Server metadata
Loading server metadata
Reviewed90/100
Discoverability
Loading discoverability
Reviewed90/100
Protocol
Loading protocol
Reviewed90/100
Tools
Loading tools
Reviewed90/100
MCP Apps
Loading mcp apps
Reviewed90/100
Tool documentation quality
Loading tool documentation quality
Reviewed90/100
LeaderboardBack to leaderboard — loading return destination
R
Roark
mcp.api.roark.ai/mcp
Test and monitor voice and chat AI agents with Roark. Read calls, transcripts, metric scores, and simulation results, and set up agents, personas, and customer flows to run simulated calls against your agent.
Test and monitor voice and chat AI agents with Roark. Read calls, transcripts, metric scores, and simulation results, and set up agents, personas, and customer flows to run simulated calls against your agent.
Roark is a voice and chat agent observability and simulation platform. This server reads agents, calls, transcripts, simulation results, and metrics, and it can create agents, phone endpoints, personas, and customer flows, and start simulations, in the signed-in account. Each tool does one of those things. Tools that act inside a project take a project id when the connection is not already pinned to one. list_projects returns the projects this credential can use.
Discoverability
0/6 passed0 of 6 passed0/100
Client listings and public setup information.
mcp.json or server-card.json
Either mcp.json or an MCP Server Card declaring this endpoint passes.
No matching mcp.json manifest or MCP Server Card was found at the checked URLs.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Lists voice and chat agents in a Roark project, every agent unless searchText narrows it. Returns each agent id, name, custom id, and description, one page at a time.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Input documentation gives an agent enough context to populate the arguments.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
searchText
Text to match against agent names and descriptions. When omitted, every agent is listed.
Clear enough to supply this argument.
after
Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page.
Clear enough to supply this argument.
limit
Page size: the most rows one response returns. When omitted, the API returns up to 20.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Agent id."
},
"name": {
"type": "string",
"description": "Agent name."
},
"customId": {
"type": [
"string",
"null"
],
"description": "Caller-chosen id, unique in the project."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"description": {
"type": [
"string",
"null"
],
"description": "What the agent does."
}
},
"description": "An agent."
},
"description": "Agents on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
}
Original tool metadata
{
"name": "list_agents",
"title": "List agents",
"description": "Lists voice and chat agents in a Roark project, every agent unless searchText narrows it. Returns each agent id, name, custom id, and description, one page at a time.",
"inputSchema": {
"type": "object",
"properties": {
"after": {
"type": "string",
"description": "Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page."
},
"limit": {
"type": "number",
"description": "Page size: the most rows one response returns. When omitted, the API returns up to 20."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
},
"searchText": {
"type": "string",
"description": "Text to match against agent names and descriptions. When omitted, every agent is listed."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Agent id."
},
"name": {
"type": "string",
"description": "Agent name."
},
"customId": {
"type": [
"string",
"null"
],
"description": "Caller-chosen id, unique in the project."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"description": {
"type": [
"string",
"null"
],
"description": "What the agent does."
}
},
"description": "An agent."
},
"description": "Agents on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
},
"annotations": {
"title": "List agents",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Lists the endpoints Roark uses to reach agents in a project: phone numbers and other transports. Returns each endpoint id, agent id, direction, type, and address. A simulation runs against an endpoint id.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
agentId
Agent id, from list_agents, to list only that agent's endpoints. When omitted, endpoints for every agent are listed.
Clear enough to supply this argument.
searchText
Text to match against the endpoint address, such as a phone number, or its environment name.
Clear enough to supply this argument.
after
Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page.
Clear enough to supply this argument.
limit
Page size: the most rows one response returns. When omitted, the API returns up to 20.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Agent endpoint id. run_simulation takes it in agentEndpoints."
},
"type": {
"type": "string",
"description": "Transport, such as PHONE."
},
"value": {
"type": "string",
"description": "The address Roark connects to, such as an E.164 phone number."
},
"agentId": {
"type": "string",
"description": "The agent this endpoint reaches."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"direction": {
"type": "string",
"description": "INCOMING, OUTGOING, or INCOMING_AND_OUTGOING."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"environment": {
"type": "string",
"description": "Environment name, such as production."
},
"outboundDialType": {
"type": "string",
"description": "How Roark starts an outbound call: NONE or HTTP_REQUEST."
},
"outboundDialHttpRequestDefinitionId": {
"type": [
"string",
"null"
],
"description": "The HTTP request definition used when outboundDialType is HTTP_REQUEST."
}
},
"description": "An agent endpoint."
},
"description": "Agent endpoints on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
}
Original tool metadata
{
"name": "list_agent_endpoints",
"title": "List agent endpoints",
"description": "Lists the endpoints Roark uses to reach agents in a project: phone numbers and other transports. Returns each endpoint id, agent id, direction, type, and address. A simulation runs against an endpoint id.",
"inputSchema": {
"type": "object",
"properties": {
"after": {
"type": "string",
"description": "Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page."
},
"limit": {
"type": "number",
"description": "Page size: the most rows one response returns. When omitted, the API returns up to 20."
},
"agentId": {
"type": "string",
"description": "Agent id, from list_agents, to list only that agent's endpoints. When omitted, endpoints for every agent are listed."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
},
"searchText": {
"type": "string",
"description": "Text to match against the endpoint address, such as a phone number, or its environment name."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Agent endpoint id. run_simulation takes it in agentEndpoints."
},
"type": {
"type": "string",
"description": "Transport, such as PHONE."
},
"value": {
"type": "string",
"description": "The address Roark connects to, such as an E.164 phone number."
},
"agentId": {
"type": "string",
"description": "The agent this endpoint reaches."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"direction": {
"type": "string",
"description": "INCOMING, OUTGOING, or INCOMING_AND_OUTGOING."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"environment": {
"type": "string",
"description": "Environment name, such as production."
},
"outboundDialType": {
"type": "string",
"description": "How Roark starts an outbound call: NONE or HTTP_REQUEST."
},
"outboundDialHttpRequestDefinitionId": {
"type": [
"string",
"null"
],
"description": "The HTTP request definition used when outboundDialType is HTTP_REQUEST."
}
},
"description": "An agent endpoint."
},
"description": "Agent endpoints on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
},
"annotations": {
"title": "List agent endpoints",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Lists calls in a Roark project, simulated and live. Returns call ids, status, direction, and timestamps, without transcripts. Every filter and the sort apply together. properties filters on call properties: eq matches a value, ignoring case, and exists checks whether the property is set. The built-in agent_name, also accepted as agentName, matches any participating agent's current name, and agent_id matches one agent id. Any other name is a custom property.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
searchText
Text to match against call titles, summaries, and transcripts.
Clear enough to supply this argument.
status
Lifecycle state to list. When omitted, calls in every state are listed.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
agentId
Agent ids, from list_agents, to list only calls those agents took part in. Several ids go comma-separated with no spaces, at most 100.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
additionalProperties › eq
Value the property must equal, ignoring case.
Clear enough to supply this argument.
additionalProperties › exists
true lists calls that have the property set. false lists calls that do not.
Clear enough to supply this argument.
sortBy
Call field the results are ordered by. When omitted, createdAt.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sortDirection
asc puts the earliest or smallest first, desc the latest or largest. When omitted, desc.
Clear enough to supply this argument.
simulationRunPlanJobId
Simulation run id, the simulationRunPlanJobId that run_simulation returns, to list only the calls that run placed.
Clear enough to supply this argument.
after
Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page.
Clear enough to supply this argument.
limit
Page size: the most rows one response returns. When omitted, the API returns up to 20.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Call id. get_call, get_call_transcript, and list_call_metrics take it as callId."
},
"title": {
"type": [
"string",
"null"
],
"description": "Call title."
},
"status": {
"type": [
"string",
"null"
],
"description": "RINGING, IN_PROGRESS, or ENDED."
},
"endedAt": {
"type": [
"string",
"null"
],
"description": "When the call ended, ISO 8601. null while it is in progress."
},
"summary": {
"type": [
"string",
"null"
],
"description": "Generated summary of the call."
},
"projectId": {
"type": "string",
"description": "Project the call belongs to."
},
"startedAt": {
"type": "string",
"description": "When the call started, ISO 8601."
},
"durationMs": {
"type": [
"number",
"null"
],
"description": "Call length in milliseconds."
},
"callDirection": {
"type": "string",
"description": "INBOUND or OUTBOUND."
},
"simulationJobId": {
"type": [
"string",
"null"
],
"description": "The simulated call that produced it. null for a live call."
}
},
"description": "A call."
},
"description": "Calls on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
}
Original tool metadata
{
"name": "list_calls",
"title": "List calls",
"description": "Lists calls in a Roark project, simulated and live. Returns call ids, status, direction, and timestamps, without transcripts. Every filter and the sort apply together. properties filters on call properties: eq matches a value, ignoring case, and exists checks whether the property is set. The built-in agent_name, also accepted as agentName, matches any participating agent's current name, and agent_id matches one agent id. Any other name is a custom property.",
"inputSchema": {
"type": "object",
"properties": {
"after": {
"type": "string",
"description": "Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page."
},
"limit": {
"type": "number",
"description": "Page size: the most rows one response returns. When omitted, the API returns up to 20."
},
"sortBy": {
"enum": [
"createdAt",
"startedAt",
"endedAt",
"duration",
"title",
"status"
],
"type": "string",
"description": "Call field the results are ordered by. When omitted, createdAt."
},
"status": {
"enum": [
"RINGING",
"IN_PROGRESS",
"ENDED"
],
"type": "string",
"description": "Lifecycle state to list. When omitted, calls in every state are listed."
},
"agentId": {
"type": "string",
"description": "Agent ids, from list_agents, to list only calls those agents took part in. Several ids go comma-separated with no spaces, at most 100."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
},
"properties": {
"type": "object",
"description": "Call property filters, keyed by property name, at most 20. Each entry sets eq or exists, not both. agent_name (alias agentName) and agent_id are built in; any other name is a custom property set on the call.",
"additionalProperties": {
"type": "object",
"properties": {
"eq": {
"type": "string",
"description": "Value the property must equal, ignoring case."
},
"exists": {
"type": "boolean",
"description": "true lists calls that have the property set. false lists calls that do not."
}
},
"description": "One filter: eq or exists."
}
},
"searchText": {
"type": "string",
"description": "Text to match against call titles, summaries, and transcripts."
},
"sortDirection": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "asc puts the earliest or smallest first, desc the latest or largest. When omitted, desc."
},
"simulationRunPlanJobId": {
"type": "string",
"description": "Simulation run id, the simulationRunPlanJobId that run_simulation returns, to list only the calls that run placed."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Call id. get_call, get_call_transcript, and list_call_metrics take it as callId."
},
"title": {
"type": [
"string",
"null"
],
"description": "Call title."
},
"status": {
"type": [
"string",
"null"
],
"description": "RINGING, IN_PROGRESS, or ENDED."
},
"endedAt": {
"type": [
"string",
"null"
],
"description": "When the call ended, ISO 8601. null while it is in progress."
},
"summary": {
"type": [
"string",
"null"
],
"description": "Generated summary of the call."
},
"projectId": {
"type": "string",
"description": "Project the call belongs to."
},
"startedAt": {
"type": "string",
"description": "When the call started, ISO 8601."
},
"durationMs": {
"type": [
"number",
"null"
],
"description": "Call length in milliseconds."
},
"callDirection": {
"type": "string",
"description": "INBOUND or OUTBOUND."
},
"simulationJobId": {
"type": [
"string",
"null"
],
"description": "The simulated call that produced it. null for a live call."
}
},
"description": "A call."
},
"description": "Calls on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
},
"annotations": {
"title": "List calls",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Returns the transcript of one call in a Roark project: who took part, and the text of each turn with its timing.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
callId
Roark call id, from list_calls.
Clear enough to supply this argument.
source
Which transcription to return: Roark post-call transcription, or the one the simulated caller or your agent captured live. When omitted, the first available of CUSTOMER_AGENT_REALTIME, SIMULATION_AGENT_REALTIME, then ROARK_POST_CALL.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"entries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"role": {
"type": [
"string",
"null"
],
"description": "AGENT or CUSTOMER."
},
"text": {
"type": "string",
"description": "What was said."
},
"endOffsetMs": {
"type": "number",
"description": "End of the turn, in milliseconds from the start of the call."
},
"participantId": {
"type": [
"string",
"null"
],
"description": "The participant who spoke."
},
"startOffsetMs": {
"type": "number",
"description": "Start of the turn, in milliseconds from the start of the call."
}
},
"description": "One turn."
},
"description": "Turns in the order they were spoken."
},
"participants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Participant id. Transcript entries refer to it as participantId."
},
"type": {
"type": "string",
"description": "AGENT, CUSTOMER, SIMULATED_CUSTOMER, or BACKGROUND_SPEAKER."
}
},
"description": "A participant."
},
"description": "Who spoke on the call."
},
"transcriptionSource": {
"type": [
"string",
"null"
],
"description": "Which transcription this is."
}
},
"description": "The transcript."
}
}
}
Original tool metadata
{
"name": "get_call_transcript",
"title": "Get call transcript",
"description": "Returns the transcript of one call in a Roark project: who took part, and the text of each turn with its timing.",
"inputSchema": {
"type": "object",
"required": [
"callId"
],
"properties": {
"callId": {
"type": "string",
"description": "Roark call id, from list_calls."
},
"source": {
"enum": [
"ROARK_POST_CALL",
"SIMULATION_AGENT_REALTIME",
"CUSTOMER_AGENT_REALTIME"
],
"type": "string",
"description": "Which transcription to return: Roark post-call transcription, or the one the simulated caller or your agent captured live. When omitted, the first available of CUSTOMER_AGENT_REALTIME, SIMULATION_AGENT_REALTIME, then ROARK_POST_CALL."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"entries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"role": {
"type": [
"string",
"null"
],
"description": "AGENT or CUSTOMER."
},
"text": {
"type": "string",
"description": "What was said."
},
"endOffsetMs": {
"type": "number",
"description": "End of the turn, in milliseconds from the start of the call."
},
"participantId": {
"type": [
"string",
"null"
],
"description": "The participant who spoke."
},
"startOffsetMs": {
"type": "number",
"description": "Start of the turn, in milliseconds from the start of the call."
}
},
"description": "One turn."
},
"description": "Turns in the order they were spoken."
},
"participants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Participant id. Transcript entries refer to it as participantId."
},
"type": {
"type": "string",
"description": "AGENT, CUSTOMER, SIMULATED_CUSTOMER, or BACKGROUND_SPEAKER."
}
},
"description": "A participant."
},
"description": "Who spoke on the call."
},
"transcriptionSource": {
"type": [
"string",
"null"
],
"description": "Which transcription this is."
}
},
"description": "The transcript."
}
}
},
"annotations": {
"title": "Get call transcript",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Returns the metric scores recorded for one call in a Roark project, grouped by metric unless flatten is true.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
callId
Roark call id, from list_calls.
Clear enough to supply this argument.
flatten
true returns one row per score. Any other value, or omitting it, groups scores by metric.
Clear enough to supply this argument.
status
success returns computed scores only. all also returns metrics with no value (not applicable, missing data, or an error), so a caller can tell a finished metric from one still computing. When omitted, success.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Metric name."
},
"slug": {
"type": "string",
"description": "Metric slug."
},
"type": {
"type": "string",
"description": "Value type, such as BOOLEAN, NUMERIC, or SCALE."
},
"scope": {
"type": "string",
"description": "GLOBAL for the whole call, PER_PARTICIPANT for each participant."
},
"metricId": {
"type": "string",
"description": "Same value as slug, kept for backwards compatibility."
},
"description": {
"type": "string",
"description": "What the metric measures."
},
"metricDefinitionId": {
"type": "string",
"description": "Metric definition id."
}
},
"description": "A metric scored on the call. Grouped rows carry a values array. With flatten true, each row is one score and carries value, captureStatus, and the other value fields directly."
},
"description": "Metric scores for the call."
}
}
}
Original tool metadata
{
"name": "list_call_metrics",
"title": "List call metrics",
"description": "Returns the metric scores recorded for one call in a Roark project, grouped by metric unless flatten is true.",
"inputSchema": {
"type": "object",
"required": [
"callId"
],
"properties": {
"callId": {
"type": "string",
"description": "Roark call id, from list_calls."
},
"status": {
"enum": [
"success",
"all"
],
"type": "string",
"description": "success returns computed scores only. all also returns metrics with no value (not applicable, missing data, or an error), so a caller can tell a finished metric from one still computing. When omitted, success."
},
"flatten": {
"type": "string",
"description": "true returns one row per score. Any other value, or omitting it, groups scores by metric."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Metric name."
},
"slug": {
"type": "string",
"description": "Metric slug."
},
"type": {
"type": "string",
"description": "Value type, such as BOOLEAN, NUMERIC, or SCALE."
},
"scope": {
"type": "string",
"description": "GLOBAL for the whole call, PER_PARTICIPANT for each participant."
},
"metricId": {
"type": "string",
"description": "Same value as slug, kept for backwards compatibility."
},
"description": {
"type": "string",
"description": "What the metric measures."
},
"metricDefinitionId": {
"type": "string",
"description": "Metric definition id."
}
},
"description": "A metric scored on the call. Grouped rows carry a values array. With flatten true, each row is one score and carries value, captureStatus, and the other value fields directly."
},
"description": "Metric scores for the call."
}
}
},
"annotations": {
"title": "List call metrics",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Metric definition id."
},
"name": {
"type": "string",
"description": "Metric name."
},
"slug": {
"type": "string",
"description": "Metric slug. run_simulation takes it in plan.metrics."
},
"type": {
"type": "string",
"description": "Value type, such as BOOLEAN, NUMERIC, or SCALE."
},
"scope": {
"type": "string",
"description": "GLOBAL for the whole call, PER_PARTICIPANT for each participant."
},
"metricId": {
"type": "string",
"description": "Same value as slug, kept for backwards compatibility."
},
"description": {
"type": "string",
"description": "What the metric measures."
},
"calculationType": {
"type": "string",
"description": "How the value is computed, such as LLM_JUDGE or FORMULA."
}
},
"description": "A metric the project can score."
},
"description": "Metric definitions on this page."
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "The page size used for this response."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
}
Original tool metadata
{
"name": "list_metric_definitions",
"title": "List metric definitions",
"description": "Lists the metrics a Roark project can score, including built-in and custom metrics. Returns each metric id, slug, name, and type.",
"inputSchema": {
"type": "object",
"properties": {
"after": {
"type": "string",
"description": "Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page."
},
"limit": {
"type": "number",
"description": "Page size: the most rows one response returns. When omitted, the API returns up to 500."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Metric definition id."
},
"name": {
"type": "string",
"description": "Metric name."
},
"slug": {
"type": "string",
"description": "Metric slug. run_simulation takes it in plan.metrics."
},
"type": {
"type": "string",
"description": "Value type, such as BOOLEAN, NUMERIC, or SCALE."
},
"scope": {
"type": "string",
"description": "GLOBAL for the whole call, PER_PARTICIPANT for each participant."
},
"metricId": {
"type": "string",
"description": "Same value as slug, kept for backwards compatibility."
},
"description": {
"type": "string",
"description": "What the metric measures."
},
"calculationType": {
"type": "string",
"description": "How the value is computed, such as LLM_JUDGE or FORMULA."
}
},
"description": "A metric the project can score."
},
"description": "Metric definitions on this page."
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "The page size used for this response."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
},
"annotations": {
"title": "List metric definitions",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Returns the results of one simulation run in a Roark project: run status, score, pass or fail verdict, per-metric aggregates, and the checks on each simulated call. Counts include calls that have finished so far. The verdict is absent until the run ends.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
jobId
Simulation run id (simulationRunPlanJobId), returned by run_simulation.
Clear enough to supply this argument.
compareToJobId
Another simulation run id to compare against. When omitted, the API compares with the previous settled run of the same plan.
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"run": {
"type": "object",
"properties": {},
"description": "The run: ids, status, run number, and start and end times."
},
"calls": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "One simulated call."
},
"description": "The simulated calls and their checks."
},
"debrief": {
"type": [
"object",
"null"
],
"description": "Executive summary, failure themes, and recommendations. Generated when a run with graded calls settles."
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "One metric aggregate."
},
"description": "Aggregate for each metric, checks first."
},
"summary": {
"type": "object",
"properties": {},
"description": "Call counts, pass rates, and the run score, over the calls finished so far."
},
"verdict": {
"type": [
"object",
"null"
],
"description": "Pass or fail for the run, judged against the success criteria pinned on the plan. null until the run ends."
},
"breakdowns": {
"type": "object",
"properties": {},
"description": "Pass rates and scores grouped by agent and by persona."
},
"comparison": {
"type": [
"object",
"null"
],
"description": "Comparison with an earlier run of the plan. null when there is none."
},
"attemptSummary": {
"type": "object",
"properties": {},
"description": "Simulations placed against test cases. Differs from the call count only when the plan retried calls the agent never spoke on."
},
"sweepAttribution": {
"type": [
"object",
"null"
],
"description": "For a run that swept a property, such as accent or background noise: which check failures that property caused."
}
},
"description": "Results of the simulation run."
}
}
}
Original tool metadata
{
"name": "get_simulation_results",
"title": "Get simulation results",
"description": "Returns the results of one simulation run in a Roark project: run status, score, pass or fail verdict, per-metric aggregates, and the checks on each simulated call. Counts include calls that have finished so far. The verdict is absent until the run ends.",
"inputSchema": {
"type": "object",
"required": [
"jobId"
],
"properties": {
"jobId": {
"type": "string",
"description": "Simulation run id (simulationRunPlanJobId), returned by run_simulation."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
},
"compareToJobId": {
"type": "string",
"description": "Another simulation run id to compare against. When omitted, the API compares with the previous settled run of the same plan."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"run": {
"type": "object",
"properties": {},
"description": "The run: ids, status, run number, and start and end times."
},
"calls": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "One simulated call."
},
"description": "The simulated calls and their checks."
},
"debrief": {
"type": [
"object",
"null"
],
"description": "Executive summary, failure themes, and recommendations. Generated when a run with graded calls settles."
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "One metric aggregate."
},
"description": "Aggregate for each metric, checks first."
},
"summary": {
"type": "object",
"properties": {},
"description": "Call counts, pass rates, and the run score, over the calls finished so far."
},
"verdict": {
"type": [
"object",
"null"
],
"description": "Pass or fail for the run, judged against the success criteria pinned on the plan. null until the run ends."
},
"breakdowns": {
"type": "object",
"properties": {},
"description": "Pass rates and scores grouped by agent and by persona."
},
"comparison": {
"type": [
"object",
"null"
],
"description": "Comparison with an earlier run of the plan. null when there is none."
},
"attemptSummary": {
"type": "object",
"properties": {},
"description": "Simulations placed against test cases. Differs from the call count only when the plan retried calls the agent never spoke on."
},
"sweepAttribution": {
"type": [
"object",
"null"
],
"description": "For a run that swept a property, such as accent or background noise: which check failures that property caused."
}
},
"description": "Results of the simulation run."
}
}
},
"annotations": {
"title": "Get simulation results",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Lists simulated caller personas in a Roark project, every persona unless searchText narrows it. Returns each persona id, name, language, accent, and gender, one page at a time.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
searchText
Text to match against persona names and descriptions. When omitted, every persona is listed.
Clear enough to supply this argument.
after
Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page.
Clear enough to supply this argument.
limit
Page size: the most rows one response returns. When omitted, the API returns up to 20.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Persona id. create_customer_flow takes it as personaOverrideId."
},
"age": {
"type": "string",
"description": "How old the caller sounds."
},
"name": {
"type": "string",
"description": "Name the caller uses in conversation."
},
"accent": {
"type": "string",
"description": "Accent the persona is voiced with."
},
"gender": {
"type": "string",
"description": "Gender the persona is voiced with."
},
"language": {
"type": "string",
"description": "Primary spoken language."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"baseEmotion": {
"type": "string",
"description": "Emotional baseline."
},
"description": {
"type": [
"string",
"null"
],
"description": "Short label for the persona."
},
"backstoryPrompt": {
"type": [
"string",
"null"
],
"description": "Background and behavior the simulated caller plays."
}
},
"description": "A simulated caller persona."
},
"description": "Personas on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
}
Original tool metadata
{
"name": "list_personas",
"title": "List personas",
"description": "Lists simulated caller personas in a Roark project, every persona unless searchText narrows it. Returns each persona id, name, language, accent, and gender, one page at a time.",
"inputSchema": {
"type": "object",
"properties": {
"after": {
"type": "string",
"description": "Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page."
},
"limit": {
"type": "number",
"description": "Page size: the most rows one response returns. When omitted, the API returns up to 20."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
},
"searchText": {
"type": "string",
"description": "Text to match against persona names and descriptions. When omitted, every persona is listed."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Persona id. create_customer_flow takes it as personaOverrideId."
},
"age": {
"type": "string",
"description": "How old the caller sounds."
},
"name": {
"type": "string",
"description": "Name the caller uses in conversation."
},
"accent": {
"type": "string",
"description": "Accent the persona is voiced with."
},
"gender": {
"type": "string",
"description": "Gender the persona is voiced with."
},
"language": {
"type": "string",
"description": "Primary spoken language."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"baseEmotion": {
"type": "string",
"description": "Emotional baseline."
},
"description": {
"type": [
"string",
"null"
],
"description": "Short label for the persona."
},
"backstoryPrompt": {
"type": [
"string",
"null"
],
"description": "Background and behavior the simulated caller plays."
}
},
"description": "A simulated caller persona."
},
"description": "Personas on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
},
"annotations": {
"title": "List personas",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Lists customer flows in a Roark project. A customer flow is the conversation scenario a simulated caller follows. Returns each flow id, title, type, happy path, and edge cases. The step graph of a scripted flow is not included.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
searchText
Text to match against flow titles. When omitted, flows are not filtered by title.
Clear enough to supply this argument.
type
Kind of flow to list. When omitted, flows of every kind are listed.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
includeSystem
true also lists flows Roark provides. false, or omitting it, lists only flows made in the project.
Clear enough to supply this argument.
after
Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page.
Clear enough to supply this argument.
limit
Page size: the most rows one response returns. When omitted, the API returns up to 20.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Customer flow id. run_simulation takes it in flows."
},
"type": {
"type": "string",
"description": "SCRIPTED, IMPROV, or VOICEMAIL."
},
"title": {
"type": "string",
"description": "Flow title."
},
"agents": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "An agent the flow exercises."
},
"description": "Agents the flow exercises."
},
"source": {
"type": "string",
"description": "CUSTOM for flows made in the project, SYSTEM for flows Roark provides."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"edgeCases": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "An edge case."
},
"description": "Other ways of running the flow."
},
"happyPath": {
"type": [
"object",
"null"
],
"description": "The way the conversation is meant to go."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"description": {
"type": [
"string",
"null"
],
"description": "What the conversation covers."
}
},
"description": "A customer flow."
},
"description": "Customer flows on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
}
Original tool metadata
{
"name": "list_customer_flows",
"title": "List customer flows",
"description": "Lists customer flows in a Roark project. A customer flow is the conversation scenario a simulated caller follows. Returns each flow id, title, type, happy path, and edge cases. The step graph of a scripted flow is not included.",
"inputSchema": {
"type": "object",
"properties": {
"type": {
"enum": [
"SCRIPTED",
"IMPROV",
"VOICEMAIL"
],
"type": "string",
"description": "Kind of flow to list. When omitted, flows of every kind are listed."
},
"after": {
"type": "string",
"description": "Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page."
},
"limit": {
"type": "number",
"description": "Page size: the most rows one response returns. When omitted, the API returns up to 20."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
},
"searchText": {
"type": "string",
"description": "Text to match against flow titles. When omitted, flows are not filtered by title."
},
"includeSystem": {
"enum": [
"true",
"false"
],
"type": "string",
"description": "true also lists flows Roark provides. false, or omitting it, lists only flows made in the project."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Customer flow id. run_simulation takes it in flows."
},
"type": {
"type": "string",
"description": "SCRIPTED, IMPROV, or VOICEMAIL."
},
"title": {
"type": "string",
"description": "Flow title."
},
"agents": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "An agent the flow exercises."
},
"description": "Agents the flow exercises."
},
"source": {
"type": "string",
"description": "CUSTOM for flows made in the project, SYSTEM for flows Roark provides."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"edgeCases": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "An edge case."
},
"description": "Other ways of running the flow."
},
"happyPath": {
"type": [
"object",
"null"
],
"description": "The way the conversation is meant to go."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"description": {
"type": [
"string",
"null"
],
"description": "What the conversation covers."
}
},
"description": "A customer flow."
},
"description": "Customer flows on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
},
"annotations": {
"title": "List customer flows",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Lists call environments in a Roark project, including environments Roark provides. Returns each environment id, name, and background noise. Creating a customer flow requires an environment id.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
after
Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page.
Clear enough to supply this argument.
limit
Page size: the most rows one response returns. When omitted, the API returns up to 20.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Environment id. create_customer_flow takes it as environmentId."
},
"name": {
"type": "string",
"description": "Environment name."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"description": {
"type": [
"string",
"null"
],
"description": "What the environment simulates."
},
"backgroundNoise": {
"type": "string",
"description": "Background noise played into the call, or NONE."
},
"backgroundNoiseVolume": {
"type": "number",
"description": "Background noise volume."
}
},
"description": "A call environment."
},
"description": "Environments on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
}
Original tool metadata
{
"name": "list_simulation_environments",
"title": "List simulation environments",
"description": "Lists call environments in a Roark project, including environments Roark provides. Returns each environment id, name, and background noise. Creating a customer flow requires an environment id.",
"inputSchema": {
"type": "object",
"properties": {
"after": {
"type": "string",
"description": "Paging cursor: pass pagination.nextCursor from the previous response to get the next page. Omit for the first page."
},
"limit": {
"type": "number",
"description": "Page size: the most rows one response returns. When omitted, the API returns up to 20."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Environment id. create_customer_flow takes it as environmentId."
},
"name": {
"type": "string",
"description": "Environment name."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"description": {
"type": [
"string",
"null"
],
"description": "What the environment simulates."
},
"backgroundNoise": {
"type": "string",
"description": "Background noise played into the call, or NONE."
},
"backgroundNoiseVolume": {
"type": "number",
"description": "Background noise volume."
}
},
"description": "A call environment."
},
"description": "Environments on this page."
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Rows matching the request across all pages."
},
"hasMore": {
"type": "boolean",
"description": "Whether more rows follow this page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass as after to get the next page. null on the last page."
}
},
"description": "Paging state for this list."
}
}
},
"annotations": {
"title": "List simulation environments",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Creates an agent in a Roark project. Each call adds a new agent. Requires a name. Returns the created agent, including its id. Does not create an endpoint; create_agent_endpoint does.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Input documentation gives an agent enough context to populate the arguments.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
name
Display name for the agent, shown in Roark and returned by list_agents.
Clear enough to supply this argument.
description
What the agent does.
Clear enough to supply this argument.
customId
Your own identifier for the agent, such as its id in your platform. Unique in the project.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Agent id."
},
"name": {
"type": "string",
"description": "Agent name."
},
"customId": {
"type": [
"string",
"null"
],
"description": "Caller-chosen id, unique in the project."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"description": {
"type": [
"string",
"null"
],
"description": "What the agent does."
}
},
"description": "An agent."
}
}
}
Original tool metadata
{
"name": "create_agent",
"title": "Create agent",
"description": "Creates an agent in a Roark project. Each call adds a new agent. Requires a name. Returns the created agent, including its id. Does not create an endpoint; create_agent_endpoint does.",
"inputSchema": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Display name for the agent, shown in Roark and returned by list_agents."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
},
"customId": {
"type": "string",
"description": "Your own identifier for the agent, such as its id in your platform. Unique in the project."
},
"description": {
"type": "string",
"description": "What the agent does."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Agent id."
},
"name": {
"type": "string",
"description": "Agent name."
},
"customId": {
"type": [
"string",
"null"
],
"description": "Caller-chosen id, unique in the project."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"description": {
"type": [
"string",
"null"
],
"description": "What the agent does."
}
},
"description": "An agent."
}
}
},
"annotations": {
"title": "Create agent",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Creates a phone endpoint for an agent in a Roark project. Each call adds a new endpoint; it places no calls itself. Simulations then call the agent on this number, or receive its calls. Phone is the only endpoint type this tool creates.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
agentId
Agent id from list_agents or create_agent.
Clear enough to supply this argument.
value
The agent's phone number in E.164 form, such as +14155550123.
Clear enough to supply this argument.
direction
Which way calls travel on this number: INCOMING when callers reach the agent here, OUTGOING when the agent calls out from it, or both.
Clear enough to supply this argument.
environment
Environment label for the endpoint, such as production or staging. When omitted, production.
Clear enough to supply this argument.
outboundDialType
How Roark starts an outbound simulation: HTTP_REQUEST sends an HTTP request to your platform to make the agent dial, NONE sends nothing. When omitted, NONE.
Clear enough to supply this argument.
outboundDialHttpRequestDefinitionId
Id of the HTTP request definition Roark sends to make the agent dial, from GET /v1/http-request-definition. Required when outboundDialType is HTTP_REQUEST.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Agent endpoint id. run_simulation takes it in agentEndpoints."
},
"type": {
"type": "string",
"description": "Transport, such as PHONE."
},
"value": {
"type": "string",
"description": "The address Roark connects to, such as an E.164 phone number."
},
"agentId": {
"type": "string",
"description": "The agent this endpoint reaches."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"direction": {
"type": "string",
"description": "INCOMING, OUTGOING, or INCOMING_AND_OUTGOING."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"environment": {
"type": "string",
"description": "Environment name, such as production."
},
"outboundDialType": {
"type": "string",
"description": "How Roark starts an outbound call: NONE or HTTP_REQUEST."
},
"outboundDialHttpRequestDefinitionId": {
"type": [
"string",
"null"
],
"description": "The HTTP request definition used when outboundDialType is HTTP_REQUEST."
}
},
"description": "An agent endpoint."
}
}
}
Original tool metadata
{
"name": "create_agent_endpoint",
"title": "Create agent endpoint",
"description": "Creates a phone endpoint for an agent in a Roark project. Each call adds a new endpoint; it places no calls itself. Simulations then call the agent on this number, or receive its calls. Phone is the only endpoint type this tool creates.",
"inputSchema": {
"type": "object",
"required": [
"agentId",
"value",
"direction"
],
"properties": {
"value": {
"type": "string",
"description": "The agent's phone number in E.164 form, such as +14155550123."
},
"agentId": {
"type": "string",
"description": "Agent id from list_agents or create_agent."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
},
"direction": {
"enum": [
"INCOMING",
"OUTGOING",
"INCOMING_AND_OUTGOING"
],
"type": "string",
"description": "Which way calls travel on this number: INCOMING when callers reach the agent here, OUTGOING when the agent calls out from it, or both."
},
"environment": {
"type": "string",
"description": "Environment label for the endpoint, such as production or staging. When omitted, production."
},
"outboundDialType": {
"enum": [
"NONE",
"HTTP_REQUEST"
],
"type": "string",
"description": "How Roark starts an outbound simulation: HTTP_REQUEST sends an HTTP request to your platform to make the agent dial, NONE sends nothing. When omitted, NONE."
},
"outboundDialHttpRequestDefinitionId": {
"type": "string",
"description": "Id of the HTTP request definition Roark sends to make the agent dial, from GET /v1/http-request-definition. Required when outboundDialType is HTTP_REQUEST."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Agent endpoint id. run_simulation takes it in agentEndpoints."
},
"type": {
"type": "string",
"description": "Transport, such as PHONE."
},
"value": {
"type": "string",
"description": "The address Roark connects to, such as an E.164 phone number."
},
"agentId": {
"type": "string",
"description": "The agent this endpoint reaches."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"direction": {
"type": "string",
"description": "INCOMING, OUTGOING, or INCOMING_AND_OUTGOING."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"environment": {
"type": "string",
"description": "Environment name, such as production."
},
"outboundDialType": {
"type": "string",
"description": "How Roark starts an outbound call: NONE or HTTP_REQUEST."
},
"outboundDialHttpRequestDefinitionId": {
"type": [
"string",
"null"
],
"description": "The HTTP request definition used when outboundDialType is HTTP_REQUEST."
}
},
"description": "An agent endpoint."
}
}
},
"annotations": {
"title": "Create agent endpoint",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Creates a simulated caller persona in a Roark project. Each call adds a new persona, so repeating it creates a duplicate. It changes nothing else and places no calls. Requires a name, language, accent, and gender. Returns the created persona; pass its id as personaOverrideId to create_customer_flow to use it.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
name
Name the caller uses in conversation.
Clear enough to supply this argument.
language
Primary spoken language.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
accent
Accent the caller speaks with.
Clear enough to supply this argument.
gender
Gender the persona is voiced with.
Clear enough to supply this argument.
age
How old the caller sounds. When omitted, ADULT.
Clear enough to supply this argument.
baseEmotion
Mood the caller starts the conversation in. When omitted, NEUTRAL.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
backstoryPrompt
Background and behavior the simulated caller plays.
Clear enough to supply this argument.
description
Short summary of the persona, to tell it apart from others in the project.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Creates an improv customer flow in a Roark project. A customer flow is the conversation scenario a simulated caller follows. Each call adds a new flow. Requires a title, at least one agent id, and a happy path with a title, a persona id, and an environment id. Returns the created flow, including its id. Scripted step graphs are not created by this tool.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Input documentation gives an agent enough context to populate the arguments.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
title
Name for the flow, shown in Roark and returned by list_customer_flows.
Clear enough to supply this argument.
description
What the conversation covers.
Clear enough to supply this argument.
agentIds
Ids of the agents this flow tests, from list_agents or create_agent.
Clear enough to supply this argument.
happyPath › title
Name for the happy path, the run where the conversation goes as intended.
Clear enough to supply this argument.
happyPath › prompt
What the simulated caller is trying to do.
Clear enough to supply this argument.
happyPath › personaOverrideId
Persona id from list_personas or create_persona.
Clear enough to supply this argument.
happyPath › environmentId
Environment id from list_simulation_environments.
Clear enough to supply this argument.
edgeCases › items › title
Name for this edge case.
Clear enough to supply this argument.
edgeCases › items › prompt
What the simulated caller is trying to do in this edge case.
Clear enough to supply this argument.
edgeCases › items › personaOverrideId
Persona id from list_personas or create_persona. When omitted, the happy path persona.
Clear enough to supply this argument.
edgeCases › items › environmentId
Environment id from list_simulation_environments. When omitted, the happy path environment.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Customer flow id. run_simulation takes it in flows."
},
"type": {
"type": "string",
"description": "SCRIPTED, IMPROV, or VOICEMAIL."
},
"title": {
"type": "string",
"description": "Flow title."
},
"agents": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "An agent the flow exercises."
},
"description": "Agents the flow exercises."
},
"source": {
"type": "string",
"description": "CUSTOM for flows made in the project, SYSTEM for flows Roark provides."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"edgeCases": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "An edge case."
},
"description": "Other ways of running the flow."
},
"happyPath": {
"type": [
"object",
"null"
],
"description": "The way the conversation is meant to go."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"description": {
"type": [
"string",
"null"
],
"description": "What the conversation covers."
}
},
"description": "A customer flow."
}
}
}
Original tool metadata
{
"name": "create_customer_flow",
"title": "Create customer flow",
"description": "Creates an improv customer flow in a Roark project. A customer flow is the conversation scenario a simulated caller follows. Each call adds a new flow. Requires a title, at least one agent id, and a happy path with a title, a persona id, and an environment id. Returns the created flow, including its id. Scripted step graphs are not created by this tool.",
"inputSchema": {
"type": "object",
"required": [
"title",
"agentIds",
"happyPath"
],
"properties": {
"title": {
"type": "string",
"description": "Name for the flow, shown in Roark and returned by list_customer_flows."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
},
"agentIds": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Ids of the agents this flow tests, from list_agents or create_agent."
},
"edgeCases": {
"type": "array",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"description": "Name for this edge case."
},
"prompt": {
"type": "string",
"description": "What the simulated caller is trying to do in this edge case."
},
"environmentId": {
"type": "string",
"description": "Environment id from list_simulation_environments. When omitted, the happy path environment."
},
"personaOverrideId": {
"type": "string",
"description": "Persona id from list_personas or create_persona. When omitted, the happy path persona."
}
}
},
"description": "Other ways of running the flow. Each inherits the happy path persona and environment when those are omitted."
},
"happyPath": {
"type": "object",
"required": [
"title",
"personaOverrideId",
"environmentId"
],
"properties": {
"title": {
"type": "string",
"description": "Name for the happy path, the run where the conversation goes as intended."
},
"prompt": {
"type": "string",
"description": "What the simulated caller is trying to do."
},
"environmentId": {
"type": "string",
"description": "Environment id from list_simulation_environments."
},
"personaOverrideId": {
"type": "string",
"description": "Persona id from list_personas or create_persona."
}
},
"description": "The way the conversation is meant to go."
},
"description": {
"type": "string",
"description": "What the conversation covers."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Customer flow id. run_simulation takes it in flows."
},
"type": {
"type": "string",
"description": "SCRIPTED, IMPROV, or VOICEMAIL."
},
"title": {
"type": "string",
"description": "Flow title."
},
"agents": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "An agent the flow exercises."
},
"description": "Agents the flow exercises."
},
"source": {
"type": "string",
"description": "CUSTOM for flows made in the project, SYSTEM for flows Roark provides."
},
"createdAt": {
"type": "string",
"description": "When it was created, ISO 8601."
},
"edgeCases": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "An edge case."
},
"description": "Other ways of running the flow."
},
"happyPath": {
"type": [
"object",
"null"
],
"description": "The way the conversation is meant to go."
},
"updatedAt": {
"type": "string",
"description": "When it last changed, ISO 8601."
},
"description": {
"type": [
"string",
"null"
],
"description": "What the conversation covers."
}
},
"description": "A customer flow."
}
}
},
"annotations": {
"title": "Create customer flow",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Starts a simulation run in a Roark project and places simulated calls to the agent. Pass exactly one of planId (an existing plan), plan (an inline plan), or template (a built-in template name, with agentEndpoints and direction). Returns the run id and how many calls the run places. This spends simulation usage on the account.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Explain the meaning of this value, not just its name.
project
Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use.
Clear enough to supply this argument.
planId
Id of a saved simulation plan to run.
Clear enough to supply this argument.
plan › name
Name for the plan. When omitted, one is generated from the date. Needed for saveAsPlan.
Clear enough to supply this argument.
plan › description
Note on what the plan tests.
Clear enough to supply this argument.
plan › direction
INBOUND: the simulated caller phones the agent. OUTBOUND: the agent places the call to the simulated caller.
Clear enough to supply this argument.
plan › agentEndpoints › items › id
Agent endpoint id, from list_agent_endpoints or create_agent_endpoint.
Clear enough to supply this argument.
plan › metrics › items › id
Metric definition id, from list_metric_definitions.
Clear enough to supply this argument.
plan › metrics › items › slug
Metric slug, from list_metric_definitions. Use instead of id.
Clear enough to supply this argument.
plan › flows › items › id
Customer flow id, from list_customer_flows or create_customer_flow.
Clear enough to supply this argument.
plan › flows › items › slug
Stable slug of a flow Roark provides, used instead of id. GET /v1/simulation/template lists them. Flows made in the project have no slug.
Clear enough to supply this argument.
plan › flows › items › happyPath
true runs the flow happy path.
Explain the meaning of this value, not just its name.
plan › flows › items › edgeCases › items › id
Edge case id, from the flow's edgeCases in list_customer_flows.
Clear enough to supply this argument.
plan › flows › items › edgeCases › items › slug
Stable slug of an edge case Roark provides, matched within this flow. Used instead of id.
Values for the {{variables}} in this edge case only, as variable name to string value.
Clear enough to supply this argument.
plan › flows › items › personaOverrideId
Persona id, from list_personas, to run everything in this flow as instead of its own persona.
Clear enough to supply this argument.
plan › maxSimulationDurationSeconds
Longest one simulated call may last, in seconds.
Clear enough to supply this argument.
plan › iterationCount
Times each test case runs. When omitted, 1.
Clear enough to supply this argument.
plan › maxConcurrentJobs
How many calls run at once. When omitted, 5.
Clear enough to supply this argument.
plan › executionMode
When the run starts relative to other runs. PARALLEL starts it at once. SEQUENTIAL_SAME_RUN_PLAN queues it while another run of the same plan is active. SEQUENTIAL_PROJECT queues it while any run in the project is active. When omitted, PARALLEL.
Clear enough to supply this argument.
template
Name of a built-in Roark template, such as health-check. GET /v1/simulation/template lists them.
Clear enough to supply this argument.
agentEndpoints › items › id
Agent endpoint id, from list_agent_endpoints or create_agent_endpoint.
Clear enough to supply this argument.
direction
For a template run, where it is required. INBOUND: the simulated caller phones the agent. OUTBOUND: the agent places the call to the simulated caller.
Clear enough to supply this argument.
flows › items › id
Customer flow id, from list_customer_flows or create_customer_flow.
Clear enough to supply this argument.
flows › items › slug
Stable slug of a flow Roark provides, used instead of id. GET /v1/simulation/template lists them. Flows made in the project have no slug.
Clear enough to supply this argument.
flows › items › happyPath
true runs the flow happy path.
Clear enough to supply this argument.
flows › items › edgeCases › items › id
Edge case id, from the flow's edgeCases in list_customer_flows.
Clear enough to supply this argument.
flows › items › edgeCases › items › slug
Stable slug of an edge case Roark provides, matched within this flow. Used instead of id.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Run status, such as PENDING or RUNNING_SIMULATIONS."
},
"createdAt": {
"type": "string",
"description": "When the run was created, ISO 8601."
},
"savedAsPlan": {
"type": "boolean",
"description": "Whether the plan was kept so it can be run again by planId."
},
"simulationJobCount": {
"type": "number",
"description": "How many simulated calls this run places."
},
"simulationRunPlanId": {
"type": "string",
"description": "The plan the run executes."
},
"simulationRunPlanJobId": {
"type": "string",
"description": "Run id. get_simulation_results takes it as jobId."
}
},
"description": "The started run."
}
}
}
Original tool metadata
{
"name": "run_simulation",
"title": "Run simulation",
"description": "Starts a simulation run in a Roark project and places simulated calls to the agent. Pass exactly one of planId (an existing plan), plan (an inline plan), or template (a built-in template name, with agentEndpoints and direction). Returns the run id and how many calls the run places. This spends simulation usage on the account.",
"inputSchema": {
"type": "object",
"properties": {
"plan": {
"type": "object",
"required": [
"agentEndpoints",
"direction",
"maxSimulationDurationSeconds"
],
"properties": {
"name": {
"type": "string",
"description": "Name for the plan. When omitted, one is generated from the date. Needed for saveAsPlan."
},
"flows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Customer flow id, from list_customer_flows or create_customer_flow."
},
"slug": {
"type": "string",
"description": "Stable slug of a flow Roark provides, used instead of id. GET /v1/simulation/template lists them. Flows made in the project have no slug."
},
"edgeCases": {
"type": [
"string",
"array"
],
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Edge case id, from the flow's edgeCases in list_customer_flows."
},
"slug": {
"type": "string",
"description": "Stable slug of an edge case Roark provides, matched within this flow. Used instead of id."
},
"variables": {
"type": "object",
"description": "Values for the {{variables}} in this edge case only, as variable name to string value.",
"additionalProperties": {
"type": "string"
}
},
"personaOverrideId": {
"type": "string",
"description": "Persona id, from list_personas, to run this edge case as instead of its own persona."
}
}
},
"description": "The string ALL runs every edge case the flow has when the run starts. An array runs only the listed edge cases, each named by id or slug."
},
"happyPath": {
"type": "boolean",
"description": "true runs the flow happy path."
},
"personaOverrideId": {
"type": "string",
"description": "Persona id, from list_personas, to run everything in this flow as instead of its own persona."
}
},
"description": "A customer flow to include. Name it by id or slug, and set happyPath, edgeCases, or both."
},
"description": "Customer flows to run, and which of their happy paths and edge cases."
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Metric definition id, from list_metric_definitions."
},
"slug": {
"type": "string",
"description": "Metric slug, from list_metric_definitions. Use instead of id."
}
},
"description": "A metric to score, by id or by slug."
},
"description": "Metrics to score, by id or slug."
},
"direction": {
"enum": [
"INBOUND",
"OUTBOUND"
],
"type": "string",
"description": "INBOUND: the simulated caller phones the agent. OUTBOUND: the agent places the call to the simulated caller."
},
"description": {
"type": "string",
"description": "Note on what the plan tests."
},
"executionMode": {
"enum": [
"PARALLEL",
"SEQUENTIAL_SAME_RUN_PLAN",
"SEQUENTIAL_PROJECT"
],
"type": "string",
"description": "When the run starts relative to other runs. PARALLEL starts it at once. SEQUENTIAL_SAME_RUN_PLAN queues it while another run of the same plan is active. SEQUENTIAL_PROJECT queues it while any run in the project is active. When omitted, PARALLEL."
},
"agentEndpoints": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Agent endpoint id, from list_agent_endpoints or create_agent_endpoint."
}
},
"description": "An agent endpoint the run tests."
},
"description": "The agent endpoints the run tests."
},
"iterationCount": {
"type": "number",
"description": "Times each test case runs. When omitted, 1."
},
"maxConcurrentJobs": {
"type": "number",
"description": "How many calls run at once. When omitted, 5."
},
"maxSimulationDurationSeconds": {
"type": "number",
"description": "Longest one simulated call may last, in seconds."
}
},
"description": "Inline plan to run once. Requires agentEndpoints, direction, and maxSimulationDurationSeconds."
},
"flows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Customer flow id, from list_customer_flows or create_customer_flow."
},
"slug": {
"type": "string",
"description": "Stable slug of a flow Roark provides, used instead of id. GET /v1/simulation/template lists them. Flows made in the project have no slug."
},
"edgeCases": {
"type": [
"string",
"array"
],
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Edge case id, from the flow's edgeCases in list_customer_flows."
},
"slug": {
"type": "string",
"description": "Stable slug of an edge case Roark provides, matched within this flow. Used instead of id."
},
"variables": {
"type": "object",
"description": "Values for the {{variables}} in this edge case only, as variable name to string value.",
"additionalProperties": {
"type": "string"
}
},
"personaOverrideId": {
"type": "string",
"description": "Persona id, from list_personas, to run this edge case as instead of its own persona."
}
}
},
"description": "The string ALL runs every edge case the flow has when the run starts. An array runs only the listed edge cases, each named by id or slug."
},
"happyPath": {
"type": "boolean",
"description": "true runs the flow happy path."
},
"personaOverrideId": {
"type": "string",
"description": "Persona id, from list_personas, to run everything in this flow as instead of its own persona."
}
},
"description": "A customer flow to include. Name it by id or slug, and set happyPath, edgeCases, or both."
},
"description": "For a template run: the flows to run. Needed when the template has no flows of its own; otherwise they replace its flows."
},
"planId": {
"type": "string",
"description": "Id of a saved simulation plan to run."
},
"project": {
"type": "string",
"description": "Roark project id. Required when this connection is not already pinned to one project. list_projects returns the ids this credential can use."
},
"template": {
"type": "string",
"description": "Name of a built-in Roark template, such as health-check. GET /v1/simulation/template lists them."
},
"direction": {
"enum": [
"INBOUND",
"OUTBOUND"
],
"type": "string",
"description": "For a template run, where it is required. INBOUND: the simulated caller phones the agent. OUTBOUND: the agent places the call to the simulated caller."
},
"variables": {
"type": [
"object",
"array"
],
"items": {
"type": "object",
"required": [
"variables"
],
"properties": {
"flowId": {
"type": "string",
"description": "Customer flow id the values apply to."
},
"happyPath": {
"type": "boolean",
"description": "Narrow to the flow's happy path."
},
"variables": {
"type": "object",
"description": "The values to apply, as variable name to string value.",
"additionalProperties": {
"type": "string"
}
},
"edgeCaseId": {
"type": "string",
"description": "Narrow to one edge case of that flow."
},
"scenarioId": {
"type": "string",
"description": "Deprecated. Scenario id the values apply to, for a saved plan built from scenarios rather than flows. Use flowId otherwise. Template runs refuse it."
}
}
},
"description": "Values for the {{variables}} the run resolves. An object of name to string value applies to the whole run. An array applies values per flow (flowId, optionally narrowed by edgeCaseId or happyPath).",
"additionalProperties": {
"type": "string"
}
},
"saveAsPlan": {
"type": "boolean",
"description": "When plan is set, true keeps the plan so it can be run again by planId. Requires plan.name."
},
"agentEndpoints": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Agent endpoint id, from list_agent_endpoints or create_agent_endpoint."
}
},
"description": "An agent endpoint the run tests."
},
"description": "For a template run: the agent endpoints it tests. A template run fails without it."
},
"iterationCount": {
"type": "number",
"description": "For a template run: times each test case runs. When omitted, 1, or the template's own count for a template that sweeps a property."
},
"maxSimulationDurationSeconds": {
"type": "number",
"description": "For a template run: longest one simulated call may last, in seconds. When omitted, the template's default."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Run status, such as PENDING or RUNNING_SIMULATIONS."
},
"createdAt": {
"type": "string",
"description": "When the run was created, ISO 8601."
},
"savedAsPlan": {
"type": "boolean",
"description": "Whether the plan was kept so it can be run again by planId."
},
"simulationJobCount": {
"type": "number",
"description": "How many simulated calls this run places."
},
"simulationRunPlanId": {
"type": "string",
"description": "The plan the run executes."
},
"simulationRunPlanJobId": {
"type": "string",
"description": "Run id. get_simulation_results takes it as jobId."
}
},
"description": "The started run."
}
}
},
"annotations": {
"title": "Run simulation",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "search_docs",
"title": "Search Roark docs",
"description": "Searches Roark SDK documentation for methods, parameters, and response shapes. Returns the matching documentation for the query and language.",
"inputSchema": {
"type": "object",
"required": [
"query",
"language"
],
"properties": {
"query": {
"type": "string",
"description": "What to look up, in plain words: a task, method, or parameter, such as \"create a persona\" or \"list calls by agent\"."
},
"detail": {
"enum": [
"default",
"verbose"
],
"type": "string",
"description": "How much to return for each match: default gives a summary, verbose the full reference. When omitted, default."
},
"language": {
"enum": [
"http",
"python",
"go",
"typescript",
"javascript",
"terraform",
"ruby",
"java",
"kotlin"
],
"type": "string",
"description": "SDK language the signatures and examples are shown in. http returns the REST endpoints."
}
}
},
"annotations": {
"title": "Search Roark docs",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Search Roark docsSearches Roark SDK documentation for methods, parameters, and response shapes.
02List projectsLists the Roark projects this credential can use, with the permissions it holds in each.
03List callsLists calls in a Roark project, simulated and live.
04List customer flowsLists customer flows in a Roark project.
05List agentsLists voice and chat agents in a Roark project, every agent unless searchText narrows it.
Want to run these tasks against your MCP server with us?
Roark setup, tools, quality score, publishing readiness, and alternatives.
How do I add Roark to Claude, ChatGPT, or Cursor?
Add Roark to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.api.roark.ai/mcp.
Is Roark MCP ready for ChatGPT and Claude?
As of November 12, 2026, Roark scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Roark's MCP tool documentation?
As of November 12, 2026, Roark scores 93/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 18 of 18 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Roark?
As of November 13, 2026, alternatives to Roark in developer-tools on the Manufact MCP leaderboard include Speko, Manufact, AgentMail, Context, and Speko.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.