mcp-context-window
mcp-context-window
Un servidor MCP que le da a un modelo local un búfer de contexto externo: memoria de sesión duradera en la que puede escribir notas y documentos grandes que puede hojear sin cargarlos enteros.
Construido con el MCP TypeScript SDK v2 contra la revisión del protocolo 2026-07-28. Se ejecuta sobre stdio (LM Studio, Claude Desktop, cualquier cosa que lance un proceso local) o Streamable HTTP.
Léase primero: qué puede y qué no puede hacer un servidor MCP
Ningún servidor MCP puede ver ni modificar su ventana de contexto. MCP es estrictamente petición/respuesta: el host llama a una herramienta, la herramienta responde. El servidor nunca ve la conversación, no puede interceptar mensajes antes de que lleguen al modelo y no puede recortar nada. LM Studio hace su propio truncamiento internamente y no consulta a ningún servidor al respecto.
Así que esto no es una ventana deslizante automática, y cualquier cosa que se anuncie como tal le está engañando. Lo que sí es: un almacén contra el que el modelo pagina deliberadamente, manteniendo la mayor parte del material fuera de la ventana y recuperando solo lo que necesita. Eso es genuinamente potente con un modelo local de 8k tokens, pero funciona porque el modelo lo llama, no porque intercepte nada.
La consecuencia práctica: el modelo tiene que cooperar. Las descripciones de las herramientas aquí están escritas para ser prescriptivas, y context_guide devuelve el flujo de trabajo previsto. Si su modelo las ignora, dígalo en su mensaje de sistema.
Una nota relacionada: el Muestreo de MCP —el mecanismo que permite a un servidor pedir al LLM del cliente que genere texto— fue desaprobado en la especificación de 2026-07-28, con el consejo oficial de "integrarse directamente con las API del proveedor de LLM". Así que este servidor llama él mismo a un endpoint compatible con OpenAI. Eso es también lo que lo mantiene independiente del arnés: el mismo código funciona con LM Studio, Ollama, llama.cpp o vLLM.
Related MCP server: membot
Las dos mitades
Sesiones: memoria de trabajo a lo largo de una tarea larga
Herramienta | Propósito |
| Iniciar o reanudar una sesión con nombre; muestra lo que ya está almacenado |
| Registrar un hecho, una decisión o un callejón sin salida. Fijar lo que no debe perderse jamás |
| Recuperar las entradas más relevantes, empaquetadas en un presupuesto de tokens |
| Plegar entradas antiguas en un resumen para liberar presupuesto |
| Cuán llena está la sesión y si conviene compactar |
| Fijar, desfijar o eliminar una entrada |
| Encontrar un id de sesión de un trabajo anterior |
Documentos: material demasiado grande para leerlo de una vez
Herramienta | Propósito |
| Cargar texto o un archivo; se trocea y almacena, casi nada entra en el contexto |
| Mapa de estructura: índices de fragmento, encabezados, tamaños, resúmenes opcionales |
| Encontrar los fragmentos relevantes por palabra clave y devolverlos textualmente |
| Leer rangos de fragmentos en orden; el cursor avanza solo |
| Resumir un rango, o el documento completo |
| Gestionar lo que está almacenado |
Además de context_guide, que explica el flujo de trabajo al modelo.
Inicio rápido
npm install
npm run build
npm testnode dist/index.js --ingest-root ./sourcesO explórelo de forma interactiva:
npx @modelcontextprotocol/inspector node dist/index.jsLM Studio
Edite ~/.lmstudio/mcp.json (en Windows, C:\Users\<usuario>\.lmstudio\mcp.json) a través de Programa → Instalar → Editar mcp.json y, a continuación, recargue LM Studio.
{
"mcpServers": {
"context": {
"command": "node",
"args": [
"/absolute/path/to/mcp-context-sliding/dist/index.js",
"--ingest-root", "/absolute/path/to/your/project",
"--budget", "4000"
]
}
}
}Estas dos rutas deben ser absolutas. El host lanza el servidor como un proceso hijo con un directorio de trabajo impredecible, por lo que una ruta relativa no se resolverá. En la línea de comandos, donde usted controla el directorio de trabajo, las rutas relativas como
--ingest-root ./sourcesson correctas.En Windows, escriba barras diagonales (
C:/Users/usuario/projects) o duplique las barras invertidas, ya que una sola\es un carácter de escape dentro de una cadena JSON.
Establezca --budget en aproximadamente la mitad de la longitud de contexto de su modelo. Es el objetivo en el que este servidor empaqueta las recuperaciones, no un límite que LM Studio imponga.
--ingest-root es lo que permite a doc_ingest leer archivos. Si lo omite, el servidor solo acepta texto en línea, que es el valor predeterminado seguro, ya que un servidor que abra rutas arbitrarias por orden de un modelo es un lastre.
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"
]
}
}
}Dos cosas que pican aquí: -i es obligatorio o el apretón de manos JSON-RPC nunca ocurre, y el volumen con nombre es obligatorio o cada reinicio descarta silenciosamente todas las sesiones almacenadas. Desde dentro de un contenedor, localhost es el contenedor, por lo que la URL base del LLM por defecto es host.docker.internal. Docker también requiere que el lado del host de un enlace de montaje -v sea una ruta absoluta.
Cómo transcurre una sesión realmente
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 decisionY un documento:
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 contextEl registro nunca entró en el contexto del modelo. Tres lecturas específicas sí lo hicieron.
Configuración
Indicador | Entorno | Predeterminado | Significado |
|
| directorio de datos de la plataforma | Dónde vive el estado |
|
| (ninguno) | Permite que |
|
|
| Endpoint compatible con OpenAI |
|
| (modelo cargado) | Déjelo vacío para usar lo que esté cargado |
|
|
| Los modelos locales pueden ser lentos |
|
| habilitado | Solo resúmenes extractivos |
|
|
| Presupuesto de recuperación/ventana predeterminado |
|
|
| Tamaño de fragmento objetivo |
|
|
| Solapamiento entre fragmentos |
|
|
| Estimación de tokens por carácter en frío |
|
|
| Transporte |
|
|
| Enlace HTTP |
|
| activado | Registro JSON por llamada en stderr |
Notas de diseño
El recuento de tokens está calibrado con su modelo real. No existe un tokenizador universal —Llama, Qwen y GPT dividen de forma diferente— e incluir uno sería grande e incorrecto para lo que sea que haya cargado. En su lugar, el servidor estima de forma económica y luego mide la verdad: envía dos muestras de diferentes longitudes a su endpoint con max_tokens: 1 y toma la pendiente de los usage.prompt_tokens notificados entre ellas. La pendiente anula la sobrecarga fija de la plantilla de chat y produce el coste marginal real por carácter. El resultado se almacena en caché, por lo que solo la primera ejecución no está calibrada, y se ejecuta en segundo plano para que el arranque nunca se bloquee por un modelo que quizás aún no esté cargado.
Las estimaciones tienden deliberadamente a ser altas. Subestimar desborda la ventana y trunca precisamente el contexto que este servidor existe para proteger.
La generación de resúmenes se degrada en lugar de fallar. Si su endpoint es inalcanzable o no hay ningún modelo cargado, se recurre a la generación de resúmenes extractiva —puntuación de oraciones TF-ISF— que es instantánea, determinista y estructuralmente incapaz de alucinar, ya que solo puede seleccionar oraciones que realmente estaban allí. Perder el acceso al contexto almacenado es un resultado peor que un resumen más tosco del mismo. Tras un fallo, el cliente se retira brevemente, por lo que un documento de 200 fragmentos no espera 200 tiempos de espera TCP separados.
El almacenamiento es JSONL de solo añadidura. Un fallo puede corromper como mucho la última línea, que se omite al cargar en lugar de ser fatal. Haga tail al archivo para ver cómo se acumula la memoria. La compactación marca los originales como reemplazados en lugar de eliminarlos, por lo que una compactación que haya descartado algo importante sigue siendo recuperable desde el registro.
La división en fragmentos sigue la estructura del documento, no compensaciones fijas: los encabezados, los párrafos y los bloques de código delimitados permanecen intactos, y cada fragmento lleva la ruta de encabezados bajo la que se encuentra. Solo un bloque genuinamente más grande que un fragmento completo se divide a la fuerza.
La recuperación es BM25 más actualidad, sin modelo de incrustación. Eso no requiere nada cargado, no cuesta VRAM junto a su modelo principal y es determinista, lo que importa cuando el objetivo es la previsibilidad sobre lo que ve el modelo. Los identificadores se indexan enteros y divididos, por lo que getUserName se puede encontrar como "user name".
Límites
El modelo debe llamar realmente a estas herramientas. Nada es automático.
La búsqueda por palabras clave no detecta paráfrasis que un modelo de incrustación sí detectaría.
Los recuentos de tokens son estimaciones hasta que la primera calibración tiene éxito.
Ningún transporte autentica; HTTP se vincula a loopback por esa razón.
doc_ingestlee texto UTF-8. No es un extractor de PDF o DOCX.
Licencia
MIT
Maintenance
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides persistent session memory for AI assistants, enabling them to store, search, and retrieve conversation summaries across sessions via the Model Context Protocol.10MIT
- AlicenseNot gradedqualityAmaintenanceProvides a persistent, versioned, and searchable context store for AI agents with local embedding and hybrid search.1143MIT
- AlicenseNot gradedqualityCmaintenanceLocal-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.2MIT
- AlicenseNot gradedqualityAmaintenanceProvides a local context-memory layer for AI assistants, enabling retrieval-augmented queries, explanations, feedback, and status checks via MCP tools.1Apache 2.0
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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