v0.5.1 Cross-platform MCP tools for AI coding agents

Give your agent
new superpowers.

A curated marketplace of production-grade MCP plugins. One command installs unified Android & iOS automation and local Apple Notes CRUD into Claude Code, Cursor, VS Code, Windsurf, and any other MCP client. Everything runs on-device.

Works with
  • Claude Code
  • Claude Desktop
  • Cursor
  • VS Code
  • Windsurf
  • Cline
  • Roo Code
  • Codex CLI
  • Gemini CLI
  • opencode
claude code — install
/plugin marketplace add bibutikoley/claude-marketplace
/plugin install mobile-mcp@claude-marketplace
/plugin install apple-notes-mcp@claude-marketplace

Native plugins — restart Claude Code (or /mcp to reload) after installing.

Local & secure. First-party APIs only — Apple JXA, Android ADB, Xcode simctl/devicectl. No telemetry, no remote proxies, no cloud daemons.

Plugins

Production-grade plugins, ready today.

Two plugins ship now, more on the way. Each one is versioned, isolated, and installs with a single command.

mobile-mcp

Android & iOS automation

v0.5.1

Unified cross-platform device automation for AI agents. Control both Android (ADB + android CLI) and iOS (Xcode simctl + devicectl + Apple Vision OCR) with 100% first-party tooling. Zero third-party daemons.

  • health_check
  • list_all_devices
  • ios_get_layout
  • ios_tap_element
  • ios_screenshot
  • ios_tap
  • ios_swipe
  • ios_boot_simulator
  • ios_open_url
  • get_layout
  • tap_element
  • screenshot
  • tap
  • swipe
  • launch_app
  • key_event
  • open_url
  • +49 more

apple-notes-mcp

Local Apple Notes CRUD

v0.5.1

MCP server giving any agent CRUD access to Apple Notes — Python + uv + the official mcp SDK, driving Notes.app through JXA. Notes.app is the source of truth, queried live on every call. No RAG, no vector index, no Full Disk Access.

  • list_notes
  • get_note
  • create_note
  • update_note
  • append_note
  • delete_note
  • search_notes
  • list_folders
  • create_folder
  • delete_folder
  • health_check

Your plugin could be next

This marketplace is built to hold many plugins. Have an idea for the next one? Propose it on GitHub.

wanted

Other agents

Any MCP client, no marketplace required.

Every plugin is standard stdio MCP. Install uv (provides uvx), then either let uvx fetch the servers directly, or point your client at a local clone. Fastest of all: paste the self-install prompt and let your agent configure itself.

Self-install prompt Paste it to your agent as-is — it detects its client and writes the config itself.
You are an AI agent running inside an MCP client (Claude Code, Claude Desktop, Cursor, VS Code with Copilot, Windsurf Cascade, Cline, Roo Code, Codex CLI, Gemini CLI, opencode, or another MCP-compatible app). Configure the "mobile-mcp" and "apple-notes-mcp" MCP servers for YOURSELF — write them into the MCP configuration of the client you are currently running in. Make the edit yourself; do not just print instructions.

Step 1 — Prerequisite check. Run `uvx --version`. If uvx is missing, STOP and tell me to install uv first from https://github.com/astral-sh/uv, then re-run this prompt once it is available.
- For mobile-mcp: verify `adb` (Android) and/or `xcrun` (iOS) are installed.
- For apple-notes-mcp: verify `uname -s` is `Darwin` (macOS with Notes.app).

Step 2 — Detect your client and pick ONE config target (default to global/user scope unless I ask for project scope):
- Claude Code CLI: run:
  claude mcp add mobile-mcp -s user -- uvx --from "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/mobile-mcp" mobile-mcp
  claude mcp add apple-notes-mcp -s user -- uvx --from "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/apple-notes-mcp" apple-notes-mcp
  then skip to Step 5.
