内部语音
你内心的想法,发送到Telegram
*用于与Claude Code和任何应用程序进行双向通信的MCP服务器*

这是一个适当的 模型上下文协议(MCP)服务器 这使得任何Claude实例都可以通过Telegram与您通信。只需授予Claude访问此MCP服务器的权限,它就可以实时发送通知、提问和接收您的消息!
🆕 MCP服务器新手? 从 新手指南 -无需经验! 免费使用、分享和修改! 看 许可证 了解详情。
为什么存在
在尝试了电子邮件、短信和谷歌聊天集成后,Telegram成为了以下方面的最佳解决方案:
- ✅ 标准化MCP集成 -自动处理任何Claude实例
- ✅ 即时双向通信
- ✅ 免费可靠
- ✅ 适用于所有设备
- ✅ 简单设置
- ✅ 无运营商依赖关系
特性
核心沟通
- 💬 双向通信 -向Claude发送消息,获取回复
- ❓ 问答流程 -克劳德可以问你问题并等待答案
- 🔔 优先级通知 -信息、成功、警告、错误、问题的不同图标
- 🌐 HTTP API -从任何应用程序/项目轻松集成
- 🚀 后台服务 -独立运行,始终可用
- 🔧 MCP协议 -在任何Claude项目中作为标准MCP服务器工作
多项目支持
- 📁 项目上下文 -所有消息都显示它们来自哪个项目
- 🎯 目标邮件 -向特定项目发送消息:
ProjectName: your message - 📊 会话跟踪 -监控项目中活跃的Claude会话
- 🔄 自动会话注册 -Claude启动时自动注册项目
消息队列系统
- 📬 线下排队 -项目脱机时的消息队列
- 📥 永久存储 -排队消息在重新启动后仍然有效
- ⏰ 自动配送 -Claude开始该项目时传递的消息
- 🧹 自动清理 -旧邮件自动过期
远程Claude Spawner
- 🚀 远程产卵 -在Telegram的任何项目中启动Claude
- 📝 项目注册表 -注册项目以便于远程访问
- 🔄 自动生成 -消息到达时可选择自动启动
- 💀 进程管理 -追踪并杀死生成的Claude实例
- 🎯 初始提示 -让克劳德开始一项具体任务
运作原理
这是一个 标准MCP服务器 它的工作原理与任何其他MCP工具一样。安装和配置后:
- 桥梁运行 作为后台服务(连接到Telegram)
- MCP服务器 需要时由Claude自动启动
- 克劳德发现 5工具自动
- 你沟通 通过Telegram实时
快速开始
1.创建你的电报机器人
- 打开电报 并搜索
@BotFather - 发送
/newbot - 按照提示操作:
- 为你的机器人选择一个名字(例如,“我的克劳德桥”) - 选择用户名(例如,“my_claude_bridge_bot”)
- 保存您的机器人令牌 -BotFather会给你一个令牌,比如:
1234567890:ABCdefGHIjklMNOpqrsTUVwxyz- 找到你的机器人 在Telegram中使用您创建的用户名
2.安装和配置
# Clone or download this repo
cd innervoice
# Install dependencies
pnpm install
# The .env file is created automatically!
# Just edit it and add your bot token
# TELEGRAM_BOT_TOKEN=your_token_here编辑 .env:
TELEGRAM_BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
TELEGRAM_CHAT_ID= # Leave empty - auto-set on first use
PORT=3456
HOST=localhost
ENABLED=true3.构建和启动
# Build the project
pnpm build
# Start the bridge service
pnpm dev
# Or run as background daemon
pnpm daemon4.初始化你的机器人
- 打开Telegram,找到你的机器人
- 发送
/start到你的机器人 - 机器人将自动回复并保存您的聊天ID
- 测试用
/status验证它是否正常工作
5.将MCP服务器添加到Claude
✨ 自动启动功能: MCP服务器现在可以在需要时自动启动Telegram网桥,无需单独运行!
选项A:Claude代码命令行界面(推荐)
注: 使用 claude mcp add 自动添加服务器 全球范围内 (适用于所有项目)。这是推荐的方法。对于Mac和Linux:
# Navigate to the innervoice directory
cd /path/to/innervoice
# Add the MCP server globally (available in all projects)
claude mcp add --transport stdio telegram \
--env TELEGRAM_BRIDGE_URL=http://localhost:3456 \
-- node "$(pwd)/dist/mcp-server.js"
# Verify it was added globally
claude mcp list对于Windows(PowerShell):
# Navigate to the innervoice directory
cd C:\path\to\innervoice
# Add the MCP server globally
claude mcp add --transport stdio telegram `
--env TELEGRAM_BRIDGE_URL=http://localhost:3456 `
-- node "$((Get-Location).Path)\dist\mcp-server.js"
# Verify it was added
claude mcp list对于Windows(命令提示符):
# Navigate to the innervoice directory
cd C:\path\to\innervoice
# Add the MCP server globally
claude mcp add --transport stdio telegram --env TELEGRAM_BRIDGE_URL=http://localhost:3456 -- node "%CD%\dist\mcp-server.js"
# Verify it was added
claude mcp list选项B:手动配置文件设置
添加到您的Claude Code MCP设置中:
Mac/Linux: ~/.claude.json 窗户: %USERPROFILE%\.claude.json
{
"mcpServers": {
"telegram": {
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/innervoice/dist/mcp-server.js"
],
"env": {
"TELEGRAM_BRIDGE_URL": "http://localhost:3456"
}
}
}
}找到你的绝对路径:
Mac/Linux:
cd innervoice && pwd
# Use output: /dist/mcp-server.jsWindows(PowerShell):
cd innervoice
(Get-Location).Path
# Use output: \dist\mcp-server.jsWindows(命令提示符):
cd innervoice
cd
# Use output: \dist\mcp-server.js6.可用工具
配置后,Claude可以自动使用:
telegram_notify-发送带有项目上下文的通知telegram_ask-提问并等待答案telegram_get_messages-检查您的消息telegram_reply-回复您的消息telegram_check_health-检查网桥状态telegram_toggle_afk-切换AFK模式(启用/禁用通知)telegram_check_queue-启动时检查排队的消息
查看详细的工具信息:
pnpm tools
# or
node scripts/list-tools.js7.AFK模式-控制您的通知
使用 /afk 斜线命令用于打开/关闭通知:
# In Claude Code, just type:
/afk这非常适合:
- 启用 当你离开电脑时(通过Telegram收到通知)
- 禁用 当你积极工作时(没有干扰)
网桥运行时,切换状态将保留,您将收到一条Telegram消息,确认每次更改。
可选:安装权限通知挂钩
默认情况下,AFK模式仅在Claude明确使用通知工具时发送通知。如果您想在以下时间收到Telegram提醒 权限提示 出现(这样你就知道Claude正在等待批准),安装权限挂钩:
推荐:全局安装(适用于所有项目)
cd /path/to/innervoice
./scripts/install-hook.sh --global或按项目安装:
# Install in a specific project
./scripts/install-hook.sh /path/to/your/project
# Or install in current directory
cd /path/to/your/project
/path/to/innervoice/scripts/install-hook.sh这将向您发送一条Telegram消息,如:
⏸️ 克劳德需要许可 工具: Bash 行动: 检查刮集文件 检查您的终端以批准或拒绝。要卸载,请执行以下操作:
- 全球的:
rm ~/.claude/hooks/PermissionRequest.sh - 每个项目:
rm .claude/hooks/PermissionRequest.sh
8.验证全局设置
添加MCP服务器后,验证其是否全局可用:
# Check that telegram appears in the list
claude mcp list
# Should show:
# ✓ telegram: Connected故障排除: 如果 telegram 它只出现在一个项目中,而不出现在其他项目中,它被添加到项目特定的配置中,而不是全局配置中。要修复:
- 打开
~/.claude.json在你的编辑器中 - 查找
telegram服务器配置projects→your-project-path→mcpServers - 行动 到根级别
mcpServers部分(与其他全局服务器处于同一级别) - 移除
telegram从项目特定部分进入
示例结构:
{
"mcpServers": {
"telegram": {
"type": "stdio",
"command": "node",
"args": ["/path/to/innervoice/dist/mcp-server.js"],
"env": {"TELEGRAM_BRIDGE_URL": "http://localhost:3456"}
}
},
"projects": {
"/your/project/path": {
"mcpServers": {} // Should be empty or not contain telegram
}
}
}9.测试它
重启克劳德代码,然后告诉克劳德:
“通过Telegram向我发送测试通知”
Claude将自动发现并使用 telegram_notify 工具!
使用场景
InnerVoice支持多种使用模式,具体取决于您的工作流程:
场景1:单个活动项目
用例: 你正在一个项目中积极工作
它是如何工作的:
- 在项目中启动Claude Code
- Claude自动注册其会话
- 所有消息都将转到活动会话
- 消息显示项目上下文:
📁 MyProject [#abc1234]
例子:
You in Telegram: "Check the test status"
Bot: 💬 Message received - responding...
Claude: "Running tests... ✅ All 42 tests passed!"场景2:多个活动项目
用例: 同时跨多个项目工作
它是如何工作的:
- 在多个项目中启动Claude(每个项目都自动注册)
- 发送目标邮件:
ProjectName: your message - 查看活动会话
/sessions - 每个响应都显示了其项目背景
例子:
You: "/sessions"
Bot: Active Claude Sessions (3)
1. 🟢 ESO-MCP [#abc1234]
Last active: 2m ago
2. 🟢 InnerVoice [#def5678]
Last active: 5m ago
3. 🟢 MyApp [#ghi9012]
Last active: 1m ago
You: "ESO-MCP: run the scraper"
Bot: 💬 Message sent to active session: ESO-MCP
Claude in ESO-MCP: 📁 ESO-MCP [#abc1234]
✅ Scraper started...场景3:离线项目排队
用例: 在Claude运行之前将工作发送到项目
它是如何工作的:
- 发送:
ProjectName: your task - 如果项目脱机,消息将自动排队
- 让克劳德参与那个项目
- Claude在启动时检查队列并处理任务
例子:
You: "MyApp: fix the login bug"
Bot: 📥 Message queued for MyApp (offline)
It will be delivered when Claude starts in that project.
[Later, you start Claude in MyApp]
Claude: 📬 You have 1 queued message:
1. From Richard (2:30 PM)
fix the login bug
These messages were sent while you were offline.
[Claude proceeds to work on the task]场景4:远程克劳德产卵
用例: 无需打开终端即可远程开始工作
设置:
# Register your projects once
You: "/register MyApp ~/code/myapp"
Bot: ✅ Project registered successfully!
📁 MyApp
📍 /Users/you/code/myapp
⏸️ Manual spawn only
Spawn with: /spawn MyApp日常使用:
You: "/spawn MyApp Fix the login bug"
Bot: ⏳ Starting Claude in MyApp...
✅ Claude started in MyApp with prompt: "Fix the login bug"
PID: 12345
You can now send messages to it: MyApp: your message
[Claude automatically starts working on the bug]
Claude: 📁 MyApp [#abc1234]
🔍 Analyzing login flow...
✅ Bug fixed! The session timeout was too short.场景5:自动生成项目
用例: 收到消息后应自动启动的项目
设置:
You: "/register MyApp ~/code/myapp --auto-spawn"
Bot: ✅ Project registered successfully!
📁 MyApp
📍 /Users/you/code/myapp
🔄 Auto-spawn enabled日常使用:
You: "MyApp: run the tests"
Bot: 🚀 Auto-spawning Claude in MyApp...
✅ Claude started in MyApp
PID: 12345
[Claude auto-starts and processes the message]
Claude: 📁 MyApp [#abc1234]
🧪 Running test suite...
✅ All 42 tests passed!场景6:管理多个项目
查看所有项目:
You: "/projects"
Bot: Registered Projects (4)
1. 🟢 ESO-MCP 🔄
📍 /Users/you/code/eso-mcp
🕐 Last: 12/23/2025
2. ⚪ InnerVoice ⏸️
📍 /Users/you/code/innervoice
🕐 Last: 12/22/2025
3. 🟢 MyApp 🔄
📍 /Users/you/code/myapp
🕐 Last: 12/23/2025
4. ⚪ TestProject ⏸️
📍 /Users/you/code/test
🕐 Last: 12/20/2025
🟢 Running ⚪ Offline 🔄 Auto-spawn ⏸️ Manual检查正在运行的进程:
You: "/spawned"
Bot: Spawned Claude Processes (2)
1. ESO-MCP
🆔 PID: 12345
⏱️ Running: 15m
💬 "run the scraper"
2. MyApp
🆔 PID: 12346
⏱️ Running: 5m
Kill with: /kill ProjectName停止项目:
You: "/kill MyApp"
Bot: 🛑 ✅ Claude process terminated in MyApp电报机器人命令
可用机器人命令的完整列表:
会话管理
/sessions-列出所有处于活动状态的Claude会话/queue-查看脱机项目的排队消息
项目管理
/projects-列出所有已注册的项目及其状态/register ProjectName /path [--auto-spawn]-注册新项目/unregister ProjectName-从注册表中删除项目/spawn ProjectName [prompt]-让Claude开始一个项目/spawned-列出所有正在运行的衍生Claude进程/kill ProjectName-终止生成的Claude进程
机器人控制
/start-初始化机器人并保存您的聊天ID/help-显示所有可用命令/status-检查桥梁健康状况和状态/test-发送测试通知
讯息语法
- 常规消息:转到活动克劳德(如果只有一个跑步)
ProjectName: message-发送到特定项目- 如果项目脱机,消息会自动排队
MCP工具参考
配置后,Claude可以自动使用这些工具:
telegram_notify
通过Telegram向您发送通知。
参数:
message(必填):通知文本(支持Markdown)priority(可选):info|success|warning|error|question
克劳德用法示例:
“我已经完成了数据库迁移。让我通知您。” *克劳德使用: telegram_notify({ message: "Database migration complete!", priority: "success" })*telegram_ask
问你一个问题,等待你的答案(屏蔽)。
参数:
question(必填):要问的问题(支持Markdown)timeout(可选):等待毫秒(默认值:300000=5分钟)
克劳德用法示例:
“我应该部署到生产环境吗?让我问你。” *克劳德使用: telegram_ask({ question: "Deploy to production now?" })* *通过Telegram等待您的回复*telegram_get_messages
检查您的未读邮件。
克劳德用法示例:
“让我看看你是否发过任何信息。” *克劳德使用: telegram_get_messages({})*telegram_reply
通过Telegram回复您的消息。
参数:
message(必填):您的回复(支持Markdown)
克劳德用法示例:
“我会通过电报回答你的问题。” *克劳德使用: telegram_reply({ message: "The build succeeded!" })*telegram_check_health
检查Telegram网桥是否正常运行。
克劳德用法示例:
“让我验证一下Telegram网桥是否正常工作。” *克劳德使用: telegram_check_health({})*telegram_toggle_afk
切换AFK(远离键盘)模式-启用或禁用Telegram通知。
无需参数
克劳德用法示例:
“切换AFK模式” *克劳德使用: telegram_toggle_afk({})*何时使用:
- 离开计算机时启用(获取通知)
- 主动工作时禁用(避免中断)
- 桥运行时,状态得以保留
telegram_check_queue
检查是否有Claude脱机时此项目的排队消息。
无需参数
克劳德用法示例:
启动时,让我检查是否有任何排队的消息 *克劳德使用: telegram_check_queue({})*退货:
- Claude脱机时发送的邮件列表
- 包括发件人、时间戳和消息内容
- 检索后邮件标记为已送达
何时使用:
- 启动时赶上离线消息
- 主动检查待处理的工作
- 长时间闲置后
Git设置(用于共享)
如果你想把它推送到你自己的Git仓库:
# Initialize git (if not already done)
git init
# Add all files (gitignore protects secrets)
git add .
# Commit
git commit -m "Initial commit: Telegram MCP server"
# Add your remote
git remote add origin https://github.com/yourusername/innervoice.git
# Push
git push -u origin main什么是安全分享:
- ✅ 所有源代码
- ✅
.env.example(模板) - ✅ 文档
- ✅ 配置模板
受保护的内容(在.gitignore中):
- 🔒
.env(你的机器人令牌和秘密) - 🔒
node_modules/ - 🔒
dist/
为其他人克隆您的存储库
当有人克隆你的仓库时,他们需要:
- 创建自己的Telegram机器人 @BotFather
- 复制模板:
cp .env.example .env - 添加他们的机器人令牌 到
.env - 安装和构建:
pnpm install && pnpm build - 遵循快速入门指南 上方
传统HTTP API(用于直接集成)
如果您想直接使用HTTP API(不使用MCP),您可以:
// Simple notification
await fetch('http://localhost:3456/notify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
message: 'Scraping complete! Found 500 skills.',
priority: 'success'
})
});
// Question with markdown
await fetch('http://localhost:3456/notify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
message: '*Question:*\nContinue scraping sets?\n\nReply: yes/no',
priority: 'question',
parseMode: 'Markdown'
})
});优先级
info- ℹ️ 一般信息success- ✅ 任务完成warning- ⚠️ 警告消息error- ❌ 发生错误question- ❓ 需要您的意见
沟通是如何运作的
基本消息流
- 在Telegram中向机器人发送任何消息
- Bot确认“💬 收到消息-正在响应。.."
- Claude检查消息并在可用时作出响应
- 您将在Telegram中收到包含项目上下文的响应
目标邮件
发送 ProjectName: your message 与特定项目沟通:
- 如果项目正在运行:消息立即送达
- 如果项目脱机:消息队列自动
通知
Claude通过以下方式向您发送更新 telegram_notify 工具包括:
- 项目背景:
📁 ProjectName [#abc1234] - 优先级图标:ℹ️ ✅ ⚠️ ❌ ❓
- Markdown格式支持
问题
- Claude通过发送问题
telegram_ask - 你看”❓ Telegram中的“\[问题\]”
- 您的下一条消息将被自动视为答案
- 克劳德收到你的回复并继续
队列消息
- 向离线项目发送消息
- 消息队列持续存在
- 当Claude开始该项目时,它会检查队列
- 排队的消息被传递和处理
作为后台服务运行
# Build production version
pnpm build
# Start as daemon (requires pm2)
npm install -g pm2
pnpm daemon
# Check logs
pnpm logs
# Stop daemon
pnpm stopAPI终点
POST/通知
向用户发送通知
请求:
{
"message": "Your notification text",
"priority": "info|success|warning|error|question",
"parseMode": "Markdown|HTML"
}答复:
{
"success": true,
"chatId": "7684777367"
}GET/消息
从用户处获取未读消息
答复:
{
"messages": [
{
"from": "Richard",
"message": "What's the status?",
"timestamp": "2025-11-23T04:00:52.395Z",
"read": false
}
],
"count": 1
}POST/消息/读取
将邮件标记为已读
请求:
{
"count": 2 // optional, marks all if not provided
}答复:
{
"markedAsRead": 2
}POST/回复
发送对用户消息的回复
请求:
{
"message": "Here's my response to your question"
}答复:
{
"success": true
}POST/ask
向用户提问并等待答案(屏蔽)
请求:
{
"question": "Should I continue scraping?",
"timeout": 300000 // optional, 5 min default
}答复:
{
"answer": "yes"
}GET/健康
检查服务运行状况
答复:
{
"status": "running",
"enabled": true,
"chatId": "set",
"unreadMessages": 0,
"pendingQuestions": 0
}POST/切换
打开/关闭通知(AFK模式)
答复:
{
"success": true,
"enabled": true,
"previousState": false,
"message": "🟢 InnerVoice notifications ENABLED - You will receive messages"
}GET/状态
获取当前通知状态
答复:
{
"enabled": true,
"message": "Notifications are ON"
}会话管理端点
POST/会话/注册
注册或更新Claude会话
请求:
{
"sessionId": "unique-session-id",
"projectName": "MyProject",
"projectPath": "/path/to/project"
}答复:
{
"success": true,
"sessionId": "unique-session-id",
"projectName": "MyProject"
}GET/会话
列出所有活动的Claude会话
答复:
{
"sessions": [
{
"id": "1234567-abc",
"projectName": "MyProject",
"projectPath": "/path/to/project",
"startTime": "2025-11-23T10:00:00.000Z",
"lastActivity": "2025-11-23T10:30:00.000Z",
"status": "active",
"idleMinutes": 5
}
],
"count": 1
}队列管理端点
GET/queue/:项目名称
获取项目的待处理消息
答复:
{
"projectName": "MyProject",
"tasks": [
{
"id": "task-123",
"projectName": "MyProject",
"message": "Fix the bug",
"from": "Richard",
"timestamp": "2025-11-23T09:00:00.000Z",
"priority": "normal",
"status": "pending"
}
],
"count": 1
}GET/队列/摘要
获取所有排队邮件的摘要
答复:
{
"summary": [
{
"projectName": "MyProject",
"pending": 2,
"delivered": 5,
"total": 7
}
],
"totalProjects": 1
}项目注册表端点
GET/项目
列出所有已注册的项目
答复:
{
"projects": [
{
"name": "MyProject",
"path": "/path/to/project",
"lastAccessed": "2025-11-23T10:00:00.000Z",
"autoSpawn": false,
"metadata": {
"description": "My project description",
"tags": ["web", "api"]
}
}
],
"count": 1
}POST/项目/注册
注册新项目
请求:
{
"name": "MyProject",
"path": "/path/to/project",
"autoSpawn": false,
"description": "Optional description",
"tags": ["tag1", "tag2"]
}答复:
{
"success": true,
"project": {
"name": "MyProject",
"path": "/path/to/project",
"lastAccessed": "2025-11-23T10:00:00.000Z",
"autoSpawn": false
}
}删除/项目/:名称
注销项目
答复:
{
"success": true,
"message": "Project MyProject unregistered"
}Claude Spawner终点
POST/生成
Spawn Claude在一个注册项目中
请求:
{
"projectName": "MyProject",
"initialPrompt": "Optional initial task"
}答复:
{
"success": true,
"message": "✅ Claude started in MyProject",
"pid": 12345
}POST/kill/:项目名称
终止生成的Claude进程
答复:
{
"success": true,
"message": "✅ Claude process terminated in MyProject"
}GET/生成
列出所有生成的Claude进程
答复:
{
"processes": [
{
"projectName": "MyProject",
"pid": 12345,
"startTime": "2025-11-23T10:00:00.000Z",
"initialPrompt": "Fix the bug",
"runningMinutes": 15
}
],
"count": 1
}GET/founded/:项目名称
检查Claude是否在项目中运行
答复:
{
"running": true,
"process": {
"projectName": "MyProject",
"pid": 12345,
"runningMinutes": 15
}
}与ESO-MCP集成
将此助手添加到您的ESO-MCP项目中:
// src/utils/notify.ts
export async function notify(message: string, priority = 'info') {
try {
await fetch('http://localhost:3456/notify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message, priority })
});
} catch (error) {
console.log('Telegram bridge not available');
}
}然后在任何地方使用:
await notify('✅ Skills scraping complete!', 'success');
await notify('❌ Failed to scrape sets page', 'error');环境变量
TELEGRAM_BOT_TOKEN=your_token_here
TELEGRAM_CHAT_ID=auto_detected
PORT=3456
HOST=localhost
ENABLED=true发展
想贡献或修改桥梁吗?看 贡献.md 用于当地开发设置。
许可证
MIT许可证-请参阅 许可证 详情
联系
- 问题: https://github.com/RichardDillman/innervoice/issues
- 电子邮件: rdillman@gmail.com
