问答服务器

一个使用DynamoDB存储和检索用户信息及上下文,提供个性化问答功能的MCP服务器。

  • by ajvkrish-art
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ajvkrish-art/mcp-server

使用说明

集成DynamoDB的MCP服务器

一种模型上下文协议(MCP)服务器,使用DynamoDB存储和检索用户信息和上下文,以提供个性化的问答功能。

🚀 特性

  • 用户认证:基于JWT的身份验证,包括注册和登录
  • 上下文管理:存储和检索用户对话历史和上下文
  • 问答:具有用户特定响应的情境感知问答
  • MCP协议:完整的模型上下文协议实现
  • DynamoDB集成:用于用户数据的可扩展NoSQL数据库
  • 安全:速率限制、CORS、输入验证和安全密码处理
  • 日志记录:与Winston全面合作
  • TypeScript:具有严格类型的完全TypeScript支持

📋 先决条件

  • Node.js 18+
  • 具有DynamoDB访问权限的AWS帐户
  • 已配置AWS CLI(可选,用于本地开发)

🛠️ 安装

  1. 克隆存储库

    git clone <repository-url>
    cd mcp-dynamodb-server
    
  2. 安装依赖项

    npm install
    
  3. 设置环境变量

    cp env.example .env
    

    编辑 .env 根据您的配置:

    # Server Configuration
    PORT=3000
    NODE_ENV=development
    
    # JWT Configuration
    JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
    JWT_EXPIRES_IN=24h
    JWT_REFRESH_EXPIRES_IN=7d
    
    # AWS Configuration
    AWS_REGION=us-east-1
    AWS_ACCESS_KEY_ID=your-aws-access-key
    AWS_SECRET_ACCESS_KEY=your-aws-secret-key
    
    # DynamoDB Configuration
    DYNAMODB_ENDPOINT=http://localhost:8000  # Use AWS endpoint for production
    DYNAMODB_TABLES_USERS=users
    DYNAMODB_TABLES_USER_CONTEXTS=user_contexts
    DYNAMODB_TABLES_QUESTIONS_ANSWERS=questions_answers
    
  4. 设置DynamoDB表

    npm run setup-db
    
  5. 构建项目

    npm run build
    
  6. 启动服务器

    # Development mode
    npm run dev
    
    # Production mode
    npm start
    

🏗️ 项目结构

mcp-dynamodb-server/
├── src/
│   ├── server/
│   │   ├── mcp-server.ts          # Main MCP server implementation
│   │   ├── handlers/
│   │   │   ├── auth-handler.ts    # Authentication endpoints
│   │   │   ├── context-handler.ts # Context management
│   │   │   └── qa-handler.ts      # Question answering
│   │   └── middleware/
│   │       ├── auth-middleware.ts # JWT authentication
│   │       └── logging.ts         # Request logging
│   ├── database/
│   │   ├── dynamodb-client.ts     # DynamoDB connection and operations
│   │   └── models/
│   │       └── user.ts           # User data model
│   ├── utils/
│   │   ├── config.ts             # Configuration management
│   │   └── logger.ts             # Logging utilities
│   └── types/
│       └── mcp-types.ts          # TypeScript type definitions
├── scripts/
│   └── setup-dynamodb.js         # DynamoDB table creation
├── package.json
├── tsconfig.json
└── README.md

🔧 配置

环境变量

变量 描述 默认值
PORT 服务器端口 3000
NODE_ENV 环境 development
JWT_SECRET JWT签名密码 必填
JWT_EXPIRES_IN 访问令牌到期 24h
JWT_REFRESH_EXPIRES_IN 刷新令牌到期 7d
AWS_REGION AWS区域 us-east-1
AWS_ACCESS_KEY_ID AWS访问密钥 必填
AWS_SECRET_ACCESS_KEY AWS密钥 必填
DYNAMODB_ENDPOINT DynamoDB端点 http://localhost:8000

DynamoDB表

