Skip to content

Buglapse runs a remote MCP server, so an AI coding assistant can read your projects' issues, exceptions, traces, logs, and end users directly — "what's the most frequent error in production this week, and where in our code does it come from?" without you copy-pasting stack traces into the chat.

The server is read-only: no tool can modify, resolve, or delete anything. It lives at a single endpoint:

text
https://app.buglapse.com/mcp

It uses the Streamable HTTP transport, so any MCP client that supports remote (HTTP) servers works.

Requirements ​

  • A personal access token with the mcp scope — every request is made as you, the token's owner.
  • The project's organization must be on a plan that includes the MCP server. Projects whose plan doesn't include it are hidden from list-projects and rejected by every other tool.

Create a token ​

Open Profile → Tokens and click Create token. Give it a name you'll recognize later (e.g. "Claude Code — laptop"), keep the mcp scope checked (it's preselected) and copy the value right away — it's shown only once. A token without the mcp scope — say, one created only for source map uploads with project:releases — is rejected by the MCP server.

A token isn't tied to one project: it reaches every project of every organization you're a member of, with the same access you have in the dashboard. Treat it like a password — keep it out of git, and revoke it on the same page as soon as it's no longer needed. A revoked token stops working immediately; the tokens list also shows when each one was last used.

Connect a client ​

The token travels in the Authorization header — never as a ?token= query parameter, since a URL ends up in logs and shell history.

Claude Code ​

bash
claude mcp add --transport http buglapse https://app.buglapse.com/mcp \
    --header "Authorization: Bearer <your personal access token>"

Or commit a project-level .mcp.json (keeping the token itself in an environment variable):

json
{
    "mcpServers": {
        "buglapse": {
            "type": "http",
            "url": "https://app.buglapse.com/mcp",
            "headers": {
                "Authorization": "Bearer ${BUGLAPSE_TOKEN}"
            }
        }
    }
}

Cursor and other clients ​

Most clients take the same shape — a server URL plus headers. For Cursor, add it to ~/.cursor/mcp.json (or .cursor/mcp.json in a repository):

json
{
    "mcpServers": {
        "buglapse": {
            "url": "https://app.buglapse.com/mcp",
            "headers": {
                "Authorization": "Bearer <your personal access token>"
            }
        }
    }
}

Once connected, ask the assistant to call list-projects to check what the token can see.

Restrict the connection ​

By default, every tool except list-projects takes a project argument, so the assistant first has to find the right project. A project is referred to as organization/project — the organization's slug (Organization → General) and the project's slug (Settings → General), e.g. acme/my-app. A project slug is only unique within its organization, so without a scope the organization part is always required: a bare my-app is refused, even if only one of your organizations has such a project today.

To keep a connection to what a repository actually needs, restrict it with the optional X-Buglapse-Scope header — either an organization or a single project:

json
{
    "mcpServers": {
        "buglapse": {
            "type": "http",
            "url": "https://app.buglapse.com/mcp",
            "headers": {
                "Authorization": "Bearer ${BUGLAPSE_TOKEN}",
                "X-Buglapse-Scope": "acme/my-app"
            }
        }
    }
}
X-Buglapse-Scopelist-projects returnsproject argument
(not set)every project you can accessrequired, organization/project
acmeonly acme's projectsrequired — a bare slug (my-app) or acme/my-app; other organizations are refused
acme/my-apponly acme/my-appoptional, defaults to acme/my-app; any other project is refused

The scope is a hard limit, not a default: an explicit project can't reach outside it. An unknown value, an organization or project you can't access, or an organization whose plan doesn't include MCP fails the connection with 403 instead of being ignored — so a typo never silently widens it to every project.

The header is set by the client, so it keeps an assistant from wandering into the wrong project but isn't a security boundary: anyone holding the token can omit it. Revoke a token you think has leaked (Profile → Tokens).

Tools ​

ToolWhat it returns
list-projectsProjects the token can reach, grouped by organization. Start here.
list-issuesIssues (deduplicated error groups), most recently seen first.
get-issueOne issue (by its key, e.g. MY-APP-42) with its 5 most recent occurrences.
list-exceptionsRaw captured exceptions, most recent first.
get-exceptionOne exception (by its event number) with its stack trace, release, issue key, and end user.
get-source-mapThe uploaded sourcemap for one file of a release.
list-tracesTraces, most recent first.
get-traceOne trace (by its uuid) with every span (timing, parent, op, status, metrics).
list-logsLogs forwarded from the SDK, most recent first.
list-usersEnd users the project has seen, most recently active first.
get-userOne end user with their 5 most recent exceptions and traces.

Identifiers ​

Tools take and return the same identifiers the dashboard shows, so you can paste them straight from the UI into a prompt:

ObjectIdentifierExample
Projectorganization/project (as list-projects returns it)acme/my-app
Issueissue key (the bare number works too)MY-APP-42
Exceptionevent number (Event #… on its page)1873
Tracetrace uuid4bf92f3577b34da6a3ce929d0e0e4736
End useruser id (from the user page URL)15

Search and limits ​

Every list-* tool (except list-projects) accepts:

  • search — the same free-text + key:value syntax as the dashboard's search bar, e.g. timeout environment:production or failed level:error.
  • limit — how many rows to return, 1–50 (default 20).

Exception details ​

get-exception returns the stack trace and a summary by default. Breadcrumbs, contexts, and tags can be large, so they're only included on request via the include argument (breadcrumbs, contexts, tags). When included, string values longer than 500 characters are truncated and breadcrumbs are capped to the most recent 50.

An unusually long stack — typically a deep-recursion overflow — is cut to its first ~80 and last ~20 lines. The response marks this with stack_truncated and stack_lines_total.

Minified stack traces ​

The stack trace returned over MCP is always the raw one as captured, with no server-side deobfuscation. If it points at minified production bundles, the assistant can call get-source-map with the exception's release and a frame's file to fetch that file's sourcemap, then map line/column back to the original source itself (or read the map's sourcesContent). This only works for builds whose maps you've uploaded — see Source Maps.

Example prompts ​

  • "Using Buglapse, show the top unresolved issues in production and explain the most frequent one."
  • "Get the latest exception for issue MYAPP-42, resolve its stack with the sourcemap, and find the failing code in this repository."
  • "Which errors did the user jane@acme.com hit today?"
  • "Find the slowest recent checkout trace and tell me which span dominates it."

Troubleshooting ​

401 — "A valid personal access token is required." The Authorization header is missing, isn't in the Bearer <token> form, or the token was revoked. Create a new one on Profile → Tokens.

403 — "This personal access token is missing the mcp scope." The token was created without the mcp scope. Scopes can't be added to an existing token — create a new one with mcp checked.

list-projects returns an empty list. You aren't a member of any organization whose plan includes the MCP server.

"No project 'my-app', or you do not have access to it." The project value doesn't exist or belongs to an organization you're not a member of — call list-projects for valid values.

"Pass 'my-app' as organization/project" A bare project slug only works on a connection whose X-Buglapse-Scope pins an organization — otherwise use the organization/project value list-projects returns.

"No project 'other-app' within this connection's scope" The project exists, but the connection's X-Buglapse-Scope doesn't cover it — widen or remove the header.

"This project's plan does not include the MCP server." The project exists and you can access it, but its organization's plan doesn't include MCP.

Every request fails with 403 mentioning X-Buglapse-Scope. The header names an organization you're not a member of, a project that doesn't exist in it, or an organization whose plan doesn't include MCP — check the slugs on Organization → General and the project's Settings → General page.