tgcloud — Telegram serverless bots
OCI · GHCR.IO/SDAMARKETING/TGCLOUD-MCP · 2 COMPONENTS
MCP server for Telegram serverless bots: lifecycle, deploys, migrations, webhooks via tgcloud CLI
Available components
Last scanned (20 hours ago)
Scores higher than 62% of OCI servers
Category CI/CD and DevOps
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability86
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 2203 tokens (~100/item across 22 items; 16 tools + 6 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management7
- Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "deploy" implies "deploy" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 16 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Oct 26 −1
- Tool safety: pass → unverified ▼ security
- Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
- Schema quality: 1759 → 2203 ▼ functional
- Capabilities: pass → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Stability: unverified → 0.03 ▲ functional
- Destructive annotations: pass → 0 functional
- Package version: 0.2.1 → 0.3.3 functional
- Package version: 0.2.1 → 0.3.2 functional
- 14 Oct 26 +33
- Injection markers: unverified → pass ▲ security
- First check of Judged manipulation: pass security
- Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
- MCP protocol: unverified → pass ▲ functional
- Schema quality: unverified → 100 ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- First check of Schema quality: fail functional
- First check of Schema quality: excellent functional
- First check of Destructive annotations: pass functional
- First check of Schema quality: pass functional
- First check of Tool coverage: 100 functional
- 12 Oct 26 10
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 16 Oct 2026 · Analysed oci/ghcr.io/sdamarketing/tgcloud-mcp@0.3.3
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | oci |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_module Add a module ~171
Scaffolds a module with `tgcloud add <target>` (tgcloud/ layout). handlers/<type> is one flat update handler (message, edited_message, callback_query, inline_query, chosen_inline_result, shipping_query, pre_checkout_query, poll, poll_answer, my_chat_member, chat_member, chat_join_request, message_reaction, channel_post, …). endpoints/<name> is a Mini App function (POST /api/<name>; identifier, not starting with a digit). lib/<path> is shared code and may be nested. Existing files are never overwritten.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
| target | string | yes | Module path, for example handlers/callback_query, endpoints/getProfile, or lib/cart |
No output schema declared.
No examples provided.
create_project Create a bot project ~84
Scaffolds a serverless bot with `npm create @tgcloud/bot <name>` inside parent_dir. Needs Node.js 18+ and the npm registry. Does not overwrite existing files.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | New project directory name, for example my-bot |
| parent_dir | string | yes | Absolute path of the directory that will contain the new project |
No output schema declared.
No examples provided.
deploy Build the Mini App and push ~127
Runs `npm run build` when package.json has a build script, then `tgcloud push`. Use this after front-end edits: a plain push uploads static.source as it sits on disk and never runs the bundler, so it would publish a stale dist. Does not migrate the database and never passes --force. skip_build=true pushes without building. If there is no build script, only push runs.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
| skip_build | boolean | – | true — skip npm run build and only push |
No output schema declared.
No examples provided.
diff Line diff ~47
Line-by-line diff of the local project against the deployed snapshot (tgcloud diff). Offline.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
fetch Refresh the cloud snapshot ~53
Updates the local snapshot of what is deployed without touching working files (tgcloud fetch). Use it before resolving a revision conflict.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
init_project Initialize a project in place ~108
Scaffolds tgcloud into an existing directory (tgcloud init, offline): tgcloud/schema.js, handlers/, endpoints/, lib/, tgcloud.jsonc, AGENTS.md, docs/tgcloud-sdk.md. In a front-end project it detects the bundler, sets static.source, and adds an npm run deploy script (build, then push) without overwriting files you already have.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
login_bot Link a bot to the project ~159
Runs `tgcloud login` with a CLI access token (app<id>:<secret> from @BotFather → your bot → Serverless → CLI Access → Access token). This is NOT the Bot API token (123456:AA…). The CLI wants a TTY, so the token is written to stdin with TGCLOUD_ASSUME_TTY=1 and masked in every tool result. NEVER show the token to the user after this call. In CI, set TGCLOUD_TOKEN and skip login.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
| token | string | yes | CLI access token from @BotFather (Serverless → CLI Access), form app<id>:<secret> |
No output schema declared.
No examples provided.
migrate Database migrations ~253
Applies schema.js changes to the database (tgcloud migrate). push never does this. dry_run defaults to true (--dry-run): preview only. Applying (dry_run: false) requires confirm: true. apply "safe" passes --safe (auto-apply safe changes, skip warnings and manual steps). apply "yes" or omitting apply passes --yes (safe changes plus every warning, including .deprecated drops that delete data; manual type changes are still skipped). local: true diffs against the local schema.js instead of the deployed one (--local) and can be combined with either mode. Show the user the preview before applying. Warn when the preview contains a drop.
| Name | Type | Req | Description |
|---|---|---|---|
| apply | string | – | When dry_run is false: "safe" → --safe, "yes" (default) → --yes |
| confirm | boolean | – | Required confirm: true to apply migrations, including drops of .deprecated columns and tables |
| dry_run | boolean | – | true (default) — preview only (--dry-run) |
| local | boolean | – | Diff against local schema.js instead of the deployed schema (--local) |
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
pull Pull from the cloud ~56
Makes the local project match the cloud: updates the snapshot and working files (tgcloud pull). Does not write the Mini App build folder.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
push Deploy to the cloud ~224
Uploads changed modules in one atomic batch (tgcloud push). Without files, mirrors the whole local module set (deletions included) and, when tgcloud.jsonc names static.source, uploads that build folder exactly as it is on disk. push never runs the bundler — after front-end edits call deploy, or the previous build goes live. A targeted push never deletes other modules and leaves static files untouched unless the target is the build folder. push does not migrate the database; it only prints pending schema changes. Adding or removing a handler can leave the webhook out of sync — follow with webhook_sync. force=true skips the revision check and requires confirm: true.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | Required confirm: true for destructive operations (the --force flag, reset, and similar) |
| files | array | – | Specific files or directories to deploy; omit to deploy every change |
| force | boolean | – | Pass --force (dangerous, requires confirm: true) |
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
reset Discard local changes ~91
DESTRUCTIVE: discards local module edits and restores the working tree from the last known cloud snapshot (tgcloud reset). Does not touch the Mini App build folder. Requires confirm: true.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | Required confirm: true for destructive operations (the --force flag, reset, and similar) |
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
run_handler Run a module without deploying ~200
Runs a handler or an endpoint on the platform using local files, without publishing them (tgcloud run). args is the payload (a Message for handlers/message, or the endpoint input) as a JSON5 object. ctx is the second argument (--ctx): the raw update for a handler, or initData for an endpoint, for example { initData: { user: { id: 1, first_name: "Ann" } } }. Returns the value, captured console logs, and elapsed time.
| Name | Type | Req | Description |
|---|---|---|---|
| args | string | – | Handler payload or endpoint input as JSON5, for example '{ chat: { id: 1 }, text: "hi" }' |
| ctx | string | – | Second-argument context as JSON5 (passed as --ctx) |
| module | string | yes | Module path, for example handlers/message or endpoints/getProfile |
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
status Project status ~76
Shows local changes against the deployed snapshot (tgcloud status). Offline. Also reports stray .js files inside tgcloud/ that will not deploy, Mini App static diffs, and a webhook that is out of sync with the deployed handlers.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
upgrade Upgrade a pre-0.2.0 project layout ~141
One-time move of schema.js, handlers/, and lib/ from the project root into tgcloud/ (tgcloud upgrade). Required before other commands on projects created before CLI 0.2.0. Keeps the bot link; nothing needs to be redeployed. dry_run defaults to true and only prints the planned moves. Applying (dry_run: false) requires confirm: true.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | Required confirm: true when dry_run is false |
| dry_run | boolean | – | true (default) — print planned moves only (--dry-run) |
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
webhook_status Webhook status ~85
Shows the platform-managed webhook (tgcloud webhook): URL, allowed_updates, pending update count, the last delivery error, and whether it is in sync with the deployed handlers. First step when a bot is silent. Deploying or removing a handler can leave it out of sync.
| Name | Type | Req | Description |
|---|---|---|---|
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
webhook_sync Re-sync the webhook ~112
Points the webhook at the platform and rebuilds allowed_updates from deployed handlers (tgcloud webhook sync). Call it after adding or removing a handler. drop_pending=true discards updates Telegram already queued — destructive, requires confirm: true.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | Required confirm: true when drop_pending is true |
| drop_pending | boolean | – | Discard queued updates (--drop-pending, requires confirm: true) |
| project_dir | string | yes | Absolute path to a tgcloud project directory (contains .tgcloud/) |
No output schema declared.
No examples provided.
How do I install the tgcloud — Telegram serverless bots MCP server?
tgcloud — Telegram serverless bots runs locally as a container image, launched with docker run --rm -i -e TGCLOUD_TOKEN ghcr.io/sdamarketing/tgcloud-mcp:0.3.3. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
oci · ghcr.io/sdamarketing/tgcloud-mcp
claude mcp add sdamarketing-tgcloud-mcp -- docker run --rm -i -e TGCLOUD_TOKEN ghcr.io/sdamarketing/tgcloud-mcp:0.3.3
This image reads TGCLOUD_TOKEN. Set it in your client's env block for this server; docker run -e passes it through to the container.
What is the tgcloud — Telegram serverless bots MCP server?
tgcloud — Telegram serverless bots is an MCP server listed in the public MCP registry as io.github.sdamarketing/tgcloud-mcp. MCP server for Telegram serverless bots: lifecycle, deploys, migrations, webhooks via tgcloud CLI. This page covers its container image (ghcr.io/sdamarketing/tgcloud-mcp).
Is the tgcloud — Telegram serverless bots MCP server safe to use?
tgcloud — Telegram serverless bots scores 43 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the tgcloud — Telegram serverless bots MCP server expose?
tgcloud — Telegram serverless bots exposes 16 tools: create_project, init_project, login_bot, add_module, upgrade, and 11 more. Their descriptions and schemas cost roughly 1,987 tokens of context every time the server is loaded.
Is the tgcloud — Telegram serverless bots MCP server still maintained?
tgcloud — Telegram serverless bots is still listed as active in the MCP registry. We last reached this channel on 16 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the tgcloud — Telegram serverless bots MCP server under?
tgcloud — Telegram serverless bots declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.