telegram-ask-mcp
Enables sending questions and receiving answers via Telegram bots, allowing users to respond to Claude's prompts remotely from their phone.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@telegram-ask-mcpAsk which deployment strategy to use: blue-green, canary, or rolling"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
telegram-ask-mcp
Claude(Claude Code 등)가 선택지를 물어야 할 때 터미널 팝업 대신 텔레그램으로 질문을 보내고, 사용자가 폰에서 누른 버튼·번호·자유 텍스트를 답으로 받아오는 MCP 서버.
자리에 없어도 폰으로 Claude의 질문에 답하고 작업을 계속 진행시킬 수 있다.
🧩 MCP 서버(stdio) · Python
FastMCP· 외부 의존성 없음(표준 라이브러리 +mcp)
┌────────────────────────────────────────┐
│ ❓ 어느 방식으로 배포할까요? │
│ │
│ 1. 블루-그린 │
│ 2. 카나리 │
│ 3. 롤링 │
│ │
│ 👉 버튼을 누르거나 번호를 보내세요. │
│ [ 1. 블루-그린 ] │
│ [ 2. 카나리 ] │
│ [ 3. 롤링 ] │
└────────────────────────────────────────┘
나: 2 ↩목차
Related MCP server: tsgram-mcp
동작 방식
Claude가
ask_via_telegram(question, options)도구를 호출서버가 텔레그램으로 질문 + 번호 인라인 버튼을 전송
사용자가 버튼 탭 / 번호 입력 / 자유 텍스트 중 하나로 응답
서버가
getUpdateslong-poll로 응답을 받아 Claude에 반환약 10분(
TELEGRAM_ASK_WAIT_SEC) 안에 답이 없으면timeout을 반환 → Claude는 평소처럼 터미널에서 다시 질문
⚠️ 왜 기존 팝업을 자동으로 못 가로채나: MCP 서버는 다른 도구(Claude 내장 AskUserQuestion)를 후킹할 수 없다. 그래서 "묻기"를 담당하는 전용 도구를 만들고, Claude가 질문 상황에서 이 도구를 쓰도록 메모리/규칙으로 유도한다. (아래 참고)
사전 준비
Python 3.10 이상
uv (권장 설치 도구) —
curl -LsSf https://astral.sh/uv/install.sh | sh텔레그램 계정 (앱 설치된 폰 또는 데스크톱)
MCP를 지원하는 클라이언트 — Claude Code, Claude Desktop, Cursor 등
1단계 · 텔레그램 봇 만들기 (BotFather)
봇은 텔레그램의 BotFather가 발급한다.
텔레그램에서
@BotFather검색 → 대화 열기 → Start/newbot입력봇 이름(name) 입력 — 표시용. 아무거나 (예:
My Claude Asker)봇 username 입력 — 반드시
bot으로 끝나야 함, 전역에서 유일해야 함 (예:my_claude_asker_bot)성공하면 BotFather가 토큰을 준다. 이렇게 생긴 문자열:
8383648698:AAH...(생략)...xyz🔐 이 토큰은 비밀번호와 동급. 노출되면 누구나 이 봇을 조종할 수 있다. 채팅·코드·캡처에 남기지 말 것. 잃어버리거나 노출되면 BotFather에서
/token(재확인) 또는/revoke(재발급).방금 만든 봇과의 대화를 열고 아무 메시지나 한 번 보낸다 (예:
/start또는hi).❗ 텔레그램 봇은 사용자가 먼저 말을 걸기 전에는 사용자에게 메시지를 보낼 수 없다. 이 단계를 빼먹으면 나중에 질문이 안 날아온다. (그룹/채널이 아니라 봇과의 1:1 대화여야 함)
2단계 · 내 chat_id 알아내기
봇이 메시지를 보낼 대상(=나)의 숫자 ID. 두 방법 중 편한 것:
방법 A — getUpdates (봇 토큰만 있으면 됨)
1단계 6번에서 봇에게 메시지를 보낸 뒤, 브라우저나 터미널에서:
curl -s "https://api.telegram.org/bot<여기에_봇토큰>/getUpdates"응답 JSON에서 result[].message.chat.id 값이 내 chat_id다.
{
"ok": true,
"result": [
{ "message": { "chat": { "id": 8952171082, "type": "private", ... } } }
]
}응답이
"result": []로 비어 있으면 → 봇에게 메시지를 아직 안 보낸 것. 1:1 대화에서 아무거나 보낸 뒤 다시 호출.
방법 B — 헬퍼 봇
텔레그램에서 @userinfobot 또는 @RawDataBot에게 메시지를 보내면 내 숫자 ID를 바로 알려준다.
3단계 · 비밀 파일 만들기
토큰을 MCP 설정 파일에 직접 적지 않으려면(권장), 토큰·chat_id를 담은 비밀 파일 하나를 만든다.
경로는 자유 (예: ~/.config/telegram-ask/secrets.env).
mkdir -p ~/.config/telegram-ask
cat > ~/.config/telegram-ask/secrets.env <<'EOF'
TELEGRAM_BOT_TOKEN=8383648698:AAH...xyz
TELEGRAM_CHAT_ID=8952171082
EOF
chmod 600 ~/.config/telegram-ask/secrets.env # 본인만 읽기형식은
KEY=VALUE또는export KEY="VALUE"라인이면 된다 — 일반 쉘 스크립트도 그대로 OK. 이 파일을 git에 커밋하지 말 것(.gitignore에 추가).
토큰을 파일로 빼지 않고 클라이언트 설정에 직접 적어도 된다(환경변수 참고). 다만 평문 노출 위험이 커진다.
4단계 · 설치
깃에서 바로 설치:
uv tool install git+https://github.com/naryeo628/telegram-ask-mcp또는 클론 후 설치:
git clone https://github.com/naryeo628/telegram-ask-mcp
cd telegram-ask-mcp
uv tool install .성공하면 실행 파일이 생긴다 → ~/.local/bin/telegram-ask-mcp
(경로 확인: which telegram-ask-mcp)
5단계 · MCP 클라이언트에 등록
<you>는 본인 홈 경로로, 비밀 파일 경로는 3단계에서 만든 것으로 바꾼다.
Claude Code (~/.claude.json, user 스코프)
{
"mcpServers": {
"telegram-ask": {
"command": "/Users/<you>/.local/bin/telegram-ask-mcp",
"args": [],
"env": {
"TELEGRAM_ENV_FILE": "/Users/<you>/.config/telegram-ask/secrets.env"
}
}
}
}Claude Desktop (claude_desktop_config.json)
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
같은 mcpServers 블록을 넣으면 된다(위와 동일).
Cursor 등 다른 MCP 클라이언트
mcpServers에 command/args/env를 받는 클라이언트면 동일한 형식으로 등록 가능
(~/.cursor/mcp.json 등).
등록 후 클라이언트를 재시작해야 도구가 로드된다.
6단계 · 연결 확인
클라이언트 재시작 후, Claude에게 check_config 도구를 실행시킨다(또는 직접 호출). 정상이면:
{
"ok": true,
"bot_username": "my_claude_asker_bot",
"bot_id": 8383648698,
"chat_id": "8952171082",
"wait_sec": 600,
"poll_sec": 50
}→ 토큰·chat_id가 잘 잡혔고 봇이 살아있다는 뜻. 이제 ask_via_telegram을 쓰면 폰으로 질문이 온다.
(토큰 값 자체는 절대 출력하지 않는다.)
"항상 텔레그램으로 묻기" 규칙
Claude가 선택지를 물 상황마다 자동으로 이 도구를 쓰게 하려면, 유저/프로젝트 메모리나
CLAUDE.md에 규칙을 적어 둔다:
사용자에게 선택지를 물어야 할 때는 터미널 팝업 대신 telegram-ask 의
ask_via_telegram 를 먼저 호출한다. timeout 이 오면 그때 터미널에서 다시 묻는다.규칙 없이 "이건 텔레그램으로 물어봐"라고 그때그때 시켜도 된다.
도구 레퍼런스
ask_via_telegram(question, options=[], allow_free_text=True)
질문을 텔레그램으로 보내고 답을 받을 때까지 기다린다(long-poll).
인자 | 설명 |
| 질문 문구 (필수) |
| 선택지 라벨 배열. 주면 번호 인라인 버튼으로 표시. 비우면 주관식 |
|
|
반환 (답한 경우)
{ "ok": true, "answered": true, "answer": "카나리",
"via": "button", "option_index": 1, "is_custom": false }via:"button"(버튼 탭) 또는"text"(번호/자유 입력)option_index: 선택지를 고른 경우 0-based 인덱스, 자유 답이면nullis_custom: 선택지에 없는 자유 답이면true
반환 (시간 초과)
{ "ok": true, "answered": false, "timeout": true, "waited_sec": 600 }답하는 법(폰): 버튼을 누르거나, 선택지 번호(
2)를 보내거나, 그냥 원하는 답을 입력하면 된다.
notify_telegram(text)
답을 기다리지 않는 단방향 알림. 작업 완료·승인 요청 안내 등.
반환: { "ok": true, "message_id": 123 }
check_config()
봇 연결(getMe)·대상 chat_id·대기 설정을 점검. 토큰 값은 노출하지 않는다.
환경변수
토큰/chat_id는 리터럴 → 개별 파일 → 공유 env 파일 순으로 먼저 잡히는 값을 쓴다. 세 방식 중 하나로만 주입하면 된다 (토큰은 토큰대로, chat_id는 chat_id대로 서로 다른 소스여도 됨).
변수 | 기본 | 설명 |
| — | (1) 봇 토큰 리터럴. 비밀 |
| — | (1) 대상 chat_id 리터럴 |
| — | (2) 토큰 원문 1줄이 든 파일 경로 |
| — | (2) chat_id 원문 1줄 파일 경로 |
| — | (3) |
|
| 전체 응답 대기 한도(초) |
|
| 1회 long-poll 길이(초) |
TELEGRAM_ENV_FILE값은 서버 시작 시 1회 읽어 캐시한다 — 파일을 바꿨으면 서버(클라이언트)를 재시작.
문제 해결
증상 | 원인 / 해결 |
| env 미주입 또는 파일 경로 오타. |
질문이 폰으로 안 온다 | 봇과 1:1 대화에서 먼저 메시지를 보냈는지 확인(1단계 6번). 봇은 사용자가 먼저 말 걸기 전엔 발송 불가 |
| 위와 동일 — 봇에게 메시지를 보낸 적이 없음 |
답을 보냈는데 반영이 안 됨 | 같은 봇으로 여러 인스턴스가 동시에 long-poll 중인지 확인. |
코드를 고쳤는데 옛 동작 그대로 |
|
chat_id를 모르겠다 | 2단계 방법 A/B |
보안
봇 토큰은 MCP 클라이언트 env(또는 비밀 파일)로만 주입. 레포·문서·로그·프론트에 절대 노출 금지.
비밀 파일은
chmod 600+.gitignore. 노출 의심 시 BotFather/revoke로 즉시 재발급.getUpdates는 한 번에 하나의 소비자만 받는다. 같은 봇으로 여러 인스턴스를 동시에 long-poll 하면 서로 업데이트를 가로챈다 → 단일 사용자 · 단일 인스턴스 로컬 환경을 전제로 설계됨. 여러 머신/세션에서 쓰려면 봇을 분리하는 것을 권장.
개발 · 재배포
git clone https://github.com/naryeo628/telegram-ask-mcp
cd telegram-ask-mcp
# 소스 수정 후 ...
# pyproject.toml 의 version 을 올린다 (uv 가 동일 버전 캐시 휠을 재사용하므로 필수)
uv tool install . --reinstall --no-cache
# 클라이언트(Claude 등) 재시작 → 새 서버 프로세스 로드구조: src/telegram_ask/{config,telegram,server}.py
config.py— 토큰/chat_id 해석(3경로), 대기 설정telegram.py— Bot API 얇은 클라이언트(표준 라이브러리만)server.py— FastMCP 도구 3종 + ask long-poll 루프
라이선스
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/naryeo628/telegram-ask-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server