Skip to main content
Glama
AndreyBegma

smart-glitchtip-mcp

by AndreyBegma

smart-glitchtip-mcp

Give your AI agents the whole of GlitchTip — triage, releases, alerts, uptime and more — over MCP.

npm License: Apache-2.0 Discord

Your agent can read a stack trace in your editor, but the error tracker stays a browser tab away: it cannot list the issues behind a spike, open the latest event, check what a release broke or resolve what it fixed. smart-glitchtip-mcp is a Model Context Protocol server that puts a GlitchTip instance's API in front of any MCP client — Claude Code, Codex, Cursor and others — as typed tools with compact, token-safe output. It is read-only unless you switch writes on.

Who it is for: teams that self-host GlitchTip (or use its hosted service) and want coding agents to investigate and manage errors without copy-pasting from the web UI.

What you get

  • About 130 tools in 18 toolsets covering the GlitchTip 6.2.6 API: organizations, issues, events, projects, teams, members, releases, alerts, monitors, status_pages, performance, logs, stats, admin, billing, ingest, uploads and an api_request escape hatch. Each is documented in docs/tools/.

  • Read-only by default. Tools that change or delete data are not even registered unless GLITCHTIP_READ_ONLY=false; toolsets are switched on per deployment with GLITCHTIP_TOOLSETS.

  • stdio and stateless Streamable HTTP — one process per developer, or one shared server for a team, where each caller can bring their own GlitchTip token.

  • Safe output for agents. Results are compact text (or JSON) bounded by a size budget; the API token is scrubbed from every result, log and error; and text that comes from event senders (titles, messages, tags) is fenced as untrusted so an agent does not follow instructions hidden in it.

  • Prompts and resources. triage-issue and release-health-report prompts, and glitchtip://issues/... resource templates to attach an issue or event to a conversation.

  • Several instances. Over HTTP a caller can pick another allowlisted instance with a header; anything outside the allowlist is refused.

Related MCP server: TypeSafe MCP

Quick start

Requirements: Node.js 24 or later. The server is published on npm as smart-glitchtip-mcp, so npx runs it without a clone:

npx -y smart-glitchtip-mcp

Or install it globally with npm i -g smart-glitchtip-mcp and run smart-glitchtip-mcp. To build it from source instead, see Development.

Create an API token in GlitchTip (Profile → Auth Tokens) with the scopes the toolsets you enable need — each file in docs/tools/ lists them.

stdio (local agents)

Add the server to your MCP client configuration, for example:

{
  "mcpServers": {
    "glitchtip": {
      "command": "npx",
      "args": ["-y", "smart-glitchtip-mcp"],
      "env": {
        "GLITCHTIP_URL": "https://glitchtip.example.com",
        "GLITCHTIP_TOKEN": "<api token>"
      }
    }
  }
}

With Claude Code:

claude mcp add glitchtip \
  -e GLITCHTIP_URL=https://glitchtip.example.com \
  -e GLITCHTIP_TOKEN=<api token> \
  -- npx -y smart-glitchtip-mcp

stdout carries only MCP messages; logs go to stderr. Then ask the agent, for example, "list the unresolved issues in project web from the last 24 hours and triage the top one".

HTTP (shared deployment)

MCP_TRANSPORT=http \
MCP_HTTP_PORT=8080 \
GLITCHTIP_URL=https://glitchtip.example.com \
npx -y smart-glitchtip-mcp

The MCP endpoint is POST /mcp (stateless Streamable HTTP; no session ids). GET /healthz answers ok without authentication. Every MCP request must carry Authorization: Bearer <token>, otherwise it gets 401:

  • Your own GlitchTip token as the bearer: the server forwards it to GlitchTip, which decides what you may do.

  • MCP_AUTH_TOKEN as the bearer: the server acts with its own GLITCHTIP_TOKEN. A server holding GLITCHTIP_TOKEN refuses to start in HTTP mode unless MCP_AUTH_TOKEN is set, so the token is never open to anyone who can reach the port.

Optional request headers:

Header

Meaning

X-GlitchTip-Url

Another GlitchTip instance to act on. Only with your own token, and only when it is GLITCHTIP_URL or listed in GLITCHTIP_ALLOWED_URLS; anything else is refused.

