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.
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
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
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.
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_automationapp_debugapp_perfapp_swiftuiapp_consoleCapture 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_dialogInteract 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_toggleFlip a switch or change a segmented control by accessibility ID. Prefer over tap for switches. Shows screen state after.
app_evalapp_lookPrimary observation tool — returns all interactive elements with tap commands, plus visible text. Call before acting to know what's available.
ui_tapUse 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_scrollUse 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_inputEnter or replace text in a field. Focuses the field and types in one step — don't tap first. Shows screen state after.
nav_goJump to a specific screen via deeplink or switch tabs. Use list_deeplinks=true to see available destinations. Shows screen state after.
nav_backGo back one screen in a navigation stack. For modals/sheets use dismiss; for jumping to a screen use navigate.
nav_dismissClose a modal, sheet, popover, or overlay. For navigation stack screens use back; for system dialogs use dialog.
ui_swipeUse 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_screenIdentify which screen is currently displayed. Returns screen name and view controller class — no element data.
nav_keyboardDismiss the on-screen keyboard. Call after input_text when you need to tap elements the keyboard covers.
app_snapshotSave 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_toolsapp_networkapp_recordRecord the simulator screen as mp4 or GIF. Start, interact, then stop with an output path.
scriptRecord, replay, and manage action sequences.
sim_rawSend 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_controlControl the iOS Simulator environment via simctl — permissions, GPS, biometrics, installed apps, and device lifecycle.
state_varsCheck or change ViewModel @Published properties at runtime — no rebuild needed.
state_toolssys_toolsapp_statusCheck Pepper connection health — MCP server version, bundle ID, app version, port, connections, current screen. Add memory=true for process memory stats.
ui_gestureUse 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_accessibilityui_queryapp_build_hwBuild the iOS app for a physical device connected via USB/WiFi. Not for simulators — use app_build instead.
app_buildBuild, install, and launch the app with Pepper injected. Returns screen state. Pass build_only=True to compile without deploying.
handlerPEPPER_DEBUGAPP_REPOPEPPER_ROOTPEPPER_DYLIB_PATHPEPPER_CONNECTPEPPER_SESSION_LABELPEPPER_MAX_SIMSTool 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.
[](https://m8ven.ai/mcp/skwallace36/pepper)?variant=verified from the URL.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