Skip to content

Commit 7b04fed

Browse files
committed
[BUGFIX] MCP Resources 동작 정상화 - @mcp.resource("ambari-metrics://catalog/{selector}")
1 parent 40943fc commit 7b04fed

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/mcp_ambari_api/mcp_main.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Ambari API Documents: https://github.com/apache/ambari/blob/trunk/ambari-server/docs/api/v1/index.md
55
"""
66
from typing import Dict, Optional, List, Any, Set
7+
from urllib.parse import parse_qs
78
import argparse
89
from fastmcp import FastMCP
910
from fastmcp.server.auth import StaticTokenVerifier
@@ -2490,7 +2491,7 @@ def resolve_targets(raw_values: List[str]) -> List[str]:
24902491
return "\n".join(lines)
24912492

24922493

2493-
@mcp.resource("ambari-metrics://catalog/{selector}{?refresh}")
2494+
@mcp.resource("ambari-metrics://catalog/{selector}")
24942495
async def ambari_metrics_catalog_resource(
24952496
selector: str = "all",
24962497
refresh: Optional[str] = None,
@@ -2504,14 +2505,23 @@ async def ambari_metrics_catalog_resource(
25042505
- `app/<appId>`: same as above, explicit prefix for clarity.
25052506
"""
25062507

2508+
selector_input = (selector or "all").strip()
2509+
2510+
# Accept refresh overrides via query string parameters, e.g. catalog/all?refresh=true
2511+
if "?" in selector_input:
2512+
selector_input, query_str = selector_input.split("?", 1)
2513+
params = parse_qs(query_str, keep_blank_values=True)
2514+
if refresh is None and "refresh" in params and params["refresh"]:
2515+
refresh = params["refresh"][0]
2516+
25072517
refresh_requested = False
25082518
if isinstance(refresh, str):
25092519
refresh_requested = refresh.strip().lower() in {"1", "true", "yes", "refresh", "force"}
25102520

25112521
use_cache = not refresh_requested
25122522
catalog, lookup = await ensure_metric_catalog(use_cache=use_cache)
25132523

2514-
selector_normalized = (selector or "all").strip()
2524+
selector_normalized = selector_input
25152525
selector_lower = selector_normalized.lower()
25162526

25172527
async def metrics_for(app_identifier: str) -> Dict[str, List[str]]:

0 commit comments

Comments
 (0)