# MCP tools

Every tool Silan's MCP server offers, with the profile each one is in.

Silan's MCP server (`silan mcp`) lists every tool in Silan's spec below. The current release serves 45 of them: the five flow tools (`validate_scenario`, `run_scenario`, `list_runs`, `get_run`, `get_report`) are in the spec but the engine answers them with `the scenario engine is not available in this engine` (seen 4 Nov 2026). Each tool is a direct mapping of one REST operation, so what a tool does and what REST does never differ. The server runs on the Mac that holds the devices.

## Profiles

A profile picks which tools an AI app sees. Start the server with `silan mcp --profile <name>`. The plugin launchers and the Claude app bundle read `SILAN_MCP_PROFILE` to pick one; `silan mcp` itself does not. The tool counts are what the current release lists over `tools/list` (4 Nov 2026).

| Profile | Tools | For |
|---|---|---|
| `core` | 16 | Everyday tasks: look, tap, type, swipe, wait, open apps and links, hand over logins. |
| `testing` | 27 | App testing: core plus scenarios, recordings, checks, notifications, test pushes, installs, location, clipboard, rotation and text size. |
| `full` | 45 | Everything, including the built-in agent, routines and raw element queries. |

## All tools

| Tool | What it does | REST operation | Profiles |
|---|---|---|---|
| [`list_devices`](/reference/mcp/list-devices/) | List the devices this client may use (phones, tablets, simulators and emulators), with their state. | `listDevices` | core, testing, full |
| [`get_device`](/reference/mcp/get-device/) | One device with its capabilities and health. | `getDevice` | full |
| [`list_apps`](/reference/mcp/list-apps/) | Apps installed on the device. | `listApps` | full |
| [`observe`](/reference/mcp/observe/) | See the screen - a screenshot plus a compact list of elements with refs you can act on. | `observe` | core, testing, full |
| [`screenshot`](/reference/mcp/screenshot/) | The current screen as an image. | `screenshot` | full |
| [`get_elements`](/reference/mcp/get-elements/) | The full element tree of the current screen. | `getElements` | full |
| [`find_elements`](/reference/mcp/find-elements/) | Find elements by text, identifier, role or a plain description, best match first. | `findElements` | full |
| [`claim_devices`](/reference/mcp/claim-devices/) | Claim devices so no other agent uses them; pass the returned lease to later calls. | `createLease` | core, testing, full |
| [`release_devices`](/reference/mcp/release-devices/) | Give claimed devices back. | `releaseLease` | core, testing, full |
| [`tap`](/reference/mcp/tap/) | Tap an element ref, a query (text, identifier, role) or a point; count 2 or 3 for double or triple taps. | `act` | core, testing, full |
| [`long_press`](/reference/mcp/long-press/) | Touch and hold a target. | `act` | core, testing, full |
| [`swipe`](/reference/mcp/swipe/) | Swipe up, down, left or right, from a target or the screen center. | `act` | core, testing, full |
| [`drag`](/reference/mcp/drag/) | Drag from one target to another. | `act` | full |
| [`multi_touch`](/reference/mcp/multi-touch/) | A multi-finger gesture - a preset such as pinchIn, pinchOut or rotate, or explicit finger paths. | `act` | full |
| [`type_text`](/reference/mcp/type-text/) | Type any text into the focused field or a target (with no target, a field must have focus); never use it for passwords (use fill_credential). | `act` | core, testing, full |
| [`press_key`](/reference/mcp/press-key/) | Press a named key or one character, with optional modifiers. | `act` | core, testing, full |
| [`dismiss_keyboard`](/reference/mcp/dismiss-keyboard/) | Close the on-screen keyboard when it covers what you need; it does nothing when the keyboard is not open. | `act` | core, testing, full |
| [`press_button`](/reference/mcp/press-button/) | Press a hardware button (home, lock, volumeUp, volumeDown, siri, action, back, recents, power). To change apps, use launch_app with the app's name; never press home. | `act` | core, testing, full |
| [`open_system_ui`](/reference/mcp/open-system-ui/) | Open Control Center, Notification Center, the app switcher, Spotlight or the lock screen. | `act` | full |
| [`launch_app`](/reference/mcp/launch-app/) | Open an app by bundle ID, package name or display name; fresh restarts it first. To change apps, use launch_app with the app's name; never press home. | `act` | core, testing, full |
| [`terminate_app`](/reference/mcp/terminate-app/) | Force-quit an app. | `act` | full |
| [`open_url`](/reference/mcp/open-url/) | Open a web page or deep link. | `act` | core, testing, full |
| [`rotate`](/reference/mcp/rotate/) | Rotate the device to portrait or landscape. | `act` | testing, full |
| [`run_shortcut`](/reference/mcp/run-shortcut/) | Run a Shortcuts shortcut on an iPhone. | `act` | full |
| [`set_text_size`](/reference/mcp/set-text-size/) | Change the system text size. | `act` | testing, full |
| [`get_clipboard`](/reference/mcp/get-clipboard/) | Read the device clipboard. | `getClipboard` | testing, full |
| [`set_clipboard`](/reference/mcp/set-clipboard/) | Put text on the device clipboard. | `setClipboard` | testing, full |
| [`set_location`](/reference/mcp/set-location/) | Set a simulated GPS location; latitude and longitude both null clear it (clearLocation). | `setLocation` | testing, full |
| [`install_app`](/reference/mcp/install-app/) | Install an app build (.ipa, .app or .apk) from a path on this Mac. | `installApp` | testing, full |
| [`uninstall_app`](/reference/mcp/uninstall-app/) | Remove an app. | `uninstallApp` | full |
| [`wait_for`](/reference/mcp/wait-for/) | Wait inside the engine until a condition holds (element visible or gone, text, app, notification, stable screen). | `waitFor` | core, testing, full |
| [`check`](/reference/mcp/check/) | Check a condition once, without waiting. | `check` | testing, full |
| [`get_notifications`](/reference/mcp/get-notifications/) | Notifications seen on the device, even if the banner has already gone. | `listNotifications` | testing, full |
| [`send_test_push`](/reference/mcp/send-test-push/) | Send a test push notification to an app on the device. | `sendTestPush` | testing, full |
| [`list_credential_sites`](/reference/mcp/list-credential-sites/) | Sites the person has set up for password filling (no secrets). | `listCredentialSites` | full |
| [`fill_credential`](/reference/mcp/fill-credential/) | Fill a saved username, password or one-time code into the focused field; you never see the secret. | `fillCredential` | core, testing, full |
| [`request_person_login`](/reference/mcp/request-person-login/) | Hand a login to the person and wait until they hand the device back. | `requestPersonLogin` | core, testing, full |
| [`validate_scenario`](/reference/mcp/validate-scenario/) | Check a multi-device scenario without running it. | `validateScenario` | testing, full |
| [`run_scenario`](/reference/mcp/run-scenario/) | Run a multi-device scenario, a file or a saved routine; returns a run to follow. | `startRun` | testing, full |
| [`get_run`](/reference/mcp/get-run/) | Status and results of a run. | `getRun` | testing, full |
| [`list_runs`](/reference/mcp/list-runs/) | Recent runs, newest first. | `listRuns` | testing, full |
| [`get_report`](/reference/mcp/get-report/) | A run's report as a link to HTML, JUnit or JSON. | `getReport` | testing, full |
| [`start_recording`](/reference/mcp/start-recording/) | Record the screens of one or more devices into .mp4 files on this Mac, one per device, on one clock. Returns the recording id and the folder the files go to (the installed Silan uses ~/Movies/Silan Recordings/<id>). Hides what screenshots hide; a frame it cannot check in time repeats the last checked frame, or is black when the device locked or showed something hidden in between. Stops by itself after max_seconds (default 600, at most 1800), at 500 MB, or when you let go of a device you held. | `startRecording` | testing, full |
| [`stop_recording`](/reference/mcp/stop-recording/) | Stop a recording and finish its .mp4 files. Returns each file's path (a file:// url) and the folder that holds them. | `stopRecording` | testing, full |
| [`run_agent_task`](/reference/mcp/run-agent-task/) | Give Silan's built-in agent a task in plain language, with a step and cost budget. | `startAgentTask` | full |
| [`get_agent_task`](/reference/mcp/get-agent-task/) | Status, steps and cost of an agent task. | `getAgentTask` | full |
| [`list_routines`](/reference/mcp/list-routines/) | Saved routines. | `listRoutines` | full |
| [`run_routine`](/reference/mcp/run-routine/) | Run a saved routine now. | `runRoutine` | full |
| [`get_job`](/reference/mcp/get-job/) | Status of a long-running job. | `getJob` | full |
| [`get_approval`](/reference/mcp/get-approval/) | Whether the person has approved a held action yet. | `getApproval` | full |