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 63a839a3 docs(clients): add a Zed guide and make the HTTP-mode setup
self-contained (#200)
63a839a3 is described below
commit 63a839a3e5d786d5462b17766abf10551a1b91de
Author: Aditya Parikh <[email protected]>
AuthorDate: Tue Oct 6 14:40:05 2026 -0400
docs(clients): add a Zed guide and make the HTTP-mode setup self-contained
(#200)
* docs(clients): add a Zed guide and make the HTTP-mode setup self-contained
Zed was the one client with no guide; it now has one in docs/clients and in
the site tree, covering the settings form and settings.json for STDIO (JAR
and Docker) and the remote-server entry for HTTP, with the schema and
timeout notes that came out of using it.
Every HTTP Mode section now says that the transport is secured by default
and answers 401 until an issuer is configured, and names the
HTTP_SECURITY_ENABLED=false escape hatch for a local experiment, so a
first-time reader is not left guessing why their client cannot connect.
The Claude Desktop guides explain why the Connectors screen is the wrong
route for a local server: custom connectors are contacted from Anthropic's
cloud, so localhost is unreachable there; the mcp-remote bridge runs
locally and needs no tunnel.
README and the client index list Zed alongside the other clients.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01CiUHyyXLTo9ATdgg8eRFZJ
Signed-off-by: Aditya Parikh <[email protected]>
* docs(clients): correct the secured-HTTP note, /mcp never answers 401
Secured mode leaves /mcp anonymous and denies inside each tool, so a
client without a token connects, lists the tools and gets Access Denied
on every call; no OAuth login is ever triggered. Say so, and point Zed
users at the static bearer header that works.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: Aditya Parikh <[email protected]>
---------
Signed-off-by: Aditya Parikh <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>
---
README.md | 5 +-
docs/clients/README.md | 1 +
docs/clients/claude-code.md | 2 +
docs/clients/claude-desktop.md | 6 +-
docs/clients/cursor.md | 2 +
docs/clients/jetbrains.md | 2 +
docs/clients/mcp-inspector.md | 2 +
docs/clients/vs-code.md | 2 +
docs/clients/zed.md | 82 +++++++++++++++++++++
docs/site/content/pages/mcp/clients/claude-code.md | 2 +
.../content/pages/mcp/clients/claude-desktop.md | 6 +-
docs/site/content/pages/mcp/clients/cursor.md | 2 +
docs/site/content/pages/mcp/clients/jetbrains.md | 2 +
.../content/pages/mcp/clients/mcp-inspector.md | 2 +
docs/site/content/pages/mcp/clients/vs-code.md | 2 +
docs/site/content/pages/mcp/clients/zed.md | 85 ++++++++++++++++++++++
docs/site/content/pages/mcp/quick-start.md | 2 +-
17 files changed, 202 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index f34140bc..9dd66f3a 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, Codex,
ChatGPT, 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, Codex,
ChatGPT, VS Code/Copilot, Cursor, JetBrains, Zed) can invoke.
## Quick start
@@ -66,6 +66,7 @@ Using a different client, or want STDIO/HTTP/Docker options?
See the per-client
**[VS Code / Copilot](docs/clients/vs-code.md)** ·
**[Cursor](docs/clients/cursor.md)** ·
**[JetBrains](docs/clients/jetbrains.md)** ·
+**[Zed](docs/clients/zed.md)** ·
**[MCP Inspector](docs/clients/mcp-inspector.md)**.
#### 4. Try it out
@@ -158,7 +159,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, Codex, ChatGPT, VS Code, Cursor, JetBrains, MCP Inspector
+- [Quick start](#quick-start) · [Client setup](docs/clients/) — Claude
Desktop, Claude Code, Codex, ChatGPT, VS Code, Cursor, JetBrains, Zed, 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 0ce43bf0..5aa5d06d 100644
--- a/docs/clients/README.md
+++ b/docs/clients/README.md
@@ -14,6 +14,7 @@ server's streamable HTTP endpoint at
`http://localhost:8080/mcp`).
| VS Code / GitHub Copilot | [vs-code.md](vs-code.md) |
| Cursor | [cursor.md](cursor.md) |
| JetBrains IDEs | [jetbrains.md](jetbrains.md) |
+| Zed | [zed.md](zed.md) |
| MCP Inspector | [mcp-inspector.md](mcp-inspector.md) |
Before connecting, start Solr and build the server — see the
diff --git a/docs/clients/claude-code.md b/docs/clients/claude-code.md
index c05a92a8..3bbd9c8a 100644
--- a/docs/clients/claude-code.md
+++ b/docs/clients/claude-code.md
@@ -85,6 +85,8 @@ Add to your project root:
Start the server in HTTP mode first (`PROFILES=http java -jar
build/libs/solr-mcp-1.0.0-SNAPSHOT.jar`, or `PROFILES=http ./gradlew bootRun`),
then:
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see the [HTTP
security model](../security/http.md) before exposing it to anyone else.
+
### CLI ###
```bash
diff --git a/docs/clients/claude-desktop.md b/docs/clients/claude-desktop.md
index ea985dc5..bf10dc68 100644
--- a/docs/clients/claude-desktop.md
+++ b/docs/clients/claude-desktop.md
@@ -56,7 +56,9 @@ Build the image first: `./gradlew jibDockerBuild`
## HTTP Mode ##
-HTTP mode connects to a running MCP server via REST endpoints. Start the
server first, then configure Claude Desktop to connect using `mcp-remote`.
+HTTP mode connects to a running MCP server over streamable HTTP. Start the
server first, then configure Claude Desktop to connect through the `mcp-remote`
bridge.
+
+Do not use Claude Desktop's **Settings → Connectors → Add custom connector**
for a local server: custom connectors are contacted from Anthropic's cloud, not
from your machine, so a `localhost` URL is unreachable there and would need a
public HTTPS endpoint with OAuth2 enabled. `mcp-remote` runs locally as a STDIO
server and forwards to the HTTP endpoint on your machine, so no tunnel is
needed.
### Start the Server ###
@@ -74,6 +76,8 @@ docker run -p 8080:8080 --rm \
solr-mcp:latest
```
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see the [HTTP
security model](../security/http.md) before exposing it to anyone else.
+
### Configure Claude Desktop ###
```json
diff --git a/docs/clients/cursor.md b/docs/clients/cursor.md
index db756a08..ab2e6fe3 100644
--- a/docs/clients/cursor.md
+++ b/docs/clients/cursor.md
@@ -57,6 +57,8 @@ Create `.cursor/mcp.json` in your project root:
Start the server in HTTP mode first (`PROFILES=http java -jar
build/libs/solr-mcp-1.0.0-SNAPSHOT.jar`, or `PROFILES=http ./gradlew bootRun`),
then:
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see the [HTTP
security model](../security/http.md) before exposing it to anyone else.
+
```json
{
"mcpServers": {
diff --git a/docs/clients/jetbrains.md b/docs/clients/jetbrains.md
index 84217654..d5ace814 100644
--- a/docs/clients/jetbrains.md
+++ b/docs/clients/jetbrains.md
@@ -58,6 +58,8 @@ Create `.junie/mcp/mcp.json` in your project root:
Start the server in HTTP mode first (`PROFILES=http java -jar
build/libs/solr-mcp-1.0.0-SNAPSHOT.jar`, or `PROFILES=http ./gradlew bootRun`),
then:
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see the [HTTP
security model](../security/http.md) before exposing it to anyone else.
+
```json
{
"mcpServers": {
diff --git a/docs/clients/mcp-inspector.md b/docs/clients/mcp-inspector.md
index a21e686d..8957b689 100644
--- a/docs/clients/mcp-inspector.md
+++ b/docs/clients/mcp-inspector.md
@@ -37,6 +37,8 @@ This starts the Inspector UI at `http://localhost:6274`.
-e SOLR_URL=http://host.docker.internal:8983/solr/ \
solr-mcp:latest
+ The HTTP transport is secured by default: without a bearer token the
client still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see the [HTTP
security model](../security/http.md) before exposing it to anyone else.
+
2. In MCP Inspector, enter: `http://localhost:8080/mcp`
3. Click **Connect**
diff --git a/docs/clients/vs-code.md b/docs/clients/vs-code.md
index 1a15fafc..a1edd7cc 100644
--- a/docs/clients/vs-code.md
+++ b/docs/clients/vs-code.md
@@ -66,6 +66,8 @@ Open VS Code Settings (JSON) and add:
Start the server in HTTP mode first (`PROFILES=http java -jar
build/libs/solr-mcp-1.0.0-SNAPSHOT.jar`, or `PROFILES=http ./gradlew bootRun`),
then:
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see the [HTTP
security model](../security/http.md) before exposing it to anyone else.
+
```json
{
"servers": {
diff --git a/docs/clients/zed.md b/docs/clients/zed.md
new file mode 100644
index 00000000..004468b4
--- /dev/null
+++ b/docs/clients/zed.md
@@ -0,0 +1,82 @@
+# Zed
+
+[Zed](https://zed.dev/) supports MCP servers natively. Local servers run as a
subprocess; remote servers are reached over streamable HTTP. Both are
configured from **Settings → AI → MCP Servers** (the `agent: open settings`
action) or by editing `settings.json` (`zed: open settings file`).
+
+***
+
+## STDIO Mode (Recommended) ##
+
+### Settings UI ###
+
+**Settings → AI → MCP Servers → Add Server → Add Local Server**, then:
+
+| Field | JAR | Docker (local image, build first with `./gradlew
jibDockerBuild`) |
+|---|---|---|
+| Server Name | `solr-mcp` | `solr-mcp` |
+| Command | `java` | `docker` |
+| Arguments | `-jar /absolute/path/to/solr-mcp-1.0.0-SNAPSHOT.jar` | `run -i
--rm -e SOLR_URL=http://host.docker.internal:8983/solr/ solr-mcp:latest` |
+| Environment Variables | `SOLR_URL` = `http://localhost:8983/solr/` | |
+
+Arguments go in one field, space-separated, not as a JSON array. The form
writes the same `settings.json` entry shown below.
+
+**Linux users**: add `--add-host=host.docker.internal:host-gateway` to the
Docker arguments.
+
+### `settings.json` ###
+
+**JAR:**
+
+```json
+{
+ "context_servers": {
+ "solr-mcp": {
+ "command": "java",
+ "args": ["-jar", "/absolute/path/to/solr-mcp-1.0.0-SNAPSHOT.jar"],
+ "env": { "SOLR_URL": "http://localhost:8983/solr/" }
+ }
+ }
+}
+```
+
+**Docker:**
+
+```json
+{
+ "context_servers": {
+ "solr-mcp": {
+ "command": "docker",
+ "args": ["run", "-i", "--rm",
+ "-e", "SOLR_URL=http://host.docker.internal:8983/solr/",
+ "solr-mcp:latest"],
+ "env": {}
+ }
+ }
+}
+```
+
+`command` is a plain string with `args` and `env` alongside it; there is no
`source` key, and adding one makes Zed's settings validator reject the entry
(verified on Zed 1.16.2).
+
+### Timeout ###
+
+Zed gives a server 60 seconds to start. A first Docker run has to pull the
image, which can outrun that on slow networks and then looks like a broken
configuration. Pull the image once beforehand (`docker pull solr-mcp:latest`,
or the registry image you use) and the problem disappears.
+
+***
+
+## HTTP Mode ##
+
+Start the server in HTTP mode first (`PROFILES=http java -jar
build/libs/solr-mcp-1.0.0-SNAPSHOT.jar`, or `PROFILES=http ./gradlew bootRun`),
then either **Settings → AI → MCP Servers → Add Server → Add Remote Server**
with the URL `http://localhost:8080/mcp`, or:
+
+```json
+{
+ "context_servers": {
+ "solr-mcp": {
+ "url": "http://localhost:8080/mcp"
+ }
+ }
+}
+```
+
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see the [HTTP
security model](../security/http.md) before exposing it to anyone else.
+
+With security disabled the entry above connects as is. With security on, send
a token from your identity provider by adding `"headers": { "Authorization":
"Bearer <token>" }` to the entry; the token's `aud` claim must contain the
exact URL given here.
+
+See the [Zed MCP documentation](https://zed.dev/docs/ai/mcp) for the latest
configuration format.
diff --git a/docs/site/content/pages/mcp/clients/claude-code.md
b/docs/site/content/pages/mcp/clients/claude-code.md
index ffa9f6f7..0af65fd6 100644
--- a/docs/site/content/pages/mcp/clients/claude-code.md
+++ b/docs/site/content/pages/mcp/clients/claude-code.md
@@ -106,6 +106,8 @@ docker run -p 8080:8080 --rm \
**Linux users** (Docker option): add
`--add-host=host.docker.internal:host-gateway` to the `docker run` command.
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see
[Security](/mcp/security.html) before exposing it to anyone else.
+
### CLI ###
```bash
diff --git a/docs/site/content/pages/mcp/clients/claude-desktop.md
b/docs/site/content/pages/mcp/clients/claude-desktop.md
index cd8c968f..f3d9911d 100644
--- a/docs/site/content/pages/mcp/clients/claude-desktop.md
+++ b/docs/site/content/pages/mcp/clients/claude-desktop.md
@@ -59,7 +59,9 @@ Requires Java 25+ and a [built
JAR](https://github.com/apache/solr-mcp#running-t
## HTTP Mode ##
-HTTP mode connects to a running MCP server via REST endpoints. Start the
server first, then configure Claude Desktop to connect using `mcp-remote`.
+HTTP mode connects to a running MCP server over streamable HTTP. Start the
server first, then configure Claude Desktop to connect through the `mcp-remote`
bridge.
+
+Do not use Claude Desktop's **Settings → Connectors → Add custom connector**
for a local server: custom connectors are contacted from Anthropic's cloud, not
from your machine, so a `localhost` URL is unreachable there and would need a
public HTTPS endpoint with OAuth2 enabled. `mcp-remote` runs locally as a STDIO
server and forwards to the HTTP endpoint on your machine, so no tunnel is
needed.
### Start the Server ###
@@ -79,6 +81,8 @@ docker run -p 8080:8080 --rm \
**Linux users** (Docker option): add
`--add-host=host.docker.internal:host-gateway` to the `docker run` command.
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see
[Security](/mcp/security.html) before exposing it to anyone else.
+
### Configure Claude Desktop ###
```json
diff --git a/docs/site/content/pages/mcp/clients/cursor.md
b/docs/site/content/pages/mcp/clients/cursor.md
index 86adef50..87c92a36 100644
--- a/docs/site/content/pages/mcp/clients/cursor.md
+++ b/docs/site/content/pages/mcp/clients/cursor.md
@@ -78,6 +78,8 @@ docker run -p 8080:8080 --rm \
### Configure Cursor ###
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see
[Security](/mcp/security.html) before exposing it to anyone else.
+
```json
{
"mcpServers": {
diff --git a/docs/site/content/pages/mcp/clients/jetbrains.md
b/docs/site/content/pages/mcp/clients/jetbrains.md
index a4ca9d9a..cb707463 100644
--- a/docs/site/content/pages/mcp/clients/jetbrains.md
+++ b/docs/site/content/pages/mcp/clients/jetbrains.md
@@ -79,6 +79,8 @@ docker run -p 8080:8080 --rm \
### Configure the IDE ###
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see
[Security](/mcp/security.html) before exposing it to anyone else.
+
```json
{
"mcpServers": {
diff --git a/docs/site/content/pages/mcp/clients/mcp-inspector.md
b/docs/site/content/pages/mcp/clients/mcp-inspector.md
index df3a8526..4c264656 100644
--- a/docs/site/content/pages/mcp/clients/mcp-inspector.md
+++ b/docs/site/content/pages/mcp/clients/mcp-inspector.md
@@ -51,6 +51,8 @@ This starts the Inspector UI at `http://localhost:6274`.
-e SOLR_URL=http://host.docker.internal:8983/solr/ \
solr-mcp:latest
+ The HTTP transport is secured by default: without a bearer token the
client still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see
[Security](/mcp/security.html) before exposing it to anyone else.
+
2. In MCP Inspector, enter: `http://localhost:8080/mcp`
3. Click **Connect**
diff --git a/docs/site/content/pages/mcp/clients/vs-code.md
b/docs/site/content/pages/mcp/clients/vs-code.md
index 7326c035..3769efcf 100644
--- a/docs/site/content/pages/mcp/clients/vs-code.md
+++ b/docs/site/content/pages/mcp/clients/vs-code.md
@@ -89,6 +89,8 @@ docker run -p 8080:8080 --rm \
### Configure VS Code ###
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see
[Security](/mcp/security.html) before exposing it to anyone else.
+
```json
{
"servers": {
diff --git a/docs/site/content/pages/mcp/clients/zed.md
b/docs/site/content/pages/mcp/clients/zed.md
new file mode 100644
index 00000000..ef009092
--- /dev/null
+++ b/docs/site/content/pages/mcp/clients/zed.md
@@ -0,0 +1,85 @@
+Title: Zed
+URL: mcp/clients/zed.html
+save_as: mcp/clients/zed.html
+template: mcp/client
+
+[Zed](https://zed.dev/) supports MCP servers natively. Local servers run as a
subprocess; remote servers are reached over streamable HTTP. Both are
configured from **Settings → AI → MCP Servers** (the `agent: open settings`
action) or by editing `settings.json` (`zed: open settings file`).
+
+***
+
+## STDIO Mode (Recommended) ##
+
+### Settings UI ###
+
+**Settings → AI → MCP Servers → Add Server → Add Local Server**, then:
+
+| Field | JAR | Docker (local image, build first with `./gradlew
jibDockerBuild`) |
+|---|---|---|
+| Server Name | `solr-mcp` | `solr-mcp` |
+| Command | `java` | `docker` |
+| Arguments | `-jar /absolute/path/to/solr-mcp-1.0.0-SNAPSHOT.jar` | `run -i
--rm -e SOLR_URL=http://host.docker.internal:8983/solr/ solr-mcp:latest` |
+| Environment Variables | `SOLR_URL` = `http://localhost:8983/solr/` | |
+
+Arguments go in one field, space-separated, not as a JSON array. The form
writes the same `settings.json` entry shown below.
+
+**Linux users**: add `--add-host=host.docker.internal:host-gateway` to the
Docker arguments.
+
+### `settings.json` ###
+
+**JAR:**
+
+```json
+{
+ "context_servers": {
+ "solr-mcp": {
+ "command": "java",
+ "args": ["-jar", "/absolute/path/to/solr-mcp-1.0.0-SNAPSHOT.jar"],
+ "env": { "SOLR_URL": "http://localhost:8983/solr/" }
+ }
+ }
+}
+```
+
+**Docker:**
+
+```json
+{
+ "context_servers": {
+ "solr-mcp": {
+ "command": "docker",
+ "args": ["run", "-i", "--rm",
+ "-e", "SOLR_URL=http://host.docker.internal:8983/solr/",
+ "solr-mcp:latest"],
+ "env": {}
+ }
+ }
+}
+```
+
+`command` is a plain string with `args` and `env` alongside it; there is no
`source` key, and adding one makes Zed's settings validator reject the entry
(verified on Zed 1.16.2).
+
+### Timeout ###
+
+Zed gives a server 60 seconds to start. A first Docker run has to pull the
image, which can outrun that on slow networks and then looks like a broken
configuration. Pull the image once beforehand (`docker pull solr-mcp:latest`,
or the registry image you use) and the problem disappears.
+
+***
+
+## HTTP Mode ##
+
+Start the server in HTTP mode first (`PROFILES=http java -jar
build/libs/solr-mcp-1.0.0-SNAPSHOT.jar`, or `PROFILES=http ./gradlew bootRun`),
then either **Settings → AI → MCP Servers → Add Server → Add Remote Server**
with the URL `http://localhost:8080/mcp`, or:
+
+```json
+{
+ "context_servers": {
+ "solr-mcp": {
+ "url": "http://localhost:8080/mcp"
+ }
+ }
+}
+```
+
+The HTTP transport is secured by default: without a bearer token the client
still connects and lists the tools, but every tool call returns `Access
Denied`. The server never answers `/mcp` with `401`, so no OAuth login starts.
For a local experiment on your own machine only, add
`HTTP_SECURITY_ENABLED=false` to the server's environment; see
[Security](/mcp/security.html) before exposing it to anyone else.
+
+With security disabled the entry above connects as is. With security on, send
a token from your identity provider by adding `"headers": { "Authorization":
"Bearer <token>" }` to the entry; the token's `aud` claim must contain the
exact URL given here.
+
+See the [Zed MCP documentation](https://zed.dev/docs/ai/mcp) for the latest
configuration format.
diff --git a/docs/site/content/pages/mcp/quick-start.md
b/docs/site/content/pages/mcp/quick-start.md
index f31f06c9..1bd1458f 100644
--- a/docs/site/content/pages/mcp/quick-start.md
+++ b/docs/site/content/pages/mcp/quick-start.md
@@ -126,7 +126,7 @@ Open Claude Desktop and try these prompts:
## Next Steps ##
-* **[Adding to AI Clients](/mcp/clients/claude-desktop.html)** —
configure Claude Code, VS Code, Cursor, JetBrains, or MCP Inspector
+* **[Adding to AI Clients](/mcp/clients/claude-desktop.html)** —
configure Claude Code, VS Code, Cursor, JetBrains, Zed, or MCP Inspector
* **[Features](/mcp/features.html)** — explore all available tools and
resources
* **[Security](/mcp/security.html)** — set up OAuth2 authentication for
HTTP mode
* **[Observability](/mcp/observability.html)** — enable tracing,
metrics, and logging