一个桥接包,使模型上下文协议(MCP)与AI SDK之间无缝集成,允许MCP服务器和AI模型之间的高效通信和工具执行。
mcp.config.json进行灵活配置npm install aisdk-mcp-bridge
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"
}
}
}
}
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 {
// 初始化MCP
await initializeMcp({ debug: true });
// 获取来自所有服务器的工具
const allTools = await getMcpTools({ debug: true });
// 或者从特定服务器获取工具
const twitterTools = await getMcpTools({
debug: true,
serverName: 'twitter-mcp',
});
// 使用AI SDK中的工具
const result = await generateText({
model: google('gemini-1.5-pro'),
messages: [
{
role: 'system',
content:
'您是一个使用各种工具帮助用户的AI助手。',
},
{
role: 'user',
content: '您的任务描述在这里',
},
],
tools: twitterTools, // 或者allTools以使用所有可用工具
});
console.log('结果:', result.text);
} finally {
// 清理资源
await cleanupMcp();
}
}
main().catch(error => {
console.error('错误:', error);
process.exit(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"
}
}
}
}
{
"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"
}
}
}
}
{
"mcpServers": {
"sse-server": {
"command": "node",
"args": ["./server.js"],
"mode": "sse",
"sseOptions": {
"endpoint": "http://localhost:3000/events",
"headers": {},
"reconnectTimeout": 5000
}
}
}
}
该桥接支持不同的通信模式:
stdio模式(默认)
SSE模式(服务器发送事件)
initializeMcp(options?: InitOptions): Promise<void>使用提供的选项初始化MCP服务。
interface InitOptions {
configPath?: string; // mcp.config.json的路径
debug?: boolean; // 启用调试日志
}
getMcpTools(options?: ToolOptions): Promise<ToolSet>从MCP服务器获取与AI SDK兼容的工具。
interface ToolOptions {
debug?: boolean; // 启用调试日志
serverName?: string; // 可选的服务器名称,用于从特定服务器获取工具
}
executeMcpFunction(serverName: string, functionName: string, args: Record<string, unknown>): Promise<MCPToolResult>在MCP服务器上直接执行特定函数。
// 示例
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;
};
}
MCPToolResultMCP工具执行的结果类型。
interface MCPToolResult {
success: boolean;
data?: unknown;
error?: string;
}
cleanupMcp(): Promise<void>清理MCP资源并关闭所有服务器连接。
该桥接包括全面的错误处理:
该桥接通过以下方式提供详细的日志记录:
mcp-tools.log:服务器端工具执行的日志可以通过设置DEBUG环境变量来启用详细的调试日志:
# 启用所有调试日志
DEBUG=* npm start
# 启用MCP调试日志
DEBUG=mcp npm start
# 启用所有MCP命名空间日志
DEBUG=mcp:* npm start
调试日志将显示:
日志系统支持三种类型的日志:
info:一般操作信息debug:详细的调试信息(需要DEBUG环境变量)error:错误消息和堆栈跟踪(始终记录)所有日志都写入logs/mcp-tools.log,格式如下:
[时间戳] [类型] 消息
{可选的JSON数据}
npm install
运行测试套件:
npm test
运行特定测试:
npm run test:twitter
npm run test:firecrawl
我们欢迎贡献!请参阅我们的贡献指南,了解以下内容的详细信息:
请注意,此项目发布时附带了一份行为准则。参与此项目即表示您同意遵守其条款。
对于支持:
查看CHANGELOG.md以获取更改列表和迁移指南。
对于安全问题,请发送电子邮件至ravi@caw.tech,而不是使用公共问题追踪器。
也请参阅参与此项目的贡献者名单。
本项目根据MIT许可证发布 - 详情见LICENSE文件。