In the Grok app
Connectors live at grok.com/connectors. Grok ships built-in connectors and a catalogue of pre-configured ones; ours is neither, so it is added as a custom MCP connector.1
New Connector → Custom
At grok.com/connectors, choose New
Connector, then Custom.
2
Enter the server URL and authenticate
/.well-known/oauth-protected-resource, so a client that looks for it finds
it without configuration — see Authentication.3
Grok discovers the tools
Grok calls
tools/list and makes what it finds available in conversation,
the same way it treats a built-in connector. Ask for something a tool
answers.In a Grok Business or Enterprise organisation, a team admin provisions a
connector in the cloud console before anyone else in the organisation can use
it. That is xAI’s rule, not ours.
From the xAI API
The API attaches a remote MCP server as an entry in thetools array. xAI holds
the connection to us and drives it on the model’s behalf; your code sends one
request.
The parameter that matters is authorization. xAI’s documentation describes it
as “a token that will be set in the Authorization header on requests to the
MCP server” — which is exactly the header our bearer path reads. So a tgcc_
key works against the xAI API directly, with no OAuth flow and no connector.
The two SDKs spell two of these differently, and it is the first thing that
fails. xAI’s native SDK takes
allowed_tool_names and extra_headers;
the OpenAI-compatible Responses API takes allowed_tools and
headers. server_url, server_label and authorization are the same in
both. require_approval and connector_id from OpenAI’s own Responses API are
not supported by xAI.Narrow it at both ends
allowed_tool_names is xAI’s filter, and it is worth setting: without it, every
tool the server exposes is injected into the model’s context, which costs tokens
and widens what the model may reach for.
Transport
xAI supports Streaming HTTP and SSE for remote MCP servers. We speak Streamable HTTP and offer no SSE stream, which is the supported half — there is nothing to choose and nothing to configure.GET /mcp answering 405 is that same fact
seen from the other side, and is not a fault; Limits has the
whole table.
Two behaviours that will surprise you
Some tools answer with a job id, not a result
Some tools answer with a job id, not a result
Extractions, reports, knowledge ingestions and jobs are queued, always. The
tool hands back a job id and Grok has to poll before it can honestly say the
work finished. A model that reports “started” and stops is behaving
correctly; ask it to check the job.
Uploading a document succeeds before it is readable
Uploading a document succeeds before it is readable
Upload returns success while parsing continues in the background. Reading
the document’s text straight afterwards returns 409
document_not_processed until parsing finishes. It did not fail — wait,
then read again.Tools
What is callable, and the scope each one demands.
Authentication
Bearer keys, the OAuth flow, and the scope split.
xAI’s own pages for these two paths are
Connectors and Remote MCP
Tools.

