AI SDK MCP桥接工具

一个桥接包,实现模型上下文协议(MCP)与AI SDK之间的无缝集成,支持MCP服务器与AI模型之间的高效通信和工具执行。

  • by vrknetha
  • TypeScript
  • 本地部署
  • 22 星标
  • 更新于
在 GitHub 查看 vrknetha/aisdk-mcp-bridge

使用说明

AISDK MCP桥

一个桥接包,实现了模型上下文协议(MCP)和AI SDK之间的无缝集成,允许MCP服务器和AI模型之间进行高效通信和工具执行。

特性

  • MCP服务器与AI SDK无缝集成
  • 支持多种MCP服务器类型(Node.js、Python、UVX)
  • 独立配置的多服务器支持
  • 通过以下方式灵活配置 mcp.config.json
  • TypeScript支持完整的类型定义
  • 强大的错误处理和日志记录
  • 易于使用的API工具执行

安装

npm install aisdk-mcp-bridge

快速开始

  1. 创建一个 mcp.config.json 项目根目录中的文件:
{
  "mcpServers": {
    "twitter-mcp": {
      "command": "npx",
      "args": ["-y", "@enescinar/twitter-mcp"],
      "env": {
        "API_KEY": "your-twitter-api-key",
        "API_SECRET_KEY": "your-twitter-api-secret",
        "ACCESS_TOKEN": "your-twitter-access-token",
        "ACCESS_TOKEN_SECRET": "your-twitter-access-token-secret"
      }
    },
    "firecrawl": {
      "command": "npx",
      "args": ["-y", "mcp-server-firecrawl"],
      "env": {
        "FIRE_CRAWL_API_KEY": "your-firecrawl-api-key",
        "FIRE_CRAWL_API_URL": "https://api.firecrawl.com"
      }
    }
  }
}
  1. 在代码中导入并使用桥:
import { generateText } from 'ai';
import { google } from '@ai-sdk/google';
import { getMcpTools, cleanupMcp, initializeMcp } from 'aisdk-mcp-bridge';
import dotenv from 'dotenv';
dotenv.config();

async function main() {
  try {
    // Initialize MCP
    await initializeMcp({ debug: true });

    // Get tools from all servers
    const allTools = await getMcpTools({ debug: true });

    // Or get tools from a specific server
    const twitterTools = await getMcpTools({
      debug: true,
      serverName: 'twitter-mcp',
    });

    // Use tools with AI SDK
    const result = await generateText({
      model: google('gemini-1.5-pro'),
      messages: [
        {
          role: 'system',
          content:
            'You are an AI assistant that uses various tools to help users.',
        },
        {
          role: 'user',
          content: 'Your task description here',
        },
      ],
      tools: twitterTools, // or allTools for all available tools
    });

    console.log('Result:', result.text);
  } finally {
    // Clean up resources
    await cleanupMcp();
  }
}

main().catch(error => {
  console.error('Error:', error);
  process.exit(1);
});

配置

这 mcp.config.json 文件支持多个服务器和通信模式。每个服务器都可以独立配置。

服务器配置示例:

推特MCP服务器

{
  "mcpServers": {
    "twitter-mcp": {
      "command": "npx",
      "args": ["-y", "@enescinar/twitter-mcp"],
      "env": {
        "API_KEY": "your-twitter-api-key",
        "API_SECRET_KEY": "your-twitter-api-secret",
        "ACCESS_TOKEN": "your-twitter-access-token",
        "ACCESS_TOKEN_SECRET": "your-twitter-access-token-secret"
      }
    }
  }
}

Firecrawl服务器

{
  "mcpServers": {
    "firecrawl": {
      "command": "npx",
      "args": ["-y", "mcp-server-firecrawl"],
      "env": {
        "FIRE_CRAWL_API_KEY": "your-firecrawl-api-key",
        "FIRE_CRAWL_API_URL": "https://api.firecrawl.com"
      }
    }
  }
}

SSE服务器

{
  "mcpServers": {
    "sse-server": {
      "command": "node",
      "args": ["./server.js"],
      "mode": "sse",
      "sseOptions": {
        "endpoint": "http://localhost:3000/events",
        "headers": {},
        "reconnectTimeout": 5000
      }
    }
  }
}