- Claude Desktop: file ~/Library/Application Support/Claude/claude_desktop_config.json, JSON shape {"mcpServers": {...}}.
- Cursor: file ~/.cursor/mcp.json (global) or .cursor/mcp.json in the current project, JSON shape {"mcpServers": {...}}.
- VS Code (Copilot/Agent): file .vscode/mcp.json in the current project. NOTE: this file uses a "servers" key, NOT "mcpServers".
- Windsurf: file ~/.codeium/windsurf/mcp_config.json, JSON shape {"mcpServers": {...}}.
- Cline: the extension's MCP settings file (cline_mcp_settings.json), JSON shape {"mcpServers": {...}}.
- Roo Code: global MCP settings (mcp_settings.json) or project .roo/mcp.json, JSON shape {"mcpServers": {...}}.
- Codex CLI: file ~/.codex/config.toml, TOML tables [mcp_servers.mobile-mcp] and [mcp_servers.apple-notes-mcp] (key mcp_servers with underscore).
- Gemini CLI: file ~/.gemini/settings.json (global) or .gemini/settings.json (project), JSON shape {"mcpServers": {...}}.
- opencode: file opencode.json — project ./opencode.json (or .opencode/opencode.json) or global ~/.config/opencode/opencode.json, JSON shape {"mcp": {...}} with type "local". NOTE: opencode does NOT use "mcpServers", "servers", "command"+"args", or "env" — it uses "mcp", "command" as one array, and "environment".
- Anything else: ASK me which file your client reads for MCP servers before writing anything. If you cannot determine your client, ASK me instead of guessing.

Step 3 — Back up, then merge. If the file exists, back it up with a .bak suffix first. Add the "mobile-mcp" and "apple-notes-mcp" entries and preserve every existing entry. Create parent folders if needed. Minimal new-file skeletons: {"mcpServers": {}} for mcpServers clients, {"servers": {}} for VS Code, {"mcp": {}} for opencode (plus "$schema": "https://opencode.ai/config.json"), and for Codex just the tables below in an empty file.

Entry values (default, no clone needed):
- mobile-mcp:
  command: uvx
  args: ["--from", "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/mobile-mcp", "mobile-mcp"]
- apple-notes-mcp:
  command: uvx
  args: ["--from", "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/apple-notes-mcp", "apple-notes-mcp"]

If I say I have a local clone of bibutikoley/claude-marketplace, use it instead: replace the --from value with the absolute path to its plugins/mobile-mcp or plugins/apple-notes-mcp directory (absolute path only, never relative).

For apple-notes-mcp, if I give you a folder allowlist, add env {"APPLE_NOTES_MCP_ALLOWED_FOLDERS": "the comma-separated list I gave you"} to the entry — except opencode, where the key is "environment" (not "env").

Step 4 — Validate. Re-read the file and prove it still parses: for a JSON file run python3 -m json.tool with the file as its argument; for a TOML file run python3 -c "import tomllib,sys; tomllib.load(open(sys.argv[1],'rb'))" with the file path as its argument. Show me the entries you added.

Step 5 — Tell me how to activate in THIS client (fully quit and reopen Claude Desktop with Cmd-Q; restart Cursor / Windsurf / VS Code; /mcp or `claude mcp list` for Claude Code; /mcp list for Gemini; quit and restart opencode; MCP panel for Cline/Roo), remind me to click OK on any macOS Automation prompts, and offer to call the health_check tool to confirm everything works.

Canonical config

Claude Desktop · Cursor · Windsurf · Cline · Roo · Gemini

{
  "mcpServers": {
    "mobile-mcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/mobile-mcp", "mobile-mcp"]
    },
    "apple-notes-mcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/apple-notes-mcp", "apple-notes-mcp"],
      "env": {
        "APPLE_NOTES_MCP_ALLOWED_FOLDERS": ""
      }
    }
  }
}

VS Code servers

.vscode/mcp.json — note the servers key

