项目简介
EpicMe MCP日志认证服务器是一个功能丰富的Model Context Protocol (MCP) 实现,专为日志和标签管理而设计。它运行在Cloudflare Workers Durable Objects上,支持OAuth2.1认证和授权,确保只有经过验证的LLM客户端才能安全地访问和操作用户数据。服务器提供标准化的JSON-RPC接口,允许LLM客户端通过预定义的资源、工具和Prompt模板与日志系统进行交互。
主要功能点
- 安全认证与授权: 集成了OAuth2.1协议,提供令牌自省(Token Introspection)机制,确保LLM客户端的请求经过严格认证和授权,保护用户数据隐私。
- 资源管理: 托管和管理日志条目(Entries)和标签(Tags),LLM可以读取特定日志、列出所有日志、读取所有标签或特定标签的详细信息。
- 工具调用: 提供了多种工具,允许LLM客户端执行操作,例如:
- 创建、获取、列出、更新和删除日志条目。
- 创建、获取、列出、更新和删除标签。
- 将标签添加或移除到日志条目中。
- Prompt模板: 定义了可定制的Prompt模板,如“Suggest Tags”,LLM可以利用这些模板来获取服务器预处理过的上下文信息,以更智能的方式进行交互,例如为日志条目自动生成标签建议。
- 会话管理: 利用Cloudflare Durable Objects,提供强大的会话管理能力,确保用户交互的持久性和一致性。
安装步骤
该项目主要用于教学和演示,需要Node.js和npm环境。请按照以下步骤进行本地设置:
- 克隆仓库:
git clone --depth 1 https://github.com/epicweb-dev/mcp-auth.git cd mcp-auth - 运行设置脚本:
这个命令会自动安装所有依赖并初始化项目所需的应用程序。npm run setup - 启动开发服务器: 该项目包含一个主应用程序和多个练习项目。要启动与此MCP服务器相关的部分,通常涉及运行位于'epicshop/epic-me'或'exercises/04.user/01.problem.token'目录下的开发命令。具体命令可能因您的工作坊进展而异,但通常会通过 'npm run dev' 或 'npx wrangler dev' 启动。在本地测试环境中,'globalSetup.ts' 脚本会自动启动所需的服务。
服务器配置(供MCP客户端参考)
此MCP服务器旨在通过HTTP端点提供服务,通常在'/mcp'路径下。客户端连接时,需要提供 OAuth 'Bearer' Token 进行认证。
要连接到此MCP服务器,MCP客户端需要知道以下信息:
- 服务器名称: 'epicme' (这是服务器在MCP协议中声明的唯一标识符)。
- 连接URL: 'http://localhost:<PORT>/mcp'。您需要将 '<PORT>' 替换为实际运行此MCP服务器的端口号(例如 '8080')。
- 认证头部: 客户端在发送请求时,必须在HTTP 'Authorization' 头部中包含一个有效的 'Bearer' Token,格式为 'Bearer <您的_OAuth_访问令牌>'。此令牌需通过与服务器的OAuth授权端点(例如 'http://localhost:7788/oauth/authorize' 和 'http://localhost:7788/oauth/token')进行交互来获取。
- Prompt 模板: 服务器提供了预定义的Prompt模板,如 'suggest_tags',LLM客户端可以直接引用这些模板来获取结构化上下文。
基本使用方法
一旦服务器启动,LLM客户端即可通过JSON-RPC协议与 '/mcp' 端点进行通信。
- 获取认证令牌: LLM客户端需要先通过OAuth流程获取有效的'Bearer' Token。具体流程通常涉及向'http://localhost:7788/oauth/authorize'进行授权请求,然后向'http://localhost:7788/oauth/token'交换访问令牌。
- 调用工具: LLM客户端可以通过发送JSON-RPC请求来调用服务器上注册的工具。例如,要创建一个新的日志条目,LLM客户端可以向服务器发送一个包含'tool_code/create_entry'方法的JSON-RPC请求,并提供相应的参数(如日志标题、内容等)。
- 访问资源: LLM客户端可以请求服务器上托管的资源。例如,要列出所有标签,LLM客户端可以向服务器发送一个包含'resource_code/tags'方法的JSON-RPC请求,并指定资源URI。
- 使用Prompt模板: LLM客户端可以请求服务器渲染Prompt模板以获取定制的LLM交互模式。例如,请求为指定日志条目建议标签,LLM客户端可以发送一个包含'prompt_code/suggest_tags'方法的JSON-RPC请求,并提供日志条目ID。服务器会返回一个包含系统提示和用户消息的LLM交互结构,其中可能包含现有标签和日志内容,供LLM进一步处理和生成建议。
信息
分类
AI与计算