Skip to main content
Glama

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

铁匠徽章

概述

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

Related MCP server: MemGPT MCP Server

核心功能

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

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

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