list_oci_profiles
Retrieve available Oracle Cloud Infrastructure profiles from configuration files to select appropriate credentials before making API calls.
Instructions
List all available OCI profiles from ~/.oci/config file.
Returns a list of profiles with their configuration details.
Use this when you need to select a profile before making OCI API calls.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- mcp_server_oci/mcp_server.py:301-330 (handler)The MCP tool handler for 'list_oci_profiles', including registration decorator. Calls list_available_profiles helper and provides user feedback via ctx.info/error.@mcp.tool(name="list_oci_profiles") async def list_profiles_tool(ctx: Context) -> List[Dict[str, str]]: """ List all available OCI profiles from ~/.oci/config file. Returns a list of profiles with their configuration details. Use this when you need to select a profile before making OCI API calls. """ try: await ctx.info("Reading available OCI profiles from config file...") profiles = list_available_profiles() if not profiles: await ctx.info("No profiles found in OCI config file") return [{ "error": "No profiles found in OCI config file. Please configure OCI CLI first." }] await ctx.info(f"Found {len(profiles)} available profiles") return profiles except FileNotFoundError as e: error_msg = str(e) await ctx.error(error_msg) return [{"error": error_msg}] except Exception as e: error_msg = f"Error listing profiles: {str(e)}" await ctx.error(error_msg) logger.exception("Error listing OCI profiles") return [{"error": error_msg}]
- Core helper function that implements the logic to parse ~/.oci/config file using configparser and extract profile details (name, user OCID, tenancy OCID, region, key fingerprint).def list_available_profiles() -> List[Dict[str, str]]: """ List all available profiles from the OCI config file. Returns: List of dictionaries containing profile information: [ { "name": "DEFAULT", "user": "ocid1.user...", "tenancy": "ocid1.tenancy...", "region": "us-ashburn-1", "fingerprint": "aa:bb:cc:..." }, ... ] Raises: FileNotFoundError: If OCI config file doesn't exist Exception: If config file cannot be parsed """ config_path = get_oci_config_path() if not os.path.exists(config_path): raise FileNotFoundError( f"OCI config file not found at {config_path}. " f"Please create it or set OCI_CONFIG_FILE environment variable." ) try: config = configparser.ConfigParser() config.read(config_path) profiles = [] for section in config.sections(): profile_info = { "name": section, "user": config.get(section, "user", fallback="N/A"), "tenancy": config.get(section, "tenancy", fallback="N/A"), "region": config.get(section, "region", fallback="N/A"), "fingerprint": config.get(section, "fingerprint", fallback="N/A"), } profiles.append(profile_info) logger.info(f"Found {len(profiles)} profiles in {config_path}") return profiles except Exception as e: logger.exception(f"Error parsing OCI config file: {e}") raise Exception(f"Failed to parse OCI config file at {config_path}: {str(e)}")