44- Ambari API Documents: https://github.com/apache/ambari/blob/trunk/ambari-server/docs/api/v1/index.md
55"""
66from typing import Dict , Optional , List , Any , Set
7+ from urllib .parse import parse_qs
78import argparse
89from fastmcp import FastMCP
910from 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}" )
24942495async 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