Query Scouter APM (objects, counters, XLog transactions) over stdio via a Scouter collector.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Scouter MCP.
list_objectsList objects/agents
search_xlogSearch XLogs (latency/errors)
get_service_summaryPer-service aggregate (count/avg/max/p95/errorRate), top 50
get_summaryCollector's daily pre-aggregated stats (top-50 SQL/service/error/... β no scanning)
get_xlog_detailXLog detail (SQL/bind params)
get_xlog_by_gxidDistributed-transaction group
νκ΅μ΄ λ¬Έμλ README.ko.md λ₯Ό μ°Έκ³ νμΈμ.
A stdio MCP server that connects directly to a Scouter Collector over TCP and queries XLogs,
counters, and objects. Its purpose is to let an AI quickly explore Scouter metrics and diagnose
root causes. Each result carries txid / gxid / objName / endTimeIso, which you can use as
keys to cross-analyze with other observability tools such as OpenSearch or Datadog.
Java 17. It reuses scouter-common and ports the scouter.webapp net/server classes into the
scouter.mcp.client package. MCP uses the Java SDK 2.0.0 stdio transport. All operations against
the Collector are read-only.
The .mcpb bundle is produced only by the release CI (which wraps this jar); local builds just
produce the jar.
For a single collector, install the .mcpb bundle from the GitHub Release for a
one-click setup β or copy .mcp.json.example, point it at the fat jar (downloaded from the release or
built locally), and fill in the credentials. For multiple collectors, see
Multiple collectors.
| Env var | Description |
|---|---|
SCOUTER_COLLECTOR_HOST | Collector host |
SCOUTER_COLLECTOR_PORT | Collector TCP port (default 6100) |
SCOUTER_USER | Login user |
SCOUTER_PASSWORD | Login password |
SCOUTER_TZ | Time zone (e.g. Asia/Seoul) |
SCOUTER_LOCALE | User-facing message locale: en or ko. If unset, derived from the JVM default (Korean only when the JVM language is Korean, otherwise English) |
SCOUTER_INCLUDE_BIND_PARAMS | Operator kill-switch for SQL bind parameters in get_xlog_detail (default true). Set to false to strip bind params server-side regardless of the per-call argument β an LLM cannot re-enable them. Use when bind values may contain PII. |
The official release ships one .mcpb bundle (one-click install, a single collector) plus the
standalone fat jar. A .mcpb defines exactly one server with one credential set, so it cannot register
two collectors at once. For multiple collectors β which usually differ in their whole connection set
(host/port and user/password) β use the jar directly and add one entry per collector:
scouter-mcp-<version>-all.jar from the GitHub Release.mcpServers entry per collector to your client config (.mcp.json /
claude_desktop_config.json), all pointing at that same jar, each with its own env set. This keeps
each credential isolated:The AI then orchestrates across the collectors.
| Name | Purpose | Key inputs |
|---|---|---|
list_objects | List objects/agents | objType?, nameLike? (case-insensitive) |
search_xlog | Search XLogs (latency/errors) | from, to, objNameLike?, objHash?, service?, login?, ip?, desc?, minElapsedMs?, onlyError?, limit? (default 20, max 200) |
get_service_summary | Per-service aggregate (count/avg/max/p95/errorRate), top 50 | from, to, same filters as search_xlog |
get_summary | Collector's daily pre-aggregated stats (top-50 SQL/service/error/... β no scanning) | category (service/sql/apiCall/ip/userAgent/error/alert), from, to (up to 31 days), objType?, objNameLike?, objHash? |
get_xlog_detail | XLog detail (SQL/bind params) | txid, date?/at?, includeBindParams? (default true) |
get_xlog_by_gxid | Distributed-transaction group | gxid, date?/at? |
get_counter | Counter time series (same-day, full resolution) | objNameLike|objHashes|objType, counter, from, to |
get_counter_stat | Long-range counter stats (5-min resolution, up to 31 days) | objNameLike|objHashes|objType, counter, from, to |
list_counters | Available counters for an objType | objType |
list_alerts | Past collector alerts | from, to, level?, object?, key?, limit? |
get_active_services | Services running right now | objNameLike|objType|objHash |
list_threads | JVM thread list (state histogram + top 50 by cpu) | objNameLike|objHash (max 5 alive instances) |
get_thread_detail | Live thread of an ACTIVE transaction (stack/lock owner/current SQL) | txid (required, active), id?, objNameLike|objHash |
get_object_env | Agent JVM system properties (secrets masked) | objNameLike|objHash, keyLike? |
objNameLike)Users say app-name fragments ("shop-order-api"), but real objNames embed the k8s pod name
(/shop-order-api-deployment-5f4b8c7d9-abcde/shop-order-api1), so objHash changes on every deploy
and an app spans multiple instances. objNameLike solves this: a case-insensitive fragment is
resolved to all matching instances (alive first, capped at 20) and queried across them β no
objHash needed, ever. For XLog search/summary the resolution also unions the collector's daily
object DB, so pods replaced by a deploy during the queried window are still found. If nothing
matches, the error is NOT_FOUND with a candidates hint listing actual objNames so the caller
can self-correct in one step.
Scouter service names look like /api/order/.../search-order-info-grade<POST>, but users type
"GET orderDetail" or "order info grade". The service filter normalizes such input: an HTTP method is
extracted from any position (GET x, x POST, pasted <POST>), whitespace-separated words fall back
to the longest token server-side, and explicit * patterns pass through untouched. Server-side
matching is still case-sensitive β so when a pattern matches nothing, the same window is re-scanned
(bounded) without the service filter and real service names matching the query tokens
case-insensitively are returned as serviceCandidates, ordered by traffic. One retry with an exact
name resolves it.
service/login/ip/desc use substring match by default (server-side StrMatch), so a short token
like search-order-info-grade matches /api/order/ext/order-info/search-order-info-grade<POST>.
objNameLike/login/ip/desc count as server-side filters, so they relax the 5-minute
unfiltered-window cap. list_counters also accepts objNameLike and derives the objType, so users
never need to know Scouter's type taxonomy.
All tools are advertised with readOnlyHint. A diagnose_root_cause MCP prompt exposes the
recommended tool order for latency/error investigations.
Production Scouter can produce hundreds of thousands of XLogs in five minutes, so search_xlog
enforces guardrails (see scouter.mcp.policy.Limits):
limit or the scan cap (5,000 examined packs) is reached and
closes the socket, which also stops the Collector's scan/transfer β bounding server load, network,
and MCP heap together.service or objHash filter, only windows up to 5 minutes are allowed; the absolute
window cap is 24 hours.limit defaults to 20 and is capped at 200. Results include truncated/scanCapReached and a
hint so the caller can narrow filters instead of refetching.get_service_summary retains no rows (only per-service counters), so it uses a higher scan cap
(200,000) to cover wider windows cheaply; it reports scanCapReached/examined too.get_counter caps the per-objType fan-out at 20 instances, and downsamples long series with a
min/max scheme that preserves spikes/dips (summary min/max/avg are computed from the full series).get_xlog_detail
profile steps are capped at 150, signalled via totalSteps/stepsTruncated.minElapsedMs/onlyError) discard over 99% of scanned rows, a low-selectivity
hint steers the model toward server-side filters or get_summary.get_summary/get_counter_stat read the collector's daily pre-aggregated data (no scanning), capped at
31 days; summary returns the top 50 rows per category. list_threads caps at 5 alive instances and 50
thread rows each (the state histogram always covers all threads).key=value lines
for post-hoc load analysis.Only dynamic, user-facing output (tool error messages, result hints, notes) is localized, in English
and Korean, via messages.properties / messages_ko.properties. Static schema/tool descriptions and
structured stderr logs (key=value) remain English for a stable contract and log parsing.
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/scouter-mcp)<a href="https://allmcps.com/mcp/scouter-mcp"><img src="https://allmcps.com/api/badge/scouter-mcp?style=directory" alt="Scouter MCP on AllMCPs" /></a>