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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions