Skip to main content
Pass the OpenAI 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. Each call is reported as an mcp_call output item, in the same shape OpenAI returns it. 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:
A request may carry up to 10 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_approval must be "never". There is no approval round trip, so the response never contains mcp_approval_request items.
  • connector_id (OpenAI connectors), tunnel_id, and defer_loading are not supported and are rejected when set, including defer_loading: false.
  • allowed_tools must be a list of tool names. An empty list and the filter-object form ({"read_only": true}) are rejected.
  • Connection and tool-listing errors are not reported yet. If a server can’t be reached or its tools can’t be listed, the request completes on web research and any other servers, with no mcp_call items for that server. allowed_tools names that match no tool on the server are also ignored without an error, so if none match, that server is never called.
Rejected tools return a 400 with the reason; see OpenAI Responses Compatibility.

Read tool calls

A completed response contains one mcp_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. Read output by item type rather than by position. 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.
The response echoes your 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, tool calls are reported once research finishes, after the answer’s text delta, as response.output_item.added, response.mcp_call.completed or response.mcp_call.failed, and response.output_item.done for each call. The response.mcp_call.in_progress, response.mcp_call_arguments.*, and response.mcp_list_tools.* events are not sent.