X-GlitchTip-Org

Default organization slug for this request.

Docker

docker build -t smart-glitchtip-mcp .
docker run --rm -p 8080:8080 \
  -e GLITCHTIP_URL=https://glitchtip.example.com \
  -e GLITCHTIP_TOKEN=<api token> \
  -e MCP_AUTH_TOKEN=<a random 16+ character secret> \
  smart-glitchtip-mcp

The image defaults to HTTP on port 8080. stdio, docker compose for development and the release pipeline are described in docs/deployment.md.

Configuration

All configuration comes from environment variables. Invalid configuration stops startup with one line per problem on stderr, naming the variable (never its value), and exit code 1.

Variable

Type / default

Meaning

MCP_TRANSPORT

stdio | http, default stdio

transport

MCP_HTTP_PORT

int, default 8080

HTTP port

MCP_HTTP_PATH

default /mcp

endpoint path

MCP_AUTH_TOKEN

string, optional; at least 16 characters, no whitespace

shared secret for HTTP clients that do not bring their own GlitchTip token; required in HTTP mode when GLITCHTIP_TOKEN is set

GLITCHTIP_URL

URL, required in stdio; optional in http

default instance

GLITCHTIP_TOKEN

string, optional

default token

GLITCHTIP_DEFAULT_ORG

slug, optional

default organization

GLITCHTIP_ALLOWED_URLS

comma list of origins, default empty

other instances an HTTP client may select with X-GlitchTip-Url; empty means only GLITCHTIP_URL

GLITCHTIP_TOOLSETS

comma list, default organizations,issues,events,projects; all allowed

enabled toolsets

GLITCHTIP_READ_ONLY

bool, default true

false registers the tools that change or delete data

GLITCHTIP_TIMEOUT_MS

int, default 15000

timeout of each request to GlitchTip

MCP_RESPONSE_BUDGET

int chars, default 20000

maximum size of a tool result; longer results are truncated and say so — format: "json" results stay valid JSON, marked "truncated": true

LOG_LEVEL

pino level, default info

log level (logs go to stderr; HTTP request lines carry method, path and a short list of harmless headers, never credentials)

Known toolsets: organizations, issues, events, projects, teams, members, releases, alerts, monitors, status_pages, performance, logs, stats, admin, billing, ingest, uploads, api_request. A known toolset that is not implemented yet is accepted and logged as "not yet available"; an unknown name stops startup.

Requests to GlitchTip time out after GLITCHTIP_TIMEOUT_MS. Reads are retried up to twice on 429, 5xx and network errors, honouring Retry-After; writes are never retried.

Tools, prompts and resources

whoami is always available and shows the instance, user and token scopes in use. Everything else comes in toolsets, enabled with GLITCHTIP_TOOLSETS (default organizations,issues,events,projects, or all):

Toolset

What it covers

organizations

organizations and their environments

issues

list, search, status, assignment, merge, bulk updates, comments, tags, hashes, user reports

events

issue and project events, the latest event, raw event JSON (PII-redacted)

projects

projects, client keys (DSN), environments, project teams

teams, members

teams, team membership, organization members and roles

releases

releases, deploys, commits, release files, repositories

alerts

project alert rules and recipients

monitors, status_pages

uptime monitors, checks, status pages

performance, logs, stats

transactions, spans, N+1 patterns, logs, organization stats

admin, billing, ingest

current user, notification settings, license, usage and plans, test events

uploads

debug files, artifact bundles, ProGuard mappings (stdio only)

api_request

api_get and a gated api_request for endpoints without a dedicated tool

Two MCP prompts, triage-issue and release-health-report, guide an agent through a read-only task with these tools (docs/tools/prompts.md); each is listed only when every toolset it uses is enabled. Two resource templates, glitchtip://issues/{issue_id}{?organization} and glitchtip://issues/{issue_id}/events/{event_id}{?organization} (event_id may be latest), attach an issue or an event to a conversation by URI (docs/tools/resources.md).

How it works