{
  "servers": {
    "mobile-mcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/mobile-mcp", "mobile-mcp"]
    },
    "apple-notes-mcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/apple-notes-mcp", "apple-notes-mcp"]
    }
  }
}

Codex CLI

~/.codex/config.toml — TOML, note mcp_servers

[mcp_servers.mobile-mcp]
command = "uvx"
args = ["--from", "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/mobile-mcp", "mobile-mcp"]

[mcp_servers.apple-notes-mcp]
command = "uvx"
args = ["--from", "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/apple-notes-mcp", "apple-notes-mcp"]

opencode mcp

opencode.jsoncommand array + environment

{
  "mcp": {
    "mobile-mcp": {
      "type": "local",
      "command": ["uvx", "--from", "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/mobile-mcp", "mobile-mcp"]
    },
    "apple-notes-mcp": {
      "type": "local",
      "command": ["uvx", "--from", "git+https://github.com/bibutikoley/claude-marketplace@v0.5.1#subdirectory=plugins/apple-notes-mcp", "apple-notes-mcp"],
      "environment": {
        "APPLE_NOTES_MCP_ALLOWED_FOLDERS": ""
      }
    }
  }
}

Option B — clone once

Then point --from at the absolute path

git clone https://github.com/bibutikoley/claude-marketplace.git

Option B config

Same shape, --from points at your checkout

{
  "mcpServers": {
    "mobile-mcp": {
      "command": "uvx",
      "args": ["--from", "/ABSOLUTE/PATH/plugins/mobile-mcp", "mobile-mcp"]
    },
    "apple-notes-mcp": {
      "command": "uvx",
      "args": ["--from", "/ABSOLUTE/PATH/plugins/apple-notes-mcp", "apple-notes-mcp"]
    }
  }
}
ClientConfig file
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json, then quit (Cmd-Q) + reopen
Cursor~/.cursor/mcp.json (global) or .cursor/mcp.json (project)
Windsurf~/.codeium/windsurf/mcp_config.json
ClineCline panel → MCP Servers → Configure MCP Servers (cline_mcp_settings.json)
Roo CodeEdit Global MCP (mcp_settings.json) or project .roo/mcp.json
Gemini CLI~/.gemini/settings.json (global) or .gemini/settings.json (project)
opencodeopencode.json — project ./opencode.json or global ~/.config/opencode/opencode.json, then quit + restart

First tool call in any client: click OK on any macOS Automation prompts, then verify with the health_check tool. Optional folder allowlist for Notes via APPLE_NOTES_MCP_ALLOWED_FOLDERS in the entry's env (environment for opencode) — see the plugin README.

Security & Scope

Local by design. Private by default.

All plugins run 100% locally on your machine using first-party OS and developer tooling. Zero background cloud daemons, zero telemetry, zero remote proxies.

apple-notes-mcp access scope

By default the server can access all Notes. Restrict tools to a folder allowlist via APPLE_NOTES_MCP_ALLOWED_FOLDERS (comma-separated folder names or full paths). Unset means unrestricted. Confirm active scope with health_check:

APPLE_NOTES_MCP_ALLOWED_FOLDERS="iCloud/Work,iCloud/Personal" claude

mobile-mcp device isolation

Controls connected physical Android devices/emulators via ADB and iOS Simulators/devices via Xcode (simctl and devicectl). UI element detection on iOS uses Apple's native Vision OCR framework running locally on macOS — screenshots are never uploaded to third-party clouds for coordinate detection.

Requirements

What you'll need.

  • General

    uv installed (Python ≥ 3.12)

  • apple-notes-mcp

    macOS with Notes.app and Automation permission

  • mobile-mcp · Android

    Android SDK platform-tools (adb) in PATH, USB debugging enabled or Android Emulator

  • mobile-mcp · iOS

    macOS with Xcode 15+ (xcrun simctl for Simulators, xcrun devicectl for physical iOS 17+ devices)