{"apiVersion":"v1","directorySlug":"ecert-mcp-1ef1335a0e","title":"Ecert","description":null,"pageUrl":"https://www.mcpbundles.com/skills/ecert-mcp-1ef1335a0e","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.ecert.cl/mcp","hostedMcpUrl":null,"toolCount":43,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"cl.ecert/ecert-mcp-1ef1335a0e","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"add_activity_to_incident","description":"Add a note (userNote activity) to an existing incident's timeline using its ID. The note body can include URLs which will be attached as context. Use this to add context to an incident.","inputSchema":{"type":"object","properties":{"body":{"type":"string"},"eventTime":{"type":"string"},"incidentId":{"type":"string"}}},"logicalName":"add_activity_to_incident","displayName":"add_activity_to_incident","title":"add_activity_to_incident","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_incident","description":"Create a new Grafana incident. Requires title, severity, and room prefix. Allows setting status and labels. This tool should be used judiciously and sparingly, and only after confirmation from the user, as it may notify or alarm lots of people.","inputSchema":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"colorHex":{"type":"string"}}}},"status":{"type":"string"},"isDrill":{"type":"boolean"},"severity":{"type":"string"},"attachUrl":{"type":"string"},"roomPrefix":{"type":"string"},"attachCaption":{"type":"string"}}},"logicalName":"create_incident","displayName":"create_incident","title":"create_incident","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"fetch_pyroscope_profile","description":"Fetches a profile from a Pyroscope data source for a given time range. By default, the time range is tha past 1 hour.\nThe profile type is required, available profile types can be fetched via the list_pyroscope_profile_types tool. Not all\nprofile types are available for every service. Expect some queries to return empty result sets, this indicates the\nprofile type does not exist for that query. In such a case, consider trying a related profile type or giving up.\nMatchers are not required, but hig","inputSchema":{"type":"object","required":["data_source_uid","profile_type"],"properties":{"matchers":{"type":"string"},"end_rfc_3339":{"type":"string"},"profile_type":{"type":"string"},"max_node_depth":{"type":"integer"},"start_rfc_3339":{"type":"string"},"data_source_uid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"fetch_pyroscope_profile","displayName":"fetch_pyroscope_profile","title":"fetch_pyroscope_profile"},{"name":"find_error_pattern_logs","description":"Searches Loki logs for elevated error patterns compared to the last day's average, waits for the analysis to complete, and returns the results including any patterns found.","inputSchema":{"type":"object","required":["name","labels"],"properties":{"end":{"type":"string","format":"date-time"},"name":{"type":"string"},"start":{"type":"string","format":"date-time"},"labels":{"type":"object","additionalProperties":{"type":"string"}}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_error_pattern_logs","displayName":"find_error_pattern_logs","title":"find_error_pattern_logs"},{"name":"find_slow_requests","description":"Searches relevant Tempo datasources for slow requests, waits for the analysis to complete, and returns the results.","inputSchema":{"type":"object","required":["name","labels"],"properties":{"end":{"type":"string","format":"date-time"},"name":{"type":"string"},"start":{"type":"string","format":"date-time"},"labels":{"type":"object","additionalProperties":{"type":"string"}}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_slow_requests","displayName":"find_slow_requests","title":"find_slow_requests"},{"name":"generate_deeplink","description":"Generate deeplink URLs for Grafana resources. Supports dashboards (requires dashboardUid), panels (requires dashboardUid and panelId), and Explore queries (requires datasourceUid). Optionally accepts time range and additional query parameters.","inputSchema":{"type":"object","required":["resourceType"],"properties":{"panelId":{"type":"integer"},"timeRange":{"type":"object","properties":{"to":{"type":"string"},"from":{"type":"string"}}},"queryParams":{"type":"object","additionalProperties":{"type":"string"}},"dashboardUid":{"type":"string"},"resourceType":{"type":"string"},"datasourceUid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"generate_deeplink","displayName":"generate_deeplink","title":"generate_deeplink"},{"name":"get_alert_rule_by_uid","description":"Retrieves the full configuration and detailed status of a specific Grafana alert rule identified by its unique ID (UID). The response includes fields like title, condition, query data, folder UID, rule group, state settings (no data, error), evaluation interval, annotations, and labels.","inputSchema":{"type":"object","required":["uid"],"properties":{"uid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_alert_rule_by_uid","displayName":"get_alert_rule_by_uid","title":"get_alert_rule_by_uid"},{"name":"get_assertions","description":"Get assertion summary for a given entity with its type, name, env, site, namespace, and a time range","inputSchema":{"type":"object","required":["startTime","endTime"],"properties":{"env":{"type":"string"},"site":{"type":"string"},"endTime":{"type":"string","format":"date-time"},"namespace":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"entityName":{"type":"string"},"entityType":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_assertions","displayName":"get_assertions","title":"get_assertions"},{"name":"get_current_oncall_users","description":"Get the list of users currently on-call for a specific Grafana OnCall schedule ID. Returns the schedule ID, name, and a list of detailed user objects for those currently on call.","inputSchema":{"type":"object","required":["scheduleId"],"properties":{"scheduleId":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_current_oncall_users","displayName":"get_current_oncall_users","title":"get_current_oncall_users"},{"name":"get_dashboard_by_uid","description":"Retrieves the complete dashboard, including panels, variables, and settings, for a specific dashboard identified by its UID. WARNING: Large dashboards can consume significant context window space. Consider using get_dashboard_summary for overview or get_dashboard_property for specific data instead.","inputSchema":{"type":"object","required":["uid"],"properties":{"uid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_dashboard_by_uid","displayName":"get_dashboard_by_uid","title":"get_dashboard_by_uid"},{"name":"get_dashboard_panel_queries","description":"Use this tool to retrieve panel queries and information from a Grafana dashboard. When asked about panel queries, queries in a dashboard, or what queries a dashboard contains, call this tool with the dashboard UID. The datasource is an object with fields `uid` (which may be a concrete UID or a template variable like \"$datasource\") and `type`. If the datasource UID is a template variable, it won't be usable directly for queries. Returns an array of objects, each representing a panel, with fields:","inputSchema":{"type":"object","required":["uid"],"properties":{"uid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_dashboard_panel_queries","displayName":"get_dashboard_panel_queries","title":"get_dashboard_panel_queries"},{"name":"get_dashboard_property","description":"Get specific parts of a dashboard using JSONPath expressions to minimize context window usage. Common paths: '$.title' (title)\\, '$.panels[*].title' (all panel titles)\\, '$.panels[0]' (first panel)\\, '$.templating.list' (variables)\\, '$.tags' (tags)\\, '$.panels[*].targets[*].expr' (all queries). Use this instead of get_dashboard_by_uid when you only need specific dashboard properties.","inputSchema":{"type":"object","required":["uid","jsonPath"],"properties":{"uid":{"type":"string"},"jsonPath":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_dashboard_property","displayName":"get_dashboard_property","title":"get_dashboard_property"},{"name":"get_dashboard_summary","description":"Get a compact summary of a dashboard including title\\, panel count\\, panel types\\, variables\\, and other metadata without the full JSON. Use this for dashboard overview and planning modifications without consuming large context windows.","inputSchema":{"type":"object","required":["uid"],"properties":{"uid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_dashboard_summary","displayName":"get_dashboard_summary","title":"get_dashboard_summary"},{"name":"get_datasource_by_name","description":"Retrieves detailed information about a specific datasource using its name. Returns the full datasource model, including UID, type, URL, access settings, JSON data, and secure JSON field status.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_datasource_by_name","displayName":"get_datasource_by_name","title":"get_datasource_by_name"},{"name":"get_datasource_by_uid","description":"Retrieves detailed information about a specific datasource using its UID. Returns the full datasource model, including name, type, URL, access settings, JSON data, and secure JSON field status.","inputSchema":{"type":"object","required":["uid"],"properties":{"uid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_datasource_by_uid","displayName":"get_datasource_by_uid","title":"get_datasource_by_uid"},{"name":"get_incident","description":"Get a single incident by ID. Returns the full incident details including title, status, severity, labels, timestamps, and other metadata.","inputSchema":{"type":"object","properties":{"id":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_incident","displayName":"get_incident","title":"get_incident"},{"name":"get_oncall_shift","description":"Get detailed information for a specific Grafana OnCall shift using its ID. A shift represents a designated time period within a schedule when users are actively on-call. Returns the full shift details.","inputSchema":{"type":"object","required":["shiftId"],"properties":{"shiftId":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_oncall_shift","displayName":"get_oncall_shift","title":"get_oncall_shift"},{"name":"get_sift_analysis","description":"Retrieves a specific analysis from an investigation by its UUID. The investigation ID and analysis ID should be provided as strings in UUID format.","inputSchema":{"type":"object","required":["investigationId","analysisId"],"properties":{"analysisId":{"type":"string"},"investigationId":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_sift_analysis","displayName":"get_sift_analysis","title":"get_sift_analysis"},{"name":"get_sift_investigation","description":"Retrieves an existing Sift investigation by its UUID. The ID should be provided as a string in UUID format (e.g. '02adab7c-bf5b-45f2-9459-d71a2c29e11b').","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_sift_investigation","displayName":"get_sift_investigation","title":"get_sift_investigation"},{"name":"list_alert_rules","description":"Lists Grafana alert rules, returning a summary including UID, title, current state (e.g., 'pending', 'firing', 'inactive'), and labels. Supports filtering by labels using selectors and pagination. Example label selector: `[{'name': 'severity', 'type': '=', 'value': 'critical'}]`. Inactive state means the alert state is normal, not firing","inputSchema":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"label_selectors":{"type":"array","items":{"type":"object","properties":{"filters":{"type":"array","items":{"type":"object","required":["name","value","type"],"properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}}}}}}}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_alert_rules","displayName":"list_alert_rules","title":"list_alert_rules"},{"name":"list_contact_points","description":"Lists Grafana notification contact points, returning a summary including UID, name, and type for each. Supports filtering by name - exact match - and limiting the number of results.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"limit":{"type":"integer"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_contact_points","displayName":"list_contact_points","title":"list_contact_points"},{"name":"list_datasources","description":"List available Grafana datasources. Optionally filter by datasource type (e.g., 'prometheus', 'loki'). Returns a summary list including ID, UID, name, type, and default status.","inputSchema":{"type":"object","properties":{"type":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_datasources","displayName":"list_datasources","title":"list_datasources"},{"name":"list_incidents","description":"List Grafana incidents. Allows filtering by status ('active', 'resolved') and optionally including drill incidents. Returns a preview list with basic details.","inputSchema":{"type":"object","properties":{"drill":{"type":"boolean"},"limit":{"type":"integer"},"status":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_incidents","displayName":"list_incidents","title":"list_incidents"},{"name":"list_loki_label_names","description":"Lists all available label names (keys) found in logs within a specified Loki datasource and time range. Returns a list of unique label strings (e.g., `[\"app\", \"env\", \"pod\"]`). If the time range is not provided, it defaults to the last hour.","inputSchema":{"type":"object","required":["datasourceUid"],"properties":{"endRfc3339":{"type":"string"},"startRfc3339":{"type":"string"},"datasourceUid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_loki_label_names","displayName":"list_loki_label_names","title":"list_loki_label_names"},{"name":"list_loki_label_values","description":"Retrieves all unique values associated with a specific `labelName` within a Loki datasource and time range. Returns a list of string values (e.g., for `labelName=\"env\"`, might return `[\"prod\", \"staging\", \"dev\"]`). Useful for discovering filter options. Defaults to the last hour if the time range is omitted.","inputSchema":{"type":"object","required":["datasourceUid","labelName"],"properties":{"labelName":{"type":"string"},"endRfc3339":{"type":"string"},"startRfc3339":{"type":"string"},"datasourceUid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_loki_label_values","displayName":"list_loki_label_values","title":"list_loki_label_values"},{"name":"list_oncall_schedules","description":"List Grafana OnCall schedules, optionally filtering by team ID. If a specific schedule ID is provided, retrieves details for only that schedule. Returns a list of schedule summaries including ID, name, team ID, timezone, and shift IDs. Supports pagination.","inputSchema":{"type":"object","properties":{"page":{"type":"integer"},"teamId":{"type":"string"},"scheduleId":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_oncall_schedules","displayName":"list_oncall_schedules","title":"list_oncall_schedules"},{"name":"list_oncall_teams","description":"List teams configured in Grafana OnCall. Returns a list of team objects with their details. Supports pagination.","inputSchema":{"type":"object","properties":{"page":{"type":"integer"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_oncall_teams","displayName":"list_oncall_teams","title":"list_oncall_teams"},{"name":"list_oncall_users","description":"List users from Grafana OnCall. Can retrieve all users, a specific user by ID, or filter by username. Returns a list of user objects with their details. Supports pagination.","inputSchema":{"type":"object","properties":{"page":{"type":"integer"},"userId":{"type":"string"},"username":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_oncall_users","displayName":"list_oncall_users","title":"list_oncall_users"},{"name":"list_prometheus_label_names","description":"List label names in a Prometheus datasource. Allows filtering by series selectors and time range.","inputSchema":{"type":"object","required":["datasourceUid"],"properties":{"limit":{"type":"integer"},"matches":{"type":"array","items":{"type":"object","properties":{"filters":{"type":"array","items":{"type":"object","required":["name","value","type"],"properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}}}}}}},"endRfc3339":{"type":"string"},"startRfc3339":{"type":"string"},"datasourceUid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_prometheus_label_names","displayName":"list_prometheus_label_names","title":"list_prometheus_label_names"},{"name":"list_prometheus_label_values","description":"Get the values for a specific label name in Prometheus. Allows filtering by series selectors and time range.","inputSchema":{"type":"object","required":["datasourceUid","labelName"],"properties":{"limit":{"type":"integer"},"matches":{"type":"array","items":{"type":"object","properties":{"filters":{"type":"array","items":{"type":"object","required":["name","value","type"],"properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}}}}}}},"labelName":{"type":"string"},"endRfc3339":{"type":"string"},"startRfc3339":{"type":"string"},"datasourceUid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_prometheus_label_values","displayName":"list_prometheus_label_values","title":"list_prometheus_label_values"},{"name":"list_prometheus_metric_metadata","description":"List Prometheus metric metadata. Returns metadata about metrics currently scraped from targets. Note: This endpoint is experimental.","inputSchema":{"type":"object","required":["datasourceUid"],"properties":{"limit":{"type":"integer"},"metric":{"type":"string"},"datasourceUid":{"type":"string"},"limitPerMetric":{"type":"integer"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_prometheus_metric_metadata","displayName":"list_prometheus_metric_metadata","title":"list_prometheus_metric_metadata"},{"name":"list_prometheus_metric_names","description":"List metric names in a Prometheus datasource. Retrieves all metric names and then filters them locally using the provided regex. Supports pagination.","inputSchema":{"type":"object","required":["datasourceUid"],"properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"regex":{"type":"string"},"datasourceUid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_prometheus_metric_names","displayName":"list_prometheus_metric_names","title":"list_prometheus_metric_names"},{"name":"list_pyroscope_label_names","description":"Lists all available label names (keys) found in profiles within a specified Pyroscope datasource, time range, and\noptional label matchers. Label matchers are typically used to qualify a service name ({service_name=\"foo\"}). Returns a\nlist of unique label strings (e.g., [\"app\", \"env\", \"pod\"]). Label names with double underscores (e.g. __name__) are\ninternal and rarely useful to users. If the time range is not provided, it defaults to the last hour.","inputSchema":{"type":"object","required":["data_source_uid"],"properties":{"matchers":{"type":"string"},"end_rfc_3339":{"type":"string"},"start_rfc_3339":{"type":"string"},"data_source_uid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_pyroscope_label_names","displayName":"list_pyroscope_label_names","title":"list_pyroscope_label_names"},{"name":"list_pyroscope_label_values","description":"Lists all available label values for a particular label name found in profiles within a specified Pyroscope datasource,\ntime range, and optional label matchers. Label matchers are typically used to qualify a service name ({service_name=\"foo\"}).\nReturns a list of unique label strings (e.g. for label name \"env\": [\"dev\", \"staging\", \"prod\"]). If the time range\nis not provided, it defaults to the last hour.","inputSchema":{"type":"object","required":["data_source_uid","name"],"properties":{"name":{"type":"string"},"matchers":{"type":"string"},"end_rfc_3339":{"type":"string"},"start_rfc_3339":{"type":"string"},"data_source_uid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_pyroscope_label_values","displayName":"list_pyroscope_label_values","title":"list_pyroscope_label_values"},{"name":"list_pyroscope_profile_types","description":"Lists all available profile types available in a specified Pyroscope datasource and time range. Returns a list of all\navailable profile types (example profile type: \"process_cpu:cpu:nanoseconds:cpu:nanoseconds\"). A profile type has the\nfollowing structure: <name>:<sample type>:<sample unit>:<period type>:<period unit>. Not all profile types are available\nfor every service. If the time range is not provided, it defaults to the last hour.","inputSchema":{"type":"object","required":["data_source_uid"],"properties":{"end_rfc_3339":{"type":"string"},"start_rfc_3339":{"type":"string"},"data_source_uid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_pyroscope_profile_types","displayName":"list_pyroscope_profile_types","title":"list_pyroscope_profile_types"},{"name":"list_sift_investigations","description":"Retrieves a list of Sift investigations with an optional limit. If no limit is specified, defaults to 10 investigations.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_sift_investigations","displayName":"list_sift_investigations","title":"list_sift_investigations"},{"name":"list_teams","description":"Search for Grafana teams by a query string. Returns a list of matching teams with details like name, ID, and URL.","inputSchema":{"type":"object","properties":{"query":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_teams","displayName":"list_teams","title":"list_teams"},{"name":"list_users_by_org","description":"List users by organization. Returns a list of users with details like userid, email, role etc.","inputSchema":{"type":"object"},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_users_by_org","displayName":"list_users_by_org","title":"list_users_by_org"},{"name":"query_loki_logs","description":"Executes a LogQL query against a Loki datasource to retrieve log entries or metric values. Returns a list of results, each containing a timestamp, labels, and either a log line (`line`) or a numeric metric value (`value`). Defaults to the last hour, a limit of 10 entries, and 'backward' direction (newest first). Supports full LogQL syntax for log and metric queries (e.g., `{app=\"foo\"} |= \"error\"`, `rate({app=\"bar\"}[1m])`). Prefer using `query_loki_stats` first to check stream size and `list_loki","inputSchema":{"type":"object","required":["datasourceUid","logql"],"properties":{"limit":{"type":"integer"},"logql":{"type":"string"},"direction":{"type":"string"},"endRfc3339":{"type":"string"},"startRfc3339":{"type":"string"},"datasourceUid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"query_loki_logs","displayName":"query_loki_logs","title":"query_loki_logs"},{"name":"query_loki_stats","description":"Retrieves statistics about log streams matching a given LogQL *selector* within a Loki datasource and time range. Returns an object containing the count of streams, chunks, entries, and total bytes (e.g., `{\"streams\": 5, \"chunks\": 50, \"entries\": 10000, \"bytes\": 512000}`). The `logql` parameter **must** be a simple label selector (e.g., `{app=\"nginx\", env=\"prod\"}`) and does not support line filters, parsers, or aggregations. Defaults to the last hour if the time range is omitted.","inputSchema":{"type":"object","required":["datasourceUid","logql"],"properties":{"logql":{"type":"string"},"endRfc3339":{"type":"string"},"startRfc3339":{"type":"string"},"datasourceUid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"query_loki_stats","displayName":"query_loki_stats","title":"query_loki_stats"},{"name":"query_prometheus","description":"Query Prometheus using a PromQL expression. Supports both instant queries (at a single point in time) and range queries (over a time range). Time can be specified either in RFC3339 format or as relative time expressions like 'now', 'now-1h', 'now-30m', etc.","inputSchema":{"type":"object","required":["datasourceUid","expr","startTime"],"properties":{"expr":{"type":"string"},"endTime":{"type":"string"},"queryType":{"type":"string"},"startTime":{"type":"string"},"stepSeconds":{"type":"integer"},"datasourceUid":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"query_prometheus","displayName":"query_prometheus","title":"query_prometheus"},{"name":"search_dashboards","description":"Search for Grafana dashboards by a query string. Returns a list of matching dashboards with details like title, UID, folder, tags, and URL.","inputSchema":{"type":"object","properties":{"query":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"search_dashboards","displayName":"search_dashboards","title":"search_dashboards"},{"name":"update_dashboard","description":"Create or update a dashboard using either full JSON or efficient patch operations. For new dashboards\\, provide the 'dashboard' field. For updating existing dashboards\\, use 'uid' + 'operations' for better context window efficiency. Patch operations support complex JSONPaths like '$.panels[0].targets[0].expr'\\, '$.panels[1].title'\\, '$.panels[2].targets[0].datasource'\\, etc. Supports appending to arrays using '/- ' syntax: '$.panels/- ' appends to panels array\\, '$.panels[2]/- ' appends to neste","inputSchema":{"type":"object","properties":{"uid":{"type":"string"},"userId":{"type":"integer"},"message":{"type":"string"},"dashboard":{"type":"object"},"folderUid":{"type":"string"},"overwrite":{"type":"boolean"},"operations":{"type":"array","items":{"type":"object","required":["op","path"],"properties":{"op":{"type":"string"},"path":{"type":"string"},"value":{}}}}}},"logicalName":"update_dashboard","displayName":"update_dashboard","title":"update_dashboard","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Ecert&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AuZWNlcnQuY2wvbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Ecert%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.ecert.cl%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Ecert%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.ecert.cl%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Ecert&connectorUrl=https%3A%2F%2Fmcp.ecert.cl%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Ecert\" --url \"https://mcp.ecert.cl/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/ecert-mcp-1ef1335a0e","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/ecert-mcp-1ef1335a0e/tools/{tool}","mcpServerUrl":"https://mcp.ecert.cl/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/ecert-mcp-1ef1335a0e?live=1"}