bugsink-remote-mcp
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
bugsink-remote-mcp
A remote MCP server for Bugsink, the self-hosted, Sentry-compatible error tracker. It runs as a Cloudflare Worker behind Cloudflare Access Managed OAuth, so you can add it to claude.ai (or any MCP client that supports OAuth) as a custom connector. An assistant can then see which bugs are happening, dig into events and stacktraces, and resolve issues once they're fixed.
One connector serves several Bugsink instances.
It works when the Bugsink hosts themselves sit behind Cloudflare Access, using a service token.
There's no local process and no tokens on laptops. Credentials live only as Worker secrets.
Existing Bugsink MCP servers run locally over stdio and send only the Bugsink token, so they can't reach a Bugsink behind Access, and they can't be used as hosted connectors.
Tools
Every tool takes site, one of the keys in BUGSINK_SITES. It's optional when only one site is configured.
Tool | Writes? | What it does |
| no | Lists the projects on that Bugsink |
| no | Lists issues. Default: open issues across all projects, newest activity first. Filters: |
| no | One issue, by friendly ID ( |
| no | Events of one issue, newest first |
| no | One event: page URL, request headers, cookies and body, referer, browser and OS, user agent, the user (id, email, username, IP), exception, the last 15 breadcrumbs and the stacktrace. |
| yes |
|
Nothing can delete or mute issues, or edit projects or teams.
Credential values are hidden wherever they appear, replaced with
[credential hidden]. That covers session cookies (SESS…/SSESS…, anything named likesession),Authorizationheaders, and fields named like a token, password, secret, CSRF value or API key. It applies in Cookie strings, query strings, URL fragments and any URL in the event (request, referer, breadcrumbs), includinguser:password@in URLs. JWTs andBearer …values are hidden wherever they appear, whatever the field is called. Path segments that look like one-time login hashes (32+ URL-safe characters with an uppercase letter and a digit, such as Drupal's/user/reset/…/<hash>) are hidden too. Name-based hiding can miss a credential stored under an unusual name, so treat the output as sensitive. Other personal data in events is returned as is: emails, IPs, usernames, other cookies and request bodies. Anyone who can use the connector can read it, so keep the Access policy tight.Results are marked untrusted. Every result starts with a note that Bugsink content was written by visitors' browsers and servers and must not be treated as instructions.
Related MCP server: Remote MCP Server
How a request flows
MCP client ──OAuth──▶ Cloudflare Access (Managed OAuth, policy: your email)
│ adds Cf-Access-Jwt-Assertion
▼
Worker https://bugsink-mcp.example.com/mcp
- verifies the Access JWT (issuer, audience, email allow-list)
- MCP over Streamable HTTP (agents/mcp/server createMcpHandler, stateless)
│ Bearer <Bugsink token> (+ CF-Access-Client-Id/Secret)
▼
Bugsink /api/canonical/0/ (one or more instances)Access is the only way in. The Worker has no
workers.devor preview URL (workers_dev: false,preview_urls: false). It also verifies the Access JWT itself as a second line of defence; service-token JWTs carry no email, so they never pass.The token can't be sent elsewhere. The Bugsink client only calls
/api/canonical/0/on the configured origin, including when it follows paginationnextURLs. Redirects (an Access login page) and 401/403 come back as clear tool errors.
Setup
You need a Cloudflare account with Zero Trust (the free plan is enough), and a zone in that account for the Worker's hostname. Managed OAuth only works for apps in the same account as your Zero Trust organization.
1. Prepare Bugsink and Access
Bugsink API tokens. In each Bugsink UI, open Tokens and create a token. A token can do anything Bugsink's API allows; this connector only exposes the tools above.
If Access protects your Bugsink hosts: under Zero Trust → Access → Service credentials, create a service token. Add a Service Auth policy that includes it to each Bugsink Access app.
Access app for the Worker.
Create a self-hosted app on exactly the hostname you'll give the Worker, with an Allow policy for your email. If a wildcard app already covers the zone, still create this dedicated app; Access applies the most specific hostname first.
Under Advanced settings, turn on Managed OAuth for this app only.
Allow your MCP client's OAuth redirect URI. For claude.ai, check Anthropic's custom connector docs for the current callback URL.
Suggested token settings: access token 5–15 min, grant session 1–2 weeks.
Note the app's Application Audience (AUD) tag.
2a. Deploy with the button
Click Deploy to Cloudflare above. Cloudflare copies this repo into your GitHub or GitLab account and deploys it.
Set the variables (
MCP_HOSTNAME,ACCESS_TEAM_DOMAIN,ACCESS_AUD,ALLOWED_EMAILS,BUGSINK_SITES) and the secrets from.dev.vars.example. Each field explains where to find its value.If you use a site name other than
main, add a secret namedBUGSINK_TOKEN_<SITE>for it.If Access doesn't protect your Bugsink, leave the service token secrets empty or delete them.
In the Worker's Settings → Domains & Routes, add your hostname as a custom domain. The Worker has no
workers.devURL on purpose.
2b. Deploy from a clone
cp wrangler.jsonc wrangler.local.jsonc(git-ignored). Set the variables there and add your custom domain underroutes.Deploy:
npx wrangler deploy -c wrangler.local.jsonc. It needswrangler login, or aCLOUDFLARE_API_TOKENwith Account → Workers Scripts: Edit, plus Workers Routes: Edit and DNS: Edit on the Worker's zone.Add the secrets:
npx wrangler secret put BUGSINK_TOKEN_MAIN -c wrangler.local.jsonc # one per site: BUGSINK_TOKEN_<SITE> npx wrangler secret put BUGSINK_ACCESS_CLIENT_ID -c wrangler.local.jsonc # only with Access-protected Bugsink npx wrangler secret put BUGSINK_ACCESS_CLIENT_SECRET -c wrangler.local.jsonc # only with Access-protected Bugsink
3. Connect
In claude.ai, go to Settings → Connectors → Add custom connector and enter https://<your hostname>/mcp. Sign in through Access when prompted.
Checks
curl -i https://<your hostname>/mcpwithout a login should get a 401 from Access.If the connector says
Missing Cloudflare Access token, the request reached the Worker without passing through Access. Check that the Access app covers the hostname.If it says
Access verification is not configured,ACCESS_AUDorACCESS_TEAM_DOMAINis still empty.
Service token expiry
Access service tokens expire.
Add an alert: Notifications → Add → Expiring Access Service Token warns a week ahead.
Refresh: Refresh in the dashboard extends the expiry date.
Rotate: to rotate the secret, use Rotate secret with a grace period, then
npx wrangler secret put BUGSINK_ACCESS_CLIENT_SECRET(add-c wrangler.local.jsoncfor a clone deployment). The Client ID doesn't change.
Development
npm install
npm run typecheck
npm test # unit + MCP handler tests against an in-memory Bugsink
npm run smoke # read-only check against a live Bugsink (never resolves anything)npm run smoke reads these environment variables:
SMOKE_SITE,SMOKE_BUGSINK_URLandSMOKE_BUGSINK_TOKEN.BUGSINK_ACCESS_CLIENT_ID/BUGSINK_ACCESS_CLIENT_SECRET, if Access protects the host.
For wrangler dev, copy .dev.vars.example to .dev.vars.
Versions are pinned on purpose: agents@0.33.0 requires exactly @modelcontextprotocol/server@2.4.0. Upgrade the two together.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for Sentry - error monitoring, issue tracking, and debugging for AI assistants
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceA Cloudflare Workers-based implementation of Model Context Protocol (MCP) server that enables AI assistants like Claude to access external tools and capabilities through a standardized interface with OAuth authentication.14 npm-
- FlicenseNot gradedqualityCmaintenanceA Cloudflare Workers-based server implementing the Model Context Protocol that enables AI assistants like Claude to securely access external tools through OAuth authentication.14 npm-
- FlicenseNot gradedqualityCmaintenanceA Cloudflare Workers-based implementation of the Model Context Protocol (MCP) server that enables tool usage in Claude through OAuth authentication.-
- FlicenseNot gradedqualityCmaintenanceEnables deploying and running a Model Context Protocol (MCP) server on Cloudflare Workers with built-in OAuth authentication. It allows users to host and access tools remotely via Server-Sent Events (SSE) transport from clients like Claude Desktop.-