docs: sync KB — kb-rag-mcp-oauth-fix.md
All checks were successful
Reindex Knowledge Base / reindex (push) Successful in 3s
All checks were successful
Reindex Knowledge Base / reindex (push) Successful in 3s
This commit is contained in:
parent
646991e1a9
commit
4ecf93a3e2
66
docker/kb-rag-mcp-oauth-fix.md
Normal file
66
docker/kb-rag-mcp-oauth-fix.md
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
---
|
||||||
|
title: "Fix: kb-search MCP server 'needs authentication' after server restart"
|
||||||
|
description: "Claude Code shows OAuth errors connecting to kb-search MCP after ubuntu-manticore restart. Fix involves reconfiguring with bearer token headers and clearing stale OAuth credentials."
|
||||||
|
type: troubleshooting
|
||||||
|
domain: docker
|
||||||
|
tags: [troubleshooting, kb-rag, claude-code, docker, manticore]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Fix: kb-search MCP server 'needs authentication' after server restart
|
||||||
|
|
||||||
|
**Date:** 2026-03-25
|
||||||
|
**Severity:** Medium — kb-search MCP unavailable across all Claude Code sessions
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
After restarting ubuntu-manticore (crash recovery), the kb-search MCP server showed "needs authentication" in Claude Code's `/mcp` panel. Error message:
|
||||||
|
|
||||||
|
```
|
||||||
|
Error: HTTP 404: Invalid OAuth error response: SyntaxError: JSON Parse error: Unexpected EOF. Raw body:
|
||||||
|
```
|
||||||
|
|
||||||
|
The server was healthy (`/health` returned OK) but Claude Code was attempting OAuth discovery against a server that only supports static bearer token auth.
|
||||||
|
|
||||||
|
## Root Cause
|
||||||
|
|
||||||
|
Two issues compounded:
|
||||||
|
|
||||||
|
1. **Stale MCP session:** The server restart invalidated all existing MCP sessions. Claude Code clients got "Session not found" errors on reconnect.
|
||||||
|
|
||||||
|
2. **Stale OAuth credential:** Claude Code had a cached OAuth entry in `~/.claude/.credentials.json` under the `mcpOAuth` key (`kb-search|120dc71b28e46913`). This entry caused Claude Code to attempt OAuth discovery (hitting `/.well-known/oauth-authorization-server`) instead of using the static `Authorization: Bearer` header from the MCP config. The server returned 404 on the OAuth endpoint, which Claude Code couldn't parse.
|
||||||
|
|
||||||
|
The stale OAuth entry persisted even after reconfiguring the MCP server with correct `headers` config — **`mcpOAuth` credentials override static headers**.
|
||||||
|
|
||||||
|
## Fix
|
||||||
|
|
||||||
|
1. **Reconfigure MCP with bearer token header** (user scope so it applies globally):
|
||||||
|
```bash
|
||||||
|
claude mcp remove kb-search
|
||||||
|
claude mcp add-json kb-search \
|
||||||
|
'{"type":"http","url":"http://10.10.0.226:8001/mcp","headers":{"Authorization":"Bearer <token>"}}' \
|
||||||
|
--scope user
|
||||||
|
```
|
||||||
|
Token is in `~/docker/md-kb-rag/.env` on manticore (`MCP_BEARER_TOKEN` value).
|
||||||
|
|
||||||
|
2. **Remove stale OAuth credential** from `~/.claude/.credentials.json`:
|
||||||
|
```python
|
||||||
|
import json
|
||||||
|
f = '/home/cal/.claude/.credentials.json'
|
||||||
|
d = json.load(open(f))
|
||||||
|
oauth = d.get('mcpOAuth', {})
|
||||||
|
keys = [k for k in oauth if 'kb-search' in k]
|
||||||
|
for k in keys:
|
||||||
|
del oauth[k]
|
||||||
|
d['mcpOAuth'] = oauth
|
||||||
|
with open(f, 'w') as fh:
|
||||||
|
json.dump(d, fh, indent=2)
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Restart Claude Code** to establish a fresh MCP connection.
|
||||||
|
|
||||||
|
## Lessons
|
||||||
|
|
||||||
|
- Stale `mcpOAuth` entries in `.credentials.json` take priority over static `headers` config — always check and clear these when MCP auth issues occur
|
||||||
|
- After any server hosting MCP endpoints restarts, all Claude Code sessions need restart to reconnect
|
||||||
|
- The `--scope user` flag on `claude mcp add-json` is essential — without it, config goes to project-local and won't appear in other projects
|
||||||
|
- kb-rag uses bearer token auth, NOT OAuth — if Claude Code shows OAuth errors for this server, the config is wrong
|
||||||
Loading…
Reference in New Issue
Block a user