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/mcpIt uses the Streamable HTTP transport, so any MCP client that supports remote (HTTP) servers works.
Requirements
- A personal access token with the
mcpscope — 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-projectsand 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-Scope | list-projects returns | project argument |
|---|---|---|
| (not set) | every project you can access | required, organization/project |
acme | only acme's projects | required — a bare slug (my-app) or acme/my-app; other organizations are refused |
acme/my-app | only acme/my-app | optional, 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
| Tool | What it returns |
|---|---|
list-projects | Projects the token can reach, grouped by organization. Start here. |
list-issues | Issues (deduplicated error groups), most recently seen first. |
get-issue | One issue (by its key, e.g. MY-APP-42) with its 5 most recent occurrences. |
list-exceptions | Raw captured exceptions, most recent first. |
get-exception | One exception (by its event number) with its stack trace, release, issue key, and end user. |
get-source-map | The uploaded sourcemap for one file of a release. |
list-traces | Traces, most recent first. |
get-trace | One trace (by its uuid) with every span (timing, parent, op, status, metrics). |
list-logs | Logs forwarded from the SDK, most recent first. |
list-users | End users the project has seen, most recently active first. |
get-user | One 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:
| Object | Identifier | Example |
|---|---|---|
| Project | organization/project (as list-projects returns it) | acme/my-app |
| Issue | issue key (the bare number works too) | MY-APP-42 |
| Exception | event number (Event #… on its page) | 1873 |
| Trace | trace uuid | 4bf92f3577b34da6a3ce929d0e0e4736 |
| End user | user id (from the user page URL) | 15 |
Search and limits
Every list-* tool (except list-projects) accepts:
search— the same free-text +key:valuesyntax as the dashboard's search bar, e.g.timeout environment:productionorfailed level:error.limit— how many rows to return,1–50(default20).
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.