AI工具授权服务器

Auth0 AI MCP Server是一个基于Auth0的AI工具授权服务器,用于安全地集成第三方服务并开发智能应用。

  • by eldomiklk
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 danielsantoslgo/Auth-mcp

使用说明


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帐户(用于部署)

安装

  1. 克隆存储库:
    git clone <your-repository-url>
    cd <your-repository-name>
    
  2. 安装依赖项:
    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与新服务集成,请执行以下操作:

  1. 定义新的授权配置 类似于 withGoogleCalendar 或 withSlack。指定 connection 名称(来自您的Auth0设置)和所需的 scopes.
    • 关于连接的说明:Auth0支持广泛的连接/策略(例如。, google-oauth2, sign-in-with-slack, github, facebook, twitter, office365等等)。如果特定策略没有直接列出或是自定义的,Auth0将默认为 oauth2 战略。在这种情况下,您可以为连接使用描述性名称,但要澄清它使用 oauth2 战略。
  2. 保存此配置 在适当的文件路径中, src/lib/auth0-ai/withYourNewService.ts.

创建新工具

一旦授权配置到位,您就可以创建新工具:

  1. 导入相关 with... 函数 (例如。, withSlack).
  2. 使用 tool 定义您的新工具,提供a description, parameters (使用 zod 用于验证),以及 execute 功能。
  3. 在 execute 函数,使用以下命令检索访问令牌 getAccessTokenForConnection() 并使用它与第三方API进行交互。
  4. 实施稳健的错误处理尤其是对于 FederatedConnectionError 关于授权问题。
  5. 保存工具实现 在逻辑文件路径中, src/tools/yourNewTool.ts.

更新Vercel AI工具

创建新的授权配置和工具后,确保它们已集成到您的Vercel AI应用程序中。这通常涉及更新Vercel AI配置,以识别和利用这些新工具,使您的AI模型可以访问它们。


备注

  • TypeScript:利用TypeScript进行强类型化,以确保参数和返回值的类型安全。
  • 错误处理:始终处理潜在错误,提供信息性消息或回退。
  • 安全:密切关注安全最佳实践,特别是在处理和存储代币时。
  • 官方SDK:与第三方API集成时,优先使用官方SDK(如Google API、Slack Web API),以提高可靠性和可维护性。
  • 文件结构:为您的授权配置和工具维护一致和逻辑的文件结构,以改进代码组织。