slack-mpm
PyPI
v0.1.8
Published by an unidentified publisher — no publish provenance and no public repository, so the publisher could not be verified and the source cannot be independently located.
MCP server for Slack workspace integration
The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.
1. Threat score — 100 − 1.2 = 99. What the published surface and source actually contain:
| Points | What was found | Category |
|---|---|---|
| −1.2 | Hardcoded Slack token in test/example/packaging MTC-SRC-008 | exfiltration |
2. Client adoption risk — 99 − 8 = 91. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:
| Points | Adoption-risk factor |
|---|---|
| −6 | capability blast radius (high) — client exposure if the model is manipulated |
| −2 | publisher verification (unlinked) — no provenance/repo link, but the shipped source was fully read |
Capability observations and info notes are shown under Findings but never scored.
Open any row's finding below for the file, line and evidence behind a deduction.
This server (without client built-ins) exposes a complete data-exfiltration chain: get_thread_replies → list_files ⇒ send_message. Untrusted input is ingested, private data is read, and it can be sent to an external sink — and at least one leg is a direct schema wire (⇒), where a producer's output drops straight into a free-text parameter of the next tool, so the chain needs little agent cooperation. Static analysis proves the primitive exists, not that a specific run will occur.
Fix: Remove one leg of the trifecta: isolate untrusted-input tools from secret-reading tools and from egress tools, or require human approval between them.
Location: flow get_thread_replies → list_files → send_message
Tool "upload_file" can both read sensitive data and send data to an external destination. Even without an explicit untrusted-input leg, this is a single-call data-exfiltration path if the model is ever manipulated.
Fix: Separate reading from sending; require explicit user confirmation before egress of file/secret contents.
Location: flow upload_file
Tool "delete_file" can write, overwrite or delete files (keyword "delete_file" in tool name). Verify it is scoped to a safe directory.
Fix: Constrain file operations to an explicit, non-sensitive root; reject path traversal.
Location: tool delete_file
In the server's implementation (`src/slack_mpm/cli/main.py:112`): Loading a module chosen at runtime (from a variable) can pull in and run attacker-influenced code paths. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: try: __import__(module) click.echo(f" {name}: [{click.style('OK', fg='green')}]")
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/slack_mpm/cli/main.py
A hardcoded Slack token (a live-looking credential hardcoded in shipped code) appears in `tests/test_auth.py:98`. Verify whether this is a real credential; if so, remove and rotate it.
Evidence: Slack token: xoxb…(redacted)
Fix: Remove the secret, rotate it, and load credentials from the environment or a secret store.
Location: server tests/test_auth.py
Tool "delete_file" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool delete_file
Tool "upload_file" takes a path parameter "file_path" with no constraint. Without a canonicalize-and-contain check (not visible statically), this permits ../ traversal outside the intended root.
Fix: Resolve and verify the path stays within an allowed root; reject traversal sequences.
Location: tool upload_file · inputSchema.properties.file_path
Tool "upload_file" takes a path parameter "filename" with no constraint. Without a canonicalize-and-contain check (not visible statically), this permits ../ traversal outside the intended root.
Fix: Resolve and verify the path stays within an allowed root; reject traversal sequences.
Location: tool upload_file · inputSchema.properties.filename
Tool "delete_file" takes a path parameter "file" with no constraint. Without a canonicalize-and-contain check (not visible statically), this permits ../ traversal outside the intended root.
Fix: Resolve and verify the path stays within an allowed root; reject traversal sequences.
Location: tool delete_file · inputSchema.properties.file
Each tool and what it can reach — statically extracted from the published source.
upload_filereads sensitive datanetwork egressdelete_filewrites filesget_thread_repliesingests untrusted inputlist_filesreads sensitive datalist_historyingests untrusted inputlist_list_itemsingests untrusted inputsearch_messagesingests untrusted inputsend_messagenetwork egressadd_bookmarkno sensitive capabilityadd_reactionno sensitive capabilityadd_reminderno sensitive capabilityarchive_channelno sensitive capabilityauth_testno sensitive capabilitycomplete_reminderno sensitive capabilitycreate_canvasno sensitive capabilitycreate_channelno sensitive capabilitycreate_channel_canvasno sensitive capabilitycreate_listno sensitive capabilitycreate_list_itemno sensitive capabilitydelete_canvasno sensitive capabilitydelete_canvas_accessno sensitive capabilitydelete_list_accessno sensitive capabilitydelete_list_itemno sensitive capabilitydelete_list_itemsno sensitive capabilitydelete_messageno sensitive capabilitydelete_reminderno sensitive capabilitydelete_scheduled_messageno sensitive capabilityedit_canvasno sensitive capabilityget_bot_infono sensitive capabilityget_channel_infono sensitive capabilityget_file_infono sensitive capabilityget_list_itemno sensitive capabilityget_permalinkno sensitive capabilityget_user_by_emailno sensitive capabilityget_user_infono sensitive capabilityget_workspace_infono sensitive capabilityinvite_to_channelno sensitive capabilityjoin_channelno sensitive capabilitykick_from_channelno sensitive capabilitylist_bookmarksno sensitive capabilitylist_channelsno sensitive capabilitylist_emojisno sensitive capabilitylist_remindersno sensitive capabilitylist_scheduled_messagesno sensitive capabilitylist_user_channelsno sensitive capabilitylist_usersno sensitive capabilitylookup_canvas_sectionsno sensitive capabilitymarkdown_to_canvasno sensitive capabilitymarkdown_to_listno sensitive capabilityopen_dmno sensitive capabilitypin_messageno sensitive capabilityremove_bookmarkno sensitive capabilityremove_reactionno sensitive capabilityreply_in_threadno sensitive capabilityschedule_messageno sensitive capabilitysend_ephemeralno sensitive capabilityset_canvas_accessno sensitive capabilityset_channel_topicno sensitive capabilityset_list_accessno sensitive capabilityshare_fileno sensitive capabilityunpin_messageno sensitive capabilityupdate_listno sensitive capabilityupdate_list_itemno sensitive capabilityupdate_messageno sensitive capabilityCross-tool combinations that form a data-exfiltration primitive (untrusted input → sensitive source → external sink).
Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.
| Version | Score | Findings | Engine | Scanned |
|---|---|---|---|---|
v0.1.8 latest |
A 91/100 | 9 | 1.13.0 | 2026-08-25 |
Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.
The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.
npx mcptrustchecker scan slack-mpm --online --registry pypi
Official Abyssfall game info, newsletter double opt-in, and merch reservation tools.
AdCritter ads platform: docs, API reference, app scaffolding, and white-label integration.
Google AdSense MCP Server - Monitor earnings, reports, and account health via Claude/AI
Operational empathy for technical founders + PE/VC operators navigating high-stakes B2B interactions. 28 MCP tools + CLI: ICP scoring, persona simulation, battlecards, deal classification, prospect discovery, investor matching, founder wellness, plus mark
MCP server for Bing Webmaster Tools — SEO site management, URL submission, sitemaps, stats, keywords
MCP (Model Context Protocol) server that helps AI agents use Primer Brand (@primer/react-brand) correctly when building GitHub marketing and landing pages.