mcp tool to let the model call tools on a remote MCP server alongside its
web research. Parallel connects to the server, lists its tools, and calls them when they are
useful for the question. The tools found on each server are reported as an mcp_list_tools
output item and each call as an mcp_call item, in the same shapes OpenAI returns them.
Use an mcp tool for a server you run or a provider your organization already licenses. For
Data Connectors Parallel manages, use data_sources
instead.
Add a server
server_description is accepted and ignored. Parallel does not run the OAuth flow for you;
obtain a token separately and pass it as authorization or in headers:
mcp tools, but fewer usually gives better answers. MCP tools
work on every reasoning.effort tier, and can be combined with a
web_search tool and with data_sources.
Restrictions
- Only servers using the Streamable HTTP transport are supported, and only their tools: MCP resources and prompts are not used.
require_approvalmust be"never". There is no approval round trip, so the response never containsmcp_approval_requestitems.connector_id(OpenAI connectors),tunnel_id, anddefer_loadingare not supported and are rejected when set, includingdefer_loading: false.allowed_toolsmust be a list of tool names. An empty list and the filter-object form ({"read_only": true}) are rejected.allowed_toolsnames that match no tool on the server are ignored. If none match, the server is never called and itsmcp_list_toolsitem reports the error.
400 with the reason; see
OpenAI Responses Compatibility.
Check server connections
A completed response contains onemcp_list_tools item per mcp tool, listing the tools the
model could call on that server after allowed_tools filtering:
tools is empty and error says
why. The request still completes, on web research and any other servers:
allowed_tools, is reported the same way.
Connectors named in data_sources get an mcp_list_tools item only when they fail, with an
empty tools list.
Read tool calls
A completed response contains onemcp_call item per tool call the model made, for your
mcp tools and for the connectors you named in data_sources:
The model decides when a tool is useful, so a server may be called several times or not at
all. A failed call does not fail the response. Calls to Index Partners are not reported.
A failed call’s
error is an object, in the same shape OpenAI returns:
Read
output by item type rather than by position. mcp_list_tools items, then
mcp_call items, follow the web_search_call items and precede the message item in a
non-streaming response, but follow the message item in a streamed one.
mcp tools on tools with credentials removed: headers and
authorization are null, and any query string on server_url is replaced with ***.
With streaming enabled, server connections and
tool calls are reported once research finishes, after the answer’s text delta. Each
mcp_list_tools item is sent as response.output_item.added,
response.mcp_list_tools.completed or response.mcp_list_tools.failed, and
response.output_item.done, then each mcp_call item the same way with
response.mcp_call.completed or response.mcp_call.failed. The
response.mcp_list_tools.in_progress, response.mcp_call.in_progress, and
response.mcp_call_arguments.* events are not sent.