Skip to main content
Glama
yunusemregul

Kibana Bridge MCP

by yunusemregul

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
HOSTNoBind address (default: 127.0.0.1)127.0.0.1
WS_PORTNoWebSocket port for the extension (default: 47821)47821
MCP_PORTNoHTTP port for MCP clients (default: 47822)47822
LEVEL_FIELDNoField level filters on (default: logs.level)logs.level
QUERY_FIELDSNoFields searched by query. Empty means the index defaults (default: message,logs.message,msg,log,logs.loggerName,logs.thread,logs.thrown.name,logs.thrown.message,logs.request,logs.requestFirstLine)message,logs.message,msg,log,logs.loggerName,logs.thread,logs.thrown.name,logs.thrown.message,logs.request,logs.requestFirstLine
DISPLAY_FIELDSNoFields used as each hit's message text, in order (default: message,logs.message,msg,log,logs.request,logs.requestFirstLine)message,logs.message,msg,log,logs.request,logs.requestFirstLine
SUMMARY_FIELDSNoDefault fields summarize_logs counts (default: logs.level,logs.loggerName,logs.thrown.name,kubernetes.pod_name)logs.level,logs.loggerName,logs.thrown.name,kubernetes.pod_name
TRACE_ID_FIELDNoField trace_id filters on (default: logs.contextMap.traceId)logs.contextMap.traceId
SOURCE_TAG_FIELDSNoSource tag shown before each hit (default: kubernetes.labels.ccv2_cx_sap_com_platform-aspect,kubernetes.container_name)kubernetes.labels.ccv2_cx_sap_com_platform-aspect,kubernetes.container_name
FIELDS_STRATIFY_FIELDNoavailable_log_fields samples across this field's values (default: kubernetes.container_name)kubernetes.container_name

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
search_logsA

Searches logs in Kibana / OpenSearch Dashboards via the active browser tab and returns hits.

Workflow: investigate the same way a human does in Discover:

  1. Start with summarize_logs over a wide window (e.g. 7 days) to see total hit count, time histogram, and the top values for noisy dimensions (logger, component, pod, level).

  2. Identify noise dimensions: loggers that dominate the result set with irrelevant chatter, pod tiers that don't match the service you're investigating (e.g. frontend when chasing a backend bug), etc.

  3. Call search_logs with exclude_filters listing those noisy {field, value} pairs to narrow the result set.

  4. Iterate: if the remaining hits render empty messages, the docs likely keep their text under a different field. Call available_log_fields and pass a matching display_fields fallback chain.

  5. Add more excludes or change display_fields until results are signal, not noise. Pin a specific row with timestamp_match.

Boolean AND in query: 'term1 AND term2' requires both terms.

IMPORTANT: This tool relies on a Chrome extension bridge. Do NOT attempt to open browser tabs, navigate to URLs, or use any browser automation tools if this fails. If it errors, just report the error to the user.

get_log_contextA

Returns the log entries within a time window around a specific timestamp. Use this when you've found a suspicious entry (an error, a state change, etc.) and need to see what happened immediately before and after (the human equivalent of clicking 'view surrounding documents' in Kibana/Discover).

Default window is ±60 seconds (so 120s total). Narrow it with window_seconds for noisy services, widen for sparse logs.

Use trace_id (filters on logs.contextMap.traceId, TRACE_ID_FIELD env) or include_filters to scope to the same trace, pod, or service. Otherwise you'll see ALL traffic in the window, which is often too much.

Pass query only if you also want to constrain by a search term in the window; usually leave it empty.

inspect_logA

Returns the _source of one log entry as YAML. Use this when search shows a tantalizing single message and you need the full metadata: traceId, kubernetes labels, exception stack, request body, etc.

By default the output is trimmed to stay readable: the raw log string is dropped when its parsed logs.* object is present, every extendedStackTrace keeps its first 5 frames, kubernetes.annotations is collapsed to a count, and strings over 4000 chars are cut. Pass full: true to get the untouched _source.

Identifies the doc by timestamp (ISO with millisecond precision is usually unique). If multiple docs share the timestamp, pass include_filters (e.g. pod_name) to disambiguate. Only the first match is returned.

available_log_fieldsA

Returns every populated field path (dotted) found in a sample of matching log docs, annotated with each field's type and aggregatability from the dashboard's field-caps API when available. Call this ONCE at the start of a fresh investigation to learn the schema: what aggregate_fields and display_fields paths are valid in this data. The tool samples hits stratified across kubernetes.container_name values (FIELDS_STRATIFY_FIELD env) so rare container types still contribute their fields, walks each doc's _source, and returns a deduplicated list grouped to keep kubernetes.annotations.* collapsed.

Use the result to decide which fields to summarize, exclude, include, or display. Subsequent investigation turns rarely need to re-call this because the schema is stable across queries.

Tip: pair it on the very first turn with a summarize_logs call (in parallel) so you get distributions and schema in one shot.

summarize_logsA

Returns a cheap summary of a log query: total hits, time histogram, and top-N values for chosen dimensions. Use this BEFORE search_logs to see the shape of the data and decide which exclude_filters to apply. No hits are returned (size=0), so this is very cheap on tokens even over 7-day windows.

Typical first call for an investigation: summarize_logs(query, minutes_lookback: 10080). It gives you total hits per day and the noisy dimensions to exclude in the follow-up search.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.5/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct stage of log investigation: summarize_logs returns summary statistics only, search_logs returns matching hits, get_log_context returns surrounding entries, inspect_log returns full metadata for one entry, and available_log_fields returns schema information. There is little to no functional overlap.

Naming Consistency4/5

Most names follow a snake_case verb_noun pattern (search_logs, get_log_context, inspect_log, summarize_logs), but available_log_fields starts with an adjective/noun rather than a verb, which is a minor inconsistency.

Tool Count5/5

Five tools cleanly cover schema discovery, high-level summary, targeted search, contextual viewing, and single-document inspection without redundancy. This is a well-scoped set for the server's purpose.

Completeness5/5

For a read-only log investigation bridge, the tools cover the full Discover-style workflow: learn fields, summarize data shape, search with filters, inspect surrounding context, and drill into a single entry. No obvious missing read operations for the domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues