@overpod/mcp-telegram 1.38.1 → 1.38.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/README.md +10 -4
- package/package.json +8 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.38.2](https://github.com/mcp-telegram/mcp-telegram/compare/v1.38.1...v1.38.2) (2026-06-19)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Documentation
|
|
12
|
+
|
|
13
|
+
* backfill v1.27–v1.28 in CHANGELOG; bump Pages actions off Node 20 ([#56](https://github.com/mcp-telegram/mcp-telegram/issues/56)) ([7786819](https://github.com/mcp-telegram/mcp-telegram/commit/778681917a2bc133ea8821e2ff8739a3f859b257))
|
|
14
|
+
* generate changelog pages from CHANGELOG.md + refresh README ([#54](https://github.com/mcp-telegram/mcp-telegram/issues/54)) ([4422901](https://github.com/mcp-telegram/mcp-telegram/commit/442290178c5bee43cc6828f794ce468930cbe945))
|
|
15
|
+
|
|
8
16
|
## [1.38.1](https://github.com/mcp-telegram/mcp-telegram/compare/v1.38.0...v1.38.1) (2026-06-10)
|
|
9
17
|
|
|
10
18
|
|
|
@@ -350,6 +358,63 @@ Tests: 490/490 pass.
|
|
|
350
358
|
- **Album mixed photo+video** — GramJS accepts mixed arrays via extension-based detection, but this is not covered by tests; recommend uniform media type per album until a live-test checkpoint confirms.
|
|
351
359
|
- **Album flood control** — a 10-item album fans out 10 `messages.UploadMedia` calls inside one rate-limit slot; under heavy contention the later items may still hit `FLOOD_WAIT`. Rate limiter retries apply.
|
|
352
360
|
|
|
361
|
+
## [1.28.1] - 2026-04-22
|
|
362
|
+
|
|
363
|
+
### Added
|
|
364
|
+
- **`telegram-logout`** — new tool (Auth category, annotated `DESTRUCTIVE`). Fully logs out: calls `auth.LogOut` on Telegram servers (session disappears from Settings → Devices), destroys the GramJS client, deletes the local session file, and clears in-memory state. Takes no parameters. Handles every state cleanly — connected (server revoke + local wipe), disconnected with a session file (local wipe only, with a notice), no session (`fail` "Not logged in"), and `auth.LogOut` throwing (local wipe still happens, with a "check Settings → Devices manually" hint).
|
|
365
|
+
|
|
366
|
+
### Changed
|
|
367
|
+
- **`TelegramService.logOut()` hardened** — server-revoke and client-destroy are now split: a successful `auth.LogOut` returns `true` even if `client.destroy()` throws (previously misreported "not confirmed"). The local wipe is verified post-unlink and throws if the session file survives (e.g. read-only Docker mount), instead of falsely reporting success. File removal now always runs even when server-revoke fails (network error, `AUTH_KEY_UNREGISTERED`).
|
|
368
|
+
- **Master cancels active QR login on logout** — a `telegram-logout` request now aborts an in-progress QR login flow before acquiring `globalLock`, instead of queuing behind it for up to 5 minutes.
|
|
369
|
+
|
|
370
|
+
### Testing
|
|
371
|
+
- 322 unit tests (+10 vs v1.28.0) — `hasLocalSession()`, `logOut()` edge cases (connected / disconnected±file / network error / idempotency / FS-throws / destroy-throws-but-revoke-succeeds), and a Master integration test that logout aborts an active login over a real unix socket.
|
|
372
|
+
|
|
373
|
+
### Notes & known limitations
|
|
374
|
+
- In a 3-client FIFO scenario (A holds the lock via login, B queues a tool call, C requests logout), logout correctly aborts A, but B still runs before logout because FIFO order is preserved. A priority-aware queue is deferred.
|
|
375
|
+
|
|
376
|
+
## [1.28.0] - 2026-04-22
|
|
377
|
+
|
|
378
|
+
### Added
|
|
379
|
+
- **QR login through the IPC daemon** — `mcp-telegram login` now flows through the Master daemon over IPC instead of running as a separate process. The new session reaches the Master's memory immediately, with no editor restart. This fixes the "relogin via `mcp-telegram login`" flavor of `AUTH_KEY_DUPLICATED`/`AUTH_KEY_UNREGISTERED`, where the standalone login wrote a fresh session to disk but the running Master kept the old, now-invalidated auth key in memory and then wiped the just-created session on the next tool call.
|
|
380
|
+
- `IpcClient.loginFlow(onQr)` — streams QR frames as they refresh (~every 10s).
|
|
381
|
+
- `handleLoginStart` on Master — runs `startQrLogin` on the shared `TelegramService`.
|
|
382
|
+
- `GlobalLock` (FIFO mutex) — serializes tool calls with the login flow so other clients queue instead of hitting a stale client mid-relogin.
|
|
383
|
+
- `AbortController` — `socket.on("close")` aborts the QR loop if the CLI is interrupted (Ctrl+C / terminal closed); `globalLock` releases immediately instead of blocking tool calls for up to 5 minutes.
|
|
384
|
+
- Session swap now saves to disk first, then adopts in memory and destroys the previous client — prevents orphan Telegram connections accumulating per relogin.
|
|
385
|
+
- Standalone fallback kept — if no Master is running, `mcp-telegram login` works exactly as before.
|
|
386
|
+
|
|
387
|
+
### Changed
|
|
388
|
+
- **BREAKING (internal IPC only): IPC protocol is now a discriminated union** with a required `type` tag (`tool` / `tool_response` / `login_start` / `login_qr` / `login_done`). A new 1.28.0 client and an older 1.27.x Master cannot talk — restart your editor / Claude Code after upgrading so the Master daemon is replaced. No public API or invocation change. (Parent-crash detection already kills stale Masters in most cases, so this is transparent for VS Code / Claude Desktop users.)
|
|
389
|
+
|
|
390
|
+
### Fixed
|
|
391
|
+
- Socket errors on Master now log to stderr instead of being silently dropped.
|
|
392
|
+
- `client.destroy()` in abort branches wrapped in try/catch — guarantees the "QR login aborted" message even if Telegram destroy throws.
|
|
393
|
+
- QR render errors (`QRCode.toString` failure) logged to stderr instead of silently dropped.
|
|
394
|
+
|
|
395
|
+
### Testing
|
|
396
|
+
- 312 unit tests (was 288) — new suites for `GlobalLock` (FIFO ordering, double-release safety), Master login (QR URL forwarding, abort on socket close), child-process integration via tsx, `IpcClient.loginFlow`, and IPC discriminated-union / legacy-protocol rejection.
|
|
397
|
+
|
|
398
|
+
## [1.27.1] - 2026-04-22
|
|
399
|
+
|
|
400
|
+
### Changed
|
|
401
|
+
- Patch release — no new tools, no API changes; pure code-quality and test-coverage work. Refactored `telegram-client.ts` re-exports (eliminates 2 Biome `noUnusedImports` false-positives), replaced unsafe `(e as Error).message` casts with `e instanceof Error` guards in the stats methods, and added `McpRegisteredTool` / `McpServerInternal` types to `ipc-protocol.ts` as a single source of truth (previously duplicated across master.ts and client.ts).
|
|
402
|
+
|
|
403
|
+
### Testing
|
|
404
|
+
- 286 unit tests (+25 vs v1.27.0) — new branch coverage for `wireIpcProxies` (incl. a safety test that the original `TelegramService` handler is never called after wiring), the rate limiter (`throwOnFloodWait`, retry exhaustion, 5xx, GramJS `errorMessage`), and the IPC protocol parser (malformed JSON, blank lines, partial-line buffering, multiple messages per chunk). `rate-limiter.ts` reached 100% statements.
|
|
405
|
+
|
|
406
|
+
## [1.27.0] - 2026-04-21
|
|
407
|
+
|
|
408
|
+
### Added
|
|
409
|
+
- **Master/Client IPC daemon — fixes `AUTH_KEY_DUPLICATED` across concurrent Claude sessions.** Opening multiple Claude sessions used to spawn separate `mcp-telegram` processes that each connected to Telegram with the same session, which Telegram rejected as a duplicate. Now the first process to start becomes the **Master** (holds the single GramJS connection, listens on a Unix socket at `~/.mcp-telegram/daemon.sock`) and every subsequent process becomes a thin **Client** that proxies tool calls to the Master over the socket — one connection, one auth key, no duplicates. Zero config change; same invocation.
|
|
410
|
+
- New files: `src/lock.ts` (atomic `O_EXCL` PID lockfile + stale-lock detection via `kill -0`), `src/ipc-protocol.ts` (IPC message types + newline-delimited JSON parser), `src/master.ts` (Unix socket server, sequential queue dispatcher), `src/client.ts` (`IpcClient` with timeout + retry, handler proxy).
|
|
411
|
+
- Security: socket file is `chmod 0o600` (owner-only); the session string never leaves the Master process.
|
|
412
|
+
|
|
413
|
+
### Fixed
|
|
414
|
+
- Atomic lock via `O_EXCL` prevents a race when multiple sessions start simultaneously; stale socket from a previous crash is removed before `listen` (no `EADDRINUSE`).
|
|
415
|
+
- One-shot connect timeout (not idle) so live connections survive inactivity; 30s IPC call timeout so a stuck Master surfaces a clean error instead of hanging.
|
|
416
|
+
- Sequential `drainQueue()` loop for correct concurrent-request handling; `.catch()` on auto-connect to avoid `unhandledRejection`; idempotent cleanup (`cleanedUp` flag) so SIGINT/SIGTERM don't double-release.
|
|
417
|
+
|
|
353
418
|
## [1.26.0] - 2026-04-20
|
|
354
419
|
|
|
355
420
|
### Added
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/@overpod/mcp-telegram)
|
|
5
5
|
[](https://nodejs.org/)
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
|
-
[](https://modelcontextprotocol.io/)
|
|
8
8
|
[](LICENSE)
|
|
9
9
|
[](https://glama.ai/mcp/servers/overpod/mcp-telegram)
|
|
10
10
|
|
|
@@ -18,13 +18,15 @@ An MCP (Model Context Protocol) server that connects AI assistants like Claude t
|
|
|
18
18
|
|
|
19
19
|
## Features
|
|
20
20
|
|
|
21
|
-
- **Comprehensive tool coverage** -- the most full-featured Telegram MCP server available
|
|
21
|
+
- **Comprehensive tool coverage** -- the most full-featured Telegram MCP server available
|
|
22
22
|
- **MTProto protocol** -- direct Telegram API access, not the limited Bot API
|
|
23
23
|
- **Userbot** -- operates as your personal account, not a bot
|
|
24
24
|
- **Full-featured** -- messaging, reactions, polls, scheduled messages, stickers, media, contacts, and more
|
|
25
25
|
- **Forum Topics** -- list topics, read per-topic messages, send to specific topics, per-topic unread counts
|
|
26
26
|
- **Stickers** -- search sticker sets, browse installed/recent stickers, send stickers to any chat
|
|
27
27
|
- **Account & profile management** -- update profile, set emoji status, birthday, personal channel, profile photo, manage privacy settings, sessions, auto-delete timers
|
|
28
|
+
- **Chat folders** -- create, edit, delete and reorder folders, toggle folder tags, read suggested folders (v1.33.0)
|
|
29
|
+
- **Global privacy** -- read and set account-wide privacy settings (v1.33.0)
|
|
28
30
|
- **Global search** -- search messages across all chats at once
|
|
29
31
|
- **Real-time polling** -- fetch updates via stateless cursors; agent owns `{pts, qts, date}` state
|
|
30
32
|
- **Inline bots & buttons** -- query inline bots, send results, press callback buttons
|
|
@@ -34,6 +36,8 @@ An MCP (Model Context Protocol) server that connects AI assistants like Claude t
|
|
|
34
36
|
- **Admin controls** -- toggle channel signatures, anti-spam, forum mode, prehistory; approve join requests
|
|
35
37
|
- **Stats** -- channel and supergroup analytics (GetBroadcastStats / GetMegagroupStats)
|
|
36
38
|
- **Boosts & Business** -- boost status, boosters list, Telegram Business chat links CRUD, work hours, location, greeting/away/intro messages
|
|
39
|
+
- **Star gifts** -- browse available and saved gifts, save/convert gifts, manage Stars balance and subscriptions (opt-in via `MCP_TELEGRAM_ENABLE_STARS=1`, v1.34.0)
|
|
40
|
+
- **Shared daemon** -- one background process serves multiple MCP clients over a single Telegram session; see the [shared-daemon guide](https://mcp-telegram.github.io/mcp-telegram/guides/shared-daemon) (v1.38.0)
|
|
37
41
|
- **QR code login** -- authenticate by scanning a QR code in the Telegram app
|
|
38
42
|
- **Session persistence** -- login once, stay connected across restarts
|
|
39
43
|
- **Human-readable output** -- sender names are resolved, not just numeric IDs
|
|
@@ -363,6 +367,8 @@ All tools are auto-discoverable via MCP — your AI client will see the full lis
|
|
|
363
367
|
| **Rich Media Sending** | `telegram-send-voice`, `telegram-send-video-note` (round video), `telegram-send-location` (static or live), `telegram-send-venue`, `telegram-send-contact`, `telegram-send-dice` (🎲🎯🎰🏀⚽🎳), `telegram-send-album` (2–10 grouped photos/videos) |
|
|
364
368
|
| **Groups** | `telegram-create-group`, `telegram-edit-group`, `telegram-invite-to-group`, `telegram-join-chat`, `telegram-leave-group`, `telegram-kick-user`, `telegram-ban-user`, `telegram-unban-user`, `telegram-set-admin`, `telegram-remove-admin`, `telegram-get-my-role`, `telegram-set-chat-permissions`, `telegram-set-slow-mode`, `telegram-get-admin-log` |
|
|
365
369
|
| **Chat Info** | `telegram-get-chat-info`, `telegram-get-chat-members`, `telegram-get-chat-folders` |
|
|
370
|
+
| **Folders (v1.33.0)** | `telegram-create-folder`, `telegram-edit-folder`, `telegram-delete-folder`, `telegram-reorder-folders`, `telegram-get-suggested-folders`, `telegram-toggle-folder-tags` |
|
|
371
|
+
| **Global Privacy (v1.33.0)** | `telegram-get-global-privacy-settings`, `telegram-set-global-privacy-settings` |
|
|
366
372
|
| **Invite Links** | `telegram-create-invite-link`, `telegram-get-invite-links`, `telegram-revoke-invite-link` |
|
|
367
373
|
| **Contacts** | `telegram-get-contacts`, `telegram-add-contact`, `telegram-get-contact-requests` |
|
|
368
374
|
| **Moderation** | `telegram-block-user`, `telegram-unblock-user`, `telegram-report-spam` |
|
|
@@ -381,7 +387,7 @@ All tools are auto-discoverable via MCP — your AI client will see the full lis
|
|
|
381
387
|
| **Read Receipts (v1.30.0)** | `telegram-get-message-read-participants`, `telegram-get-outbox-read-date` |
|
|
382
388
|
| **Boosts** | `telegram-get-my-boosts`, `telegram-get-boosts-status`, `telegram-get-boosts-list` |
|
|
383
389
|
| **Business (v1.32.0)** | `telegram-get-business-chat-links`, `telegram-create-business-chat-link`, `telegram-edit-business-chat-link`, `telegram-delete-business-chat-link`, `telegram-resolve-business-chat-link`, `telegram-set-business-hours`, `telegram-set-business-location`, `telegram-set-business-greeting`, `telegram-set-business-away`, `telegram-set-business-intro` |
|
|
384
|
-
| **Opt-in (env-gated)** | `telegram-get-group-call`, `telegram-get-group-call-participants` (requires `MCP_TELEGRAM_ENABLE_GROUP_CALLS=1`)
|
|
390
|
+
| **Opt-in (env-gated)** | `telegram-get-group-call`, `telegram-get-group-call-participants` (requires `MCP_TELEGRAM_ENABLE_GROUP_CALLS=1`); Stars & gifts `telegram-get-stars-status`, `telegram-get-stars-transactions`, `telegram-get-stars-topup-options`, `telegram-get-stars-subscriptions`, `telegram-change-stars-subscription`, `telegram-get-available-star-gifts`, `telegram-get-saved-star-gifts`, `telegram-save-star-gift`, `telegram-convert-star-gift` (requires `MCP_TELEGRAM_ENABLE_STARS=1`); `telegram-get-quick-replies`, `telegram-get-quick-reply-messages` (requires `MCP_TELEGRAM_ENABLE_QUICK_REPLIES=1`) |
|
|
385
391
|
|
|
386
392
|
> **Tip**: Ask your AI assistant *"What Telegram tools are available?"* to get the full list with parameters and descriptions.
|
|
387
393
|
|
|
@@ -392,7 +398,7 @@ Some tools are disabled by default and must be opted in via environment variable
|
|
|
392
398
|
| Variable | Value | Tools enabled |
|
|
393
399
|
|----------|-------|---------------|
|
|
394
400
|
| `MCP_TELEGRAM_ENABLE_GROUP_CALLS` | `1` | `telegram-get-group-call`, `telegram-get-group-call-participants` |
|
|
395
|
-
| `MCP_TELEGRAM_ENABLE_STARS` | `1` |
|
|
401
|
+
| `MCP_TELEGRAM_ENABLE_STARS` | `1` | Stars balance & transactions, top-up options, subscriptions, and Star Gifts (browse / save / convert) |
|
|
396
402
|
| `MCP_TELEGRAM_ENABLE_QUICK_REPLIES` | `1` | `telegram-get-quick-replies`, `telegram-get-quick-reply-messages` |
|
|
397
403
|
|
|
398
404
|
Add these to your `.env` file or MCP client config to enable them.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@overpod/mcp-telegram",
|
|
3
|
-
"version": "1.38.
|
|
3
|
+
"version": "1.38.2",
|
|
4
4
|
"description": "MCP server for Telegram userbot — messages, media, reactions, polls & more. Built on GramJS/MTProto.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -34,7 +34,11 @@
|
|
|
34
34
|
"test": "tsx --test 'src/**/*.test.ts'",
|
|
35
35
|
"test:watch": "tsx --test --watch 'src/**/*.test.ts'",
|
|
36
36
|
"test:coverage": "c8 --all --src src --exclude 'src/**/*.test.ts' --reporter=text tsx --test 'src/**/*.test.ts'",
|
|
37
|
+
"gen:changelog": "tsx scripts/gen-changelog-docs.ts",
|
|
38
|
+
"gen:changelog:check": "tsx scripts/gen-changelog-docs.ts --check",
|
|
39
|
+
"predocs:dev": "npm run gen:changelog",
|
|
37
40
|
"docs:dev": "vitepress dev docs",
|
|
41
|
+
"predocs:build": "npm run gen:changelog",
|
|
38
42
|
"docs:build": "vitepress build docs",
|
|
39
43
|
"docs:preview": "vitepress preview docs"
|
|
40
44
|
},
|
|
@@ -68,12 +72,12 @@
|
|
|
68
72
|
"zod": "^4.4.3"
|
|
69
73
|
},
|
|
70
74
|
"devDependencies": {
|
|
71
|
-
"@biomejs/biome": "^2.
|
|
72
|
-
"@types/node": "^25.9.
|
|
75
|
+
"@biomejs/biome": "^2.5.0",
|
|
76
|
+
"@types/node": "^25.9.3",
|
|
73
77
|
"@types/qrcode": "^1.5.6",
|
|
74
78
|
"c8": "^11.0.0",
|
|
75
79
|
"tsx": "^4.22.4",
|
|
76
80
|
"typescript": "^6.0.3",
|
|
77
|
-
"vitepress": "^
|
|
81
|
+
"vitepress": "^2.0.0-alpha.17"
|
|
78
82
|
}
|
|
79
83
|
}
|