Skip to main content

Built-in MCP tools

The built-in MCP server at /api/mcp builds its tool list per caller from the toolsets below. Each tool calls the listed HTTP route in-process, so it needs that route's permission on top of mcp:read and mcp:execute, and it runs the same FGA and ownership checks as the HTTP request. A tool whose route the caller can't call isn't listed.

Arguments marked with * are required. Routes are relative to the API prefix (/api by default). Tools marked read-only carry the MCP readOnlyHint annotation and stay available with readOnly: true or ?readonly=1.

agents
Direct link to agents

ToolArgumentsRoutePermission
list_agentsqueryGET /agentsagents:read
get_agentagentId*GET /agents/:agentIdagents:read
call_agentagentId*, message*, threadId, resourceIdPOST /agents/:agentId/generateagents:execute
agent_<id>message*, threadId, resourceIdPOST /agents/:agentId/generateagents:execute
  • list_agents returns each agent's id, name, and description. query keeps agents whose id or name contains the text.
  • call_agent returns the reply text and the threadId to pass back to continue the conversation.
  • agent_<id> is added for each agent listed in server.mcp.featured.agents.
  • When the caller can see up to enumLimit agents (25 by default), agentId lists the allowed ids.

workflows
Direct link to workflows

ToolArgumentsRoutePermission
list_workflowsqueryGET /workflowsworkflows:read
get_workflowworkflowId*GET /workflows/:workflowIdworkflows:read
start_workflowworkflowId*, inputData, runIdPOST /workflows/:workflowId/start-asyncworkflows:execute
get_workflow_runworkflowId*, runId*, fieldsGET /workflows/:workflowId/runs/:runIdworkflows:read
resume_workflow_runworkflowId*, runId*, step, resumeDataPOST /workflows/:workflowId/resume-asyncworkflows:execute
cancel_workflow_runworkflowId*, runId*POST /workflows/:workflowId/runs/:runId/cancelworkflows:execute
workflow_<id>The workflow's input schemaPOST /workflows/:workflowId/start-asyncworkflows:execute
  • start_workflow, resume_workflow_run, and workflow_<id> wait for the run to finish or suspend. A suspended run returns status: 'suspended', its runId, suspendPayload, and suspendedSteps.
  • get_workflow_run takes fields as a comma-separated subset of result, error, payload, steps, and activeStepsPath.
  • cancel_workflow_run carries the MCP destructiveHint annotation.
  • workflow_<id> is added for each workflow listed in server.mcp.featured.workflows. When the input schema isn't an object, the tool takes it as inputData.

tools
Direct link to tools

When the caller can see up to enumLimit tools and may call them, each tool gets its own entry:

ToolArgumentsRoutePermission
tool_<id>The tool's input schemaPOST /tools/:toolId/executetools:execute

Above enumLimit, or when the caller can't call tools (readOnly: true or no tools:execute), operation tools replace them. call_tool is only offered when the caller can call tools:

ToolArgumentsRoutePermission
list_toolsqueryGET /toolstools:read
get_tooltoolId*GET /tools/:toolIdtools:read
call_tooltoolId*, dataPOST /tools/:toolId/executetools:execute

A tool_<id> entry uses the tool's own mcp.annotations when the tool defines them.

memory
Direct link to memory

ToolArgumentsRoutePermission
list_threadsagentId, resourceId, page, perPageGET /memory/threadsmemory:read
get_threadthreadId*, agentIdGET /memory/threads/:threadIdmemory:read
list_messagesthreadId*, agentId, page, perPageGET /memory/threads/:threadId/messagesmemory:read
search_memoryagentId*, searchQuery*, resourceId, threadId, limitGET /memory/searchmemory:read
get_memory_statusagentId*, resourceId, threadIdGET /memory/status, GET /memory/configmemory:read
get_observationsagentId*, threadId, resourceId, waitForPendingGET /memory/observational-memorymemory:read
create_threadagentId*, resourceId, title, metadata, threadIdPOST /memory/threadsmemory:write
update_threadthreadId*, agentId*, title, metadataPATCH /memory/threads/:threadIdmemory:write
clone_threadthreadId*, agentId*, newThreadId, title, metadata, messageLimitPOST /memory/threads/:threadId/clonememory:execute
save_messagesagentId*, messages*POST /memory/save-messagesmemory:write
  • resourceId defaults to the caller when server.auth sets mapUserToResourceId, and a caller can't read or write another resource's threads, messages, or Observational Memory. Without mapUserToResourceId, the tools use the resourceId the client sends, so set mapUserToResourceId to keep memory private. FGA protects threads, but get_observations called with only a resourceId isn't covered by the default FGA routes.
  • get_observations reads resource-scoped Observational Memory when threadId is left out. waitForPending: true waits up to 30 seconds for pending observations, and is only offered when the caller may call POST /memory/observational-memory/buffer-status, which needs memory:write.
  • search_memory returns up to 20 results unless limit is set.

