Skip to main content
Glama
donliggett

mcp-context-window

mcp-context-window

Ein MCP-Server, der einem lokalen Modell einen externen Kontextpuffer bietet: dauerhaften Session-Speicher, in den es Notizen schreiben kann, und große Dokumente, durch die es blättern kann, ohne sie je vollständig laden zu müssen.

Gebaut auf dem MCP TypeScript SDK v2 gegen die Protokollrevision 2026-07-28. Läuft über stdio (LM Studio, Claude Desktop, alles, was einen lokalen Prozess startet) oder Streamable HTTP.


Read this first: Was ein MCP-Server kann und was nicht

Kein MCP-Server kann Ihr Kontextfenster sehen oder verändern. MCP ist strikt Request/Response — der Host ruft ein Tool auf, das Tool antwortet. Der Server sieht das Gespräch nie, kann keine Nachrichten abfangen, bevor sie das Modell erreichen, und kann nichts kürzen. LM Studio übernimmt das Kürzen selbst und intern und fragt dazu keinen Server.

Das ist also kein automatisches gleitendes Fenster, und alles, was sich als eines anpreist, führt Sie in die Irre. Was es ist: ein Speicher, gegen den das Modell gezielt arbeitet, indem es die Masse des Materials außerhalb des Fensters lässt und nur das zurückholt, was es gerade braucht. Das ist mit einem lokalen 8k-Token-Modell tatsächlich mächtig — aber es funktioniert, weil das Modell es aufruft, nicht weil es etwas abfängt.

Die praktische Konsequenz: Das Modell muss mitarbeiten. Die Tool-Beschreibungen hier sind bewusst vorschreibend formuliert, und context_guide gibt den vorgesehenen Workflow zurück. Wenn Ihr Modell sie ignoriert, erwähnen Sie das in Ihrem System-Prompt.

Eine verwandte Anmerkung: MCP Sampling — der Mechanismus, mit dem ein Server den LLM des Clients um Texterzeugung bitten kann — wurde in der Spezifikation von 2026-07-28 abgekündigt (deprecated), mit der offiziellen Empfehlung, „stattdessen direkt mit den APIs der LLM-Anbieter zu integrieren“. Dieser Server ruft also selbst einen OpenAI-kompatiblen Endpunkt auf. Genau das macht ihn auch umgebungsunabhängig: Derselbe Code funktioniert mit LM Studio, Ollama, llama.cpp oder vLLM.


Related MCP server: membot

Die beiden Hälften

Sessions — Arbeitsgedächtnis für eine lange Aufgabe

Tool

Zweck

context_open

Startet eine benannte Session oder setzt sie fort; zeigt, was schon gespeichert ist

context_append

Legt einen Fakt, eine Entscheidung oder einen Irrweg ab. Anheften, was nie verloren gehen darf

context_recall

Holt die Vorbestellen Einträge zurück, verpackt in ein Token-Budget

context_compact

Falten von alten Einträgen zu einer Zusammenfassung zusammen, um Budget frei zu machen

context_status

Wie voll die Session ist, und ob kompaktiert werden sollte

context_update

Einen Eintrag anpinnen, entpinnen oder löschen

context_list_sessions

Eine Session-ID aus früheren Arbeit wiederfinden

Dokumente — Material zu groß, um es auf einmal zu lesen

Tool

Zweck

doc_ingest

Text oder Datei laden; in Blöcken zerlegt und gespeichert, fast nichts wird zum Kontext

doc_outline

Strukturübersicht: Chunk-Indizes, Überschriften, Größen, optionale Zusammenfassungen

doc_search

Findet die relevanten Chunks per Schlüsselwort und gibt deren unverändert wieder

doc_window

Liest Chunk-Bereiche der Reihe nach; der Cursor rückt von selbst weiter

doc_summarize

Fasst einen Bereich oder das Ganze zusammen

doc_list / doc_forget

Verwalten, was gespeichert wird

Dazu kommt context_guide, das dem Modell den Workflow erklärt.


Schnellstart

npm install
npm run build
npm test
node dist/index.js --ingest-root ./sources

Oder erkunden Sie es interaktiv:

npx @modelcontextprotocol/inspector node dist/index.js

LM Studio

Bearbeiten Sie ~/.lmstudio/mcp.json (unter Windows C:\Users\<you>\.lmstudio\mcp.json) über Program → Install → Edit mcp.json und laden Sie LM Studio dann neu.

