Claude에게 Telegram 접근 권한 부여하기: 두 가지 설정 방식과 그 차이가 중요한 이유
요약
Claude에게 Telegram 접근 권한을 부여할 때 사용하는 MCP(Model Context Protocol) 서버의 두 가지 방식인 Bot API와 MTProto의 차이점과 보안 주의사항을 설명합니다. 각 방식의 권한 범위와 설정 시 주의해야 할 환경 변수 및 클라이언트별 설정 파일 위치를 다룹니다.
핵심 포인트
- Bot API는 지정된 채팅만 접근 가능하며 보안성이 높음
- MTProto는 사용자 계정 전체에 접근하므로 세션 파일 관리에 주의 필요
- 클라이언트(Claude Desktop, Codex CLI 등)마다 설정 파일 형식과 경로가 다름
- 세션 파일은 만료되지 않는 실시간 로그인 상태이므로 유출 시 위험함
약 5분이면 Claude에게 당신의 Telegram 접근 권한을 부여할 수 있습니다. 이것이 좋은 생각인지 여부는 당신이 선택하는 매우 다른 두 가지 설정 방식에 전적으로 달려 있습니다. 그리고 대부분의 튜토리얼은 두 가지 방식이 존재한다는 사실을 알려주지 않습니다.
설정 가이드를 작성하면서 사용 가능한 Telegram MCP 서버들을 살펴보았는데, 서버들 사이의 격차는 기능 목록이 시사하는 것보다 훨씬 더 컸습니다.
두 가지 종류, 그리고 그것이 중요한 이유
MCP — Model Context Protocol (모델 컨텍스트 프로토콜) — 는 AI 클라이언트가 외부 도구를 호출할 수 있게 해주는 표준입니다. 서버 하나를 작성하면 Claude Desktop, Cursor, Windsurf, 그리고 Codex CLI가 모두 이를 사용할 수 있습니다. Telegram의 경우, 이는 에이전트가 메시지를 읽고, 검색하고, 보낼 수 있음을 의미합니다.
중요한 질문은 서버가 _무엇으로 로그인하느냐_입니다.
Bot API 서버는 @BotFather로부터 받은 봇 토큰(bot token)으로 인증합니다. 봇은 명시적으로 추가된 채팅만 볼 수 있습니다. 당신의 개인 대화는 봇에게 보이지 않으며, 토큰은 BotFather에서 명령어 하나로 취소할 수 있습니다.
MTProto 서버는 당신의 전화번호로 인증하고 세션 파일(session file)을 저장합니다. 이들은 당신으로서 로그인합니다. 즉, 모든 개인 DM, 당신이 잠복해 있는 모든 그룹, 저장된 메시지, 연락처 등 모든 것이 에이전트가 접근할 수 있는 상태가 됩니다.
두 방식 모두
환경 변수 이름을 주의하세요: TELEGRAM_API_ID가 아니라 API_ID와 API_HASH입니다. 저는 첫 시도 때 이를 추측하여 잘못 입력했고, 그 결과 서버가 실행을 거부했습니다. 다른 서버의 설정(config)을 보고 패턴을 맞추려 하지 말고 README를 읽으세요.
설정 파일의 위치
이 부분은 서버 자체보다 사람들을 더 헷갈리게 만듭니다. 클라이언트마다 위치가 모두 다르기 때문입니다:
| 클라이언트 | 경로 |
|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
| ... |
Codex CLI는 JSON이 아닌 TOML을 사용합니다. 위의 블록을 그대로 붙여넣으면 파싱(parse)되지 않으며, 에러 메시지는 그 이유를 명확하게 알려주지 않습니다. 동일한 설정은 다음과 같습니다:
[mcp_servers.telegram-bot]
command = "uvx"
args = ["telegram-bot-mcp"]
...
또한, Claude Desktop의 경우 창을 닫는 것만으로는 부족합니다. 프로그램을 완전히 종료(Quit)해야 서버가 나타납니다.
주의 깊게 살펴봐야 할 부분
세션 파일(session file)은 범위가 제한된 토큰(scoped token)이 아닙니다. 그것은 실시간 로그인 상태 그 자체입니다. 세션 파일을 읽을 수 있는 것이라면 무엇이든 당신의 Telegram을 읽을 수 있으며, 이는 비밀번호를 교체(rotated password)하는 방식처럼 만료되지 않습니다. 권한을 취소(revoking)한다는 것은 Telegram의 기기 목록에서 해당 세션을 종료하는 것을 의미합니다.
그 사실 하나만으로도 세션 파일을 동기화 폴더에 두거나 git push할 만한 대상에 포함시키지 말아야 할 이유가 충분합니다. 하지만 도난이 발생하지 않더라도 문제가 될 수 있는 두 번째 이슈가 있습니다.
당신의 에이전트는 메시지를 읽습니다. 또한 메시지를 보냅니다. LLM에게는 "데이터 (data)"와 "지시 (instruction)" 사이에 구조적인 차이가 없습니다. 컨텍스트 윈도우 (context window) 내에서는 모두 텍스트일 뿐입니다. 따라서 명령처럼 보이도록 정교하게 만들어진 메시지는 공격 표면 (attack surface)이 되며, 이를 시도하려는 사람은 그저 당신에게 메시지를 보내기만 하면 됩니다.
봇 토큰 (bot token)의 피해 범위 (blast radius)는 해당 봇이 참여 중인 채팅방이지만, 세션 파일의 피해 범위는 당신의 계정 전체입니다.
이러한 점들이 MTProto 서버를 사용할 수 없게 만드는 것은 아닙니다. 다만, 이를 기본 설정이 아닌 의도적인 선택(deliberate choice)으로 만들 뿐입니다. 만약 모든 채팅방에 걸쳐 자신의 대화 기록을 검색해야 한다면, 그만한 대가를 치러야 합니다. 그런 경우에는 다음과 같이 하세요: 보조 계정을 사용하고, 세션 파일(session file)을 어떠한 리포지토리(repo)나 동기화된 디렉터리에도 두지 마세요. 또한, 에이전트(agent)에게 메시지 전송 도구(send tools)를 주기 전에 읽기 도구(read tools)를 먼저 부여하여, 테스트 중인 동안 잘못된 프롬프트(bad prompt)로 인해 실제 사람에게 메시지가 발송되는 일이 없도록 하세요.
이러한 서버들은 모두 커뮤니티 프로젝트입니다. 오픈 소스(Open source)이며 유용하지만, 보안 감사(security audit)를 거치지 않았습니다. 중요한 계정에 연결하기 전에 당신이 실행하려는 것이 무엇인지 반드시 읽어보세요.
저는 설정 생성기(config generator)가 포함된 전체 버전을 작성했습니다. 클라이언트와 액세스 수준(access level)을 선택하면, TOML 변형을 포함하여 해당 클라이언트에 맞는 정확한 코드 블록과 올바른 파일 경로를 출력해 줍니다: Telegram MCP Server: Claude, Cursor 및 AI 에이전트에 Telegram 연결하기
만약 Telegram MCP 설정을 사용하여 무언가를 출시했다면, 어떤 유형을 선택했는지와 그 이유를 진심으로 듣고 싶습니다. 특히 MTProto를 선택했고 이를 격리된 상태로 유지하는 워크플로우(workflow)를 가지고 있다면 더욱 그렇습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기