Skip to main content
Glama

File Context MCP

文件上下文 MCP(模型上下文处理器)

概述

文件上下文 MCP 是一款基于 TypeScript 的应用程序,它提供了一个 API,用于查询包含本地文件上下文的大型语言模型 (LLM)。它支持多个 LLM 提供程序(Ollama 和 Together.ai),并且可以处理各种文件类型以生成上下文感知的响应。

核心功能

1. 文件系统导航

  • 动态文件和目录遍历
  • 支持多种文件类型( .txt.md.ts.json等)
  • 通过消毒进行安全路径处理
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. 上下文处理

  • LLM 查询的智能上下文格式
  • 上下文截断来处理大文件
  • 用于目录查询的文件内容聚合
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. 多模型支持

  • Ollama(本地)集成
  • Together.ai(云)集成
  • 可扩展模型接口设计
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}`; } }

建筑学

核心组件

  1. 服务器(server.ts)
    • Express.js REST API 实现
    • 使用 multer 处理文件上传/删除
    • 请求验证和路由
    • OpenAPI/Swagger 集成
  2. 文件系统工具(core/fileSystem.ts)
    • 文件和目录操作
    • 内容读取和解析
    • 目录遍历
    • 安全文件删除
    • 文件操作的错误处理
  3. 模型接口(core/modelInterface.ts)
    • 多个 LLM 提供商支持(Ollama、Together.ai)
    • 响应格式和错误处理
    • 可配置模型参数
    • 统一查询接口
  4. 实用模块
    • fileUtils :文件类型检测、路径清理、大小格式化
    • promptUtils :上下文格式化、智能截断
    • validators :路径、查询和模型验证
    • logger :具有级别的结构化日志记录
  5. 配置(config/config.ts)
    • 环境变量管理
    • API 密钥和端点
    • 模型配置
    • 服务器设置
  6. API 规范(resources/file-context-api.yml)
    • OpenAPI 3.0 文档
    • 请求/响应模式
    • 端点文档
    • 错误响应定义

API 端点

1. 列出文件

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

2.上传文件

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.删除文件

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

4. 使用上下文进行查询

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

设置和配置

  1. 环境变量
TOGETHER_API_KEY=your_api_key_here OLLAMA_BASE_URL=http://localhost:11434 MODEL_NAME=llama2 PORT=3001
  1. 安装
npm install

通过 Smithery 安装

要通过Smithery自动为 Claude Desktop 安装 File Context MCP:

npx @smithery/cli@latest install @compiledwithproblems/file-context-mcp --client claude
  1. 运行应用程序
# Development npm run dev # Production npm run build npm start

工作原理

  1. 文件处理流程
    • 请求接收 → 路径验证 → 文件读取 → 内容提取
    • 目录处理包括递归文件读取
    • 基于文件类型的内容过滤
    • 文件上传需要验证其类型和大小
    • 通过路径验证来安全删除文件
  2. 上下文处理
    • 文件内容被聚合
    • 上下文具有清晰的边界
    • 大型上下文被智能截断
    • 提示格式为 LLM 理解添加了结构
  3. 模型集成
    • 不同 LLM 提供商的统一接口
    • 错误处理和响应规范化
    • 可配置模型参数

安全功能

  1. 路径清理
    • 防止目录遍历攻击
    • 路径验证和规范化
    • 安全文件类型检查
  2. 文件上传安全
    • 文件类型验证
    • 文件大小限制(最大 5MB)
    • 安全文件存储
    • 安全文件删除
  3. 输入验证
    • 查询内容验证
    • 模型类型验证
    • 路径结构验证
    • 文件内容验证

支持的文件类型

该应用程序支持以下基于文本的文件类型:

  • 文档: .txt.md
  • 代码文件: .js.ts.jsx.tsx.py.java.cpp.c.h
  • 配置: .json.yaml.yml.env
  • Web 文件: .html.css
  • 数据文件: .csv.xml.log

在以下情况下强制执行文件类型验证:

  • 文件上传
  • 上下文处理
  • 文件读取操作

最大文件大小:每个文件 5MB

错误处理

该应用程序实现了全面的错误处理:

  • 文件系统错误
  • API 响应错误
  • 无效输入错误
  • 模型特定错误
  • 文件上传/删除错误

发展

项目结构

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

添加新功能

  1. 新的文件类型
    • fileUtils.isTextFile()添加扩展
    • 如果需要,实现特定的处理程序
  2. 新模型提供者
    • 扩展ModelInterface
    • 将提供程序添加到validators.isValidModel()
    • 实现特定于提供程序的错误处理

测试

邮差收藏

该项目包含一个 Postman 集合 ( postman/File-Context-MCP.postman_collection.json ),用于测试所有 API 端点。使用方法如下:

  1. 导入收藏集
    • 打开 Postman
    • 点击“导入”按钮
    • 选择或拖动File-Context-MCP.postman_collection.json文件
  2. 可用请求
    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. 测试文件操作
    • List Files :查看存储目录的内容
    • 上传文件:使用带有键“文件”的表单数据并选择一个文本文件
    • 查询文件:使用 LLM 分析单个文件内容
    • 分析目录:使用 LLM 处理多个文件
  4. 示例查询
    // 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. 文件上传指南
    • 使用“文件上传”请求
    • 在 Body 选项卡中选择“form-data”
    • 添加“文件”类型的键“文件”
    • 选择支持的文本文件(请参阅支持的文件类型)
    • 最大文件大小:5MB

手动测试

  • 使用/storage中提供的测试文件
  • 测试不同的文件类型和查询
  • 验证模型响应和错误处理
  • 测试文件大小限制和类型限制

环境设置

请确保:

  • 让服务器运行( npm run dev
  • 配置环境变量
  • 让 Ollama 在本地运行(适用于 Ollama 模型)
  • 设置 Together.ai API 密钥(用于 Together 模型)

未来考虑

  1. 如何高效处理大文件
  2. 扩展支持的文件类型
  3. 优化上下文处理
  4. 添加对响应的流支持
  5. 实施速率限制和缓存

该项目展示了现代 TypeScript/Node.js 实践,重点关注模块化、类型安全性和错误处理,同时为 LLM 与基于文件的上下文交互提供了灵活的接口。

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

local-only server

The server can only run on the client's local machine because it depends on local resources.

该服务器提供了一个 API,可以使用本地文件中的上下文查询大型语言模型,支持各种模型和文件类型以实现上下文感知响应。

  1. 概述
    1. 核心功能
      1. 文件系统导航
      2. 上下文处理
      3. 多模型支持
    2. 建筑学
      1. 核心组件
    3. API 端点
      1. 列出文件
      2. 2.上传文件
      3. 3.删除文件
      4. 使用上下文进行查询
    4. 设置和配置
      1. 通过 Smithery 安装
    5. 工作原理
      1. 安全功能
        1. 支持的文件类型
          1. 错误处理
            1. 发展
              1. 项目结构
              2. 添加新功能
            2. 测试
              1. 邮差收藏
              2. 手动测试
              3. 环境设置
            3. 未来考虑

              Related MCP Servers

              • -
                security
                A
                license
                -
                quality
                A server that enables Large Language Models to discover and interact with REST APIs defined by OpenAPI specifications through the Model Context Protocol.
                Last updated -
                378
                96
                TypeScript
                MIT License
                • Apple
              • -
                security
                A
                license
                -
                quality
                A Model Context Protocol server that enables Large Language Models to seamlessly interact with ClickHouse databases, supporting resource listing, schema retrieval, and query execution.
                Last updated -
                1
                Python
                MIT License
                • Linux
                • Apple
              • -
                security
                A
                license
                -
                quality
                A Model Context Protocol server that enables Large Language Models to interact with ClickUp workspace tasks and data, allowing creation and retrieval of tasks through natural language.
                Last updated -
                59
                TypeScript
                MIT License
                • Apple
              • A
                security
                F
                license
                A
                quality
                A Model Context Protocol server that enables large language models to interact with Apache Superset databases through REST API, supporting database queries, table lookups, field information retrieval, and SQL execution.
                Last updated -
                4
                3
                TypeScript

              View all related MCP servers

              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/compiledwithproblems/file-context-mcp'

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