项目简介
该项目是GDG UTSC (多伦多大学士嘉堡分校Google开发者社区) 官方网站的后端管理服务,基于Model Context Protocol (MCP) 构建。它旨在以标准化的方式向大型语言模型 (LLM) 客户端提供上下文信息和功能,特别是针对网站的后台管理需求。通过一系列精心设计的工具,LLM客户端可以调用这些功能来管理用户权限、发布活动、管理项目和处理职位申请,从而实现智能化的运营和维护。
主要功能点
- 用户权限管理: 提供授予/移除管理员和超级管理员权限、查询用户管理状态、批量执行权限操作、同步Firebase Auth Claims与Firestore用户角色、以及获取用户登录活动和整体统计信息的功能。
- 活动管理: 允许获取单个或列表形式的活动信息、创建新活动、更新活动状态(如即将开始、进行中、已完成等),并能查询特定活动的注册列表。
- 项目管理: 支持获取、列出、创建、更新和删除项目。此外,还可以为特定项目添加贡献者,便于项目团队协作管理。
- 职位申请管理: 包含获取、列出、创建职位信息,更新职位状态(如草稿、活跃、非活跃),以及管理和查询职位申请。您可以获取所有申请、更新申请状态(如待处理、已接受、已拒绝),并获取单个申请的详细信息。
- 数据持久化: 所有数据和权限管理都通过Firebase Firestore和Firebase Authentication进行持久化存储和安全控制。
安装步骤
在开始使用之前,请确保您已安装Node.js和npm。
-
克隆仓库:
git clone https://github.com/GDSC-UTSC/gdg-website.git cd gdg-website -
安装项目依赖: 运行以下脚本,它将安装项目所需的各种依赖,包括Firebase CLI工具。
sh startup.sh此脚本主要用于安装整个Next.js应用的依赖并启动前端开发服务器。MCP服务器的依赖通常也包含在其中。
-
配置Firebase服务账户: MCP服务器需要连接到您的Firebase项目。您需要配置Firebase服务账户凭据作为环境变量。
- 登录Firebase控制台,选择您的项目。
- 导航到“项目设置” -> “服务账户”。
- 点击“生成新的私钥”,下载JSON格式的服务账户密钥文件。
- 将密钥文件中的'project_id'、'client_email'和'private_key'内容,分别设置到以下环境变量中:
- 'FIREBASE_PROJECT_ID'
- 'FIREBASE_CLIENT_EMAIL'
- 'FIREBASE_PRIVATE_KEY' (请注意,私钥内容中的换行符'\n'在设置为环境变量时可能需要替换为字面量'\n',具体取决于您的操作系统和配置方式)
-
构建并启动MCP服务器:
- 进入MCP服务器的代码目录:
cd mcp - (可选)如果上一步的'startup.sh'没有安装'mcp'目录下的特定依赖,请在此运行:
npm install - 编译TypeScript代码为JavaScript:
这会在'mcp'目录下生成一个'dist'目录,其中包含编译后的JavaScript文件,例如'index.js'。npx tsc - 启动MCP服务器:
服务器将在标准输入/输出 (Stdio) 上监听JSON-RPC请求。node dist/index.js
- 进入MCP服务器的代码目录:
服务器配置 (MCP客户端使用)
当您在MCP客户端(如VS Code扩展或其他LLM应用)中配置此MCP服务器时,需要提供以下JSON格式的配置信息。请务必将'args'字段中的路径替换为您的'gdg-website'仓库在本地文件系统中的实际绝对路径。
{ "name": "gdg-website", "command": "node", "args": [ "/[您的仓库根目录]/gdg-website/mcp/dist/index.js" ], "description": "连接到GDG UTSC网站的MCP管理后端,提供用户、活动、项目和职位管理能力。", "serverCapabilities": { "resources": {}, "tools": { "admin": [ "grant_admin_role", "remove_admin_role", "list_all_admins", "check_admin_status", "bulk_admin_operation", "sync_admin_claims", "get_recent_logins", "get_user_login_activity", "get_login_statistics" ], "events": [ "get_event", "list_events", "create_event", "update_event_status", "get_event_registrations" ], "positions": [ "get_position", "list_positions", "create_position", "update_position_status", "get_applications_by_position", "update_application_status", "get_application" ], "projects": [ "get_project", "list_projects", "create_project", "update_project", "delete_project", "add_contributor_to_project" ], "users": [ "get_user", "list_users_by_role", "list_all_users", "update_user_role", "create_user_profile", "get_user_associations", "add_user_association" ] } } }
- 'name': 服务器的唯一标识名称,在此为"gdg-website"。
- 'command': 启动MCP服务器所使用的命令,这里是'node'。
- 'args': 传递给'command'的参数,即MCP服务器的入口文件路径。请务必将'/[您的仓库根目录]/gdg-website'替换为您的本地文件系统中仓库的实际绝对路径。
- 'description': 对MCP服务器功能的简要描述。
- 'serverCapabilities': 服务器向客户端声明的能力清单。'tools'字段列出了服务器注册的所有工具及其分类。
基本使用方法
当MCP服务器成功启动并被MCP客户端正确连接后,LLM客户端将能够发现并调用服务器上注册的各种工具。例如:
- 管理用户权限: LLM客户端可以调用'admin.grant_admin_role'工具,并提供一个用户邮箱和角色("admin"或"superadmin")作为参数,来授予用户管理员权限。
- 发布新活动: LLM客户端可以调用'events.create_event'工具,并提供活动的标题、描述、日期等信息来创建一个新的活动。
- 查询项目列表: LLM客户端可以调用'projects.list_projects'工具,并可选择提供'language'或'limit'参数来筛选和限制返回的项目列表。
LLM客户端会根据这些工具的定义,生成相应的JSON-RPC请求发送给MCP服务器,服务器执行请求并返回结果。
信息
分类
网页与API