iconnect-mcp
npm
v0.1.1
Source verified
Published by heznpc — publish provenance cryptographically ties this package to that repository. That is proof of origin, not an official vendor package.
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 − 6.3 = 94. What the published surface and source actually contain:
| Points | What was found | Category |
|---|---|---|
| −6.3 | Untrusted input concatenated into a command sink MTC-SRC-009 | injection |
2. Client adoption risk — 94 − 10 = 84. 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 |
|---|---|
| −10 | capability blast radius (critical) — client exposure if the model is manipulated |
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_unread_count → list_directory → send_file. Untrusted input is ingested, private data is read, and it can be sent to an external sink via the agent composing the tools (→). 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_unread_count → list_directory → send_file
In the server's implementation (`dist/cli/doctor.js:9`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: { execSync } from "node:child_process"; import { MODULE_NAMES, STARTER_MODULES, NPM_PACKAGE_NAME } from "../shared/confi
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 dist/cli/doctor.js
In the server's implementation (`dist/shared/jxa.js:1`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: { execFile } from "node:child_process"; import { promisify } from "node:util"; const execFileAsync = promisify(execFile)
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 dist/shared/jxa.js
In the server's implementation (`dist/shared/swift.js:1`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: rt { spawn } from "node:child_process"; import { access } from "node:fs/promises"; import { resolve, dirname } from "nod
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 dist/shared/swift.js
In the server's implementation (`dist/cli/doctor.js:117`): A shell/process command assembled from concatenated or interpolated values is command injection when any part is attacker-influenced — the OWASP canonical RCE flow. Verify what reaches the interpolated value. 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 { execSync(`osascript -l JavaScript -e "Application('${appName}'); JSON.stringify({ok:true})"`, {
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 dist/cli/doctor.js
Tool "move_file" can write, overwrite or delete files (keyword "move_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 move_file
Tool "move_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 move_file
Tool "list_directory" takes a path parameter "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 list_directory · inputSchema.properties.path
Each tool and what it can reach — statically extracted from the published source.
get_unread_countingests untrusted inputlist_directoryreads sensitive datamove_filewrites filesread_messageingests untrusted inputsend_filenetwork egresssend_messagenetwork egressactivate_tabno sensitive capabilityadd_contact_emailno sensitive capabilityadd_contact_phoneno sensitive capabilityadd_to_albumno sensitive capabilitybulk_move_notesno sensitive capabilitycapture_screenshotno sensitive capabilityclose_tabno sensitive capabilitycompare_notesno sensitive capabilitycomplete_reminderno sensitive capabilitycreate_albumno sensitive capabilitycreate_contactno sensitive capabilitycreate_directoryno sensitive capabilitycreate_eventno sensitive capabilitycreate_folderno sensitive capabilitycreate_noteno sensitive capabilitycreate_recurring_eventno sensitive capabilitycreate_recurring_reminderno sensitive capabilitycreate_reminderno sensitive capabilitycreate_reminder_listno sensitive capabilitydelete_contactno sensitive capabilitydelete_eventno sensitive capabilitydelete_noteno sensitive capabilitydelete_photosno sensitive capabilitydelete_reminderno sensitive capabilitydelete_reminder_listno sensitive capabilityfind_relatedno sensitive capabilityflag_messageno sensitive capabilityget_clipboardno sensitive capabilityget_current_tabno sensitive capabilityget_file_infono sensitive capabilityget_frontmost_appno sensitive capabilityget_photo_infono sensitive capabilityget_screen_infono sensitive capabilityget_shortcut_detailno sensitive capabilityget_track_infono sensitive capabilityget_upcoming_eventsno sensitive capabilityget_volumeno sensitive capabilityget_workflowno sensitive capabilityimport_photono sensitive capabilitylist_accountsno sensitive capabilitylist_albumsno sensitive capabilitylist_calendarsno sensitive capabilitylist_chatsno sensitive capabilitylist_contactsno sensitive capabilitylist_eventsno sensitive capabilitylist_favoritesno sensitive capabilitylist_foldersno sensitive capabilitylist_group_membersno sensitive capabilitylist_groupsno sensitive capabilitylist_mailboxesno sensitive capabilitylist_messagesno sensitive capabilitylist_notesno sensitive capabilitylist_participantsno sensitive capabilitylist_photosno sensitive capabilitylist_playlistsno sensitive capabilitylist_reminder_listsno sensitive capabilitylist_remindersno sensitive capabilitylist_running_appsno sensitive capabilitylist_shortcutsno sensitive capabilitylist_tabsno sensitive capabilitylist_tracksno sensitive capabilitymark_message_readno sensitive capabilitymove_messageno sensitive capabilitymove_noteno sensitive capabilitynow_playingno sensitive capabilityopen_urlno sensitive capabilityplay_playlistno sensitive capabilityplay_trackno sensitive capabilityplayback_controlno sensitive capabilityproofread_textno sensitive capabilityread_chatno sensitive capabilityread_contactno sensitive capabilityread_eventno sensitive capabilityread_noteno sensitive capabilityread_page_contentno sensitive capabilityread_reminderno sensitive capabilityrecent_filesno sensitive capabilityreply_mailno sensitive capabilityrewrite_textno sensitive capabilityrun_javascriptno sensitive capabilityrun_shortcutno sensitive capabilityscan_notesno sensitive capabilitysearch_chatsno sensitive capabilitysearch_contactsno sensitive capabilitysearch_eventsno sensitive capabilitysearch_filesno sensitive capabilitysearch_messagesno sensitive capabilitysearch_notesno sensitive capabilitysearch_photosno sensitive capabilitysearch_remindersno sensitive capabilitysearch_shortcutsno sensitive capabilitysearch_tabsno sensitive capabilitysearch_tracksno sensitive capabilitysemantic_indexno sensitive capabilitysemantic_searchno sensitive capabilitysemantic_statusno sensitive capabilitysend_mailno sensitive capabilityset_clipboardno sensitive capabilityset_file_tagsno sensitive capabilityset_shuffleno sensitive capabilityset_volumeno sensitive capabilitysetup_permissionsno sensitive capabilityshow_notificationno sensitive capabilitysummarize_contextno sensitive capabilitysummarize_textno sensitive capabilitytoday_eventsno sensitive capabilitytoggle_dark_modeno sensitive capabilitytrash_fileno sensitive capabilitytv_list_playlistsno sensitive capabilitytv_list_tracksno sensitive capabilitytv_now_playingno sensitive capabilitytv_playno sensitive capabilitytv_playback_controlno sensitive capabilitytv_searchno sensitive capabilityupdate_contactno sensitive capabilityupdate_eventno sensitive capabilityupdate_noteno sensitive capabilityupdate_reminderno 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.1 latest |
B 84/100 | 8 | 1.10.0 | 2026-07-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 iconnect-mcp --online
Security scan results for the 1stay MCP server.
Security scan results for the Adguard Home MCP server.
Security scan results for the Ado Browser MCP server.
Security scan results for the Adobe Experience Dev MCP server.
Security scan results for the Aemet MCP server.
Security scan results for the Affinity Mcp Bridge MCP server.