The requested user-facing remote MCP server is published at https://codecartography.dev/api/mcp. It uses the existing Gitea browser identity and AutoCoder user REST handlers. Protocol negotiation supports 2025-11-25 and 2025-06-18; the shared catalog has 83 operations. This change does not resume the stopped implementation workers or development workloads.
Implementation PR 7384 and route-contract repair PR 7401 were reviewed automatically and integrated into dev. Candidate 4363 succeeded for source 520c9555dff8608391fbcea4d3c5c1e9fb716a2a. Source-pinned promotion PR 7408 integrated the same tree into main at 572a88fdf160d935cc7a97350ba1251cf6e2bb7e under the repository's configured automatic delivery contract.
Both production and TEST deployments are ready with candidate 520c9555dff8608391fbcea4d3c5c1e9fb716a2a-4363-1. Actual pod image IDs match their immutable deployment artifacts:
sha256:001ac018d06770ce26051da2d68614bf1f89bef02beaa35db72c9400925f09ed.sha256:12098b810f7fb4b75bb092768ec7e8b710929b9cea9b09d911e633aa74a6423f.Production /healthz returns JSON "ok" and X-Autocoder-Revision: 520c9555dff8608391fbcea4d3c5c1e9fb716a2a; /pkg/build-revision.txt returns that same source. Initial rollout availability gaps cleared as pods became ready. No worker-image publication is required for this HTTP server feature.
Context kubernetes-admin@kubernetes, API server https://192.168.1.9:6443, was verified before changes. The exact reviewed /.well-known Prefix route was appended to these existing ingresses, using JSON Patch with a resourceVersion test:
| Namespace | Ingress | Host | Backend |
|---|---|---|---|
| autocoder-engine | codecartography-authenticated | codecartography.dev | autocoder-engine:8080 |
| autocoder-test | codecartography-test | test.codecartography.dev | autocoder-test-engine:8080 |
| autocoder-engine | codecartography-development | dev.codecartography.dev | autocoder-dev-engine:8080 |
Sources are k8s/05-deployment-service-ingress.yaml, k8s/overlays/test/resources.yaml, and k8s/overlays/development/resources.yaml at the candidate source. All existing routes were compared before and after and preserved. Whole manifests were not reapplied; authentication secrets, runtime flags, service identities and deployment replica counts were not changed. Development remains stopped.
The full native suite passed on the designated worker: 1,590 passed, zero failures, 182 ignored; candidate CI also ran its isolated database fixtures. Earlier focused checks covered the complete OAuth callback/consent/PKCE/token/refresh/revocation flow with a disposable database and local Gitea mock. Those fixtures are supporting evidence, not live desktop acceptance.
Live production and TEST protected-resource metadata returned JSON with the correct environment-specific resource and issuer. Production issuer metadata advertises PKCE S256, dynamic registration, authorization code and refresh token grants. Live production registration returned 201 with no-store caching; authorization handed off to the configured Gitea OAuth path with Secure, HttpOnly, SameSite=Lax cookie binding. Wrong resource, PKCE method and redirect URI each returned 400. Missing or invalid MCP credentials returned 401 with protected-resource discovery challenge.
The real Gitea authorization handoff requires browser login. This administrator's API credential does not provide a browser session. A live authenticated MCP tool call, refresh and desktop connector session have not yet been observed. The normal user's browser reachability and sign-in ability are being established; no authentication bypass or synthetic production grant was used. The bounded acceptance client and pending flow expire under the broker's normal cleanup policy.
Rollback application images through the previous immutable serving candidate using the configured delivery route. MCP database tables are additive; retain them and outstanding connection decisions during rollback. To roll back discovery routing, inspect the selected ingress and remove only its /.well-known Prefix path after asserting the entire backend/path entry and current resourceVersion. Preserve all other routes. The bounded administrator task file /home/ax_julian/temp/autocoder-user-mcp-ingress-change.json holds exact before paths and guarded inverse operations; no credentials are included. Never blindly reapply an old whole ingress or delete OAuth user data.
Application and client documentation: repository documentation/configs/USER_MCP_SERVER.md.