创建了一个AI代理,使用mcp服务器代表我发布推特帖子
客户端
- 导入readline/promises
- 使用readline创建i/o接口
- 创建聊天循环来提问(promise)
- 将用户、部分(文本、类型)问题推送到历史记录
- 使用wait创建响应
- 使用@modelcontextprotocol/sdk导入McpServer、SSEServerTransport
- 创建mcpClient
- 全局声明工具=\[\]
- 使用SSEClientTransport将mcpClient连接到后端(“/sse”)
- 这样我们就可以访问后端的所有资源提示和工具
- 在console.log的帮助下映射每个工具(“可用工具:”,工具);
- 列出chatloop中的工具
- 为了告诉AI hamare paas itne tools hai,aur tum uska使用kar sakte ho,我们在使用generateContent进行响应的同时添加配置
config:{
tools:[
{
functionDeclarations: tools
}
]
}- 将调用chatloop()从mcpClient外部转移到内部
- 每当ai执行函数调用时,我们都会看到console.log(respond.butions\[0\].content)或console.log
- 我们需要允许ai进行函数调用,怎么做?通过执行const functionCall=respond.resides\[0\].content.parts\[0\].functionCall,如果存在functionCall,则调用chatloop(functionCall)和chatloop中(toolCall),然后执行mcpClient.callTool
- 将Calling工具和toolResult都推送到chatHistory
- 运行节点index.js
服务器
- 锅炉板(运行npx-nodemon index.js)
import express from "express";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
const server = new McpServer({
name: "example-server",
version: "1.0.0"
});
const app = express();
const transports = {};
app.get("/sse", async (req, res) => {
const transport = new SSEServerTransport('/messages', res);
transports[ transport.sessionId ] = transport;
res.on("close", () => {
delete transports[ transport.sessionId ];
});
await server.connect(transport);
});
app.post("/messages", async (req, res) => {
const sessionId = req.query.sessionId;
const transport = transports[ sessionId ];
if (transport) {
await transport.handlePostMessage(req, res);
} else {
res.status(400).send('No transport found for sessionId');
}
});
app.listen(3001, () => {
console.log("Server is running on http://localhost:3001");
});- 创建McpServer工具
- 在服务器工具中,我们传递函数名称、描述、模式、函数
- 使用zod指定模式
- 注意:zod中的所有函数都是异步的
- 函数返回有点花哨
- npm i推特-api-v2
- 创建文件mcp.tool.js
- 创建twitter帐户并授予读写权限
- 获取TWITTER_APP_KEY、TWITTER_APP_SECRET、TWITTR_ACCESS_TOKEN、TWITTED_ACCESS_SECRET并将其存储在.env中
- 状态包含我们从客户那里得到的您要发布的内容
- 使用npx nodemon index.js运行服务器
