使用说明
Auth0 AI MCP服务器
该项目建立了一个 Auth0 AI MCP(模型上下文协议)服务器 这使得能够通过Auth0创建与各种第三方服务集成的人工智能工具,以实现安全授权。它利用 Vercel AI, Vercel AI SDK,以及 Next.js Auth0 为开发可以与外部API交互的智能应用程序提供一个健壮的框架。
特性
- Auth0集成:使用Auth0安全地获取各种OAuth连接(例如Google Calendar、Slack、GitHub)的访问令牌。
- AI工具:定义并执行AI工具,通过使用获得的访问令牌执行特定操作。
- 错误处理:使用优雅的方式管理授权错误
FederatedConnectionError. - 可扩展:通过定义新的授权配置和工具实现,轻松添加新的工具和集成。
- 标准I/O传输:服务器通过标准输入/输出(stdio)进行通信,使其适用于各种部署环境。
入门指南
这些说明将为您提供一份项目副本,并在本地计算机上运行,以用于开发和测试目的。
先决条件
- Node.js(推荐LTS)
- npm或Yarn
- Auth0帐户和配置的应用程序
- Vercel帐户(用于部署)
安装
- 克隆存储库:
git clone <your-repository-url> cd <your-repository-name> - 安装依赖项:
npm install # or yarn install
运行服务器
要运行MCP服务器,请执行主脚本:
node <path-to-your-server-file>.js
对于提供的代码,如果另存为 server.js,你会跑:
node server.js
服务器将记录 Auth0 AI MCP Server running on stdio 向 stderr.
核心概念
服务器在模型上下文协议上运行,允许AI模型与外部工具交互。
Auth0 AI配置
这 Auth0AI 类从 @auth0/ai-vercel 用于为不同的第三方服务配置授权。这 withTokenForConnection 该方法便于使用来自用户会话的刷新令牌来获取访问令牌。
文件路径示例: src/lib/auth0-ai/withGoogleCalendar.ts (或类似,根据您的项目结构)
import { auth0 } from "@/lib/auth0";
import { Auth0AI } from "@auth0/ai-vercel";
const auth0AI = new Auth0AI();
export const withGoogleCalendar = auth0AI.withTokenForConnection({
refreshToken: async () => {
const session = await auth0.getSession();
const refreshToken = session?.tokenSet.refreshToken as string;
return refreshToken;
},
connection: "google-oauth2",
scopes: ["https://www.googleapis.com/auth/calendar.freebusy"],
});
工具创建
工具定义使用 tool Vercel AI SDK的功能。这些工具使用Auth0 AI提供的访问令牌封装了与第三方API交互的逻辑。错误处理,特别是授权问题,至关重要。
文件路径示例: src/tools/checkUsersCalendar.ts (或类似)
import { tool } from "ai";
import { addHours, formatISO } from "date-fns";
import { GaxiosError } from "gaxios";
import { google } from "googleapis";
import { z } from "zod";
import { withGoogleCalendar } from "@/lib/auth0-ai/withGoogleCalendar";
import { getAccessTokenForConnection } from "@auth0/ai-vercel";
import { FederatedConnectionError } from "@auth0/ai/interrupts";
export const checkUsersCalendar = withGoogleCalendar(
tool({
description: "Check user availability on a given date on their calendar",
parameters: z.object({
date: z.coerce.date(),
}),
execute: async ({ date }) => {
const accessToken = getAccessTokenForConnection();
try {
const calendar = google.calendar("v3");
const auth = new google.auth.OAuth2();
auth.setCredentials({ access_token: accessToken });
const response = await calendar.freebusy.query({
auth,
requestBody: {
timeMin: formatISO(date),
timeMax: addHours(date, 1).toISOString(),
timeZone: "UTC",
items: [{ id: "primary" }],
},
});
return {
available: response.data?.calendars?.primary?.busy?.length === 0,
};
} catch (error) {
if (error instanceof GaxiosError && error.status === 401) {
throw new FederatedConnectionError(
"Authorization required to access the Federated Connection"
);
}
throw error;
}
},
})
);
扩展功能
添加新的Auth0连接
要通过Auth0与新服务集成,请执行以下操作:
- 定义新的授权配置 类似于
withGoogleCalendar或withSlack。指定connection名称(来自您的Auth0设置)和所需的scopes.- 关于连接的说明:Auth0支持广泛的连接/策略(例如。,
google-oauth2,sign-in-with-slack,github,facebook,twitter,office365等等)。如果特定策略没有直接列出或是自定义的,Auth0将默认为oauth2战略。在这种情况下,您可以为连接使用描述性名称,但要澄清它使用oauth2战略。
- 关于连接的说明:Auth0支持广泛的连接/策略(例如。,
- 保存此配置 在适当的文件路径中,
src/lib/auth0-ai/withYourNewService.ts.
创建新工具
一旦授权配置到位,您就可以创建新工具:
- 导入相关
with...函数 (例如。,withSlack). - 使用
tool定义您的新工具,提供adescription,parameters(使用zod用于验证),以及execute功能。 - 在
execute函数,使用以下命令检索访问令牌getAccessTokenForConnection()并使用它与第三方API进行交互。 - 实施稳健的错误处理尤其是对于
FederatedConnectionError关于授权问题。 - 保存工具实现 在逻辑文件路径中,
src/tools/yourNewTool.ts.
更新Vercel AI工具
创建新的授权配置和工具后,确保它们已集成到您的Vercel AI应用程序中。这通常涉及更新Vercel AI配置,以识别和利用这些新工具,使您的AI模型可以访问它们。
备注
- TypeScript:利用TypeScript进行强类型化,以确保参数和返回值的类型安全。
- 错误处理:始终处理潜在错误,提供信息性消息或回退。
- 安全:密切关注安全最佳实践,特别是在处理和存储代币时。
- 官方SDK:与第三方API集成时,优先使用官方SDK(如Google API、Slack Web API),以提高可靠性和可维护性。
- 文件结构:为您的授权配置和工具维护一致和逻辑的文件结构,以改进代码组织。
