本地文本搜索服务器

基于FastMCP的本地文本搜索服务器,支持智能文档压缩和语义搜索功能。

  • by beshkenadze
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 beshkenadze/context42

使用说明

Context42-MCP RAG服务器

基于FastMCP的服务器,用于智能文档压缩的本地文本搜索。

🚀 快速开始

# Install basic version (keyword search)
uvx install context42

# Install with CLaRa semantic compression
pip install context42[clara]

# Run directly
uvx context42

# Or via uv
uv run context42

# Download CLaRa model (optional)
context42 download

🛠️ MCP工具

工具 说明 参数
load_documents 从目录加载文本文件 directory: str, extensions: list[str], max_files: int
chunk_documents 应用压缩块 compression_level: float (1.0-128.0)
search 按块搜索(关键字或CLaRa) query: str, top_k: int, method: str (auto|clara|keyword)
get_status 获取服务器状态 -
CLaRa工具 (要求 pip install context42[clara])
init_clara 初始化CLaRa模型进行语义搜索 model: str, force_download: bool
clara_status 获取CLaRa模型状态 -
unload_clara 卸载CLaRa模型以释放内存 -
ask 使用CLaRa询问有关文档的问题 question: str, max_tokens: int

📚 MCP资源

  • context42://status -当前服务器状态(已加载文档、块、压缩、CLaRa状态)
  • context42://documents -加载的文档元数据列表

🧠 CLaRa语义压缩

可选功能 -安装时使用 pip install context42[clara] 启用苹果的CLaRa模型进行语义文档压缩和智能搜索。

CLaRa型号可用

型号 压缩 尺寸 用例
clara-7b-instruct-16 16× ~14GB 一般问答, 推荐
clara-7b-instruct-128 128× ~14GB 大语料库搜索
clara-7b-base-16 16× ~14GB 自定义微调
clara-7b-e2e-16 16× ~14GB 多文档RAG

CLaRa工作流

# 1. Initialize CLaRa (downloads model if needed)
tools/call init_clara {"model": "clara-7b-instruct-16"}

# 2. Load documents
tools/call load_documents {"directory": "./docs"}

# 3. Ask semantic questions
tools/call ask {"question": "What is the main topic of these documents?"}

# 4. Search with CLaRa (auto-enabled when loaded)
tools/call search {"query": "machine learning", "method": "clara"}

# 5. Check model status
tools/call clara_status {}

回退行为

CLaRa状态 搜索行为 询问行为
未安装 关键字搜索 错误消息
已安装,未加载 关键字搜索 错误消息
已加载 CLaRa语义搜索 CLaRa-generation

🎯 示例用法

# 1. Load documents
tools/call load_documents {"directory": "./docs", "extensions": [".md", ".txt"]}

# 2. Apply 16x compression (100-char chunks)
tools/call chunk_documents {"compression_level": 16.0}

# 3. Search for content
tools/call search {"query": "machine learning", "top_k": 5}

📊 支持的文件格式

扩展 描述
.md Markdown
.txt 纯文本
.rst 重新结构化文本
.json JSON(文本格式)
.yaml, .yml YAML配置
.toml TOML配置
.csv CSV数据
.log 日志文件

📊 压缩级别

级别 块大小 用例
1.0x 1000个字符 大上下文,详细分析
4.0x 250个字符 中等上下文,平衡搜索
16.0x 100个字符 上下文小,搜索速度快
64.0x 100个字符 最大压缩

🔧 MCP集成

快速CLI设置

使用以下命令行将Context42添加到任何与MCP兼容的工具中:

# Claude Desktop
echo '{"mcpServers":{"context42":{"command":"uvx","args":["context42"]}}' >> ~/Library/Application\ Support/Claude/claude_desktop_config.json

# Cursor Editor
echo '{"mcpServers":{"context42":{"command":"uvx","args":["context42"]}}' > ~/.cursor/mcp_settings.json

# Continue.dev
echo '{"mcpServers":{"context42":{"command":"uvx","args":["context42"]}}' > ~/.continue/config.json

MCP配置标准

Context42遵循官方MCP配置模式,可与所有主要工具配合使用:

标准配置格式

{
  "mcpServers": {
    "context42": {
      "command": "uvx",
      "args": ["context42"]
    }
  }
}

克劳德代码(推荐)

# Add to user scope (cross-project)
claude mcp add --transport stdio context42 -- uvx context42