{
  "mcpServers": {
    "context": {
      "command": "node",
      "args": [
        "/absolute/path/to/mcp-context-sliding/dist/index.js",
        "--ingest-root", "/absolute/path/to/your/project",
        "--budget", "4000"
      ]
    }
  }
}

Diese beiden Pfade müssen absolut sein. Der Host tech sie den Server als Kindprozess mit Vagen nicht vorhersagbaren Arbeitsverzeichnis mitverwaltet, ¿peso? körnten, einen ein relativer Pfad if: keinem aufgelöst. Auf der Kommandozeile, wo Sie das Arbeitsverzeichnis steuern, sind relative Pfade wie --ingest-root ./sources völlig in Ordnung.

Unter Windows verwenden Sie Arbeitsverzeichnisse entweder mit Vorwärtsschslägen (C:/Users/sie/projects) oder verdoppeln Sie die Backslashes, da ein einzelnes \ innerhalb eines JSON-Strings ein Escape-Zeichen ist.

Setzen Sie --budget auf die ungefähre Hälfte der Kontextlänge ist des Modells. Es ist das Zielbudget, in das dieser Server Rückero schützt, kein Limit, das LM Studio dem Server auferlegt.

Durch --ingest-root kann doc_ingest Dateien lesen. Lassen Sie es weg, akzeptiert der Server nur Inline-Text — das ist die sichere Voreinstellung, denn ein Server, der auf Zuruf eines Modells beliebige Pfade öffnet, ist ein Risiko.

Docker

docker build -t mcp-context-window:latest .
{
  "mcpServers": {
    "context": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm", "--init",
        "-v", "mcp-context-data:/data",
        "-v", "/absolute/path/to/your/project:/ingest:ro",
        "-e", "CTX_INGEST_ROOTS=/ingest",
        "--add-host", "host.docker.internal:host-gateway",
        "mcp-context-window:latest", "--stdio"
      ]
    }
  }
}

Zwei Dinge, die hier beißen können: -i ist Pflicht, sonst findet der JSON-RPC-Handshake nie statt, und das benannte Volume ist Pflicht, sonst werden bei jedem Neustart still die alle gespeicherten Sessions verworfen. Aus einem Container heraus ist localhost der Container selbst, daher zeigt die LLM-Basis-URL standardmäßig auf host.docker.internal. Docker verlangt zudem, dass die Host-Seite eines -v-Bind-Mounts ein absoluter Pfad ist.


So läuft eine Session tatsächlich ab

context_open        session_id "refactor-auth"
context_append      "Goal: replace session cookies with JWT" (pinned)
context_append      "auth/middleware.ts:42 assumes a cookie is present"
context_append      "Decision: keep cookie support behind a flag for one release"
...
context_status      → 3200/4000 tokens — approaching budget
context_compact     → folds 14 old entries into one 380-token summary
context_recall      "cookie flag decision" → returns the pinned goal + the decision

Und ein Dokument:

doc_ingest      file_path "logs/build-failure.log"  → doc_kx91, 240 chunks
doc_search      "OutOfMemory"                       → 3 chunks, 1400 tokens
doc_window      from 118 to 121                     → the surrounding context

Das Log ist nie in den Kontext des Modells gelangt. Drei gezielte Lesezugriffe schon.


Konfiguration

Flag

Env

Default

Bedeutung

--data-dir <dir>

CTX_DATA_DIR

Plattform-Datenverzeichnis

Wo der Zustand liegt

--ingest-root <dir>

CTX_INGEST_ROOTS

(keine)

Dateien zu doc_ingest hier lesen. Wiederholbar.

--llm-base-url <url>

CTX_LLM_BASE_URL

http://localhost:1234/v1

OpenAI-kompatibler Endpunkt

--llm-model <id>

CTX_LLM_MODEL

(geladenes Modell)

Leer lassen, um das geladene Modell zu nutzen

--llm-timeout <ms>

CTX_LLM_TIMEOUT_MS

120000

Lokale Modelle können langsam sein

--no-llm

CTX_LLM_ENABLED=false

aktiv

Nur extraktive Zusammenfassungen

--budget <n>

CTX_BUDGET

4000

Standardbudget für Recall/Fenster

--chunk-tokens <n>

CTX_CHUNK_TOKENS

800

Zielgröße von Chunks

--chunk-overlap <n>

CTX_CHUNK_OVERLAP

80

Überschneidung zwischen Chunks

--Token-Ratio <n>

CTX_TOKEN_RATIO

0.27

Kaltstart-Schätzung Tokens pro Zeichen

--stdin / --http

