You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[BUG] MCP servers never appear in the list — nothing writes the toolserver table since the legacy reconciler was removed #2603
MCP servers never appear in the UI's MCP Servers list. Creating one through the UI succeeds and the RemoteMCPServer resource is created correctly, but the list stays at 0 of 0 servers · 0 tools — and so does a fresh install, where the chart's own kagent-tool-server and kagent-grafana-mcp are also missing.
This is not a UI defect: the UI renders exactly what ListToolServers returns, and that RPC returns an empty list.
Reproduce
Install the chart on a fresh cluster.
Open MCP Servers. The list is empty, although the chart installed kagent-tool-server and kagent-grafana-mcp.
Add server → name probe-server, URL mcp.example.com/sse → Create server.
CreateToolServer returns 200 and the page returns to the list.
kubectl get remotemcpservers.kagent.dev -n kagent shows probe-server with the correct URL.
The list still shows 0 of 0 servers · 0 tools.
Where it is lost
ListToolServers reads the database, not the cluster:
On the cluster above, four RemoteMCPServer resources exist and the table has zero rows:
$ kubectl get remotemcpservers.kagent.dev -n kagent --no-headers | wc -l
4
$ psql -c 'select count(*) from toolserver;'
0
The RPC response body is 26 bytes — an empty list, faithfully rendered.
Root cause
StoreToolServer is the only writer of that table, and it has no production caller. Every reference in the module is either its own implementation or its own unit tests:
The caller was removed in 26732e86 — chore: remove legacy ACP and controller runtime (#2565) — which deleted go/core/internal/controller/mcp_server_tool_controller.go and .../reconciler/reconciler.go, containing:
One clarification that affects how serious this is, and where to look.
Agents are not broken by it. The runtime path reads the RemoteMCPServer resources directly — core/v2/translator/kagent/compiler.go builds an agent's tools from the CRs, with no database client involved — so a tool server an agent references still works. It is only the read path behind ListToolServers / ListTools that goes through the database, and that is the one nothing populates.
So the shape of the bug is: tool servers function, but are invisible. Every UI surface that enumerates them is empty, while an agent configured against one calls it fine. That also rules out a UI/controller version mismatch as the cause — the RPC returns 200 with an empty list rather than an unknown-method error, and the table is empty when queried directly against the controller's own POSTGRES_DATABASE_URL.
Activity
Charlesthebird commentedon Aug 27, 2026
One clarification that affects how serious this is, and where to look.
Agents are not broken by it. The runtime path reads the
RemoteMCPServerresources directly —core/v2/translator/kagent/compiler.gobuilds an agent's tools from the CRs, with no database client involved — so a tool server an agent references still works. It is only the read path behindListToolServers/ListToolsthat goes through the database, and that is the one nothing populates.So the shape of the bug is: tool servers function, but are invisible. Every UI surface that enumerates them is empty, while an agent configured against one calls it fine. That also rules out a UI/controller version mismatch as the cause — the RPC returns
200with an empty list rather than an unknown-method error, and the table is empty when queried directly against the controller's ownPOSTGRES_DATABASE_URL.🤖 written by Claude
supreme-gg-gg commentedon Aug 27, 2026
I noticed this as well in the UI and I've included a fix in #2602