Skip to content

agents.kagent.dev hangs with "Session terminated" after redeploying a tool #108

@schmiddim

Description

@schmiddim

Hi,
I'm using the latest Version of Kagent and Kmcp. I've scaffolded a Golang demo project and deployed it into my cluster.
The Agent interacts well with the toolserver but after deploying a new mcp server image (I have to apply via argocd not the kmcp binary)
everything is broken. I think the generated mcp server returns 404 because there is no session after a restart. How can I disable this behavior?
My toolserver is completely stateless.

Image

The Error Message in the Container is

2025-12-09 13:10:10,360 - httpx - INFO - HTTP Request: POST http://metadata-mcp-server.monitoring:6969/mcp "HTTP/1.1 404 Not Found"
2025-12-09 13:10:10,363 - kagent_adk.kagent.adk._agent_executor - ERROR - Error handling A2A request: Session terminated
Traceback (most recent call last):
File "/.kagent/packages/kagent-adk/src/kagent/adk/_agent_executor.py", line 145, in execute
await self._handle_request(context, event_queue, runner, run_args)
File "/.kagent/packages/kagent-adk/src/kagent/adk/_agent_executor.py", line 240, in _handle_request
async for adk_event in agen:
...<4 lines>...
await event_queue.enqueue_event(a2a_event)
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/runners.py", line 428, in run_async
async for event in agen:
yield event
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/runners.py", line 412, in _run_with_trace
async for event in agen:
yield event
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/runners.py", line 498, in _exec_with_plugin
async for event in agen:
...<9 lines>...
yield (modified_event if modified_event else event)
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/runners.py", line 401, in execute
async for event in agen:
yield event
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/agents/base_agent.py", line 307, in run_async
async for event in agen:
yield event
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/agents/base_agent.py", line 297, in _run_with_trace
async for event in agen:
yield event
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/agents/llm_agent.py", line 395, in _run_async_impl
async for event in agen:
...<3 lines>...
return
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 356, in run_async
async for event in agen:
last_event = event
yield event
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 375, in _run_one_step_async
async for event in agen:
yield event
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 463, in _preprocess_async
tools = await _convert_tool_union_to_tools(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<4 lines>...
)
^
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/agents/llm_agent.py", line 157, in _convert_tool_union_to_tools
return await tool_union.get_tools_with_prefix(ctx)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/tools/base_toolset.py", line 114, in get_tools_with_prefix
tools = await self.get_tools(readonly_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/tools/mcp_tool/mcp_session_manager.py", line 128, in wrapper
return await func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.kagent/.venv/lib/python3.13/site-packages/google/adk/tools/mcp_tool/mcp_toolset.py", line 162, in get_tools
tools_response: ListToolsResult = await session.list_tools()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.kagent/.venv/lib/python3.13/site-packages/mcp/client/session.py", line 386, in list_tools
result = await self.send_request(
^^^^^^^^^^^^^^^^^^^^^^^^
...<7 lines>...
)
^
File "/.kagent/.venv/lib/python3.13/site-packages/mcp/shared/session.py", line 286, in send_request
raise McpError(response_or_error.error)
mcp.shared.exceptions.McpError: Session terminated

Created an Agent resource:

apiVersion: kagent.dev/v1alpha2
kind: Agent
metadata:
  name: redacted
  namespace: redacted
spec:
  declarative:
    a2aConfig:
      skills:
        - description: >
            redacted
          examples:
            - "redacted"

          id: metadata
          name: Metadata Agent 
          tags:
            - metadata
            - owners
            - teams
    deployment:
      replicas: 1
      resources:
        limits:
          cpu: 1000m
          memory: 1Gi
        requests:
          cpu: 100m
          memory: 256Mi
    modelConfig: redacted
    systemMessage: |-
      redacted
    tools:
      - mcpServer:
          apiGroup: kagent.dev
          kind: MCPServer
          name: metadata-mcp-server
          toolNames:
            - team_info_get_members
            - team_info_get_repos
            - team_info_get_services
            - team_info_team_for_user
        type: McpServer
  description: redacted
  type: Declarative

MCP Server Definition

apiVersion: kagent.dev/v1alpha1
kind: MCPServer
metadata:
  annotations:
    kmcp.dev/description: MCP server that provides owner, services and repository related tools
    kmcp.dev/project-name: metadata-mcp-server

  labels:
    app.kubernetes.io/component: mcp-server
    app.kubernetes.io/instance: metadata-mcp-server
    app.kubernetes.io/managed-by: kmcp
    app.kubernetes.io/name: metadata-mcp-server
    app.kubernetes.io/part-of: kmcp
    kmcp.dev/framework: mcp-go
    kmcp.dev/version: 20251209-113747-develop
  name: metadata-mcp-server
  namespace: <redacted>
  resourceVersion: <redacted>
  uid: <redacted>
spec:
  deployment:
    args:
      - mcp
      - '--http=0.0.0.0:6969'
    cmd: /main
    env:
      FASTMCP_LOG_LEVEL: DEBUG
    image: >-
     <redacted>
    port: 6969
  httpTransport:
    path: /mcp
    targetPort: 6969
  transportType: http
status:
  conditions:
    - lastTransitionTime: '2025-12-05T09:43:34Z'
      message: MCPServer configuration is valid
      observedGeneration: 19
      reason: Accepted
      status: 'True'
      type: Accepted
    - lastTransitionTime: '2025-12-05T09:43:34Z'
      message: All references resolved successfully
      observedGeneration: 19
      reason: ResolvedRefs
      status: 'True'
      type: ResolvedRefs
    - lastTransitionTime: '2025-12-05T09:43:34Z'
      message: All resources created successfully
      observedGeneration: 19
      reason: Programmed
      status: 'True'
      type: Programmed
    - lastTransitionTime: '2025-12-05T10:11:52Z'
      message: Deployment is ready and all pods are running
      observedGeneration: 19
      reason: Available
      status: 'True'
      type: Ready
  observedGeneration: 19

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions