MCP Server ignoriert Remote-Backend Konfiguration #122

Closed
opened 2026-01-24 09:27:57 +00:00 by jack · 0 comments
Owner

Problem

Der MCP Server (packages/hooks/src/mcp-entry.ts) unterstützt keine Remote-Backend Konfiguration. Er verwendet nur Environment Variables und ignoriert die REMOTE_MODE, REMOTE_URL und REMOTE_TOKEN Settings.

Aktueller Code (fehlerhaft)

// mcp-entry.ts:28-30
const BACKEND_HOST = process.env.CLAUDE_MEM_BACKEND_HOST || 'localhost';
const BACKEND_PORT = process.env.CLAUDE_MEM_BACKEND_PORT || '37777';
const BACKEND_BASE_URL = `http://${BACKEND_HOST}:${BACKEND_PORT}`;

Vergleich mit korrekter Implementierung

Die anderen Hooks-Komponenten machen es richtig:

BackendClient (client.ts:36-44):

if (config.baseUrl) {
  this.baseUrl = config.baseUrl;
} else if (settings.REMOTE_MODE && settings.REMOTE_URL) {
  this.baseUrl = settings.REMOTE_URL;
} else {
  const host = settings.BACKEND_HOST || '127.0.0.1';
  const port = settings.BACKEND_PORT || 37777;
  this.baseUrl = `http://${this.formatHost(host)}:${port}`;
}

this.authToken = config.authToken || settings.REMOTE_TOKEN || '';

session-start.ts (SSE Writer spawn, Zeile 109-119):

if (settings.REMOTE_MODE && settings.REMOTE_URL) {
  backendUrl = settings.REMOTE_URL;
} else {
  const host = settings.BACKEND_HOST || '127.0.0.1';
  const port = settings.BACKEND_PORT || 37777;
  backendUrl = `http://${host}:${port}`;
}

const authToken = settings.WORKER_AUTH_TOKEN || settings.REMOTE_TOKEN || '';

Auswirkung

Wenn ein Benutzer ein Remote-Backend konfiguriert:

{
  "REMOTE_MODE": true,
  "REMOTE_URL": "https://claude-mem.example.com",
  "REMOTE_TOKEN": "secret-token"
}

Dann funktionieren:

  • Hooks (session-start, post-tool-use, etc.)
  • SSE Writer für CLAUDE.md Updates
  • MCP Tools (search, timeline, save_memory) - FEHLER!

Die MCP-Tools versuchen weiterhin http://localhost:37777 zu erreichen.

Lösung

// mcp-entry.ts - Korrigiert
import { loadSettings } from '@claude-mem/shared';

const settings = loadSettings();

let BACKEND_BASE_URL: string;
let AUTH_TOKEN: string;

if (settings.REMOTE_MODE && settings.REMOTE_URL) {
  BACKEND_BASE_URL = settings.REMOTE_URL;
  AUTH_TOKEN = settings.REMOTE_TOKEN || '';
} else {
  const host = settings.BACKEND_HOST || '127.0.0.1';
  const port = settings.BACKEND_PORT || 37777;
  BACKEND_BASE_URL = `http://${host}:${port}`;
  AUTH_TOKEN = '';
}

// In callBackendAPI() Auth-Header hinzufügen:
const headers: Record<string, string> = {};
if (AUTH_TOKEN) {
  headers['Authorization'] = `Bearer ${AUTH_TOKEN}`;
}

Betroffene Dateien

Datei Änderung
packages/hooks/src/mcp-entry.ts Remote-Mode Support + Auth

Akzeptanzkriterien

  • MCP Server liest REMOTE_MODE, REMOTE_URL, REMOTE_TOKEN aus Settings
  • Bei REMOTE_MODE: true wird REMOTE_URL verwendet statt localhost
  • Auth-Header wird bei Remote-Requests mitgesendet
  • Lokaler Modus funktioniert weiterhin ohne Änderung
