This is an automated email from the ASF dual-hosted git repository.
epugh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr-mcp.git
The following commit(s) were added to refs/heads/main by this push:
new 10b3bdb4 docs(clients): add ChatGPT setup guide (#243)
10b3bdb4 is described below
commit 10b3bdb4a894eba336a4ff5327f22c582e0e2a25
Author: Aditya Parikh <[email protected]>
AuthorDate: Tue Oct 6 14:17:24 2026 -0400
docs(clients): add ChatGPT setup guide (#243)
ChatGPT connects to remote MCP servers over streamable HTTP in developer
mode. Document the HTTP-only flow, the public-HTTPS/tunnel requirement and
why secured mode is not yet usable (OAuth 2.1 only, no static bearer).
Signed-off-by: Aditya Parikh <[email protected]>
Co-authored-by: Claude Sonnet 5.5 <[email protected]>
---
README.md | 5 +++--
docs/clients/README.md | 1 +
docs/clients/chatgpt.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++++
docs/tutorial.md | 2 +-
4 files changed, 60 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 086215a7..54069bdd 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@ Just ask your AI assistant:
> *"Find sci-fi movies with 'star wars' in the title released after 2000, show
> me the genre breakdown, and sort by relevance."*
-This Spring AI [Model Context Protocol
(MCP)](https://modelcontextprotocol.io/) server exposes Solr operations as
tools that any MCP-compatible AI client (Claude Desktop, Claude Code, VS
Code/Copilot, Cursor, JetBrains) can invoke.
+This Spring AI [Model Context Protocol
(MCP)](https://modelcontextprotocol.io/) server exposes Solr operations as
tools that any MCP-compatible AI client (Claude Desktop, Claude Code, ChatGPT,
VS Code/Copilot, Cursor, JetBrains) can invoke.
## Quick start
@@ -61,6 +61,7 @@ Add the server to your MCP client. For **Claude Desktop**,
edit
Using a different client, or want STDIO/HTTP/Docker options? See the
per-client guides:
**[Claude Desktop](docs/clients/claude-desktop.md)** ·
**[Claude Code](docs/clients/claude-code.md)** ·
+**[ChatGPT](docs/clients/chatgpt.md)** (HTTP only) ·
**[VS Code / Copilot](docs/clients/vs-code.md)** ·
**[Cursor](docs/clients/cursor.md)** ·
**[JetBrains](docs/clients/jetbrains.md)** ·
@@ -153,7 +154,7 @@ Running in **HTTP mode** — OAuth2, CORS, and the
`HTTP_SECURITY_ENABLED` toggl
## Documentation
**Using it**
-- [Quick start](#quick-start) · [Client setup](docs/clients/) — Claude
Desktop, Claude Code, VS Code, Cursor, JetBrains, MCP Inspector
+- [Quick start](#quick-start) · [Client setup](docs/clients/) — Claude
Desktop, Claude Code, ChatGPT, VS Code, Cursor, JetBrains, MCP Inspector
- [Tutorial: your first collection](docs/tutorial.md) — index a dataset twice,
schemaless then with a designed schema, and see why field types matter
- [Observability](docs/observability.md) — OpenTelemetry traces, metrics, logs
- Security: [Deployment model
(single-tenant)](docs/security/deployment-model.md) · [STDIO
model](docs/security/stdio.md) · [HTTP model](docs/security/http.md) · OAuth2
setup: [Auth0](docs/security/auth0.md) · [Keycloak](docs/security/keycloak.md)
diff --git a/docs/clients/README.md b/docs/clients/README.md
index c2c92144..e89ae033 100644
--- a/docs/clients/README.md
+++ b/docs/clients/README.md
@@ -9,6 +9,7 @@ server's streamable HTTP endpoint at
`http://localhost:8080/mcp`).
|--------|-------|
| Claude Desktop | [claude-desktop.md](claude-desktop.md) |
| Claude Code | [claude-code.md](claude-code.md) |
+| ChatGPT (HTTP only) | [chatgpt.md](chatgpt.md) |
| VS Code / GitHub Copilot | [vs-code.md](vs-code.md) |
| Cursor | [cursor.md](cursor.md) |
| JetBrains IDEs | [jetbrains.md](jetbrains.md) |
diff --git a/docs/clients/chatgpt.md b/docs/clients/chatgpt.md
new file mode 100644
index 00000000..b8dc6f83
--- /dev/null
+++ b/docs/clients/chatgpt.md
@@ -0,0 +1,55 @@
+# ChatGPT
+
+[ChatGPT](https://chatgpt.com/) can use MCP servers through **developer mode**
(see OpenAI's [developer mode
guide](https://developers.openai.com/api/docs/guides/developer-mode) and
[connecting a
server](https://developers.openai.com/plugins/deploy/connect-chatgpt)). It
differs from the other clients in this folder in three ways:
+
+- **HTTP only.** ChatGPT connects to a remote MCP server over streamable HTTP.
It cannot launch a local process, so there is no STDIO setup and no `java -jar`
/ `docker run -i` configuration to give it.
+- **The server must be reachable from OpenAI.** `http://localhost:8080/mcp`
does not work. Use a public HTTPS endpoint, a Secure MCP Tunnel, or a
development tunnel such as ngrok or `cloudflared`.
+- **Authentication is OAuth 2.1 or none.** ChatGPT does not support static
bearer tokens or custom headers, so the `Authorization: Bearer …` approach used
for [Claude Code](claude-code.md) is not available.
+
+Developer mode is available on the web for Pro, Plus, Business, Enterprise and
Education plans, and workspace admins may need to enable it.
+
+***
+
+## Run the server
+
+Start Solr MCP in HTTP mode, from the JAR or the Docker image. Either way the
endpoint is `http://localhost:8080/mcp`.
+
+```bash
+# JAR
+PROFILES=http HTTP_SECURITY_ENABLED=false SOLR_URL=http://localhost:8983/solr/
\
+ java -jar /absolute/path/to/solr-mcp-1.0.0-SNAPSHOT.jar
+
+# Docker (local image — build first with ./gradlew jibDockerBuild)
+docker run -p 8080:8080 --rm \
+ -e PROFILES=http -e HTTP_SECURITY_ENABLED=false \
+ -e SOLR_URL=http://host.docker.internal:8983/solr/ \
+ solr-mcp:latest
+```
+
+> **Warning — read before exposing this.** `HTTP_SECURITY_ENABLED=false` makes
every MCP tool anonymous, including the ones that index documents and modify
schemas. Putting that behind a public tunnel lets anyone who learns the URL
read and change your Solr data. Use it only for a short demo against a
throwaway Solr, and stop the tunnel afterwards. See the [HTTP security
model](../security/http.md).
+
+## Expose it over HTTPS
+
+Any HTTPS forwarder works. For example, with ngrok:
+
+```bash
+ngrok http 8080
+```
+
+Use the `https://…` address it prints, with `/mcp` appended.
+
+## Add it in ChatGPT
+
+1. **Settings → Security and login**: turn on **Developer mode**.
+2. Open **ChatGPT Plugins**, select the **+** button and create a
developer-mode app.
+3. Enter a name and description, and under **Connection** give the public
endpoint, ending in `/mcp`, for example `https://<your-tunnel>/mcp`. For a
private server, choose **Tunnel** instead and select an available Secure MCP
Tunnel.
+4. Choose **No authentication**, create the connection and review the
discovered tools. There should be twelve.
+5. Start a chat, enable the app, and ask *"What Solr collections are
available?"*.
+
+ChatGPT asks for confirmation before tool calls it treats as writes. Tools
without a `readOnlyHint` annotation are treated as writes, so expect prompts
for most Solr MCP tools. After restarting the server, use **Refresh** on the
app so ChatGPT re-reads its tools.
+
+## Secured HTTP (OAuth2)
+
+Not supported yet. ChatGPT's OAuth 2.1 flow expects the MCP server to publish
protected-resource metadata and to challenge anonymous requests, then registers
itself with the authorization server through CIMD or dynamic client
registration. Solr MCP's secured mode is built around a pre-issued JWT bearer
token and does not answer an anonymous `/mcp` request with `401` (see the [HTTP
security model](../security/http.md)), so ChatGPT has nothing to start a login
from. Until that is addressed [...]
+
+If you need ChatGPT against a shared Solr, put the server behind your own
OAuth-capable gateway rather than exposing it directly.
diff --git a/docs/tutorial.md b/docs/tutorial.md
index 9cad4553..d2bb8544 100644
--- a/docs/tutorial.md
+++ b/docs/tutorial.md
@@ -282,7 +282,7 @@ names via your client's tool inspector before assuming the
data is wrong.
## Where to go next
-- **[Client setup guides](clients/)** — Claude Desktop, Claude Code, VS Code /
+- **[Client setup guides](clients/)** — Claude Desktop, Claude Code, ChatGPT,
VS Code /
Copilot, Cursor, JetBrains, MCP Inspector
- **[Security](security/)** — the deployment model, the HTTP transport, and
OAuth2
setup with Auth0 or Keycloak