Integration · LibreChat
Connect LibreChat to Google Search Console
6 steps · about 6 minutes
By the GSC PAP team · Updated
LibreChat is a self-hosted chat interface that puts many models behind one UI, and it speaks Model Context Protocol natively through an mcpServers block in librechat.yaml. Point it at GSC PAP and the agent gets read-only access to Search Console, Google Analytics 4 and PageSpeed Insights.
The thing that makes LibreChat different from every other client on this list is that it is usually not yours alone. A desktop client's config file belongs to one person, so one token is the whole story. A LibreChat install serves a team, and Search Console access is per person: the writer should see the blog's properties and nobody else's. LibreChat can ask each user for their own token and keep it to them, so one server entry gives ten people ten separate views. That is the configuration below, and it is the one worth starting from.
One decision before the steps, because getting it wrong looks like a broken server. LibreChat guesses the transport from the URL when you do not say, and an https URL makes it guess SSE. GSC PAP speaks streamable HTTP and has no SSE endpoint at all, so the type has to be written out.
How to connect Google Search Console to LibreChat
- 1
Sign in to GSC PAP and copy your token
Go to gscpap.com, click "Sign in with Google" and approve the read-only access. Choose which properties to authorize, then copy the bearer token the connect page shows once. Every person who will use the server does this for their own Google account, which is what keeps one install from mixing two people's properties.
- 2
Add the server to librechat.yaml
Open your librechat.yaml and add an entry under mcpServers. Write the type out rather than letting LibreChat infer it. The key you choose becomes part of every tool name, so keep it short and do not rename it later: renaming changes each tool key and breaks agents that were saved against the old ones.
yamlmcpServers: gscpap: type: streamable-http url: https://mcp.gscpap.com/mcp title: Google Search Console description: Search Console, GA4 and PageSpeed, read-only. requiresOAuth: false headers: Authorization: "Bearer ${GSCPAP_TOKEN}" timeout: 120000 initTimeout: 30000 - 3
Decide whose Search Console it reads
The block above uses one token from your environment, which means everybody on the install reads the same person's properties. For a shared install you want the other shape: customUserVars asks each user for their own token through the UI and substitutes it into the header. Note the braces, because this is the easiest thing to get wrong here. ${VAR} with one brace and a dollar is an environment variable read on the server; {{VAR}} with two braces is the per-user value.
yamlmcpServers: gscpap: type: streamable-http url: https://mcp.gscpap.com/mcp requiresOAuth: false headers: Authorization: "Bearer {{GSCPAP_TOKEN}}" customUserVars: GSCPAP_TOKEN: title: GSC PAP token description: From app.gscpap.com, shown once when you connect. sensitive: true timeout: 120000 - 4
Give the slow tools room
LibreChat's default request timeout is 30 seconds, and a few of these tools legitimately take longer because they are waiting on Google rather than on us. On our own traffic pagespeed_insights averages about 16 seconds and a bulk URL inspection costs roughly as long as the slowest page in the batch, which can be 50. Left at the default, the quick tools work and the slow ones fail, which reads like an unreliable server rather than a timeout. 120000 is comfortable.
- 5
Restart LibreChat and check the connection
LibreChat reads librechat.yaml at startup, so the new server will not appear until you restart. Then open the tool picker: with the shared-token shape the server connects at startup and the tools are there. With customUserVars it will show as not connected until you fill the token in, because a per-user server has no app-level connection to make, and that is expected rather than a failure.
- 6
Ask the first question
Attach the server to an agent or pick it in the chat tool menu, then ask something that names a property. The agent will call list_sites first if it does not know your properties yet.
textUsing Search Console, compare the last 28 days with the previous 28 for example.com. Which five queries lost the most clicks, and what position did each move to?
LibreChat MCP: common issues
- ·Leave out type and LibreChat infers it from the URL, and an https URL means sse. GSC PAP has no SSE endpoint, so the connection fails for a reason the error will not name. Always write type: streamable-http.
- ·${GSCPAP_TOKEN} and {{GSCPAP_TOKEN}} are different things. One brace with a dollar is an environment variable resolved on the server; two braces is a per-user value from customUserVars. Use the wrong one and LibreChat sends the literal text as your token, which comes back 401.
- ·requiresOAuth is auto-detected at startup, and our endpoint does advertise OAuth. With a static Authorization header set requiresOAuth: false, or LibreChat may start an OAuth flow instead of using the header you configured.
- ·The default timeout is 30000 ms and initTimeout is 10000. Both are low for this server: the first is shorter than some Google calls take, and the second is tight for a cold start.
- ·LibreChat's reference documents an oauth block whose required keys include client_id and client_secret, while the same page says Dynamic Client Registration is used when no client id and secret are given. We have not taken that path to a verified state, so the configurations here use a token. GSC PAP does implement DCR, which is how the Claude.ai connector works.
- ·serverInstructions: true asks the server for usage guidance to inject into the agent's context. GSC PAP does not send instructions in the handshake today, so the option adds nothing. Leave it out rather than wondering why it changed nothing.
- ·Keep the /mcp path on the URL. https://mcp.gscpap.com without it is not an MCP endpoint, and a GET to the endpoint answers 405 by design, which is correct behaviour rather than a fault.
- ·Rate limits are per user, 60 tool calls a minute and 1,000 an hour. On a shared install with one shared token, everybody draws on the same allowance; with per-user tokens each person gets their own.
Frequently asked questions
Does LibreChat support remote MCP servers?
Yes. An entry under mcpServers in librechat.yaml with type: streamable-http and a url connects to a remote server, and headers can carry a bearer token. LibreChat also supports sse, stdio and websocket, and infers the type from the URL when you do not set it.
How do I give each LibreChat user their own Search Console access?
Define a customUserVars variable and reference it in the Authorization header with double braces. Each user is prompted for their own token in the UI, so one server entry serves a whole team without anybody seeing anybody else's properties. A server configured this way has no app-level connection, so it shows as not connected until a user supplies the value.
Why do some MCP tools time out in LibreChat but not others?
LibreChat's default request timeout is 30 seconds. Tools that wait on a Google API, such as a PageSpeed run or a bulk URL inspection, can exceed that while the quick Search Console queries return in under a second. Raising timeout to 120000 fixes the pattern where only the heavy tools fail.
Do I need to set up OAuth, or is a token enough?
A token is enough and it is what we document. Paste it into the Authorization header for a single-user install, or collect it per user with customUserVars for a shared one. GSC PAP supports OAuth with dynamic client registration, which is how the Claude.ai connector avoids tokens entirely, but LibreChat's own reference is ambiguous about whether its oauth block needs a client id and secret, so the token path is the one to trust here.
Other integrations
All integrationsClaude Desktop
Connect Claude Desktop to Google Search Console without creating a Google Cloud project. Sign in with Google, paste one config block, restart Claude.
Cursor
Connect Google Search Console to Cursor through a hosted MCP server. Sign in with Google, paste one token into mcp.json, and skip the Google Cloud project.
Claude Code
Add Google Search Console to Claude Code with one claude mcp add command. Hosted and read-only: no Google Cloud project, no OAuth credentials, no Python.
Codex CLI (OpenAI)
Add Google Search Console, GA4 and PageSpeed data to OpenAI's Codex CLI with one TOML block and a bearer token. You never create a Google Cloud project.
VS Code (GitHub Copilot)
Connect Google Search Console to GitHub Copilot in VS Code with one .vscode/mcp.json entry, then ask agent mode about GSC. You skip Google Cloud setup.
Gemini CLI (Google)
Query Google Search Console (GSC) from your terminal with Gemini CLI. Register GSC PAP as an MCP server in settings.json, with no Google Cloud project.
Windsurf (Devin Desktop)
Give Windsurf, now Devin Desktop, your Google Search Console data. Add GSC PAP as a remote MCP server with one bearer token and no Google Cloud project.
Zed Editor
Bring Google Search Console into Zed's AI assistant as an MCP context server. You add one settings.json block and a token, with no Google Cloud setup.
JetBrains IDEs
Connect Google Search Console to IntelliJ, PyCharm, WebStorm and other JetBrains IDEs via AI Assistant's MCP settings, without a Google Cloud project.
Continue (extension)
Continue MCP setup for Google Search Console: add one mcpServers entry with a bearer token in VS Code or JetBrains. You do not need a Google Cloud project.
Claude.ai (browser)
Add Google Search Console to Claude.ai as a custom connector. Paste one URL and approve access. No token to copy, no config file, no Google Cloud project.
Direct HTTP (curl, custom agents)
Call the GSC PAP MCP server from curl or your own agent. It is JSON-RPC over HTTP with a bearer token, so you need no MCP client or Google Cloud project.
opencode
Add Google Search Console to opencode as a remote MCP server. One config block with your token, no Google Cloud project, no local server to run.
Cline
Add Google Search Console to Cline in VS Code or the Cline CLI as a remote MCP server. One token, no Google Cloud project, read-only access.
Warp
Add Google Search Console to Warp's agent as a remote MCP server. Paste one JSON block with your token, press Start, and ask about your traffic in the terminal.
LM Studio
Give a local model your Search Console data. Add GSC PAP to LM Studio's mcp.json as a remote server, with one token and no Google Cloud project.
ChatGPT
Add Google Search Console to ChatGPT as a custom MCP server. What the setup looks like, and the plan requirement that decides whether you can do it at all.
Goose
Add Google Search Console to Goose as a streamable_http extension. One block in config.yaml with your token, no Google Cloud project, read-only access.
Google Antigravity
Add Search Console to Google Antigravity as a custom MCP server. It handles dynamic client registration, so the setup is a URL and a sign-in, with no token.
Roo Code
Add Google Search Console to Roo Code in VS Code as a streamable-http MCP server. One block with your token, no Google Cloud project, read-only.
Kilo Code
Add Google Search Console to Kilo Code as a remote MCP server. It can negotiate OAuth for you, or take a bearer token. No Google Cloud project either way.
Amp
Add Google Search Console to Amp as a remote MCP server, in settings or with one CLI command. No Google Cloud project, read-only scopes.
Kiro
Add Google Search Console to Kiro as a remote MCP server. One entry in mcp.json, the token read from an approved environment variable, read-only access.
Raycast
Add Google Search Console to Raycast AI as an HTTP MCP server. Dynamic OAuth means no token to paste, and HTTP servers work on Raycast for iOS too.
GitHub Copilot CLI
Add Google Search Console to GitHub Copilot CLI with one command or one JSON entry. Remote HTTP transport, your token in a header, read-only access.
n8n
Give an n8n AI Agent your Search Console data through the MCP Client Tool node, and schedule the SEO report you keep meaning to write.