# Add to project scope (team-shared)
claude mcp add --transport stdio context42 --scope project -- uvx context42

# Add with environment variables
claude mcp add --transport stdio context42 --env CONTEXT42_DOCS_PATH=/path/to/docs -- uvx context42

VS Code

{
  "mcp": {
    "servers": {
      "context42": {
        "type": "stdio",
        "command": "uvx",
        "args": ["context42"]
      }
    }
  }
}

光标/风帆

{
  "mcpServers": {
    "context42": {
      "command": "uvx",
      "args": ["context42"]
    }
  }
}

Zed编辑

{
  "context_servers": {
    "Context42": {
      "source": "custom",
      "command": "uvx",
      "args": ["context42"]
    }
  }
}

Cline/Roo代码

{
  "mcpServers": {
    "context42": {
      "type": "stdio",
      "command": "uvx",
      "args": ["context42"]
    }
  }
}

配置范围

MCP服务器可以在不同级别进行配置:

范围 位置 用例 命令
本地 ~/.claude.json (特定于项目) 个人、仅限项目的服务器 claude mcp add --scope local
项目 .mcp.json (版本控制) 团队共享服务器 claude mcp add --scope project
用户 ~/.claude.json (全局) 跨项目个人服务器 claude mcp add --scope user

环境变量扩展

在中使用环境变量 .mcp.json 对于灵活的配置:

{
  "mcpServers": {
    "context42": {
      "command": "uvx",
      "args": ["context42"],
      "env": {
        "CONTEXT42_DOCS_PATH": "${DOCS_PATH:-./docs}",
        "CONTEXT42_COMPRESSION": "${COMPRESSION_LEVEL:-4.0}"
      }
    }
  }
}

Windows兼容性

对于Windows用户,请使用 cmd /c 包装:

{
  "mcpServers": {
    "context42": {
      "command": "cmd",
      "args": ["/c", "uvx", "context42"]
    }
  }
}

支持的工具

Context42适用于所有主要的MCP兼容工具:

AI编码助理:

  • 克劳德桌面,克劳德代码,光标,风帆
  • Cline、Roo Code、Continue.dev、Codeium
  • GitHub Copilot、OpenCode、Aider、Supermaven
  • 来源图科迪,Tabnine,困惑

IDE和编辑:

  • VS代码、JetBrains IDE(IntelliJ、PyCharm等)
  • Zed、Neovim、Emacs、Sublime Text

CLI工具:

  • Amp、BoltAI、Crush、Factory(机器人)
  • Kilo Code、LM Studio、Warp Terminal

企业平台:

  • 谷歌反重力,亚马逊Q开发者CLI
  • 微软Copilot命令行界面,Qwen编码器

MCP资源和提示

Context42公开了可以引用的MCP资源 @:

# Reference server status
@context42://status

# Reference loaded documents
@context42://documents

可用斜线命令(如果客户端支持):

/mcp__context42__load_docs
/mcp__context42__search
/mcp__context42__status

身份验证和安全

  • 不要求进行验证 -Context42是一个本地服务器
  • 文件系统访问 -尊重您的用户权限
  • 无网络呼叫 -所有处理都在本地进行(CLaRa型号下载除外)
  • 企业就绪 -可以通过托管MCP配置进行部署
  • CLaRa隐私 -从官方HuggingFace存储库下载的模型

内存需求

配置 所需RAM GPU VRAM
回退(仅关键字) ~100MB 无
CPU上的CLaRa ~16GB 无
MPS(Mac)上的CLaRa ~16GB统一 共享
CUDA上的CLaRa ~8GB ~14GB

Python客户端

from mcp.client.stdio import stdio_client, StdioServerParameters
from mcp import ClientSession

async def use_context42():
    server_params = StdioServerParameters(
        command="uvx", args=["context42"]
    )
    
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            result = await session.call_tool("load_documents", {
                "directory": "./documents"
            })
            
            # Use CLaRa if available
            clara_result = await session.call_tool("init_clara", {
                "model": "clara-7b-instruct-16"
            })
            
            # Ask semantic questions
            answer = await session.call_tool("ask", {
                "question": "What is the main topic?",
                "max_tokens": 128
            })

CLI命令

# Model management (requires context42[clara])
context42 download                    # Download default CLaRa model
context42 models --local               # List downloaded models
context42 info clara-7b-instruct-16   # Show model details
context42 remove clara-7b-instruct-128  # Remove model

