Atlas / MCP servers / 5dive-ai / 5dive-plugins

5dive-pluginsBLOCK

mcp/5dive-ai/5dive-plugins

Multi-harness plugin marketplace maintained by 5dive — Telegram bridge and related agent-channel integrations.

Verdict
BLOCK
Grade
F
Trust score
36 /100
Exposed tools
34 21r · 12w · 1d
Transport
stdio
License
Apache-2.0
Stars
2
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Claude Code plugin marketplace maintained by 5dive.

The telegram plugin pairs an agent CLI with a Telegram bot — DM the bot, the agent answers. The original targets Claude Code; the runtime forks below bring the same bridge to other agent CLIs that lack Claude Code's channel push protocol.

The remaining poll-based forks share one codebase shape and move in lockstep, checked by test/parity.test.ts and the generator/ (DIVE-9) — a new poll-based runtime is a config block, not a hand-fork. telegram-codex now has an app-server dispatcher in addition to its generated fallback; telegram-opencode is a deliberate exception: opencode's headless server makes a relay simpler than an MCP fork (see its README + the spike).

The other 5dive plugins

Not every 5dive plugin is a Telegram fork. These live here too, and this

Read from source at commit daedc1ca785dOBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add telegram-plugin --env BUZZ_PRIVATE_KEY=${BUZZ_PRIVATE_KEY} --env CONNECTORD_TOKEN=${CONNECTORD_TOKEN} --env OPENCODE_SERVER_PASSWORD=${OPENCODE_SERVER_PASSWORD} --env TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} -- npx -y @5dive/telegram-plugin
claude-desktop
{
  "mcpServers": {
    "telegram-plugin": {
      "command": "npx",
      "args": [
        "-y",
        "@5dive/telegram-plugin"
      ],
      "env": {
        "BUZZ_PRIVATE_KEY": "${BUZZ_PRIVATE_KEY}",
        "CONNECTORD_TOKEN": "${CONNECTORD_TOKEN}",
        "OPENCODE_SERVER_PASSWORD": "${OPENCODE_SERVER_PASSWORD}",
        "TELEGRAM_BOT_TOKEN": "${TELEGRAM_BOT_TOKEN}"
      }
    }
  }
}
03

Exposed tools (34)

