v0.6.0 #170
ajshedivy
announced in
Announcements
v0.6.0
#170
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
IBM i MCP Server v0.6.0
Overview
HostandOriginheaders are validated, and a server that holds IBM i credentials refuses to start unauthenticated on a network addressMCP_HTTP_HOSTdefaults to127.0.0.1; remote and container deployments needMCP_ALLOWED_HOSTSand an authentication mode, or an explicit opt-outaxios,hono,sanitize-html, andjs-yamlMCP_HTTP_HOST=0.0.0.0so published ports work with the new defaultStdio deployments (Claude Desktop, Cursor, VS Code, MCP Inspector) and the
ibmiCLI are not affected by the HTTP changes.Docker & Podman | Configuration | IBM i Authentication
Breaking Changes
HTTP transport hardening against DNS rebinding
The vulnerability: The HTTP transport holds the IBM i credentials it is started with. Through DNS rebinding, a web page opened in a browser on the same machine could send requests to the local server and run its SQL tools with those credentials. CORS does not prevent this; the request is same-origin from the browser's point of view.
What changed.
Hostheader must be a loopback name (localhost,127.x.x.x,::1) or listed inMCP_ALLOWED_HOSTS. Any other name returns403 Forbidden: Host not allowed.A browserOriginheader, when present, must matchMCP_ALLOWED_ORIGINSor an allowlisted host. Non-browser clients send noOriginand are unaffected by that rule.DB2i_*variables or a tools YAML), and authentication is not enforced. "Not enforced" meansMCP_AUTH_MODE=none, orMCP_AUTH_MODE=jwtwithoutMCP_AUTH_SECRET_KEY. The log line beginsRefusing to start: unauthenticated HTTP transport. Override withMCP_ALLOW_UNAUTHENTICATED_HTTP=true.MCP_HTTP_HOSTdefaults to127.0.0.1(was0.0.0.0).*fallback is removed. WithMCP_ALLOWED_ORIGINSunset, noAccess-Control-Allow-Originheader is sent.Running the server over HTTP.
Local, with the client on the same machine: no configuration is needed. If your
.envsetsMCP_HTTP_HOST=0.0.0.0, remove that line.Docker, local only, without authentication:
On a network (remote host, OpenShift, Docker Compose): bind all interfaces, allowlist every name clients use to reach the server, and enable authentication.
Kubernetes and OpenShift probes send the pod IP as
Host; addhttpHeaders: Host: localhostto the probe. Browser clients need their origin inMCP_ALLOWED_ORIGINS. Do not setMCP_HTTP_HOST=127.0.0.1inside a container: Docker forwards published ports to the container's network interface, not its loopback, so the server becomes unreachable. Restrict exposure on the host side with-p 127.0.0.1:3010:3010.New configuration.
MCP_HTTP_HOST127.0.0.1(was0.0.0.0)MCP_ALLOWED_HOSTSHostallowlist; extends loopback.*disables the Host check onlyMCP_ALLOW_UNAUTHENTICATED_HTTPfalseDocumentation: Docker & Podman, Configuration, Using the default tools
Reference: #163, #169
What's Changed
Full Changelog: v0.5.1...v0.6.0
This discussion was created from the release v0.6.0.
All reactions