Pepper (skwallace36/Pepper) is an MCP server listed on the M8ven Trust Index. It scores 61 out of 100, grade C. It declares 35 tools. No publisher has claimed this listing.

C
Caution
61/100

Pepper

iOS dynamic library MCP for agents

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

skwallace36

Source: github_topic · also listed on Glama

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
// tools this server exposes35 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

app_automation
app_debug
app_perf
app_swiftui
app_console

Capture and read app console output — both print() (stdout) and os_log/NSLog (stderr). Start, then log to read. System framework noise is filtered by default. Tip: use `timeline(last_seconds=30)` to see console events correlated with network and screen transitions.

nav_dialog

Interact with dialogs. For system permission prompts (notifications, location, photos, etc.) ALWAYS use action='dismiss_system' — these are SpringBoard dialogs that 'dismiss' and 'tap' cannot reach. 'dismiss' with button= only works for in-app UIAlertControllers.

ui_toggle

Flip a switch or change a segmented control by accessibility ID. Prefer over tap for switches. Shows screen state after.

app_eval
app_look

Primary observation tool — returns all interactive elements with tap commands, plus visible text. Call before acting to know what's available.

ui_tap

Use this to interact with a button, link, or any tappable element on screen. Resolves the element by text label, icon_name, heuristic, or coordinate, then synthesizes a real touch via HID. Specify exactly one targeting method. Shows screen state after.

ui_scroll

Use this to browse content that extends beyond the visible screen area. Scrolls by direction and amount via touch synthesis, or pass target to scroll until specific text is visible. Use parent_of to scroll a nested container (e.g. a horizontal list inside a vertical page). Shows screen state after.

ui_input

Enter or replace text in a field. Focuses the field and types in one step — don't tap first. Shows screen state after.

nav_go

Jump to a specific screen via deeplink or switch tabs. Use list_deeplinks=true to see available destinations. Shows screen state after.

nav_back

Go back one screen in a navigation stack. For modals/sheets use dismiss; for jumping to a screen use navigate.

nav_dismiss

Close a modal, sheet, popover, or overlay. For navigation stack screens use back; for system dialogs use dialog.

ui_swipe

Use this for quick flick gestures — swiping between pages, dismissing cards, or pull-to-refresh. Synthesizes a fast directional flick via HID. For slow content browsing, use scroll instead. Shows screen state after.

nav_screen

Identify which screen is currently displayed. Returns screen name and view controller class — no element data.

nav_keyboard

Dismiss the on-screen keyboard. Call after input_text when you need to tap elements the keyboard covers.

app_snapshot

Save a named baseline of screen state and compare later. Use snapshot for named baselines you want to compare later or assert on with assert_no_diff.

net_tools
app_network
app_record

Record the simulator screen as mp4 or GIF. Start, interact, then stop with an output path.

script

Record, replay, and manage action sequences.

sim_raw

Send a raw dylib command. NOT a code evaluator. Send cmd='help' to list valid commands. Prefer dedicated tools; use this for commands without one (batch, deeplinks, identify_selected, identify_icons, memory, scroll_to, watch, unwatch).

sim_control

Control the iOS Simulator environment via simctl — permissions, GPS, biometrics, installed apps, and device lifecycle.

state_vars

Check or change ViewModel @Published properties at runtime — no rebuild needed.

state_tools
sys_tools
app_status

Check Pepper connection health — MCP server version, bundle ID, app version, port, connections, current screen. Add memory=true for process memory stats.

ui_gesture

Use this for multi-touch gestures like pinch-to-zoom or two-finger rotation on maps, images, or zoomable views. Synthesizes two-finger touch events via HID injection. Shows screen state after.

ui_accessibility
ui_query
app_build_hw

Build the iOS app for a physical device connected via USB/WiFi. Not for simulators — use app_build instead.

app_build

Build, install, and launch the app with Pepper injected. Returns screen state. Pass build_only=True to compile without deploying.

handler
// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configPEPPER_DEBUG
configAPP_REPO
configPEPPER_ROOT
configPEPPER_DYLIB_PATH
configPEPPER_CONNECT
configPEPPER_SESSION_LABEL
configPEPPER_MAX_SIMS
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

35/35 tools missing one or more hints — app_automation (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); app_debug (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); app_perf (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +32 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Destructive tools are labelled

1 tool perform destructive updates without destructiveHint — app_record deletes at line 56 (os.unlink(video_path))

Add destructiveHint:true to any tool whose handler calls .delete(), .upsert(), .update(), unlink, rm, DELETE, DROP, REPLACE INTO, or any operation that overwrites existing data.

Tool handlers catch errors

Only 6/34 tool handlers wrap calls in try/catch (18%)

Wrap each tool handler body in try/catch and return a structured error response.

Tests exist

No test files found

Add tests that exercise each declared tool.

Shell command execution

1 child_process call — runs shell commands

Prefer library functions over shell-outs. If you must shell out, ensure all inputs are properly escaped.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 6 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/skwallace36/pepper?variant=verified)](https://m8ven.ai/mcp/skwallace36/pepper)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: c269bbe34c23fb597b38b9f296215ced819075a5
code hash: 084570a88c3d9eac1ec2b60494054ee7307f887d128417abccb19b03520aecc3
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client