Repository navigation
docs(events): point the Community over Code card at the Spring Boot 4 build - #250
Open
adityamparikh wants to merge 8 commits into
Open
adityamparikh wants to merge 8 commits into
adityamparikh wants to merge 8 commits into
Conversation
… build The coc2026 image, native images and JAR are now built from the Spring Boot 4.1 / Spring AI 2.0 line (apache#23), which carries everything on main, so the card describes what that build does: - Fifteen tools, with the three alias tools in the toolbox table. - Step 3: CSV, XML and Markdown samples come from main's src/test/resources. CSV and XML go to Solr's own handlers, which report the payload accepted instead of a count. XML is Solr update XML, so its field names match JSON and the show_ prefix notes go; the Option B XML paste is converted to <add><doc> form. Markdown is one multi-record file and one tool call; its description is in content, which the step 6 note now says. - Step 4: one outcome, an empty facet (apache#175 is in the image). - Native Docker images are prebuilt for amd64 and arm64. - Observability: OTLP/HTTP on 4318 with a URL per signal, ClassName#method span names, timers in milliseconds, JVM metrics over OTLP rather than /actuator/prometheus. - Security: protected resource metadata for /mcp is served at the RFC 9728 path-suffixed URL. - Sizes (52 MB JAR, ~170 MB image) and the verified-against footer. - Table cards: fifteen tools, and ChatGPT in the client list. Every step was replayed against the published image for all four formats, including the Option B pastes, the observability panel against grafana/otel-lgtm 0.33.0, and the security panel against Keycloak. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: Aditya Parikh <aditya.m.parikh@gmail.com>
… step 6 Running the card through Codex showed two places where an assistant following it faithfully gets a different result from the one printed. Step 4: an assistant that reads the schema first facets on platform_str, the string copy schemaless mode makes of every text field, and gets real buckets. The note now says so and gives the follow-up that shows the empty facet on platform itself, which is still the lesson. Step 6: Markdown documents keep the description in content, so "whose description contains" finds nothing. The Markdown path now gets its own prompt that names the content field; it returns the same two shows. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: Aditya Parikh <aditya.m.parikh@gmail.com>
…ient A token that reaches the server but fails validation (expired, or the wrong aud) is now refused with HTTP 401 before the MCP session starts, so the client shows the server's tools as missing rather than an Access Denied result. Verified with Codex against Keycloak. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: Aditya Parikh <aditya.m.parikh@gmail.com>
Spring AOT fixes the security filter chain inside a native binary, so a native http server ignores HTTP_SECURITY_ENABLED at run time and, with no OAuth2 issuer, answers every tool call with Access Denied. The card's native http build commands now set it for the build, and a note says the switch only counts at build time and that the prebuilt coc2026-native-http image is built with security off. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: Aditya Parikh <aditya.m.parikh@gmail.com>
The panel listed all four forms with stdio and http commands side by side. It now follows the Run via and Transport choices from step 0, like the rest of the page: JAR shows the JVM jar and the native binary, Docker shows the Jib and native images, and each shows only the stdio or http commands. The build-time security note appears only for http. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: Aditya Parikh <aditya.m.parikh@gmail.com>
The http commands published port 8080 on all interfaces, and the JAR and native binary listen on all interfaces by default. With security switched off for the hackathon, anyone on the same conference Wi-Fi could reach a participant's MCP server and, through it, their Solr. The page already said the insecure setup was "bound to localhost"; now the commands do it. Docker publishes on 127.0.0.1 (-p 127.0.0.1:8080:8080). The JAR and the native binary set SERVER_ADDRESS=127.0.0.1, in both shell and PowerShell forms, including the secured Keycloak and Auth0 walkthroughs. Clients, the ngrok tunnel and mcp-remote all connect via localhost, so nothing else changes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: Aditya Parikh <aditya.m.parikh@gmail.com>
Solr was published on every interface with no authentication, so anyone on the same Wi-Fi could read or delete a participant's collections. LGTM (Grafana, OTLP) and the Keycloak walkthrough, which uses admin/admin, had the same exposure. Each is now published on 127.0.0.1 only. The MCP server's container used to reach Solr and LGTM through the host (host.docker.internal), which a loopback-only port breaks on Linux. Step 1 therefore creates a solr-mcp Docker network: Solr and LGTM join it, every Docker command and client config replaces --add-host with --network=solr-mcp, and SOLR_URL and the OTLP URLs use container names. JAR users still use localhost unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: Aditya Parikh <aditya.m.parikh@gmail.com>
adityamparikh
force-pushed
the
docs/coc2026-card-sb4
branch
from
October 12, 2026 13:17
e444279 to
e8b55c0
Compare
- ChatGPT: add the server through "Add custom MCP server" and create it as a plugin; the developer-mode app flow is gone. - MCP Inspector 2.x takes one argument per line in the Arguments field; a single pasted line reaches docker as one argument and fails with "unknown shorthand flag". Its Environment field configures the docker client, not the container. - JetBrains AI Assistant: configure through Settings | Tools | AI Assistant | Model Context Protocol (MCP); .junie/mcp/mcp.json is Junie's file. - Claude Desktop is now an official beta on Ubuntu and Debian. - Zed schema re-verified on 1.23.2. - LGTM: publish only the OTLP/HTTP port the server exports to. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: Aditya Parikh <aditya.m.parikh@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Community over Code 2026 hackathon card (published at https://adityamparikh.github.io/solr-mcp/) now points at a build of the Spring Boot 4.1 / Spring AI 2.0 line (#23), which also carries everything on
main:ghcr.io/adityamparikh/solr-mcp:coc2026, the native:coc2026-native-stdio/:coc2026-native-httpimages, and the JAR on the fork'scoc2026release. This updates the card to describe what that build does.Changes
list-aliases,create-aliasanddelete-alias, and the indexing rows describe the current inputs (JSON array, Solr's CSV handler, Solr update XML).main'ssrc/test/resourcesrather than a feature branch.show_prefix warning and the step 4 and step 6 notes about it are removed, and the Option B XML paste is converted to<add><doc><field name="…">.content, which the step 6 dataset note now says.ClassCastExceptionbranch is gone. An assistant that reads the schema first facets onplatform_str, the copy schemaless mode makes, and gets real buckets; the note says so and gives the follow-up that shows the empty facet onplatformitself.content, where Markdown keeps the description.HTTP_SECURITY_ENABLEDonly takes effect at build time. The native http build commands now set it, and a note explains that without it every tool answers Access Denied until OAuth2 is configured. The prebuiltcoc2026-native-httpimage is built with security off.-p 127.0.0.1:8080:8080for Docker,SERVER_ADDRESS=127.0.0.1for the JAR and the native binary (shell and PowerShell, including the secured Keycloak and Auth0 walkthroughs).127.0.0.1. Solr had no authentication and Keycloak usesadmin/admin.host.docker.internal:host-gatewaycannot reach a loopback-only port, so step 1 creates asolr-mcpDocker network. Solr and LGTM join it, every Docker command and client config uses--network=solr-mcpinstead of--add-host, andSOLR_URLand the OTLP URLs use container names. JAR users still uselocalhost.OTEL_TRACES_URL,OTEL_METRICS_URL,OTEL_LOGS_URL).SearchService#search/CollectionService#checkHealth.http_server_requests_milliseconds_count./actuator/prometheus.0.33.0, the version the tests use./mcpis read from the RFC 9728 path-suffixed URL/.well-known/oauth-protected-resource/mcp; the root URL describes the host. A token that reaches the server but fails validation is now refused with HTTP 401, so the client shows the tools as missing; the Claude Code and Codex proof steps say so.Verification
Each step was replayed against the published
:coc2026image with fresh SolrCloud containers. Results:grafana/otel-lgtm:0.33.0: tool spans, the correlated WARN line in Loki, and the request and JVM metrics in Prometheus all appear/mcpaudience are rejected with 401, and the card's two curl lines return Access Denied and the collection list-p 8080:8080did answer there). Over thesolr-mcpnetwork the stdio and http MCP containers reach Solr by name (list-collections) and traces reach LGTM by name. The JVM jar listens on127.0.0.1withSERVER_ADDRESS, and the native binary honours it at run time🤖 Generated with Claude Code