# Server management
context42 serve                       # Start MCP server
context42 serve --model clara-7b-instruct-128  # Use specific model
context42 serve --preload              # Preload model at startup
context42 serve --fallback             # Keyword-only mode

MCP服务器管理

# List all configured MCP servers
claude mcp list

# Get Context42 server details
claude mcp get context42

# Remove Context42 server
claude mcp remove context42

# Check server status in Claude Code
/mcp

# Use Claude Code as MCP server (for testing)
claude mcp serve

企业配置

对于企业部署,请使用托管MCP配置:

// managed-mcp.json
{
  "mcpServers": {
    "context42": {
      "command": "uvx",
      "args": ["context42"],
      "env": {
        "CONTEXT42_DOCS_PATH": "/company/docs",
        "CONTEXT42_MAX_FILES": "10000",
        "CONTEXT42_MODEL": "clara-7b-instruct-16",
        "CONTEXT42_DEVICE": "cuda"
      }
    }
  },
  "allowedMcpServers": [
    {"serverName": "context42"}
  ]
}

🧪 发展

# Install dev dependencies
uv sync

# Run server for testing
uv run context42

# Test via FastMCP inspector
fastmcp dev context42/server.py

📁 项目结构

context42/
├── __init__.py          # Package exports, CLARA_AVAILABLE flag
├── server.py            # FastMCP server with MCP tools
├── cli.py               # CLI: serve, download, models, remove, info
├── processor.py         # DocumentProcessor class
├── chunker.py           # Chunker class
├── search.py            # SearchEngine (keyword fallback)
└── clara/               # Optional CLaRa integration
    ├── __init__.py      # CLaRa exports
    ├── config.py        # CLaRaConfig with model registry
    ├── manager.py       # ModelManager (download/load/unload/remove)
    └── generator.py     # CLaRaGenerator (ask/search)

⚙️ 特性

  • ✅ FastMCP框架:基于现代装饰器的MCP服务器
  • ✅ 多格式支持:.md、.txt、.rst、.json、.yaml、.toml、.csv、.log
  • ✅ 智能分块:可配置的压缩(1x-128x),带重叠
  • ✅ 关键字搜索:基于相关性的评分和预览
  • ✅ CLaRa集成:使用Apple的CLaRa模型进行可选语义压缩
  • ✅ 混合搜索:在CLaRa语义搜索和关键字搜索之间自动切换
  • ✅ 模型管理:下载、加载和管理多个CLaRa模型
  • ✅ 内存管理:延迟加载和卸载以提高资源效率
  • ✅ uvx就绪:可通过uvx在全球范围内安装
  • ✅ 类型安全:完整类型注释
  • ✅ 错误处理:全面的异常管理
  • ✅ CLI工具兼容:适用于所有主要的CLI工具和编辑器

🐛 故障排除

服务器问题

服务器无法启动:

uv sync  # Install dependencies
uvx --install context42  # Ensure global installation

连接错误:

  • Windows:使用 cmd /c 配置中的包装器
  • macOS/Linux:检查 uvx 在PATH中
  • 验证MCP客户端是否支持stdio传输

权限错误:

  • 确保Context42具有对文档目录的读取权限
  • 检查目标文件的文件权限

文档加载问题

未找到文档:

  • 检查目录路径是否包含支持的文件类型
  • 如果需要,使用绝对路径
  • 验证目录是否存在并且可以访问

大文件处理:

  • 使用压缩级别4.0x-16.0x以获得更好的性能
  • 考虑拆分非常大的文件(>10MB)

搜索问题

搜索未返回任何结果:

  • 确保先加载和分块文档
  • 尝试不同的搜索词或部分匹配
  • 检查压缩级别是否过高(减少上下文)

搜索性能缓慢:

  • 使用更高的压缩级别(16.0x-64.0x)
  • 限制搜索 top_k 参数
  • 考虑减小文档语料库大小

MCP客户端问题

服务器未出现在客户端中:

  • 配置后重新启动MCP客户端
  • 检查配置JSON语法
  • 验证服务器名称是否完全匹配

工具不可用:

  • 使用 /mcp Claude Code中用于检查状态的命令
  • 确保服务器已成功初始化
  • 检查客户端日志中的连接错误

资源引用不起作用:

  • 验证客户端是否支持MCP资源
  • 使用格式: @context42://status 或 @context42://documents
  • 检查服务器是否已先加载文档

📄 许可证

MIT许可证-有关详细信息,请参阅许可证文件。