CTX_TRANSPORT

stdio

Transport

--host / --port

CTX_HTTP_HOST / CTX_HTTP_PORT

127.0.0.1 / 3001

HTTP-Bindungset

--audit / --no-audit

CTX_AUDIT

an

JSON-Protokoll pro Aufruf auf stderr


Design-Notizen

Die Token-Zählung ist gegen Ihr reales Modell kalibriert. Es gibt keinen universellen Tokenizer — Llama, Qwen und GPT alle teilen unterschiedlich —, und einen mitzuliefern würde groß und falsch ist für das, was Sie geladen haben. Stattdessen schätzt der Server günstig und misst dann die Wahrheit: Er sendet zwei Stichproben unterschiedlicher Länge an Ihren Endpunkt mit max_tokens: 1 und nimmt die Steigung der gemeldeten Usage.mprompt_tokens zwischen den beiden. Die Steigung hebt den festen Overhead der Chat-Vorlage heraus und ergibt die optimalen Grenzkosten pro Zeichen. If you want to find out what you're getting, you'll need to take a closer look.

Die Schätzungen sind bewusst großzügig. Wenn ich unterschätze, das Fenster überläuft und genau der Kontext beschnitten wird, diesen Server schützen soll.

Die Zusammenfassungen arbeiten abgestuft statt zu scheitern. Ist Ihr Endpunkt nicht erreichbaroder kein Modell geladen, fällt sie auf die extraktive Zusammenfassung zurück — TF-ISF-Satzbewertung — die sofort, deterministisch und strukturell gar nicht halluzinieren kann, weil sie nur Sätze auswählen kann, die tatsächlich da waren. Den Zugriff auf den gespeicherten Kontext zu verlieren, ist schlimmer als eine gröbere Zusammenfassung davon. Nach einem Fehler hält sich der Client kurzzurück, so dass ein Dokument mit 200 Chunks keine 200 einzelnen TCP-Timeouts abwarten muss.

Der Speicher ist ein Append-Only-JSONL. Ein Absturz kann höchstens die letzte Zeile beschädigen, die beim Laden ignoriert wird und nicht es macht. tail auf der Datei sieht man zu, wie sich der Speicher Füllt. Kompaktierung markiert Originale als veraltet, statt sie zu löschen; alte Einträge sind so auch nach einer Kompaktierung wiederherstellbar, die etwas Wichtiges verloren hat.

Bei der Aufteilung in Chunks wird die Struktur des Dokuments berücksichtigt, nicht feste Abstände — Überschriften, Absätze und eingerahmte Codeblöcke bleiben erhalten, und jeder Chunk trägt die Kopfzeilenfolge, unter der er liegt. Nur ein Block, der größer als ein Erstellungsblock ist, wird hart geteilt.

Retrieval ist BM25 plus Rezeption, ohne Einbettungs modell. Das braucht keinen geladenen Garbage, kostet keinen VRAM neben dem Hauptdämon und ist deterministisch — das ist wichtig, wenn der gesamte Punkt darin besteht, dass man vorhersagen kann, was das Modell sieht. Bezeichner werden ganz und für den Fall, dass sie getrennt werden, indexiert, so dass getUserName als „user name“ auffindbar ist.

Grenzen

  • Das Modell muss diese Tools tatsächlich aufrufen. Nichts ist automatisch.

  • Die Stichwortsuche übersieht Paraphrasierungen, die ein Embedding-Modell erfassen würde.

  • Tokenzahlen sind Schätzungen, bis die erste Kalibrierung erfolgreich ist.

  • Kein Transport authentifiziert; HTTP bindet deshalb an Loopback.

  • doc_ingest liest UTF-8-Text. Er ist kein PDF- oder DOCX-Extraktor.

Lizenz

MIT

Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides persistent session memory for AI assistants, enabling them to store, search, and retrieve conversation summaries across sessions via the Model Context Protocol.
    10
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides a persistent, versioned, and searchable context store for AI agents with local embedding and hybrid search.
    114
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Local-first, cross-session context store that reduces token usage by saving facts, decisions, and preferences, and recalling them in later sessions with token-efficient ranking and compression.
    2
    MIT

View all related MCP servers

Related MCP Connectors

  • Universal memory for AI agents and tools. Save, organize and search context anywhere.

  • Your portable context layer — load it into any AI.

  • Persistent memory for AI agents. Search, store, and recall across sessions.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/donliggett/mcp-context-sliding'

If you have feedback or need assistance with the MCP directory API, please join our Discord server