Superlog

An open-source agent that observes & fixes your application.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only

What it can do

  • Query Logs: Search OpenTelemetry logs. Targets the session's active project unless project_id is given. Error rows include flattened exception_type, exception_message, and exception_stacktrace fields
  • Query Traces: Search OpenTelemetry spans. Targets the session's active project unless project_id is given. Spans with exception events include flattened exception_type, exception_message, and exceptio
  • Query Metrics: Fetch recent metric points across gauge/sum/histogram/summary tables. Targets the session's active project unless project_id is given. Each point includes its data-point `attributes` (t

What data it sees

Do you need an account

No: the server works without sign-in

An open-source agent that observes & fixes your application. Query logs, traces, metrics, incidents.

How to connect

How to connect Superlog to Claude

The server address to paste into Claude settings:

https://superlog-mcp--superlog.run.tools

  1. Open Claude (claude.ai or the desktop app).
  2. Go to Settings → Connectors.
  3. Click Add custom connector.
  4. Paste the server address copied below into Remote MCP server URL and click Add.
  5. In a chat, click + → Connectors and switch the new connector on.

Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.

Authorization

After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.

How to connect Superlog to ChatGPT

The server address to paste into ChatGPT settings:

https://superlog-mcp--superlog.run.tools

  1. Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
  2. Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
  3. Open Settings → Connectors and click Create.
  4. Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
  5. Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
  6. In a new chat open + → Apps/Connectors and enable the connector.

OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.

Authorization

On first use ChatGPT opens the service's sign-in window. Sign in and approve access.

How to connect Superlog to Cursor

The server address to paste into Cursor settings:

https://superlog-mcp--superlog.run.tools

Fastest: click Open in Cursor below and confirm the prompt.

Manually:

  1. In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
  2. Paste the JSON copied below into ~/.cursor/mcp.json (per project: .cursor/mcp.json in the repo root).
  3. Save the file. The server appears in the MCP list; authorize it there if asked.

Authorization

If the service needs sign-in, an authorize button appears next to the server in the MCP list.

Server tool list (48)

Raw names from tools/list. Only developers need these.

