ios_list_dirLABSCO SUMMARY
Writes need approval twice, and some paths are off limits.
The server is read-only until you set both readOnly false and allowWrites true, and even then a write-capable tool refuses the first call and returns an approval id that is one-use, time-limited and bound to the exact arguments. Keychains, Accounts, SMS, Mail and the system directories are blocked by default. Every operation is logged, without file contents or secrets.
What it is
A Node stdio MCP server on your computer that reaches an iOS device over SSH and SFTP. It knows the shapes an iOS investigator cares about: app bundles and data containers, binary plists, SQLite files, JavaScript bundles, and Mach-O binaries.
What you get
- Filesystem basics —
ios_list_dir,ios_stat,ios_exists,ios_hash_file, and a capped, cachedios_search_files - Reading —
ios_read_file,ios_read_file_chunkfor large or binary files,ios_tail_file,ios_read_last_lines, andios_read_plist, which parses XML and binary plists into JSON-safe data - App helpers that skip the slow recursive search —
ios_find_app,ios_list_apps,ios_resolve_app_container,ios_list_preferences,ios_read_preferences - SQLite —
ios_read_sqlite_schema, andios_query_sqlite, which allows only SELECT, PRAGMA, WITH and EXPLAIN - React Native bundles —
ios_inspect_js_bundleto classify one,ios_decode_js_bundleto beautify or run a Hermes decoder,ios_list_hermes_decoderswhen that fails - Exporting —
ios_download_fileandios_zip_downloadinto an allow-listed local folder - Diagnostics —
ios_doctor,ios_connection_doctor,ios_config,ios_diagnose_roots, plusios_appandios_snapshot_appfor a whole-app overview - Writes, disabled unless you enable them —
ios_write_file,ios_append_file,ios_delete_file,ios_move_file,ios_copy_file,ios_mkdir
Requirements
Node.js 20+, OpenSSH running on the iOS device, and a computer that can already SSH to it — over Wi-Fi with the device's IP, or over USB by forwarding to a local port. The installer writes the client config for you: run it with --client naming Codex, Claude, OpenCode, VS Code or all, plus the host and password, and it backs up any existing config first. Connection settings can also come from IOS_FILES_MCP_HOST, IOS_FILES_MCP_USERNAME, IOS_FILES_MCP_PASSWORD and IOS_FILES_MCP_KEY_PATH.
Setup effort
One command plus credentials — npm install github:xtofuub/ios-files-mcp, then supply credentials
USE CASES
Looking inside an installed app
Resolve the bundle id to its app bundle and data container, then read its preferences and Info.plist as structured data.
Reading an app's local database
Pull the schema first, then run one read-only SELECT with a row limit rather than downloading the whole file.
Getting files off the device
Download a single file past the read-size cap, or zip a whole app folder into an allowed local directory.
42 tools
Listed in project docs. Your client may show a different list.
ios_statios_existsios_hash_fileios_search_filesios_read_fileios_read_file_chunkios_tail_fileios_read_last_linesios_read_plistios_inspect_js_bundleios_decode_js_bundleios_list_hermes_decodersios_download_fileios_zip_downloadios_find_appios_list_appsios_resolve_app_containerios_list_preferencesios_read_preferencesios_read_sqlite_schemaios_query_sqliteios_r2_checkios_r2_binary_infoios_r2_app_triageios_r2_stringsios_r2_importsios_r2_functionsios_r2_function_disasmios_write_fileios_append_fileios_delete_fileios_move_fileios_copy_fileios_mkdirios_doctorios_connection_doctorios_configios_mcp_config_statusios_appios_snapshot_appios_diagnose_rootsBEFORE YOU INSTALL
What to know first
Tools you get
42 tools named in the project's documentation.
Requires
- Node.js 20+
- OpenSSH running on the iOS device
- A computer that can already SSH to the device — over Wi-Fi by its IP, or over USB through a forwarded port
INSTALLATION
Connect your client
Server setup
npm install github:xtofuub/ios-files-mcpMCP Clients
Codex
npx -p github:xtofuub/ios-files-mcp iosfiles-mcp --client codex --host 192.168.1.23 --password <YOUR_PASSWORD>192.168.1.23 is a sample; yours is the device's IP address (Settings → Wi-Fi → your network). <YOUR_PASSWORD> is its SSH password — alpine if you have not changed it. The command writes this client's configuration and backs up the existing file to .bak first.
Claude Desktop
npx -p github:xtofuub/ios-files-mcp iosfiles-mcp --client claude --host 192.168.1.23 --password <YOUR_PASSWORD>192.168.1.23 is a sample; yours is the device's IP address (Settings → Wi-Fi → your network). <YOUR_PASSWORD> is its SSH password — alpine if you have not changed it. The command writes this client's configuration and backs up the existing file to .bak first.
OpenCode
npx -p github:xtofuub/ios-files-mcp iosfiles-mcp --client opencode --host 192.168.1.23 --password <YOUR_PASSWORD>192.168.1.23 is a sample; yours is the device's IP address (Settings → Wi-Fi → your network). <YOUR_PASSWORD> is its SSH password — alpine if you have not changed it. The command writes this client's configuration and backs up the existing file to .bak first.
VS Code
{
"servers": {
"ios-files": {
"command": "npx",
"args": [
"--yes",
"--quiet",
"github:xtofuub/ios-files-mcp"
],
"env": {
"IOS_FILES_MCP_CONFIG": "<YOUR_PATH_TO_IOS_FILES_MCP>/ios-files-mcp.config.json"
}
}
}
}IOS_FILES_MCP_CONFIG names a JSON file holding host, port, username and password or privateKeyPath. Start from the project's ios-files-mcp.config.example.json (https://github.com/xtofuub/ios-files-mcp/blob/main/ios-files-mcp.config.example.json) and put the file's absolute path here.
All supported clients
npx -p github:xtofuub/ios-files-mcp iosfiles-mcp --client all --host 192.168.1.23 --password <YOUR_PASSWORD>192.168.1.23 is a sample; yours is the device's IP address (Settings → Wi-Fi → your network). <YOUR_PASSWORD> is its SSH password — alpine if you have not changed it. The command writes this client's configuration and backs up the existing file to .bak first.