Skip to main content

MCP server exposing rpc-project rpcclient sessions and APIs

Project description

rpcclient-mcp

MCP server for rpcclient targets iOS over stdio transport.

Prerequisites

  • Python 3.10+
  • RPC server reachable

Getting Started

Install

cd rpcclient-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .

rpcclient==6.11.1 is a package dependency, so it installs automatically with this MCP.

If you want to force local rpcclient source instead of PyPI:

export RPCCLIENT_PYTHONPATH=/absolute/path/to/rpc-project/src/rpcclient

Configure your AI agent

Claude Code

claude mcp add --transport stdio rpcclient-mcp -- /absolute/path/to/rpcclient-mcp/.venv/bin/rpcclient-mcp

Codex CLI

codex mcp add rpcclient-mcp -- /absolute/path/to/rpcclient-mcp/.venv/bin/rpcclient-mcp

Gemini CLI

gemini mcp add --transport stdio rpcclient-mcp /absolute/path/to/rpcclient-mcp/.venv/bin/rpcclient-mcp

Codex (manual config)

Add to ~/.codex/config.toml (or your active Codex config):

[mcp_servers.rpcclient-mcp]
command = "/absolute/path/to/rpcclient-mcp/.venv/bin/rpcclient-mcp"

[mcp_servers.rpcclient-mcp.env]
RPCCLIENT_PYTHONPATH = "/absolute/path/to/rpc-project/src/rpcclient" # optional

Restart your client after config changes.

Usage

ping()
rpc_connect(host="127.0.0.1", port=5910)
rpc_get_screen_context(session_id="...")
rpc_disconnect(session_id="...")

Tools

Session

# health
ping()

# connection lifecycle
rpc_connect(host="127.0.0.1", port=5910, timeout=3.0)
rpc_disconnect(session_id)
rpc_reconnect(session_id)

# session inspection
rpc_list_sessions()
rpc_session_info(session_id)

Use these to establish, inspect, and recover sessions.
rpc_reconnect is the transport recovery path and invalidates old handles.

Generic RPC + Handles

# discovery
rpc_capabilities(session_id, include_private=False)
rpc_call(session_id, path, args=None, kwargs=None, store_result=True)

# handle lifecycle
rpc_list_handles(session_id)
rpc_release_handle(session_id, handle_id)
rpc_release_all_handles(session_id)

# handle access
rpc_handle_call(session_id, handle_id, method, args=None, kwargs=None, store_result=True)
rpc_handle_get(session_id, handle_id, attr, store_result=True)

Use rpc_call for dot-path execution on the root client object.
When store_result=True, non-JSON return values are materialized as handles.

App + UI

# app discovery + launch
rpc_list_apps(session_id, query="", limit=30)
rpc_launch_app(session_id, bundle_id=None, app_query=None, kill_existing=True, unlock_device=True, timeout=3.0, wait_foreground_timeout=5.0)

# context + overlay handling
rpc_get_screen_context(session_id, ensure_accessibility=True, wait_primary_bundle=None, wait_timeout=5.0, max_items=300, dedupe=True)
rpc_dismiss_overlays(session_id, timeout=4.0, max_rounds=6)

# interaction: click + type
rpc_click_label(session_id, label, exact=True, index=0, timeout=5.0, auto_scroll=True, draw_frame=False, direction="next", displayed_only=False, dismiss_overlays=True, overlay_timeout=3.0)
rpc_click_by_context(session_id, intent, min_score=0.52, timeout=5.0, auto_scroll=True, draw_frame=False, direction="next", dismiss_overlays=True, overlay_timeout=3.0)
rpc_type_text(session_id, text, target_label=None, intent=None, min_intent_score=0.35, anchor_label=None, anchor_position="before", anchor_offset=1, clear_first=False, timeout=5.0, direction="next", displayed_only=False, dismiss_overlays=True, overlay_timeout=3.0)

# gestures + focused fallback
rpc_scroll(session_id, direction="down", count=1, pause_seconds=0.25, from_x=None, from_y=None, to_x=None, to_y=None)
rpc_tap(session_id, x, y, repeat=1, pause_seconds=0.2)
rpc_type_focused_text(session_id, text, dismiss_overlays=False, overlay_timeout=2.0)

This is the primary automation surface: launch, read context, click, type, and gesture.
Use rpc_tap + rpc_type_focused_text when web fields are visible but not AX-discoverable.

Current Limitation

Safari overlay password fields are not always AX-exposed on this target.
Manual password entry may still be required in some runs.

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rpcclient_mcp-0.1.0.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rpcclient_mcp-0.1.0-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file rpcclient_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: rpcclient_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 17.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for rpcclient_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ea3be17a8c089d9272cf0b0b6b2559e5010bebcf46bd0a925166fe63226171f7
MD5 aa35adf3d7bac3f77e4f1feba0afcf0f
BLAKE2b-256 383f2957107575ea9e6bd8bc7a34fcd5570cf86db622eda057b112ceb1dab4d4

See more details on using hashes here.

File details

Details for the file rpcclient_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: rpcclient_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for rpcclient_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a3115c519f94d6a5350fc0dd0f148c6ce76fac80127152f8e35831b0e2b7149d
MD5 b6158c5199495bae85397f2ecd6fcd6e
BLAKE2b-256 f9da6793860c8fa98a18b812ea1c8be5c2d1677efc0d432a9e06cd9a123235e5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page