observability
Direct link to observability

ToolArgumentsRoutePermission
query_tracestimeRange*, where, textSearch, rootSource, group, orderBy, pagePOST /observability/traces/queryobservability:read
aggregate_tracestimeRange*, measures*, where, groupBy, interval, having, orderBy, limitPOST /observability/traces/aggregateobservability:read
query_spanstimeRange*, where, textSearch, orderBy, pagePOST /observability/spans/queryobservability:read
aggregate_spanstimeRange*, measures*, where, groupBy, interval, having, orderBy, limitPOST /observability/spans/aggregateobservability:read
query_threadstimeRange*, where, orderBy, pagePOST /observability/threads/queryobservability:read
get_trace_query_fieldstimeRange*, predicateScope*, search, limitPOST /observability/traces/query/fieldsobservability:read
get_trace_query_valuestimeRange*, predicateScope*, path*, search, limitPOST /observability/traces/query/valuesobservability:read
list_tracesFilters such as entityType, entityName, status, traceId, threadId, dateRange, plus page, perPage, field, directionGET /observability/tracesobservability:read
get_tracetraceId*, offsetGET /observability/traces/:traceId/lightobservability:read
get_spantraceId*, spanId*GET /observability/traces/:traceId/spans/:spanIdobservability:read
get_trace_trajectorytraceId*GET /observability/traces/:traceId/trajectoryobservability:read
list_logsFilters such as level, traceId, entityName, threadId, timestamp, plus page, perPage, directionGET /observability/logsobservability:read
  • A store that supports trace queries serves the query and aggregate tools and not list_traces. A store without them serves list_traces instead. list_logs is served only when the store implements logs.
  • predicateScope is trace, spans, scores, or feedback. interval is 1m, 5m, 15m, 1h, or 1d.
  • get_trace returns light span records. Pass the returned nextOffset as offset to read the rest of a cut trace.

observability_analytics
Direct link to observability_analytics

ToolArgumentsRoutePermission
list_scoresFilters such as scorerId, traceId, entityName, timestamp, plus page, perPage, field, directionGET /observability/scoresobservability:read
analyze_scoresop*, scorerId*, scoreSource, aggregation, filters, comparePeriod, groupBy, interval, percentilesPOST /observability/scores/<op>observability:read
list_feedbackFilters such as feedbackType, traceId, reviewStatus, timestamp, plus page, perPage, directionGET /observability/feedbackobservability:read
analyze_feedbackop*, feedbackType*, feedbackSource, aggregation, filters, comparePeriod, groupBy, interval, percentilesPOST /observability/feedback/<op>observability:read
analyze_metricsop*, name*, aggregation, distinctColumn, filters, comparePeriod, groupBy, limit, orderDirection, interval, percentilesPOST /observability/metrics/<op>observability:read
list_metric_namesmetricName, labelKey, prefix, limitGET /observability/discovery/metric-names, metric-label-keys, metric-label-valuesobservability:read
  • op is aggregate, breakdown, timeseries, or percentiles, and selects the route the tool calls.
  • aggregation is sum, avg, min, max, count, count_distinct, or last. comparePeriod is previous_period, previous_day, or previous_week.
  • list_metric_names lists metric names. With metricName, it lists that metric's label keys. With metricName and labelKey, it lists that label's values.
  • Each tool is served only when the store implements the matching scores, feedback, or metrics queries.

stored_agents
Direct link to stored_agents

ToolArgumentsRoutePermission
list_available_modelsNoneGET /editor/builder/models/availablestored-agents:read
list_stored_agentsstatus, page, perPageGET /stored/agentsstored-agents:read
get_stored_agentstoredAgentId*GET /stored/agents/:storedAgentIdstored-agents:read
create_stored_agentname*, instructions*, model, tools, memory, visibility, autoPublish, id, and the other stored agent fieldsPOST /stored/agentsstored-agents:write
update_stored_agentstoredAgentId*, any stored agent field, changeMessage, autoPublishPATCH /stored/agents/:storedAgentIdstored-agents:write
  • list_stored_agents returns published agents unless status is draft or archived, 100 per page by default.
  • create_stored_agent and update_stored_agent publish the change unless autoPublish is false. A created agent is owned by the caller and private unless visibility is public. See stored agent visibility.
  • When the agent builder restricts models, both tools reject models it doesn't allow. list_available_models returns the allowed models.