服务器创建三个DynamoDB表:

  1. 用户 -用户配置文件和身份验证数据
  2. 用户文本 -用户对话历史和上下文
  3. 问题_答案 -问答配对和回答

📚 API文档

身份验证端点

注册用户

POST /api/auth/register
Content-Type: application/json

{
  "email": "user@example.com",
  "username": "username",
  "password": "password123",
  "firstName": "John",
  "lastName": "Doe"
}

登录

POST /api/auth/login
Content-Type: application/json

{
  "email": "user@example.com",
  "password": "password123"
}

刷新令牌

POST /api/auth/refresh
Content-Type: application/json

{
  "refreshToken": "your-refresh-token"
}

上下文管理

创建上下文

POST /api/context
Authorization: Bearer <access-token>
Content-Type: application/json

{
  "content": "User conversation context",
  "source": "chat",
  "tags": ["conversation", "support"],
  "relevance": 0.8
}

获取用户上下文

GET /api/context/:userId?limit=10&offset=0
Authorization: Bearer <access-token>

更新上下文

PUT /api/context/:userId/:contextId
Authorization: Bearer <access-token>
Content-Type: application/json

{
  "content": "Updated context content",
  "relevance": 0.9
}

问答

提问

POST /api/qa/ask
Authorization: Bearer <access-token>
Content-Type: application/json

{
  "question": "What is the status of my order?",
  "useContext": true,
  "contextLimit": 10,
  "category": "support",
  "priority": 3,
  "tags": ["order", "status"]
}

获取问答历史

GET /api/qa/history/:userId?limit=20&offset=0
Authorization: Bearer <access-token>

MCP协议

服务器实现了模型上下文协议并公开了工具:

  • get_user_context -检索用户上下文和对话历史记录
  • store_user_context -存储新的用户上下文或对话
  • answer_question -使用用户上下文回答问题
  • get_user_profile -获取用户配置文件信息

🔒 安全功能

  • JWT身份验证:基于令牌的安全身份验证
  • 密码散列:bcrypt用于密码安全
  • 速率限制:按IP和用户请求速率限制
  • 输入验证:所有输入的Joi模式验证
  • CORS保护:可配置的CORS设置
  • 头盔:安全标头中间件
  • 请求日志记录:全面的请求/响应日志记录

🧪 测试

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

# Run tests in watch mode
npm run test:watch

📝 日志记录

服务器使用Winston进行以下级别的日志记录:

  • 错误:应用程序错误和异常
  • 警告:警告信息
  • 信息:一般信息和要求
  • 调试:详细的调试信息

日志将写入:

  • 控制台(开发)
  • logs/app.log (所有级别)
  • logs/error.log (仅错误级别)

🚀 部署

Docker部署

  1. 构建Docker镜像

    docker build -t mcp-dynamodb-server .
    
  2. 运行容器

    docker run -p 3000:3000 --env-file .env mcp-dynamodb-server
    

AWS部署

  1. 设置AWS凭据
  2. 创建DynamoDB表
  3. 部署到ECS或Lambda
  4. 配置环境变量

🔧 发展

可用脚本

npm run build          # Build TypeScript
npm run dev            # Start development server
npm run start          # Start production server
npm run test           # Run tests
npm run lint           # Run ESLint
npm run lint:fix       # Fix ESLint issues
npm run format         # Format code with Prettier
npm run setup-db       # Set up DynamoDB tables

代码质量

  • TypeScript:严格的类型检查
  • 埃斯林特:代码过滤和样式执行
  • 更漂亮:代码格式
  • 开玩笑:单元和集成测试

🤝 贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 添加新功能的测试
  5. 运行测试套件
  6. 提交拉取请求

📄 许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

🆘 支持

有关支持和问题:

  • 在存储库中创建问题
  • 检查文档
  • 查看API示例

🔮 路线图

  • []人工智能服务集成(OpenAI、Anthropic)
  • []上下文总结与优化
  • []实时通知
  • []高级分析和指标
  • []多租户支持
  • []GraphQL API
  • []WebSocket支持实时功能