File Context MCP

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • Uses Express.js to implement a REST API server with endpoints for file operations and LLM queries.

  • Implemented as a Node.js application for server-side functionality.

  • Integrates with Ollama as a local LLM provider for context-aware querying. Allows users to send prompts to Ollama models with context from local files.

Procesador de contexto de modelo (MCP) de contexto de archivo

Descripción general

File Context MCP es una aplicación basada en TypeScript que proporciona una API para consultar Modelos de Lenguaje Grandes (LLM) con contexto de archivos locales. Es compatible con múltiples proveedores de LLM (Ollama y Together.ai) y puede procesar diversos tipos de archivos para generar respuestas contextuales.

Características principales

1. Navegación por el sistema de archivos

  • Recorrido dinámico de archivos y directorios
  • Soporte para múltiples tipos de archivos ( .txt , .md , .ts , .json , etc.)
  • Manejo seguro de caminos con sanitización
import path from 'path'; export const fileUtils = { isTextFile(filePath: string): boolean { const textExtensions = [ '.txt', '.md', '.js', '.ts', '.json', '.yaml', '.yml', '.html', '.css', '.csv', '.xml', '.log', '.env', '.jsx', '.tsx', '.py', '.java', '.cpp', '.c', '.h' ]; return textExtensions.includes(path.extname(filePath).toLowerCase()); },

2. Procesamiento del contexto

  • Formato de contexto inteligente para consultas LLM
  • Truncamiento de contexto para manejar archivos grandes
  • Agregación de contenido de archivos para consultas de directorio
export const promptUtils = { formatContextPrompt(context: string, query: string): string { return ` You are an AI assistant analyzing the following content: ---BEGIN CONTEXT--- ${context} ---END CONTEXT--- Please respond to the following query: ${query} Base your response only on the information provided in the context above. `; }, truncateContext(context: string, maxLength: number = 4000): string { if (context.length <= maxLength) return context; // Try to truncate at a natural break point const truncated = context.slice(0, maxLength); const lastNewline = truncated.lastIndexOf('\n'); if (lastNewline > maxLength * 0.8) { return truncated.slice(0, lastNewline) + '\n... (truncated)'; } return truncated + '... (truncated)'; } };

3. Soporte multimodelo

  • Integración de Ollama (local)
  • Integración de Together.ai (nube)
  • Diseño de interfaz de modelo extensible
export interface LLMResponse { text: string; model: string; error?: string; } export class ModelInterface { async queryOllama(prompt: string, context: string): Promise<LLMResponse> { try { const response = await axios.post(`${config.ollamaBaseUrl}/api/generate`, { model: config.modelName, prompt: this.formatPrompt(prompt, context), stream: false }); return { if (!response.data || !response.data.response) { throw new Error('Invalid response from Ollama'); } } catch (error) { return { text: response.data.response, model: 'ollama' }; } catch (error) { console.error('Ollama error:', error); return { text: '', model: 'ollama', error: error instanceof Error ? error.message : 'Unknown error' }; } } model: config.modelName, async queryTogether(prompt: string, context: string): Promise<LLMResponse> { try { const response = await axios.post( 'https://api.together.xyz/inference', { model: config.modelName, prompt: this.formatPrompt(prompt, context), max_tokens: 512, }, { headers: { Authorization: `Bearer ${config.togetherApiKey}` } } ); return { return { text: response.data.output.text, model: 'together' }; } catch (error) { return { text: '', model: 'together', error: error instanceof Error ? error.message : 'Unknown error' }; } } private formatPrompt(prompt: string, context: string): string { return `Context: ${context}\n\nQuestion: ${prompt}`; } }

Arquitectura

Componentes principales

  1. Servidor (server.ts)
    • Implementación de la API REST de Express.js
    • Manejo de carga/eliminación de archivos con multer
    • Validación y enrutamiento de solicitudes
    • Integración de OpenAPI/Swagger
  2. Herramientas del sistema de archivos (core/fileSystem.ts)
    • Operaciones con archivos y directorios
    • Lectura y análisis de contenido
    • Recorrido de directorios
    • Eliminación segura de archivos
    • Manejo de errores en operaciones con archivos
  3. Interfaz del modelo (core/modelInterface.ts)
    • Compatibilidad con varios proveedores de LLM (Ollama, Together.ai)
    • Formato de respuesta y manejo de errores
    • Parámetros del modelo configurables
    • Interfaz de consulta unificada
  4. Módulos de utilidad
    • fileUtils : detección de tipo de archivo, saneamiento de ruta, formato de tamaño
    • promptUtils : Formato de contexto, truncamiento inteligente
    • validators : validación de rutas, consultas y modelos
    • logger : Registro estructurado con niveles
  5. Configuración (config/config.ts)
    • Gestión de variables ambientales
    • Claves API y puntos finales
    • Configuración del modelo
    • Configuración del servidor
  6. Especificación de API (recursos/file-context-api.yml)
    • Documentación de OpenAPI 3.0
    • Esquemas de solicitud/respuesta
    • Documentación de puntos finales
    • Definiciones de respuesta de error

Puntos finales de API

1. Lista de archivos

GET /api/files Query params: - path: string (optional, defaults to './') Response: - Array of FileInfo objects with file/directory details

2. Subir archivo

POST /api/files/upload Content-Type: multipart/form-data Body: - file: File (must be a text file, max 5MB) Response: { "message": "File uploaded successfully", "file": { "name": string, "size": string, "path": string } }

3. Eliminar archivo

DELETE /api/files/{filename} Params: - filename: string (name of file to delete) Response: { "message": "File deleted successfully" }

4. Consulta con contexto

POST /api/query Body: { "path": string, "query": string, "model": "ollama" | "together" } Response: { "text": string, "model": string, "error?: string }

Configuración y configuración

  1. Variables de entorno
TOGETHER_API_KEY=your_api_key_here OLLAMA_BASE_URL=http://localhost:11434 MODEL_NAME=llama2 PORT=3001
  1. Instalación
npm install

Instalación mediante herrería

Para instalar File Context MCP para Claude Desktop automáticamente a través de Smithery :

npx @smithery/cli@latest install @compiledwithproblems/file-context-mcp --client claude
  1. Ejecutar la aplicación
# Development npm run dev # Production npm run build npm start

Cómo funciona

  1. Flujo de procesamiento de archivos
    • Solicitud recibida → Validación de ruta → Lectura de archivo → Extracción de contenido
    • El manejo de directorios incluye la lectura recursiva de archivos
    • Filtrado de contenido según el tipo de archivo
    • Las cargas de archivos se validan por tipo y tamaño.
    • Eliminación segura de archivos con validación de ruta
  2. Procesamiento de contexto
    • El contenido del archivo se agrega
    • El contexto está formateado con límites claros
    • Los contextos grandes se truncan de forma inteligente
    • El formato de las indicaciones añade estructura para la comprensión del LLM
  3. Integración de modelos
    • Interfaz unificada para diferentes proveedores de LLM
    • Manejo de errores y normalización de respuestas
    • Parámetros del modelo configurables

Características de seguridad

  1. Saneamiento de caminos
    • Prevención de ataques de cruce de directorios
    • Validación y normalización de rutas
    • Comprobación segura del tipo de archivo
  2. Seguridad de carga de archivos
    • Validación del tipo de archivo
    • Límites de tamaño de archivo (5 MB máximo)
    • Almacenamiento seguro de archivos
    • Eliminación segura de archivos
  3. Validación de entrada
    • Validación del contenido de la consulta
    • Verificación del tipo de modelo
    • Verificación de la estructura de la ruta
    • Validación del contenido del archivo

Tipos de archivos admitidos

La aplicación admite los siguientes tipos de archivos basados en texto:

  • Documentación: .txt , .md
  • Archivos de código: .js , .ts , .jsx , .tsx , .py , .java , .cpp , .c , .h
  • Configuración: .json , .yaml , .yml , .env
  • Archivos web: .html , .css
  • Archivos de datos: .csv , .xml , .log

La validación del tipo de archivo se aplica durante:

  • Subidas de archivos
  • Procesamiento del contexto
  • Operaciones de lectura de archivos

Tamaño máximo de archivo: 5 MB por archivo

Manejo de errores

La aplicación implementa un manejo integral de errores:

  • Errores del sistema de archivos
  • Errores de respuesta de la API
  • Errores de entrada no válida
  • Errores específicos del modelo
  • Errores de carga/eliminación de archivos

Desarrollo

Estructura del proyecto

file-context-mcp/ ├── src/ │ ├── server.ts # Main application server │ ├── core/ # Core functionality │ │ ├── fileSystem.ts # File operations handling │ │ └── modelInterface.ts # LLM provider integrations │ ├── utils/ # Utility functions │ │ ├── fileUtils.ts # File type & path utilities │ │ ├── promptUtils.ts # Prompt formatting │ │ ├── validators.ts # Input validation │ │ └── logger.ts # Application logging │ ├── config/ # Configuration │ │ └── config.ts # Environment & app config │ └── resources/ # API specifications │ └── file-context-api.yml # OpenAPI spec ├── storage/ # File storage directory │ ├── code-samples/ # Example code files │ └── notes/ # Documentation & notes ├── postman/ # API testing │ └── File-Context-MCP.postman_collection.json # Postman collection ├── dist/ # Compiled output └── node_modules/ # Dependencies

Añadiendo nuevas funciones

  1. Nuevos tipos de archivos
    • Agregar extensiones a fileUtils.isTextFile()
    • Implementar controladores específicos si es necesario
  2. Nuevos proveedores de modelos
    • Extender la clase ModelInterface
    • Agregar proveedor a validators.isValidModel()
    • Implementar el manejo de errores específico del proveedor

Pruebas

Colección del Cartero

El proyecto incluye una colección de Postman ( postman/File-Context-MCP.postman_collection.json ) para probar todos los endpoints de la API. Para usarla:

  1. Importar la colección
    • Cartero abierto
    • Haga clic en el botón "Importar"
    • Seleccione o arrastre el File-Context-MCP.postman_collection.json
  2. Solicitudes disponibles
    File-Context-MCP ├── List files │ └── GET http://localhost:3001/api/files?path=./storage ├── Query │ └── POST http://localhost:3001/api/query (single file analysis) ├── Analyze multiple files │ └── POST http://localhost:3001/api/query (directory analysis) └── File Upload └── POST http://localhost:3001/api/files/upload
  3. Prueba de operaciones de archivos
    • Lista de archivos : ver el contenido del directorio de almacenamiento
    • Subir archivo : utilice form-data con la clave "archivo" y seleccione un archivo de texto
    • Consulta de archivos : Analice el contenido de un solo archivo con LLM
    • Analizar directorio : procesar múltiples archivos con LLM
  4. Consultas de ejemplo
    // Single file analysis { "path": "./storage/code-samples/example.ts", "query": "Explain what this TypeScript code does", "model": "ollama" } // Directory analysis { "path": "./storage", "query": "What types of files are in this directory and summarize their contents?", "model": "ollama" }
  5. Guía de carga de archivos
    • Utilice la solicitud "Carga de archivos"
    • Seleccione "form-data" en la pestaña Cuerpo
    • Agregar clave "archivo" con tipo "Archivo"
    • Elija un archivo de texto compatible (consulte Tipos de archivos compatibles)
    • Tamaño máximo de archivo: 5 MB

Pruebas manuales

  • Utilice los archivos de prueba proporcionados en /storage
  • Pruebe diferentes tipos de archivos y consultas
  • Verificar las respuestas del modelo y el manejo de errores
  • Límites de tamaño de archivo de prueba y restricciones de tipo

Configuración del entorno

Asegúrese de:

  • Tener el servidor en ejecución ( npm run dev )
  • Configurar variables de entorno
  • Tener Ollama ejecutándose localmente (para el modelo Ollama)
  • Establecer la clave API de Together.ai (para el modelo Together)

Consideraciones futuras

  1. Cómo gestionar archivos grandes de forma eficiente
  2. Ampliación de los tipos de archivos admitidos
  3. Optimización del procesamiento del contexto
  4. Agregar soporte de transmisión para las respuestas
  5. Implementación de limitación de velocidad y almacenamiento en caché

Este proyecto demuestra prácticas modernas de TypeScript/Node.js con un enfoque en la modularidad, la seguridad de tipos y el manejo de errores, al tiempo que proporciona una interfaz flexible para las interacciones LLM con el contexto basado en archivos.

-
security - not tested
F
license - not found
-
quality - not tested

Este servidor proporciona una API para consultar modelos de lenguaje grandes utilizando el contexto de archivos locales y admite varios modelos y tipos de archivos para obtener respuestas conscientes del contexto.

  1. Overview
    1. Core Features
      1. 1. File System Navigation
      2. 2. Context Processing
      3. 3. Multi-Model Support
    2. Architecture
      1. Core Components
    3. API Endpoints
      1. 1. List Files
      2. 2. Upload File
      3. 3. Delete File
      4. 4. Query with Context
    4. Setup and Configuration
      1. Installing via Smithery
    5. How It Works
      1. Security Features
        1. Supported File Types
          1. Error Handling
            1. Development
              1. Project Structure
              2. Adding New Features
            2. Testing
              1. Postman Collection
              2. Manual Testing
              3. Environment Setup
            3. Future Considerations
              ID: cllpbhp6yy