# Idira Privilege Cloud MCP Server An MCP server for Idira (formerly CyberArk) Privilege Cloud, built on the official [ark-sdk-python](https://github.com/cyberark/ark-sdk-python) library. Provides 53 tools for privileged access management. Supports two authentication modes: - **OAuth per-user mode** (recommended) -- each user authenticates with their own Idira Identity credentials via OAuth. Requires [Streamable HTTP transport](#docker-deployment) and an OIDC app in Idira Identity ([setup guide](docs/CYBERARK_IDENTITY_SETUP.md)). - **Legacy service account mode** -- a single shared service account authenticates all requests via stdio transport. Simpler setup, shown in [Quick Start](#quick-start) below. ## Quick Start > This sets up the **legacy service account mode** via stdio. For OAuth per-user mode, see [OAuth Per-User Mode](#oauth-per-user-mode). **1. Install uv** (if not already installed): ```bash curl -LsSf https://astral.sh/uv/install.sh | sh ``` **2. Configure Claude Desktop** - Add to your configuration file: | OS | Configuration File Location | |----|----------------------------| | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` | | Windows | `%APPDATA%\Claude\claude_desktop_config.json` | | Linux | `~/.config/Claude/claude_desktop_config.json` | ```json { "mcpServers": { "cyberark-privilege-cloud": { "command": "uvx", "args": [ "--from", "git+https://github.com/aaearon/mcp-privilege-cloud.git", "mcp-privilege-cloud" ], "env": { "CYBERARK_CLIENT_ID": "your-service-user-username", "CYBERARK_CLIENT_SECRET": "your-service-user-password" } } } } ``` **3. Restart Claude Desktop** - The MCP server will appear in the tools menu (hammer icon) when connected. ### Claude Code ```bash claude mcp add cyberark-privilege-cloud \ -e CYBERARK_CLIENT_ID=your-service-user-username \ -e CYBERARK_CLIENT_SECRET=your-service-user-password \ -- uvx --from git+https://github.com/aaearon/mcp-privilege-cloud.git mcp-privilege-cloud ``` ## Example Prompts Once configured, you can ask Claude things like: - "List all accounts in the Production safe" - "Show me Windows accounts that are failing management" - "Create a new safe called 'DevOps-Credentials' with 30-day retention" - "Add the DevOps team as safe members with retrieve permissions" - "List all active platforms and their account counts" - "Show me active privileged sessions" ## Prerequisites - [Idira Identity Service User](https://docs.cyberark.com/identity-administration/latest/en/content/ispss/ispss-add-service-user.htm) with: - Appropriate Identity roles for the desired operations (e.g., Privilege Cloud Administrator for platform management) - Safe permissions granting access to the safes and accounts you want to manage - For OAuth per-user mode: an OIDC app in Idira Identity (see [setup guide](docs/CYBERARK_IDENTITY_SETUP.md)) ## Configuration ### OAuth Per-User Mode Each connecting user authenticates with their own Idira Identity credentials via OAuth. The server verifies user identity from the OIDC JWT, then uses a shared service account platform token for all PCloud API calls. Requires Streamable HTTP transport -- see [Docker Deployment](#docker-deployment) or set `MCP_TRANSPORT=streamable-http` when running locally. | Variable | Required | Description | |----------|----------|-------------| | `CYBERARK_IDENTITY_TENANT_URL` | Yes | Idira Identity tenant URL (e.g., `https://abc1234.id.cyberark.cloud`) | | `CYBERARK_CLIENT_ID` | Yes | Service account login name (for PCloud platform token) | | `CYBERARK_CLIENT_SECRET` | Yes | Service account password | | `CYBERARK_OAUTH_CLIENT_ID` | Yes | OIDC app client ID from Trust tab (for DCR and JWT audience) | | `CYBERARK_OAUTH_CLIENT_SECRET` | Yes | OIDC app client secret from Trust tab (injected server-side in /token proxy) | | `MCP_TRANSPORT` | No | Transport protocol (default: `stdio`; set to `streamable-http` for OAuth) | | `MCP_HOST` | No | Server bind host (default: `127.0.0.1`) | | `MCP_PORT` | No | Server bind port (default: `8000`) | | `MCP_SERVER_URL` | No | Public URL for OAuth metadata (default: `http://{host}:{port}`) | See [Idira Identity Setup](docs/CYBERARK_IDENTITY_SETUP.md) for full configuration instructions. ### Legacy Service Account Mode | Variable | Required | Description | |----------|----------|-------------| | `CYBERARK_CLIENT_ID` | Yes | Your Service User username | | `CYBERARK_CLIENT_SECRET` | Yes | Your Service User password | ## Docker Deployment The included `Dockerfile` and `docker-compose.yml` run the server in Streamable HTTP mode, suitable for OAuth per-user authentication and remote MCP clients. ```bash # Create .env with your credentials (see .env.example) docker compose up -d --build ``` When deploying behind a reverse proxy, configure it to strip trailing slashes from request paths. MCP clients may POST to `/mcp/` (trailing slash), causing a 307 redirect that strips the `Authorization` header. Set `MCP_SERVER_URL` to the public URL of your server. ## Available Tools (53 Total) **Account Management (18 tools):** - **Core Operations**: `list_accounts`, `get_account_details`, `search_accounts`, `create_account`, `update_account`, `delete_account` - **Password Management**: `change_account_password`, `set_next_password`, `verify_account_password`, `reconcile_account_password` - **Advanced Search**: `filter_accounts_by_platform_group`, `filter_accounts_by_environment`, `filter_accounts_by_management_status`, `group_accounts_by_safe`, `group_accounts_by_platform`, `analyze_account_distribution`, `search_accounts_by_pattern`, `count_accounts_by_criteria` **Safe Management (10 tools):** - **Core Operations**: `list_safes`, `get_safe_details`, `add_safe`, `update_safe`, `delete_safe` - **Member Management**: `list_safe_members`, `get_safe_member_details`, `add_safe_member`, `update_safe_member`, `remove_safe_member` **Platform Management (10 tools):** - **Core Operations**: `list_platforms`, `get_platform_details`, `import_platform_package`, `export_platform` - **Lifecycle Management**: `duplicate_target_platform`, `activate_target_platform`, `deactivate_target_platform`, `delete_target_platform` - **Statistics**: `get_platform_statistics`, `get_target_platform_statistics` **Applications Management (9 tools):** - **Core Operations**: `list_applications`, `get_application_details`, `add_application`, `delete_application` - **Auth Methods**: `list_application_auth_methods`, `get_application_auth_method_details`, `add_application_auth_method`, `delete_application_auth_method` - **Statistics**: `get_applications_stats` **Session Monitoring (6 tools):** - **Session Management**: `list_sessions`, `list_sessions_by_filter`, `get_session_details`, `count_sessions` - **Activity Tracking**: `list_session_activities`, `get_session_statistics` ## Troubleshooting | Issue | Solution | |-------|----------| | MCP not appearing in Claude | Restart Claude Desktop after saving configuration | | Authentication failed | Verify Service User credentials in Idira Identity | | Permission errors | Ensure the Service User has appropriate Identity roles and safe permissions | | Connection issues | Verify you're using the `.cloud` domain (not `.com`) | | OAuth 401 behind reverse proxy | Ensure the proxy strips trailing slashes (see [Docker Deployment](#docker-deployment)) | | `uvx` not found | Install uv: `curl -LsSf https://astral.sh/uv/install.sh \| sh` | **Verify MCP server manually:** ```bash uvx --from git+https://github.com/aaearon/mcp-privilege-cloud.git mcp-privilege-cloud ``` ## Development ```bash git clone https://github.com/aaearon/mcp-privilege-cloud.git cd mcp-privilege-cloud uv sync uv run pytest # Run all tests uv run pytest --cov=mcp_privilege_cloud # Run with coverage uv run mcp-privilege-cloud # Run the server locally ``` ## Documentation - **[API Reference](docs/API_REFERENCE.md)** - Complete tool specifications and parameters - **[Architecture](docs/ARCHITECTURE.md)** - System design and components - **[Idira Identity Setup](docs/CYBERARK_IDENTITY_SETUP.md)** - OAuth app configuration guide - **[Development Guide](docs/DEVELOPMENT.md)** - Contributing and development workflows - **[Testing Guide](docs/TESTING.md)** - Detailed testing instructions ## Security - Never commit credentials to version control - Use secure environment variable management - Grant minimal required permissions to Service Users - In OAuth mode, DCR returns public clients only -- secrets are injected server-side - Official SDK provides automatic token management and secure protocols ## License MIT License - see [LICENSE](LICENSE) file for details. ## Support For issues and feature requests, please use [GitHub Issues](https://github.com/aaearon/mcp-privilege-cloud/issues).