agent ──MCP──▶ stdio | Streamable HTTP
                 ▼
            auth guard (HTTP only) → instance resolver (URL, token, org)
                 ▼
            toolset tool: zod input schema, read-only gate
                 ▼
            GlitchTip client (types generated from the API snapshot)
                 ▼
            compact, budgeted, token-scrubbed result

It is a NestJS application on @rekog/mcp-nest. The client is generated from a snapshot of the GlitchTip OpenAPI schema, and a contract test fails if a snapshot refresh drops an endpoint the tools call. Details are in docs/architecture.md, and every design choice, with the alternatives rejected, is in docs/decisions.md.

Development

bun install
bun run lint
bun run typecheck
bun run test        # unit, contract, protocol, HTTP and process tests; no network
bun run build
bun run test:e2e    # against a real instance; needs E2E_GLITCHTIP_URL, _TOKEN, _ORG
bun run api:generate   # regenerate src/glitchtip/generated from the API snapshot

bun run dev rebuilds and restarts on change; docker compose up does the same in a container pointed at the instance in .env (copy .env.example first).

Documentation

docs/ is the authority on what the server does and why.

Path

What lives there

docs/tools/

one file per toolset: tools, inputs, annotations, token scopes

docs/decisions.md

design decisions D-01…

docs/architecture.md

the request path and the source layout

docs/deployment.md

Docker, Woodpecker CI, cutting a release

docs/roadmap.md

the backlog and its state

docs/specs/

one specification per change

Contributing

Read AGENTS.md first. Work is tracked as FEAT-/BUG- IDs and lands on develop; main carries releases only.

License

Apache-2.0

Available Tools

4 tools
get_organizationA
Read-onlyIdempotent

Get one organization: slug, name, its projects and teams (counts and slugs), and the access scopes you hold in it. Scope: org:read, org:write or org:admin.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNotext (default): compact, for reading. json: the same fields as JSON, for further processing.text
organizationNoOrganization slug. Optional: defaults to the server or header default, or to the only organization the token can see.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by disclosing the required OAuth scopes (org:read, org:write, or org:admin) and the composition of the response (slug, name, projects and teams counts/slugs, access scopes). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The first sentence front-loads the operation and return payload, and the second specifies the access scopes. Every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (2 optional params, no output schema). The description covers the return payload and the authorization requirement, which are the most important operational facts. The format parameter and optionality of organization are already documented in the schema, so nothing important is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already fully documents both 'format' and 'organization'. The description adds no parameter-level meaning beyond that schema, meriting the baseline 3 for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' with the resource 'one organization' and enumerates the exact returned data: slug, name, projects/teams counts and slugs, and access scopes. This clearly distinguishes it from siblings like list_organizations (plural) and whoami. A tool name alone would be ambiguous, but the description removes that ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: when you need details of a single organization rather than a list. It provides a clear context by specifying the return fields and required scopes. However, it does not explicitly name alternatives or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_organization_environmentsA
Read-onlyIdempotent

List environment names used in an organization's events (e.g. production, staging). Scope: org:read, org:write or org:admin.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1–100 (default 50).
cursorNoCursor from the previous page ("next cursor: …"); omit for the first page.
formatNotext (default): compact, for reading. json: the same fields as JSON, for further processing.text
visibilityNoWhich environments to list: visible (default), hidden, or all.visible
organizationNoOrganization slug. Optional: defaults to the server or header default, or to the only organization the token can see.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation read-only and idempotent; the description adds useful non-annotated context by defining the data source ('organization's events') and the required permission scope. It does not discuss return format or pagination, but those are covered in the parameter schema, and nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the purpose front-loaded and a concise scope note; every sentence adds distinct information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with 5 optional, fully-documented parameters and rich annotations, the description plus schema cover what the agent needs: what is listed, the auth scope, and all call options. Output shape is implied by 'environment names' and the format parameter, so no critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (limit, cursor, format, visibility, organization) already has detailed semantics including defaults, enums, and patterns. The description adds no parameter-level information, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb and resource ('List environment names used in an organization's events') and gives concrete examples (production, staging). It clearly differentiates from sibling tools like list_organizations and get_organization, which operate on organizations rather than their environments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is for listing environment names within an organization's events and states the required scope (org:read, org:write or org:admin). It does not explicitly name alternative siblings for when-not-to-use, but the context is unambiguous and there are no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_organizationsA
Read-onlyIdempotent

