Twitter自动发布AI代理

一个基于MCP服务器的AI代理,用于自动发布Twitter帖子,支持工具调用和后台连接。

  • by joshuamanivinod
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 joshuamanivinod/twitter-agent-using-mcp

使用说明

创建了一个AI代理,使用mcp服务器代表我发布推特帖子

客户端

  1. 导入readline/promises
  2. 使用readline创建i/o接口
  3. 创建聊天循环来提问(promise)
  4. 将用户、部分(文本、类型)问题推送到历史记录
  5. 使用wait创建响应
  6. 使用@modelcontextprotocol/sdk导入McpServer、SSEServerTransport
  7. 创建mcpClient
  8. 全局声明工具=[]
  9. 使用SSEClientTransport将mcpClient连接到后端(“/sse”)
  10. 这样我们就可以访问后端的所有资源提示和工具
  11. 在console.log的帮助下映射每个工具(“可用工具:”,工具);
  12. 列出chatloop中的工具
  13. 为了告诉AI hamare paas itne tools hai,aur tum uska使用kar sakte ho,我们在使用generateContent进行响应的同时添加配置
    config:{
      tools:[
        {
          functionDeclarations: tools
        }
      ]
    }
  1. 将调用chatloop()从mcpClient外部转移到内部
  2. 每当ai执行函数调用时,我们都会看到console.log(respond.butions[0].content)或console.log
  3. 我们需要允许ai进行函数调用,怎么做?通过执行const functionCall=respond.resides[0].content.parts[0].functionCall,如果存在functionCall,则调用chatloop(functionCall)和chatloop中(toolCall),然后执行mcpClient.callTool
  4. 将Calling工具和toolResult都推送到chatHistory
  5. 运行节点index.js

服务器

  1. 锅炉板(运行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");
});
  1. 创建McpServer工具
  2. 在服务器工具中,我们传递函数名称、描述、模式、函数
  3. 使用zod指定模式
  4. 注意:zod中的所有函数都是异步的
  5. 函数返回有点花哨
  6. npm i推特-api-v2
  7. 创建文件mcp.tool.js
  8. 创建twitter帐户并授予读写权限
  9. 获取TWITTER_APP_KEY、TWITTER_APP_SECRET、TWITTR_ACCESS_TOKEN、TWITTED_ACCESS_SECRET并将其存储在.env中
  10. 状态包含我们从客户那里得到的您要发布的内容
  11. 使用npx nodemon index.js运行服务器