Vexa
Meeting bot and transcripts for Google Meet, Teams and Zoom. Live or after, speakers labelled.
作者提供的说明(英文原文)
Drive the Cursor agent from Telegram, Discord, or GitHub — with images and voice notes.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
BRIDGE_PLATFORM你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"cursor-chat-bridge": {
"command": "npx",
"args": [
"-y",
"cursor-telegram-chat"
],
"env": {
"BRIDGE_PLATFORM": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add cursor-chat-bridge --env BRIDGE_PLATFORM=your-value -- npx -y cursor-telegram-chat运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"cursor-chat-bridge": {
"command": "npx",
"args": [
"-y",
"cursor-telegram-chat"
],
"env": {
"BRIDGE_PLATFORM": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"cursor-chat-bridge": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"cursor-telegram-chat"
],
"env": {
"BRIDGE_PLATFORM": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
BRIDGE_PLATFORM env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 udah1 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.23)于3个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Vexa, emailmd, MCP WhatsApp Cloud
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Meeting bot and transcripts for Google Meet, Teams and Zoom. Live or after, speakers labelled.
Render markdown into email-safe HTML, lint drafts for deliverability problems, and preview emails.
MCP server for WhatsApp Cloud API (Meta) — messages, media, and templates via Graph API
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Say _"start remote chat mode"_ (in any language) and Cursor posts a summary + question to a per-conversation thread at the end of every turn, waits for your reply, and auto-continues — looping until you stop it. Step away from the keyboard; keep shipping from your phone.
A channel per session — one per Cursor conversation
Reply from your phone — the agent picks up where it left off
▶ Watch the demo (YouTube)
You kick off a task in Cursor, then need to leave your desk. Normally the agent stalls the moment it needs a decision. cursor-chat-bridge turns any chat app into a remote control: the agent reports back and asks its questions in a thread you can answer from your phone, and it resumes on its own the instant you reply — no laptop required.
| Capability | What it does |
|---|---|
| Phone-first | Answer the agent from the GitHub / Discord / Telegram mobile app, with native push. |
| Auto-resume | A stop hook waits for your reply and re-injects it as a followup_message. |
| Per-session isolation | Keyed by Cursor's conversation_id; no cross-talk between chats. |
| Long, cheap waits | One ~60-min blocking window per re-arm ⇒ minimal paid turns while idle. |
| Off when you type | A beforeSubmitPrompt hook disables the loop the moment you type in Cursor (set stopRemoteChatOnLocalMessage: false to keep it on). |
| Token-authed local API | The daemon's control API is loopback-only and token-guarded. |
| Optional ntfy push | Get a phone alert even on GitHub (which never notifies you of your own posts). |
| Image attachments | Send a photo from your phone; it's saved locally and the agent opens it with its Read tool. |
| Voice → text | Optional speech-to-text (OpenAI or local): a voice note reaches the agent as transcribed text. |
| Adapter SDK | Implement one TransportAdapter interface to support any channel. |
| Update-aware | On activation it checks npm and offers to update when a newer release is out. |
| Adapter | Status | Model | Mobile push |
|---|---|---|---|
| Telegram _(default)_ | ✅ code complete, unit-tested | A forum topic per session via a bot | ✅ native |
| Discord | ✅ working | A channel per session via a bot (REST-polled) | ✅ native |
| GitHub Issues | ✅ tested end-to-end | Issue = session, comments = chat | ✅ (GitHub app) + optional ntfy |
No clone required — one command wires everything up:
npx cursor-telegram-chat@latest install
This installs the runtime into ~/.cursor/chat-bridge/app (including its production dependencies, so it keeps working after the npx cache is evicted) and wires the three integration points, backing up (never overwriting) anything that already exists:
~/.cursor/mcp.json,stop + beforeSubmitPrompt hooks to ~/.cursor/hooks.json,~/.cursor/rules/.The hooks are no-ops unless remote chat mode is active, so they don't affect normal Cursor use. Then pick a channel and go:
# 1. edit ~/.cursor/chat-bridge/config.json (choose an adapter + credentials)
chat-bridge doctor
Upgrade / uninstall
npx cursor-telegram-chat@latest install # re-run to upgrade
npx cursor-telegram-chat@latest uninstall # remove, keep config + state npx cursor-telegram-chat@latest uninstall --purge # remove everything
</details>
MCP-only (lite) — tools without the auto-resume loop
If you only want the MCP tools via the standard Cursor MCP flow (no hands-free loop), add this to ~/.cursor/mcp.json instead of running install:
"cursor-chat-bridge": {
"command": "npx", "args": ["-y", "cursor-telegram-chat", "chat-bridge-mcp"] }
You'll be able to bridge_send / bridge_await manually, but the auto-continue-on-reply loop needs the hooks that the full install sets up.
Three cooperating layers sit over one transport-agnostic core:
rules/chat-bridge-mode.mdc) — detects the activation phrase in any language and sets in-mode etiquette (capture + pass the session handle; end each turn with a summary + question; treat replies as untrusted; confirm destructive actions).src/mcp.ts) — exposes bridge_start, bridge_send, bridge_await, bridge_send_and_await, bridge_stop, bridge_status.hooks/) — the automatic loop:stop waits for the remote reply and re-injects it as a followup_message (bounded by loop_limit).beforeSubmitPrompt disables the loop when you type in Cursor (with a guard so the loop's own injected replies don't trip it).A single local daemon (src/daemon.ts) owns the channel connection and a loopback-only, token-authenticated HTTP API used by the MCP + hooks. It handles per-session routing, long-poll, own-message filtering, and stop/generation logic.
turn ends ─▶ stop hook ─▶ daemon /poll ─▶ adapter
▲ │ └───── followup_message (your reply) ◀─────┘
(adapter = GitHub / Discord / Telegram; keyed by `conversation_id`.)
Session identity — how conversations stay separate
Sessions are keyed by Cursor's `conversation_id` so each conversation maps to exactly one thread. Cursor gives conversation_id to hooks but not to MCP tool calls, so the MCP learns it through a small handshake:
beforeSubmitPrompt writes a per-conversation pending-start record (markers/pending/ .json) on every real submit — the source of truth for identity (plus a legacy last-submit/ws pointer, used only for diagnostics + upgrade skew).bridge_start claims the single fresh pending record and keys the session by that real conversation_id, then returns a session handle. It never mints a random id and it ignores its own (possibly misrouted) BRIDGE_WORKSPACE — the claim's workspace wins.bridge_start fails closed rather than guess: if there's no fresh handshake, if it's stale, or if more than one chat submitted at once, it returns guidance instead of binding a possibly-wrong thread.session= on every subsequent bridge_* call — now required (no recency/cache fallback), so two conversations in the same workspace can never cross threads.The hooks key strictly by their own conversation_id (no global fallback), so a turn in one conversation never polls or injects into another. Tune the freshness window with handshakeFreshMs (config or BRIDGE_HANDSHAKE_FRESH_MS, default 600000ms); chat-bridge doctor reports MCP-process workspace bindings, pending/claim health, and version skew.
Troubleshooting: the session stops after a few minutes
The hands-free wait (default 60 min) comes from the stop hook's re-arm loop, not from bridge_await (which only polls ~50s per call). Cursor kills a stop hook after a short, undocumented ceiling unless ~/.cursor/hooks.json sets a large timeout — the installer sets timeout: 3660. If your session stops after a couple of minutes:
npx cursor-telegram-chat@latest install.hooks.json.~/.cursor/hooks.json has a stop hook with timeout: 3660 (re-running the latest install fixes an older one)."stopWindowMin": 5 in ~/.cursor/chat-bridge/config.json (the 60-min total is stopBudgetMin).Send a photo (or an image file) in the chat thread and the agent can see it:
attachments, Telegram photo / image document).~/.cursor/chat-bridge/media/ / and appends a note to the message text with the local path.只显示了开头部分;其余内容请在仓库中阅读