自托管LLM集成服务器

一个集成了自托管LLM模型和Supabase数据库的Model Context Protocol服务器,支持数据持久化、检索和文本生成。

  • by Krishnahuex28
  • Shell
  • 本地部署
  • 更新于
在 GitHub 查看 Krishnahuex28/MCP

使用说明

具有自托管LLM和Supabase集成的MCP服务器

一个全面的模型上下文协议(MCP)服务器,通过Ollama和Supabase数据库与自托管LLM模型集成,用于数据持久化和检索。

特性

  • MCP协议支持:全面实施模型上下文协议规范
  • 自托管LLM集成:支持基于Ollama的LLM模型(Llama2、CodeLlama等)
  • Supabase数据库集成:使用Supabase完成CRUD操作
  • Docker支持:使用Docker Compose进行容器化部署
  • 综合测试:覆盖率≥90%的单元测试、集成测试和E2E测试
  • TypeScript:完全类型化的实施,以获得更好的开发体验
  • 日志记录:具有可配置级别和格式的结构化日志记录

建筑

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   MCP Client    │    │   MCP Server    │    │   Supabase DB   │
│                 │◄──►│                 │◄──►│                 │
└─────────────────┘    └─────────────────┘    └─────────────────┘
                              │
                              ▼
                       ┌─────────────────┐
                       │   Ollama LLM    │
                       │   (Self-hosted) │
                       └─────────────────┘

快速开始

先决条件

  • Docker和Docker Compose
  • Node.js 18+(用于本地开发)
  • 辅助账户和项目

1.克隆和设置

git clone <repository-url>
cd mcp-server-selfhosted
cp env.example .env

2.配置环境

编辑 .env 使用您的配置文件:

# Supabase Configuration
SUPABASE_URL=your_supabase_url_here
SUPABASE_ANON_KEY=your_supabase_anon_key_here
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key_here

# Self-hosted LLM Configuration
LLM_BASE_URL=http://localhost:11434
LLM_MODEL=llama2
LLM_TIMEOUT=30000

# MCP Server Configuration
MCP_SERVER_PORT=3000
MCP_SERVER_HOST=localhost

# Logging
LOG_LEVEL=info
LOG_FORMAT=json

3.从Docker Compose开始

docker-compose up -d

这将开始:

  • Ollama服务(自托管法学硕士)
  • MCP服务器
  • 健康检查和监测

4.验证安装

# Check if services are running
docker-compose ps

# Test MCP server health
curl http://localhost:3000/health

# Test Ollama connection
curl http://localhost:11434/api/tags

5.本地测试构建(可选)

# Test TypeScript compilation
npm run build

# Test HTTP server
npm run start:http

# Test health endpoint
curl http://localhost:3000/health

可用工具

MCP服务器提供以下工具:

1. query_database

在Supabase数据库上执行SQL查询。

参数:

  • query (字符串,必填):要执行的SQL查询
  • table (字符串,可选):上下文表名

例子:

{
  "name": "query_database",
  "arguments": {
    "query": "SELECT * FROM users WHERE active = true",
    "table": "users"
  }
}

2. generate_text

使用自托管LLM生成文本。

参数:

  • prompt (字符串,必填):LLM的文本提示
  • maxTokens (数字,可选):要生成的最大令牌数
  • temperature (数字,可选):发电温度(0.0-1.0)

例子:

{
  "name": "generate_text",
  "arguments": {
    "prompt": "Explain quantum computing in simple terms",
    "maxTokens": 500,
    "temperature": 0.7
  }
}

3. store_data

将数据存储在Supabase数据库中。

参数:

  • table (字符串,必填):用于存储数据的表名
  • data (object,必填):要存储的数据

例子:

{
  "name": "store_data",
  "arguments": {
    "table": "documents",
    "data": {
      "title": "My Document",
      "content": "Document content here",
      "author": "John Doe"
    }
  }
}

4. retrieve_data