21 read · 12 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
accountreadPick auth account
agentsreadTeam
buzz_postwritePost a message to a Buzz channel (Nostr). This is the ONLY way outbound text reaches the relay — your transcript output does not. Omit reply_to to post straight in the channel (the default); pass an inbound message_id as reply_to only when a thread was explicitly requested.
buzz_reactwriteAdd an emoji reaction to a Buzz message.
buzz_readreadRead recent messages from a Buzz channel. Use to recover context — Buzz exposes no in-session history, so this is the pull. Returns normalized events as JSON.
checkpointwriteSave session to resume later
cleardestructiveClear context (same session)
contextreadContext usage + carry-over nudges
digestreadDaily standup digest on/off/at
download_attachmentreadDownload a file attachment from a Telegram message to the local inbox. Use when
edit_messagewriteEdit a message the bot previously sent. Useful for interim progress updates that don
effortreadPick reasoning effort
gatereadFile a 5dive human gate on a row (5dive task need).
goalreadSelf-paced goal
heartbeatwriteHeartbeat schedule
helpreadShow commands
inboxreadPending human gates awaiting you
loginreadAuthenticate your coding-CLI
modelreadPick model + effort
orgreadShow the agent org chart
reactwriteAdd an emoji reaction to a Telegram message. Telegram only accepts a fixed whitelist
recent_messageswriteRecover recent Telegram context after a restart or a new session. Telegram\
replyreadReply in the 5dive dashboard chat. Pass chat_id from the inbound message (normally
restartwriteNew session — full restart
resumereadResume the saved session
startwritePair this chat
statusreadPairing, usage, model
stopwriteInterrupt task
taskwriteRun a 5dive task verb (show, ls, done, deliver, reject, assign, set-body).
tasksreadList open tasks
teamreadTeam (alias for /agents)
updatewriteRefresh plugins, then restart
usageread5h/1w limit usage
wait_for_messagereadBlock until the user sends a Telegram message, then return it.
04

Trust audit

BLOCKgrade F · trust 36/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryFAIL
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (8 observation(s))
Network
declared (9 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHInventory / provenance · inv.suspicious_name · CWE-1104
plugins/telegram/hooks/lib/payload.ts
payload.ts
Why it matters. member named after an attack tool
Fix. remove or justify
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
plugins/buzz/server.ts:104
const { stdout } = await exec(bin, args, {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
plugins/buzz/server.ts:271
const { stdout } = await exec(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
plugins/telegram-codex/autoattach.ts:75
const DENY_BASENAME_RE = /(^\.env($|\.)|^\.claude\.json$|secret|token|credential|password|^id_(ed25519|rsa|ecdsa)|\.pem$|\.key$|\.p12$|\.pfx$|^\.netrc$|^\.pgpass$|^authorized_keys$|^known_hosts$)/i
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
plugins/telegram/autoattach.ts:71
const DENY_BASENAME_RE = /(^\.env($|\.)|^\.claude\.json$|secret|token|credential|password|^id_(ed25519|rsa|ecdsa)|\.pem$|\.key$|\.p12$|\.pfx$|^\.netrc$|^\.pgpass$|^authorized_keys$|^known_hosts$)/i
Why it matters. touches a credential store
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
plugins/telegram/skills/configure/SKILL.md:128
3. Read existing `.env` if present; update/add the `TELEGRAM_BOT_TOKEN=` line,
Why it matters. asks the agent to read credentials
MEDIUMInventory / provenance · inv.binary · CWE-1104
plugins/telegram/botguard.ts
botguard.ts
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
plugins/browser/bin/browser:6995
CONNECT_SHELLD_URL=http://127.0.0.1:3101
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/dive5874-first-reply.test.ts:24
const TOKEN = 'AbCdEfGhIjKlMnOpQrSt_-' // 22 chars of base64url, as the API mints
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/dive5874-first-reply.test.ts:66
const d2 = stateDir({ token: 'ZZZZZZZZZZZZZZZZZZZZZZ', text: 'newer' })
MEDIUMHard-coded secrets · secret.stripe · CWE-798, CWE-321
test/dive5419-typing-status.test.ts:511
expect(sanitizeLabel('Check sk_live_abcdefghijklmnopqrstuvwxyz123')).toBe('Check')
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
clear
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
test/dive4077-stall-latch.test.ts:157
const fn = new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
test/dive5331-standard-tier-full-profile.test.ts:365
const o = await exec(FIVE, ['agent', 'rotation', 'set', 'me', '--enabled=true']).then(() => 'ok', (e: { stdout?: string }) => String(e.stdout))
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
test/dive5490-no-lone-mic.test.ts:26
return new Function(`${body}; return isVoiceCaptionNoise`)()
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
plugins/telegram/hooks/context-nudge.ts:104
const stateFile = join(tmpdir(), `5dive-ctx-nudge-${createHash('sha1').update(sessionKey).digest('hex')}.txt`)
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
plugins/telegram/hooks/stop-reply-check.ts:96
const lockKey = createHash('sha1').update(transcriptPath).digest('hex')
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/autoattach.test.ts:66
touch(P('id_ed25519'))
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/autoattach.test.ts:158
expect(plan(`${P('id_ed25519')}`).attach).toEqual([])
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/dive5419-typing-status.test.ts:504
expect(labelFor('Bash', { command: 'cat ~/.ssh/id_ed25519' }, TG)).toBe('Running a command')
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/dive5874-first-reply.test.ts:59
expect(readFirstReply(stateDir({ token: '../../etc', text: 'x' }))).toBeNull()
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/mod-telemetry.test.ts:423
expect(safe('../../etc/passwd')).toBe('.._.._etc_passwd')
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/msglog.test.ts:43
expect(chatLogFile(dir, '../../etc/passwd')).toBe(join(dir, 'unknown.jsonl'))
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
plugins/buzz/skills/configure.md:17
- A relay URL to point at. For the Phase-1 spike: `http://178.104.35.140:3000`
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
plugins/buzz/skills/configure.md:47
"relay_url": "http://178.104.35.140:3000",

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha daedc1ca785dfull audit observations/trust-audit/mcp-server/5dive-ai__5dive-plugins.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11daedc1ca785dBLOCKF36first audit
06

Questions

What is the 5dive-plugins MCP server?

Multi-harness plugin marketplace maintained by 5dive — Telegram bridge and related agent-channel integrations.

What tools does 5dive-plugins expose?

34 in total: 21 read-only, 12 that write, and 1 that can delete or overwrite (clear). Every one is listed on this page with its risk.

Is 5dive-plugins safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (36/100) and found 6 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does 5dive-plugins need?

It reads BUZZ_PRIVATE_KEY, CONNECTORD_TOKEN, OPENCODE_SERVER_PASSWORD and TELEGRAM_BOT_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does 5dive-plugins run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @5dive/telegram-plugin.

How current is this page?

The grade is for one exact copy of the source (daedc1ca785d), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement