AgentRegistry.get_mcp_toolset() reads the wrong field for gcp.mcp.server.destination.id — breaks Agent Platform Topology view

Đang mở Phù hợp với người mới
#7,196 1 bình luận 0 reaction 1 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
observability

Hướng nghiên cứu

Bắt đầu trong google/adk/integrations/agent_registry/agent_registry.py tại AgentRegistry.get_mcp_toolset() và theo dõi cách AgentRegistrySingleMcpToolset.get_tools() thiết lập siêu dữ liệu đích. So sánh mcpServerId của phản hồi với attributes["agentregistry.googleapis.com/system/RuntimeReference"]["uri"], sau đó xác minh rằng các span execute_tool mang URI tên tài nguyên mà Agent Platform Topology matcher mong đợi.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

mcp

AgentRegistry.get_mcp_toolset() populates the gcp.mcp.server.destination.id span attribute (used to associate an execute_tool span with its destination MCP server for App Hub / Agent Platform Topology matching) from the Agent Registry API's mcpServerId field — a urn:mcp:... value.

The Agent Platform Topology view's connection matcher expects the App Hub resource-name URI form instead (//agentregistry.googleapis.com/projects/<number>/locations/<region>/services/<name>), which is present, unused, in the very same API response under attributes["agentregistry.googleapis.com/system/RuntimeReference"]["uri"].

As a result, no topology connection is ever drawn for an MCP server reached through AgentRegistry/AgentRegistrySingleMcpToolset, regardless of correct registration, functional type, or App Hub configuration — the span's destination identifier never matches the App Hub inventory's own identifier form for that same resource.

Steps to Reproduce:

  1. Register an MCP server with Agent Registry and build an McpToolset for it via AgentRegistry.get_mcp_toolset(mcp_server_name).
  2. Have an ADK agent call a tool from that toolset, with tracing enabled (--otel_to_cloud, OTLP export to telemetry.googleapis.com).
  3. Inspect the resulting execute_tool span's gcp.mcp.server.destination.id attribute — it is the Agent Registry API's mcpServerId value, a urn:mcp:projects-<number>:projects:<number>:locations:<region>:agentregistry:services:<name> string.
  4. Separately, GET the same MCP server resource from the Agent Registry API directly (.../v1/projects/<number>/locations/<region>/mcpServers/<id>) and compare mcpServerId against attributes["agentregistry.googleapis.com/system/RuntimeReference"]["uri"] in the same response — the two differ in form.
  5. Open the Agent Platform console's Topology view for the calling agent — no connection is drawn to the MCP server, even with App Hub discovery, functional types, and registration otherwise correct.

Expected Behavior:
gcp.mcp.server.destination.id should be set to the App Hub resource-name URI (RuntimeReference.uri), so the Agent Platform Topology view's connection matcher can resolve it against its own discovered-resource inventory and draw the connection.

Observed Behavior:
The attribute is set to mcpServerId (a urn:mcp:... value) instead, which never matches App Hub's inventory. The Topology view draws no connection to the MCP server.

Confirmed by hand-crafted OpenTelemetry traces sent through the same OTLP-to-telemetry.googleapis.com export path ADK's own agents use: a trace with the real urn:mcp:... value produces no connection; the identical trace with only that attribute rewritten to the RuntimeReference.uri form produces one immediately. Confirmed independently on two separate, previously-untested MCP servers, changing only that one attribute.

Environment Details:

  • ADK Library Version (pip show google-adk): reproduced on 2.7.0 and 2.9.2 (latest at time of writing) — identical behavior in both
  • Desktop OS: N/A — server-side library behavior, not OS-dependent
  • Python Version (python -V): 3.11 (deployment container); also reproduced against the library installed under Python 3.14 in an isolated verification environment

Model Information:

  • Are you using LiteLLM: No
  • Which model is being used: N/A — bug is in the Agent Registry / tracing integration, independent of model

Regression:
Not established — reproduces identically on both 2.7.0 and the current latest (2.9.2), so not a recent regression as far as tested.

Additional Context:
The Agent Registry API returns both identifiers in the same object, which is what makes this a precise, one-field fix rather than a missing-data problem:

{
  "mcpServerId": "urn:mcp:projects-<number>:projects:<number>:locations:<region>:agentregistry:services:<name>",
  "attributes": {
    "agentregistry.googleapis.com/system/RuntimeReference": {
      "uri": "//agentregistry.googleapis.com/projects/<number>/locations/<region>/services/<name>"
    }
  }
}

Relevant source (unchanged between 2.7.0 and 2.9.2, only line numbers shift):

  • google/adk/integrations/agent_registry/agent_registry.py, AgentRegistry.get_mcp_toolset(): reads mcp_server_id = server_details.get("mcpServerId") and passes it verbatim as destination_resource_id into AgentRegistrySingleMcpToolset.
  • Same file, AgentRegistrySingleMcpToolset.get_tools(): stamps tool.custom_metadata["gcp.mcp.server.destination.id"] = self.destination_resource_id on every tool.
  • google/adk/telemetry/tracing.py, trace_tool_call(): copies that value verbatim onto the execute_tool span, with an in-source comment: "Used to associate a span with a destination resource for AppHub."

Suggested fix: source destination_resource_id from server_details["attributes"]["agentregistry.googleapis.com/system/RuntimeReference"]["uri"] instead of (or in preference to) mcpServerId.

How often has this issue occurred?:

  • Always (100%)
Ngôn ngữ chính
Python
Star
21.6k
Fork
4k
Merge trung bình
13 giờ 49 phút
Pull request đã merge (30 ngày)
10

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của google/adk-python

Tất cả issue của google/adk-python

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.