从Supabase数据库中检索数据。

参数:

  • table (字符串,必填):从中检索数据的表名
  • filters (对象,可选):要应用的筛选器
  • limit (number,可选):要检索的最大记录数

例子:

{
  "name": "retrieve_data",
  "arguments": {
    "table": "documents",
    "filters": {
      "author": "John Doe"
    },
    "limit": 10
  }
}

发展

地方发展设置

  1. 安装依赖关系:
npm install
  1. 启动Ollama(如果不使用Docker):
# Install Ollama
curl -fsSL https://ollama.ai/install.sh | sh

# Pull a model
ollama pull llama2

# Start Ollama
ollama serve
  1. 启动Supabase(如果使用本地实例):
# Install Supabase CLI
npm install -g supabase

# Start local Supabase
supabase start
  1. 运行开发服务器:
npm run dev

测试

该项目包括全面的测试:

# Run unit tests
npm test

# Run tests with coverage
npm run test:coverage

# Run E2E tests
npm run test:e2e

# Run all tests
npm run test && npm run test:e2e

代码质量

# Lint code
npm run lint

# Fix linting issues
npm run lint:fix

Docker配置

Dockerfile

这 Dockerfile 创建优化的生产映像:

  • Node.js 18 Alpine基础
  • 非root用户安全
  • 健康检查
  • 多阶段构建,图像尺寸更小

Docker Compose

这 docker-compose.yml 编排:

  • Ollama LLM服务
  • MCP服务器
  • 健康检查和依赖关系
  • Ollama模型的体积持久性

安全考虑

  1. SQL注入保护:SQL查询的基本清理
  2. 环境变量:存储在环境变量中的敏感数据
  3. 非根容器:Docker容器以非root用户身份运行
  4. 输入验证:用于输入验证的Zod模式
  5. 错误处理:全面的错误处理,无信息泄露

监控和日志记录

日志级别

  • DEBUG:详细的调试信息
  • INFO:一般信息信息
  • WARN:警告信息
  • ERROR:错误消息

日志格式

  • text:人类可读格式
  • json:用于日志聚合的结构化JSON格式

健康检查

  • HTTP端点: GET /health
  • Docker健康检查
  • 服务依赖性检查

故障排除

常见问题

  1. Ollama连接失败

    # Check if Ollama is running
    curl http://localhost:11434/api/tags
    
    # Restart Ollama service
    docker-compose restart ollama
    
  2. Supabase连接失败

    # Verify environment variables
    echo $SUPABASE_URL
    echo $SUPABASE_ANON_KEY
    
    # Test connection
    curl -H "Authorization: Bearer $SUPABASE_ANON_KEY" $SUPABASE_URL/rest/v1/
    
  3. MCP服务器未启动

    # Check logs
    docker-compose logs mcp-server
    
    # Check health
    curl http://localhost:3000/health
    
  4. Docker构建失败,显示“tsc:未找到”

    # This is fixed in the current Dockerfile
    # The issue was NODE_ENV=production preventing dev dependencies installation
    # Solution: Set NODE_ENV=development during build phase
    
    # If you still encounter issues, try:
    docker-compose build --no-cache
    
  5. TypeScript编译错误

    # Test build locally first
    npm run build
    
    # Check for missing dependencies
    npm install
    
    # Clear node_modules and reinstall
    rm -rf node_modules package-lock.json
    npm install
    

性能优化

  1. LLM性能

    • 使用支持GPU的Olama以获得更好的性能
    • 调整模型参数(温度、max_tokens)
    • 考虑模型大小与质量的权衡
  2. 数据库性能

    • 使用连接池
    • 优化SQL查询
    • 考虑索引策略

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 添加新功能的测试
  5. 确保所有测试通过
  6. 提交拉取请求

许可证

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

支持

对于问题和疑问:

  • 在存储库中创建问题
  • 检查故障排除部分
  • 查看测试用例中的使用示例