服务器模式

网桥支持不同的通信模式:

  1. stdio模式 (默认)

    • 通过标准输入/输出直接通信
    • 最适合简单集成和本地开发
    • 低延迟,所需设置最少
  2. SSE模式 (服务器发送的事件)

    • 从服务器到客户端的实时单向通信
    • 非常适合流式更新和长时间运行的操作
    • 内置重新连接处理

api参考

核心功能

initializeMcp(options?: InitOptions): Promise<void>

使用提供的选项初始化MCP服务。

interface InitOptions {
  configPath?: string; // Path to mcp.config.json
  debug?: boolean; // Enable debug logging
}

getMcpTools(options?: ToolOptions): Promise<ToolSet>

从MCP服务器获取与AI SDK兼容的工具。

interface ToolOptions {
  debug?: boolean; // Enable debug logging
  serverName?: string; // Optional server name to get tools from a specific server
}

executeMcpFunction(serverName: string, functionName: string, args: Record<string, unknown>): Promise<MCPToolResult>

直接在MCP服务器上执行特定功能。

// Example
const result = await executeMcpFunction('twitter-mcp', 'postTweet', {
  text: 'Hello from MCP!',
});

核心类型

MCPConfig (别名 MCPServersConfig)

MCP服务器的配置类型。

interface MCPConfig {
  mcpServers: {
    [key: string]: ServerConfig;
  };
}

ServerConfig

单个MCP服务器的配置。

interface ServerConfig {
  command: string;
  args?: string[];
  env?: Record<string, string>;
  mode?: 'stdio' | 'sse';
  sseOptions?: {
    endpoint: string;
    headers?: Record<string, string>;
    reconnectTimeout?: number;
  };
}

MCPToolResult

MCP工具执行的结果类型。

interface MCPToolResult {
  success: boolean;
  data?: unknown;
  error?: string;
}

cleanupMcp(): Promise<void>

清理MCP资源并关闭所有服务器连接。

错误处理

该桥包括全面的错误处理,用于:

  • 服务器初始化失败
  • 通信错误
  • 工具执行失败
  • 配置问题
  • 服务器连接问题

日志记录

该桥通过以下方式提供详细的日志记录:

  • mcp-tools.log:服务器端工具执行日志
  • 用于调试和错误的控制台输出

调试日志记录

您可以通过设置debug环境变量来启用详细的调试日志记录:

# Enable all debug logs
DEBUG=* npm start

# Enable MCP debug logs
DEBUG=mcp npm start

# Enable all MCP namespace logs
DEBUG=mcp:* npm start

调试日志将显示:

  • 服务器初始化和关闭事件
  • 工具注册和执行详细信息
  • 与MCP服务器通信
  • 模式转换和验证
  • 带有堆栈跟踪的错误详细信息
  • 性能指标和时间信息

日志类型

日志系统支持三种类型的日志:

  • info:一般操作信息
  • debug:详细的调试信息(需要DEBUG env变量)
  • error:错误消息和堆栈跟踪(始终记录)

日志文件

所有日志都将写入 logs/mcp-tools.log 格式如下:

[TIMESTAMP] [TYPE] Message
{Optional JSON data}

发展

先决条件

  • Node.js 20.x或更高版本
  • npm 7.x或更高版本

设置

  1. 克隆存储库
  2. 安装依赖项:
npm install

测试

运行测试套件:

npm test

运行特定测试:


npm run test:twitter
npm run test:firecrawl

贡献

我们欢迎捐款!请查看我们的 贡献指南 有关以下内容的详细信息:

  • 建立开发环境
  • 编码标准
  • 拉取请求流程
  • 添加新的MCP服务器

请注意,此项目随附 行为准则参与此项目即表示您同意遵守其条款。

支持

支持:

  1. 检查 文档
  2. 搜索 现有问题
  3. 如果问题仍然存在,则创建新问题

更新日志

看 更改日志.md 查看更改列表和迁移指南。

安全

关于安全问题,请发送电子邮件至ravi@caw.tech而不是使用公共问题跟踪器。

作者

另请参阅列表 贡献者 谁参与了这个项目。

致谢

  • AI SDK团队的优秀SDK
  • 协议规范的MCP社区
  • 所有帮助过该项目的贡献者

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。