vesper
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| THEOS | No | Path to the Theos installation, required for tweak builds. Can also be set via the 'theos' setting in the config file. | |
| VESPER_CONFIG | No | Path to the vesper configuration file. Selects which TOML config to use; the --config command-line option takes precedence over this environment variable. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| device_listA | List configured allowlisted device IDs and applications. |
| device_infoA | Get TTL-cached SSH discovery for this connection; force_refresh=true requests fresh architecture, iOS and jailbreak evidence. |
| frida_detachB | Unload the inspection agent and hooks, then detach. |
| frida_get_eventsC | Read bounded, redacted trace events by sequence cursor; includes loss count. |
| frida_trace_methodC | Register bounded call tracing; optionally capture scalar arguments, return addresses and in-context stacks. |
| frida_unhookC | Remove a specific interceptor from this process session. |
| objc_dumpA | Dump headers with automatic backend selection: local binary_path uses host classdumpc; device_id/bundle_id/class_name uses the live runtime and reuses its session. Returns a local header file; preview is opt-in and bounded. Static cache: 5 minutes, 4 files, 16 MiB. Use objc_query_instances for live values. |
| objc_query_instancesA | One-call allowlisted app instance values: reuse/attach, discover class instances or read mixed-class object_ids, then read bounded ivars without arbitrary getters/descriptions. Select field_names to minimize tokens; sensitive fields are redacted. Default first 8 ivars, 20 instances, 10 per page. snapshot_id pages never rescan the heap. Foundation strings/numbers/collections are bounded; other objects return leased references. ObjC-visible classes only. |
| ui_snapshotB | Capture a fresh bounded UIKit summary. Reuse snapshot_id + offset for immutable pages without device access. Text is opt-in; format=detail or fields selects extra metadata. |
| ui_captureB | One-call allowlisted app capture with automatic session reuse/attach. Required mode=summary, screenshot or both; screenshots and text require explicit selection. Summary returns snapshot_id for paging. |
| ui_automateB | Run an app-scoped batch: tap, back/dismiss, input_text, scroll, assert or bounded wait_for. Uses UIKit control/accessibility actions, not physical touch injection. Select targets by leased view_id, identifier/class/text or window x+y. No implicit wait/screenshots/text. Optional after_capture reuses the same RPC. Stops at the first failure; never automatically retries mutations. |
| app_logsA | Start/reuse app log hooks and read one filtered page from a bounded on-device ring. Pass after=next_cursor; default 20 entries, no waiting. os_log/NSLog expose format strings; NSLogv and stdio expose rendered text. Sources/buffer options apply when starting. Stop removes hooks; an active log stream keeps the session alive. |
| debug_inspectA | Inspect app threads, bounded backtraces or registers in one call. Frida is immediate and samples running threads. backend=lldb temporarily stops the process, supports locals, then detaches/resumes. mode=capabilities checks host LLDB and cached device debugserver availability. No arbitrary debugger commands or expression execution. |
| debug_setupA | Check required Frida/LLDB/debugserver components and return actionable missing-component instructions. action=install installs absent device debugserver from the matching local Xcode iOS image or a workspace local_debugserver_path. action=repair reapplies an existing device-provided signing profile. Installation checks execution; verify actual attach separately with debug_inspect(backend=lldb). |
| app_decryptA | Decrypt one loaded app Mach-O using maintained frida-ios-dump code and the existing Frida/SSH session. Default main executable, background job; module_name/path selects an app framework. action=modules lists bounded loaded candidates without dumping. Returns verified cryptid=0/UUID/SHA-256 and binary_path for objc_dump or ida_open_binary; no IPA packaging or forced framework loading. |
| server_statusA | Inspect server configuration and process-session lifecycle without touching a device. |
| job_statusC | Retrieve a long-running job result. |
| job_cancelB | Cancel a job and clean up its active operation. |
| platform_toolA | Access advanced Vesper primitives without loading the full catalog. action=schema returns one exact input schema; action=call validates and executes arguments. Names include objc_get_ivars, objc_get_methods, ui_inspect_view, tweak_*, ida_* and device_*. Existing operation checks apply. Use the vesper-ios skill for workflows. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
Most tools map cleanly to a resource+action, but several boundaries blur: ui_snapshot and ui_capture both return bounded UIKit summaries (capture also returns a snapshot_id), frida_detach vs frida_unhook differ only by scope, and platform_tool exposes objc_get_ivars/ui_inspect_view/device_* primitives that duplicate top-level tools. The verbose descriptions mitigate this but an agent must read carefully to pick the right one.
There is a predictable domain-prefix convention (device_, frida_, objc_, ui_, app_, debug_, job_, server_, platform_), all in snake_case. Minor deviations exist within groups (verb-first frida_get_events/frida_trace_method vs. noun-first device_info/objc_dump/ui_snapshot), but the scheme remains readable and guessable.
Nineteen tools is on the heavy side, but the domain (iOS dynamic analysis over SSH+Frida) genuinely needs distinct workflows for device discovery, ObjC introspection, UI automation, logging, debugging, decryption and job control. Some consolidation is possible (ui_snapshot/ui_capture, detach/unhook), but no tool looks wholly gratuitous.
Coverage is strong for the inspection/RE lifecycle (discover, attach, query, trace, dump, UI, logs, debug, decrypt) plus a platform_tool escape hatch for ida_*/tweak_* primitives. However, obvious gaps remain in the explicit surface: no file transfer (pull/push), no process list/launch/kill, and no shell execution, which agents will hit in real iOS workflows.