用户管理工具

一个基于Ruby on Rails的应用程序,提供RESTful API和MCP工具,用于创建、列出和管理具有详细个人资料信息的用户。

  • by MoeenAhmed-Dev
  • Ruby
  • 本地部署
  • 更新于
在 GitHub 查看 MoeenAhmedCP/mcp-server-app

使用说明

MCP应用程序

一个Ruby on Rails应用程序,它实现了用于用户管理的模型上下文协议(MCP)工具。该应用程序提供了一个RESTful API和MCP工具,用于创建、列出和管理具有全面配置文件信息的用户。

特性

  • 用户管理:使用详细的个人资料信息创建和管理用户
  • MCP工具:通过模型上下文协议进行用户操作的自定义工具
  • RESTful API:标准Rails API端点
  • PostgreSQL数据库:具有适当索引的强大数据存储
  • Docker支持:容器化部署就绪
  • 健康检查端点:内置健康监测 /up

技术栈

  • 红宝石: 3.2.2
  • 轨道: 7.1.4
  • 数据库:PostgreSQL
  • Web服务器:彪马
  • 主控程序:用于模型上下文协议实现的快速mcp-gem
  • 测试:水豚,硒WebDriver
  • 发展:Web控制台,调试gem

先决条件

  • Ruby 3.2.2
  • PostgreSQL
  • Docker(可选,用于容器化部署)

安装

地方发展

  1. 克隆存储库

    git clone <repository-url>
    cd mcp_app
    
  2. 安装Ruby依赖项

    bundle install
    
  3. 设置数据库

    # Create and migrate the database
    bin/rails db:create
    bin/rails db:migrate
    
    # Seed with sample data (optional)
    bin/rails db:seed
    
  4. 启动Rails服务器

    bin/rails server
    

该应用程序将在 http://localhost:3000

Docker部署

  1. 构建Docker镜像

    docker build -t mcp_app .
    
  2. 运行容器

    docker run -p 3000:3000 mcp_app
    

数据库模式

用户表

该应用程序包括一个全面的用户管理系统,包括以下字段:

  • email (字符串,必填,唯一)
  • first_name (字符串,必填)
  • last_name (字符串,必填)
  • phone_number (字符串,可选)
  • date_of_birth (日期,可选)
  • address (字符串,可选)
  • city (字符串,可选)
  • state (字符串,可选)
  • country (字符串,可选)
  • postal_code (字符串,可选)
  • role (字符串,默认值:“user”)
  • status (字符串,默认值:“活动”)
  • last_login_at (日期时间,可选)

MCP工具

该应用程序包括几个用于用户管理的MCP工具:

创建用户工具

使用必需和可选参数创建新用户。

参数:

  • first_name (必填):用户名
  • last_name (必填):用户姓氏
  • email (可选):用户的电子邮件地址

用户列表

检索并显示系统中的所有用户。

退货: 包含姓名和电子邮件信息的JSON用户数组。

API终点

  • GET /up -健康检查端点
  • 可以根据需要添加其他RESTful端点

测试

运行测试套件:

bin/rails test

对于系统测试:

bin/rails test:system

发展

添加新的MCP工具

  1. 在中创建新的工具文件 app/tools/
  2. 从……继承…… ApplicationTool
  3. 定义工具描述和参数
  4. 实施 call 方法

例子:

class MyCustomTool < ApplicationTool
  description 'Description of what this tool does'

  arguments do
    required(:param1).filled(:string).description("Description of parameter")
    optional(:param2).filled(:string).description("Optional parameter")
  end

  def call(param1:, param2: nil)
    # Your tool logic here
  end
end