List organizations the token can see, with slug, name and creation date. Scope: org:read, org:write or org:admin.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1–100 (default 50).
cursorNoCursor from the previous page ("next cursor: …"); omit for the first page.
formatNotext (default): compact, for reading. json: the same fields as JSON, for further processing.text

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful context beyond those annotations by specifying the required OAuth scopes and the fields returned, which helps an agent understand access and output expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The action and resource are front-loaded, and the scope information is included without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with rich annotations and fully described optional parameters, the description plus schema covers visibility scope, return fields, and pagination/format. No output schema exists, but the description states the returned fields, which is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (limit, cursor, format) are already fully documented. The description adds no parameter-level detail, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: lists organizations visible to the token, with the returned fields slug, name, and creation date. This clearly distinguishes it from get_organization (single organization) and list_organization_environments (environments within an organization).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides scope prerequisites (org:read, org:write, or org:admin) but gives no explicit guidance on when to choose this tool over its siblings. An agent must infer from sibling names when this list operation is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiA
Read-onlyIdempotent

Show which GlitchTip instance and user this server is acting as, the instance version, and the scopes of the token in use. Call this first when a tool fails with a permission error. Needs no scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNotext (default): compact, for reading. json: the same fields as JSON, for further processing.text

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare it read-only, idempotent, and non-destructive. The description adds meaningful context by clarifying that it needs no scope and by positioning it as a diagnostic first step, which is useful beyond the structured annotation data. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero filler: the first states what the tool shows, and the second gives one actionable usage instruction. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-required-parameter, read-only tool, the description covers what it returns, when to call it, and the auth prerequisite. The schema covers the optional format switch, and the annotations cover the safety profile, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, format, is fully documented in the input schema with enum values, a default, and an explanation of text versus json output. With 100% schema description coverage, the description does not need to add parameter detail; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Show') and names the exact resource and outputs: the GlitchTip instance, acting user, instance version, and token scopes. This clearly distinguishes it from the sibling resource-listing tools such as list_organizations and get_organization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to call this tool first ('when a tool fails with a permission error') and notes that no scope is required. It does not name alternatives or when-not cases, but for this identity/diagnostic tool that is a minor omission.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.1.0
    • First observedget_organization
    • First observedlist_organization_environments
    • First observedlist_organizations
    • First observedwhoami

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct concern: whoami handles identity/permissions, list_organizations provides an overview, get_organization drills into a single org's details, and list_organization_environments focuses on a specific attribute. There is no meaningful overlap or ambiguity between them.

Naming Consistency5/5

All tools use snake_case and follow a clear verb_noun pattern (list_*, get_*). whoami is a standard, recognizable exception that still fits the command-style naming. The convention is consistent and predictable.

Tool Count5/5

With only 4 tools, the server is tightly scoped to read-only organization exploration. Each tool adds distinct value without bloat, and the count is well within the ideal range for a focused MCP server.

Completeness4/5

The surface covers the essential read paths: identity check, list organizations, retrieve a single organization, and list environments. Missing mutation (create/update/delete) and deeper project/team detail tools, but the server appears intentionally read-only for this niche. Minor gaps exist but agents can complete basic workflows.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Start, observe, and interact with Claude Managed Agents from any MCP client — launch an agent, watch its events, reply, approve the tools it wants to run, and stop it. Runs over stdio, HTTP, or AWS Lambda with pluggable auth.
    17
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables MCP-compatible agent hosts to interact with TypeSafe AI's Jev System One API through dependency-free STDIO tools for classification, scoring, verification, gating, routing, review, and health checks.
    9
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents and MCP clients to manage projects, merge requests, issues, pipelines, wiki, releases, tags, milestones, and more through stdio, SSE, or Streamable HTTP with PAT/OAuth authentication.
    96,233 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables an AI agent to control one or more remote GPIO agents through a conversation by proxying tool calls to their REST APIs. It supports API-key authentication, LAN discovery, and both stdio and Streamable HTTP transports.
    14
    204 npm
    1
    MIT