Files
flyer-crawler.projectium.com/docs/BUGSINK-MCP-TROUBLESHOOTING.md

268 lines
8.4 KiB
Markdown

# Bugsink MCP Troubleshooting Guide
This document tracks known issues and solutions for the Bugsink MCP server integration with Claude Code.
## Issue History
### 2026-01-22: Server Name Prefix Collision (LATEST)
**Problem:**
- `bugsink-dev` MCP server never starts (tools not available)
- Production `bugsink` MCP works fine
- Manual test works: `BUGSINK_URL=http://localhost:8000 BUGSINK_TOKEN=<token> node d:/gitea/bugsink-mcp/dist/index.js`
- Configuration correct, environment variables correct, but server silently skipped
**Root Cause:**
Claude Code silently skips MCP servers when server names share prefixes (e.g., `bugsink` and `bugsink-dev`).
Debug logs showed `bugsink-dev` was NEVER started - no "Starting connection" message ever appeared.
**Discovery Method:**
- Analyzed Claude Code debug logs at `C:\Users\games3\.claude\debug\*.txt`
- Found that MCP startup messages only showed: `memory`, `bugsink`, `redis`, `gitea-projectium`, etc.
- `bugsink-dev` was completely absent from startup sequence
- No error was logged - server was silently filtered out
**Solution Attempts:**
**Attempt 1:** Renamed `bugsink-dev` to `devbugsink`
- New MCP tool prefix: `mcp__devbugsink__*`
- Changed URL from `http://localhost:8000` to `http://127.0.0.1:8000`
- **Result:** Still failed after full VS Code restart - server never loaded
**Attempt 2:** Renamed `devbugsink` to `localerrors` (completely different name)
- New MCP tool prefix: `mcp__localerrors__*`
- Uses completely unrelated name with no shared prefix
- Based on infra-architect research showing name collision issues
- **Result:** Still failed after full VS Code restart - server never loaded
**Attempt 3:** Created project-level `.mcp.json` file ✅ **SUCCESS**
- Location: `d:\gitea\flyer-crawler.projectium.com\flyer-crawler.projectium.com\.mcp.json`
- Contains `localerrors` server configuration
- Project-level config bypassed the global config loader issue
- **Result:** ✅ Working! Server loads successfully, 2 projects found
- Tool prefix: `mcp__localerrors__*`
**Alternative Solutions Researched:**
- Sentry MCP: Not compatible (different API endpoints `/api/canonical/0/` vs `/api/0/`)
- MCP-Proxy: Could work but requires separate process
- Project-level `.mcp.json`: Alternative if global config continues to fail
**Status:** ✅ RESOLVED - Project-level `.mcp.json` works successfully
**Root Cause Analysis:**
Claude Code's global settings.json has an issue loading localhost stdio MCP servers, even with completely distinct names. The exact cause is unknown, but may be related to:
- Multiple servers using the same package (bugsink-mcp)
- Localhost URL filtering in global config
- Internal MCP loader bug specific to Windows/localhost combinations
**Working Solution:**
Use **project-level `.mcp.json`** file instead of global `settings.json` for localhost MCP servers. This bypasses the global config loader issue entirely.
**Key Insights:**
1. Global config fails for localhost servers even with distinct names (`localerrors`)
2. Project-level `.mcp.json` successfully loads the same configuration
3. Production HTTPS servers work fine in global config
4. Both configs can coexist: global for production, project-level for dev
---
### 2026-01-21: Environment Variable Typo (RESOLVED)
**Problem:**
- `bugsink-dev` MCP server fails to start (tools not available)
- Production `bugsink` MCP works fine
- User experienced repeated troubleshooting loops without resolution
**Root Cause:**
Environment variable name mismatch:
- **Package expects:** `BUGSINK_TOKEN`
- **Configuration had:** `BUGSINK_API_TOKEN`
**Discovery Method:**
- infra-architect subagent examined `d:\gitea\bugsink-mcp\README.md` line 47
- Found correct variable name in package documentation
- Production MCP continued working because it was started before config change
**Solution Applied:**
1. Updated `C:\Users\games3\.claude\settings.json`:
- Changed `BUGSINK_API_TOKEN` to `BUGSINK_TOKEN` for both `bugsink` and `bugsink-dev`
- Removed unused `BUGSINK_ORG_SLUG` environment variable
2. Updated documentation:
- `CLAUDE.md` MCP Servers section (lines 307-327)
- `docs/BUGSINK-SYNC.md` environment variables (line 66, 108)
3. Required action:
- Restart Claude Code to reload MCP servers
**Status:** Fixed - but superseded by server name collision issue above
---
## Correct Configuration
### Required Environment Variables
The bugsink-mcp package requires exactly **TWO** environment variables:
```json
{
"bugsink": {
"command": "node",
"args": ["d:\\gitea\\bugsink-mcp\\dist\\index.js"],
"env": {
"BUGSINK_URL": "https://bugsink.projectium.com",
"BUGSINK_TOKEN": "<40-char-hex-token>"
}
},
"localerrors": {
"command": "node",
"args": ["d:\\gitea\\bugsink-mcp\\dist\\index.js"],
"env": {
"BUGSINK_URL": "http://127.0.0.1:8000",
"BUGSINK_TOKEN": "<40-char-hex-token>"
}
}
}
```
**Important:**
- Variable is `BUGSINK_TOKEN`, NOT `BUGSINK_API_TOKEN`
- `BUGSINK_ORG_SLUG` is NOT used by the package
- Works with both HTTPS (production) and HTTP (localhost)
- Use completely distinct name like `localerrors` (not `bugsink-dev` or `devbugsink`) to avoid any name collision
---
## Common Issues
### MCP Server Tools Not Available
**Symptoms:**
- `mcp__localerrors__*` tools return "No such tool available"
- Production `bugsink` MCP may work while `localerrors` fails
**Possible Causes:**
1. **Wrong environment variable name** (most common)
- Check: Variable must be `BUGSINK_TOKEN`, not `BUGSINK_API_TOKEN`
2. **Invalid API token**
- Check: Token must be 40-character lowercase hex
- Verify: Token created via Django management command
3. **Bugsink instance not accessible**
- Test: `curl -s -o /dev/null -w "%{http_code}" http://localhost:8000`
- Expected: `302` (redirect) or `200`
4. **MCP server crashed on startup**
- Check: Claude Code logs (if available)
- Test manually: `BUGSINK_URL=http://localhost:8000 BUGSINK_TOKEN=<token> node d:/gitea/bugsink-mcp/dist/index.js`
**Solution:**
1. Verify correct variable names in settings.json
2. Restart Claude Code
3. Test connection: Use `mcp__bugsink__test_connection` tool
---
## Testing MCP Server
### Manual Test
Run the MCP server directly to see error output:
```bash
# For localhost Bugsink
cd d:\gitea\bugsink-mcp
set BUGSINK_URL=http://localhost:8000
set BUGSINK_TOKEN=a609c2886daa4e1e05f1517074d7779a5fb49056
node dist/index.js
```
Expected output:
```
Bugsink MCP server started
Connected to: http://localhost:8000
```
### Test in Claude Code
After restart, verify both MCP servers work:
```typescript
// Production Bugsink
mcp__bugsink__test_connection();
// Expected: "Connection successful: Connected successfully. Found N project(s)."
// Dev Container Bugsink
mcp__localerrors__test_connection();
// Expected: "Connection successful: Connected successfully. Found N project(s)."
```
---
## Creating Bugsink API Tokens
Bugsink 2.0.11 does NOT have a "Settings > API Keys" menu in the UI. Tokens must be created via Django management command.
### For Dev Container (localhost:8000)
```bash
MSYS_NO_PATHCONV=1 podman exec -e DATABASE_URL=postgresql://bugsink:bugsink_dev_password@postgres:5432/bugsink -e SECRET_KEY=dev-bugsink-secret-key-minimum-50-characters-for-security flyer-crawler-dev sh -c 'cd /opt/bugsink/conf && DJANGO_SETTINGS_MODULE=bugsink_conf PYTHONPATH=/opt/bugsink/conf:/opt/bugsink/lib/python3.10/site-packages /opt/bugsink/bin/python -m django create_auth_token'
```
### For Production (bugsink.projectium.com via SSH)
```bash
ssh root@projectium.com "cd /opt/bugsink && bugsink-manage create_auth_token"
```
Both commands output a 40-character hex token.
---
## Package Information
- **Repository:** https://github.com/j-shelfwood/bugsink-mcp.git
- **Local Installation:** `d:\gitea\bugsink-mcp`
- **Build Command:** `npm install && npm run build`
- **Main File:** `dist/index.js`
---
## Related Documentation
- [CLAUDE.md MCP Servers Section](../CLAUDE.md#mcp-servers)
- [DEV-CONTAINER-BUGSINK.md](./DEV-CONTAINER-BUGSINK.md)
- [BUGSINK-SYNC.md](./BUGSINK-SYNC.md)
---
## Failed Solutions (Do Not Retry)
These approaches were tried and did NOT work:
1. ❌ Regenerating API token multiple times
2. ❌ Restarting Claude Code without config changes
3. ❌ Checking Bugsink instance accessibility (was already working)
4. ❌ Adding `BUGSINK_ORG_SLUG` environment variable (not used by package)
**Lesson:** Always verify actual package requirements in source code/README before troubleshooting.