query_logsSearch OpenTelemetry logs. Targets the session's active project unless project_id is given. Error rows include flattened exception_type, exception_message, and exception_stacktrace fields when present.
query_tracesSearch OpenTelemetry spans. Targets the session's active project unless project_id is given. Spans with exception events include flattened exception_type, exception_message, and exception_stacktrace fields when present.
query_metricsFetch recent metric points across gauge/sum/histogram/summary tables. Targets the session's active project unless project_id is given. Each point includes its data-point `attributes` (the per-series dimensions like route/status/tenant) and `resource_attrs`. gauge/sum points carry a scalar `value`; histogram/summary points carry `count` and `sum` (plus `min`/`max` for histograms) instead, since they have no scalar value.
list_servicesList distinct service.name values emitting telemetry in the given window.
list_projectsList every project the authenticated user can access, across all of their orgs. The active project is marked.
get_active_projectReturn the project that tools default to when project_id is omitted.
set_active_projectChange the default project for subsequent tool calls in this session. Persists for the lifetime of the access token.
list_alertsList all alerts in the active project (or the project_id you pass).
get_alertFetch a single alert plus its 50 most recent firings.
create_alertCreate an alert. For logs/traces sources aggregation must be 'count'; for metric source it must be 'sum' or 'avg' and metric_name is required.
update_alertPatch an alert. Provide only the fields you want to change. Validation runs on the merged result.
delete_alertDelete an alert by id.
preview_alertEvaluate a draft alert spec against current data without saving. Returns whether it would breach right now.
test_alertRe-evaluate a saved alert against current data and return the result.
get_homeFetch the active project's shared home command center, including built-ins, data widgets, links, and grid layouts.
set_home_builtinShow or hide one of the built-in home widgets: setup_todos, active_incidents, or service_map.
add_home_widgetAdd a chart, table, or markdown widget directly to the shared project home. Uses the same widget config and 12-column layout as dashboards.
add_home_linkAdd a shared link card to project home. URLs must be absolute and use http or https.
update_home_layoutUpdate positions and sizes for home items on the 12-column grid. Read get_home first and send the items that should move.
remove_home_itemRemove a built-in, data widget, or link from project home. Read get_home first to discover item ids.
list_dashboardsList dashboards in the active project (or project_id).
get_dashboardFetch a dashboard with its widgets.
create_dashboardCreate a dashboard. Slug is generated from the name. Optionally seed template variables (see `variables`) so widget filters can reference them with $name.
update_dashboardRename a dashboard.
set_dashboard_variablesReplace a dashboard's template-variable list. Pass the FULL set you want to keep — this overwrites the existing list (read the current one with get_dashboard first). Variables let one dropdown drive filters across many widgets: define a variable here, then point widget filters at it with value:"$name". Dashboard template variables — a named picklist that drives widget filters. Each entry is { name, options[], defaultValue?, label?, attributeKey? }. A widget filter references a variable by putting the token "$name" (or "${name}") in a filter value — e.g. resourceAttrs: [{ key: "deployment.environment", value: "$env" }]. At view time the dashboard shows a dropdown per variable and substitutes the selected option into every filter that references it, so one variable can drive filters across many widgets on any attribute key. `options` is the selectable list (empty = free-form); `defaultValue` must be one of `options` when `options` is non-empty; `attributeKey` is optional and only powers a one-click 'filter by this variable' shortcut in the web editor. Variable names must start with a letter and contain only letters, digits, or underscores.
delete_dashboardDelete a dashboard and all its widgets.
add_dashboard_widgetAppend a widget to a dashboard. Widget types: timeseries_count, timeseries_metric, trace_table, log_table, markdown. Omit `layout` to use the standard size for the type — recommended. The grid is 12 columns wide, so x is 0-11 and w is 1-12; the standard sizes are w:6 h:4 for timeseries charts (half-width), w:12 h:6 for trace_table/log_table (full-width), and w:4 h:5 for markdown. Only pass `layout` when you deliberately want a non-standard size or position. A filter value may reference a dashboard variable with the token "$name" (or "${name}") — e.g. config.filter.resourceAttrs: [{ key: "deployment.environment", value: "$env" }] — which is substituted with the viewer's selected option at view time. Define variables with set_dashboard_variables (or create_dashboard).
update_dashboard_widgetPatch a widget's title, config, or layout. As with add_dashboard_widget, a filter value may reference a dashboard variable with the token "$name" (or "${name}").
delete_dashboard_widgetRemove a widget from a dashboard.
get_incidentFetch one incident by its id — the uuid at the end of a superlog.sh/org/<org>/project/<project>/incidents/<id> link — and everything needed to explain it. No project_id is required; the project is resolved from the incident. Returns: the incident summary with the agent's findings (root_cause_text, agent_summary, estimated_impact_text) and its project_id; every linked issue with a stored telemetry `sample` (trace_id, span_id, stacktrace, span/log/resource attributes); and a pointer to the latest investigation run. To pull live telemetry, take a sample's trace_id and call query_traces, or filter query_logs/query_traces by the issue's service + exception type — passing the returned project_id.
search_incidentsSearch incidents in the active project (or project_id). Incidents are auto-grouped error/anomaly investigations; each row carries the agent's findings (agent_summary, root_cause_text) when available. Filter by status, severity, service, a free-text substring over title/codename, and a last_seen time window. Results are newest-activity-first. By default agent-classified noise (status='autoresolved_noise') is hidden; pass status='all' to include it or status='autoresolved_noise' to inspect just the noise pile. Use get_incident to drill into a single incident's linked issues and telemetry.
list_agent_mcp_serversList the custom MCP servers available to new investigation and Slack-agent sessions for this project. Credentials are always redacted.
add_agent_mcp_serverAdd a trusted HTTPS Streamable HTTP MCP server to this project. Admin only. Authentication accepts none, bearer/API token, arbitrary API-key header, or OAuth. Credential inputs are write-only and never returned.
update_agent_mcp_serverUpdate a project MCP server. Admin only. Omit auth to preserve its credential; supplying auth replaces it. A changed URL must be explicitly trusted.
remove_agent_mcp_serverRemove a custom MCP server from this project. Admin only.
start_agent_mcp_oauthStart OAuth authorization-code authentication with discovery, PKCE, resource binding, and dynamic client registration when needed. Admin only. Open the returned authorizationUrl in a browser.
connect_agent_mcp_client_credentialsExchange the configured OAuth client ID and secret using client_credentials, but only when advertised by the authorization server. Admin only.
disconnect_agent_mcp_oauthErase stored OAuth tokens and disable this custom MCP server. Admin only.
test_agent_mcp_serverConnect to a configured MCP server, initialize the protocol, and list its tools. Admin only. Secrets are never returned.
get_issue_filterRead the project's issue filter: per-kind include/exclude attribute clauses that decide which ERROR events become issues/incidents. Excludes win; a non-empty include list means an event must match at least one clause.
update_issue_filterUpdate the issue filter. Each bucket you provide REPLACES that bucket; omit a bucket to leave it unchanged; pass [] to clear it. Use this to quiet recurring noise (add an exclude clause) or to scope investigations to specific services/routes (add an include clause). Call get_issue_filter first if you want to add to the existing rules rather than overwrite them.
preview_issue_filterPreview which recent ERROR events (last 24h) would still become issues under a candidate filter, WITHOUT saving. Buckets you pass are merged over the project's current filter (same semantics as update_issue_filter); omit all buckets to preview the current saved filter. Returns sample matching events.
get_project_contextRead the project's freeform context — the human-written description of the system (architecture, conventions, key services) that the investigation agent reads on every run.
set_project_contextOverwrite the project's freeform context (max 8000 chars; longer input is truncated). This REPLACES the whole field — call get_project_context first and edit the returned text if you want to preserve existing content. Use for durable, system-level facts that apply to every investigation; for narrower learnings prefer create_agent_memory.
list_agent_memoriesList the investigation agent's stored memories for the project — durable learnings (feedback, terminology, infra, project facts) that are injected into future investigations.
create_agent_memoryRecord a durable, reusable learning so future investigations inherit it. Record a memory whenever you discover something worth remembering across investigations — a root-cause pattern, a piece of infra/architecture, a domain term, or a user correction about how to investigate. Keep the title a short handle and the body the specific, reusable fact (not a one-off incident narrative).
update_agent_memoryPatch a stored memory. Provide only the fields you want to change. Set status='archived' to retire a memory without deleting it (archived memories stop being injected into investigations).
delete_agent_memoryPermanently delete a stored memory by id. To retire one reversibly, prefer update_agent_memory with status='archived'.