## Problem Der MCP Server (`packages/hooks/src/mcp-entry.ts`) unterstützt keine Remote-Backend Konfiguration. Er verwendet nur Environment Variables und ignoriert die `REMOTE_MODE`, `REMOTE_URL` und `REMOTE_TOKEN` Settings. ### Aktueller Code (fehlerhaft) ```typescript // mcp-entry.ts:28-30 const BACKEND_HOST = process.env.CLAUDE_MEM_BACKEND_HOST || 'localhost'; const BACKEND_PORT = process.env.CLAUDE_MEM_BACKEND_PORT || '37777'; const BACKEND_BASE_URL = `http://${BACKEND_HOST}:${BACKEND_PORT}`; ``` ### Vergleich mit korrekter Implementierung Die anderen Hooks-Komponenten machen es richtig: **`BackendClient` (client.ts:36-44):** ```typescript if (config.baseUrl) { this.baseUrl = config.baseUrl; } else if (settings.REMOTE_MODE && settings.REMOTE_URL) { this.baseUrl = settings.REMOTE_URL; } else { const host = settings.BACKEND_HOST || '127.0.0.1'; const port = settings.BACKEND_PORT || 37777; this.baseUrl = `http://${this.formatHost(host)}:${port}`; } this.authToken = config.authToken || settings.REMOTE_TOKEN || ''; ``` **`session-start.ts` (SSE Writer spawn, Zeile 109-119):** ```typescript if (settings.REMOTE_MODE && settings.REMOTE_URL) { backendUrl = settings.REMOTE_URL; } else { const host = settings.BACKEND_HOST || '127.0.0.1'; const port = settings.BACKEND_PORT || 37777; backendUrl = `http://${host}:${port}`; } const authToken = settings.WORKER_AUTH_TOKEN || settings.REMOTE_TOKEN || ''; ``` ## Auswirkung Wenn ein Benutzer ein Remote-Backend konfiguriert: ```json { "REMOTE_MODE": true, "REMOTE_URL": "https://claude-mem.example.com", "REMOTE_TOKEN": "secret-token" } ``` Dann funktionieren: - ✅ Hooks (session-start, post-tool-use, etc.) - ✅ SSE Writer für CLAUDE.md Updates - ❌ **MCP Tools (search, timeline, save_memory) - FEHLER!** Die MCP-Tools versuchen weiterhin `http://localhost:37777` zu erreichen. ## Lösung ```typescript // mcp-entry.ts - Korrigiert import { loadSettings } from '@claude-mem/shared'; const settings = loadSettings(); let BACKEND_BASE_URL: string; let AUTH_TOKEN: string; if (settings.REMOTE_MODE && settings.REMOTE_URL) { BACKEND_BASE_URL = settings.REMOTE_URL; AUTH_TOKEN = settings.REMOTE_TOKEN || ''; } else { const host = settings.BACKEND_HOST || '127.0.0.1'; const port = settings.BACKEND_PORT || 37777; BACKEND_BASE_URL = `http://${host}:${port}`; AUTH_TOKEN = ''; } // In callBackendAPI() Auth-Header hinzufügen: const headers: Record<string, string> = {}; if (AUTH_TOKEN) { headers['Authorization'] = `Bearer ${AUTH_TOKEN}`; } ``` ## Betroffene Dateien | Datei | Änderung | |-------|----------| | `packages/hooks/src/mcp-entry.ts` | Remote-Mode Support + Auth | ## Akzeptanzkriterien - [ ] MCP Server liest `REMOTE_MODE`, `REMOTE_URL`, `REMOTE_TOKEN` aus Settings - [ ] Bei `REMOTE_MODE: true` wird `REMOTE_URL` verwendet statt localhost - [ ] Auth-Header wird bei Remote-Requests mitgesendet - [ ] Lokaler Modus funktioniert weiterhin ohne Änderung
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
customable/claude-mem#122
No description provided.