diff --git a/src/database-mcp-server/LICENSE.txt b/src/oci-database-mcp-server/LICENSE.txt similarity index 100% rename from src/database-mcp-server/LICENSE.txt rename to src/oci-database-mcp-server/LICENSE.txt diff --git a/src/database-mcp-server/README.md b/src/oci-database-mcp-server/README.md similarity index 98% rename from src/database-mcp-server/README.md rename to src/oci-database-mcp-server/README.md index 952b84a6..424505db 100644 --- a/src/database-mcp-server/README.md +++ b/src/oci-database-mcp-server/README.md @@ -10,6 +10,12 @@ This server provides tools to interact with the OCI Database service. uv run oracle.database-mcp-server ``` +## Environment Variables + +The server supports the following environment variables: + +- `OCI_CONFIG_PROFILE`: OCI configuration profile name (default: "DEFAULT") + ## Tools | Tool Name | Description | @@ -88,8 +94,6 @@ uv run oracle.database-mcp-server | delete_pluggable_database | Delete a specific pluggable database | | get_pluggable_database | Get information about a specific pluggable database | | update_pluggable_database | Update a specific pluggable database | -| get_compartment_by_name_tool | Return a compartment matching the provided name | -| list_subscribed_regions_tool | Return a list of all regions the customer (tenancy) is subscribed to | | get_application_vip | Gets information about a specified application virtual IP (VIP) address. | | get_autonomous_container_database | Gets information about the specified Autonomous Container Database. | | get_autonomous_container_database_dataguard_association | Gets an Autonomous Container Database enabled with Autonomous Data Guard associated with the specified Autonomous Container Database. | diff --git a/src/database-mcp-server/oracle/__init__.py b/src/oci-database-mcp-server/oracle/__init__.py similarity index 100% rename from src/database-mcp-server/oracle/__init__.py rename to src/oci-database-mcp-server/oracle/__init__.py diff --git a/src/database-mcp-server/oracle/database_mcp_server/__init__.py b/src/oci-database-mcp-server/oracle/oci_database_mcp_server/__init__.py similarity index 70% rename from src/database-mcp-server/oracle/database_mcp_server/__init__.py rename to src/oci-database-mcp-server/oracle/oci_database_mcp_server/__init__.py index 7164143d..13c6e269 100644 --- a/src/database-mcp-server/oracle/database_mcp_server/__init__.py +++ b/src/oci-database-mcp-server/oracle/oci_database_mcp_server/__init__.py @@ -4,5 +4,5 @@ https://oss.oracle.com/licenses/upl. """ -__project__ = "oracle.database-mcp-server" -__version__ = "1.0.1" +__project__ = "oracle.oci-database-mcp-server" +__version__ = "1.0.2" diff --git a/src/database-mcp-server/oracle/database_mcp_server/models.py b/src/oci-database-mcp-server/oracle/oci_database_mcp_server/models.py similarity index 100% rename from src/database-mcp-server/oracle/database_mcp_server/models.py rename to src/oci-database-mcp-server/oracle/oci_database_mcp_server/models.py diff --git a/src/database-mcp-server/oracle/database_mcp_server/server.py b/src/oci-database-mcp-server/oracle/oci_database_mcp_server/server.py similarity index 91% rename from src/database-mcp-server/oracle/database_mcp_server/server.py rename to src/oci-database-mcp-server/oracle/oci_database_mcp_server/server.py index f7421d03..d0404f2e 100644 --- a/src/database-mcp-server/oracle/database_mcp_server/server.py +++ b/src/oci-database-mcp-server/oracle/oci_database_mcp_server/server.py @@ -4,10 +4,9 @@ https://oss.oracle.com/licenses/upl. """ -import json import os from logging import Logger -from typing import Annotated, Any, List, Optional +from typing import Annotated, Any, Optional import oci from fastmcp import FastMCP @@ -17,7 +16,7 @@ CreatePluggableDatabaseFromRemoteCloneDetails, ) from oci.util import to_dict -from oracle.database_mcp_server.models import ( +from oracle.oci_database_mcp_server.models import ( ApplicationVip, ApplicationVipSummary, AutonomousContainerDatabase, @@ -297,25 +296,11 @@ def get_database_client(region: str = None): signer = oci.auth.signers.SecurityTokenSigner(token, private_key) if region is None: return oci.database.DatabaseClient(config, signer=signer) - regional_config = config.copy() # make a shallow copy + regional_config = config.copy() regional_config["region"] = region return oci.database.DatabaseClient(regional_config, signer=signer) -def get_identity_client(): - config = oci.config.from_file( - profile_name=os.getenv("OCI_CONFIG_PROFILE", oci.config.DEFAULT_PROFILE) - ) - user_agent_name = __project__.split("oracle.", 1)[1].split("-server", 1)[0] - config["additional_user_agent"] = f"{user_agent_name}/{__version__}" - private_key = oci.signer.load_private_key_from_file(config["key_file"]) - token_file = config["security_token_file"] - with open(token_file, "r") as f: - token = f.read() - signer = oci.auth.signers.SecurityTokenSigner(token, private_key) - return oci.identity.IdentityClient(config, signer=signer) - - def call_create_pdb(client, details, opc_retry_token=None, opc_request_id=None): kwargs = {"create_pluggable_database_details": details.__dict__} if opc_retry_token: @@ -326,76 +311,6 @@ def call_create_pdb(client, details, opc_retry_token=None, opc_request_id=None): return map_pluggabledatabase(response.data) -def get_tenancy(): - config = oci.config.from_file( - profile_name=os.getenv("OCI_CONFIG_PROFILE", oci.config.DEFAULT_PROFILE) - ) - return os.getenv("TENANCY_ID_OVERRIDE", config["tenancy"]) - - -def list_all_compartments_internal(only_one_page: bool, limit=100): - """Internal function to get List all compartments in a tenancy""" - identity_client = get_identity_client() - response = identity_client.list_compartments( - compartment_id=get_tenancy(), - compartment_id_in_subtree=True, - access_level="ACCESSIBLE", - lifecycle_state="ACTIVE", - limit=limit, - ) - compartments = response.data - compartments.append( - identity_client.get_compartment(compartment_id=get_tenancy()).data - ) - if only_one_page: # limiting the number of items returned - return compartments - while response.has_next_page: - response = identity_client.list_compartments( - compartment_id=get_tenancy(), - compartment_id_in_subtree=True, - access_level="ACCESSIBLE", - lifecycle_state="ACTIVE", - page=response.next_page, - limit=limit, - ) - compartments.extend(response.data) - - return compartments - - -def get_compartment_by_name(compartment_name: str): - """Internal function to get compartment by name with caching""" - compartments = list_all_compartments_internal(False) - # Search for the compartment by name - for compartment in compartments: - if compartment.name.lower() == compartment_name.lower(): - return compartment - - return None - - -@mcp.tool() -def get_compartment_by_name_tool(name: str) -> str: - """Return a compartment matching the provided name""" - compartment = get_compartment_by_name(name) - if compartment: - return str(compartment) - else: - return json.dumps({"error": f"Compartment '{name}' not found."}) - - -@mcp.tool() -def list_subscribed_regions_tool() -> str: - """Return a list of all regions the customer (tenancy) is subscribed to""" - try: - identity_client = get_identity_client() - response = identity_client.list_region_subscriptions(tenancy_id=get_tenancy()) - regions = [region.region_name for region in response.data] - return json.dumps({"regions": regions}) - except Exception as e: - return json.dumps({"error": str(e)}) - - @mcp.tool(description="Deletes the specified pluggable database.") def delete_pluggable_database( pluggable_database_id: Annotated[ @@ -411,7 +326,7 @@ def delete_pluggable_database( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> Any: try: @@ -437,7 +352,7 @@ def get_pluggable_database( ], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> PluggableDatabase: try: @@ -467,7 +382,7 @@ def update_pluggable_database( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> PluggableDatabase: try: @@ -744,7 +659,7 @@ def list_application_vips( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ApplicationVipSummary]: try: @@ -789,7 +704,7 @@ def list_autonomous_container_database_dataguard_associations( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousContainerDatabaseDataguardAssociation]: try: @@ -844,7 +759,7 @@ def list_autonomous_container_database_versions( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousContainerDatabaseVersionSummary]: try: @@ -957,7 +872,7 @@ def list_autonomous_container_databases( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousContainerDatabaseSummary]: try: @@ -1061,7 +976,7 @@ def list_autonomous_database_backups( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousDatabaseBackupSummary]: try: @@ -1127,7 +1042,7 @@ def list_autonomous_database_character_sets( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousDatabaseCharacterSets]: try: @@ -1217,7 +1132,7 @@ def list_autonomous_database_clones( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousDatabaseSummary]: try: @@ -1266,7 +1181,7 @@ def list_autonomous_database_dataguard_associations( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousDatabaseDataguardAssociation]: try: @@ -1308,7 +1223,7 @@ def list_autonomous_database_peers( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousDatabasePeerCollection]: try: @@ -1350,7 +1265,7 @@ def list_autonomous_database_refreshable_clones( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[RefreshableCloneCollection]: try: @@ -1430,7 +1345,7 @@ def list_autonomous_database_software_images( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousDatabaseSoftwareImageCollection]: try: @@ -1600,7 +1515,7 @@ def list_autonomous_databases( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousDatabaseSummary]: try: @@ -1686,7 +1601,7 @@ def list_autonomous_db_preview_versions( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousDbPreviewVersionSummary]: try: @@ -1741,7 +1656,7 @@ def list_autonomous_db_versions( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousDbVersionSummary]: try: @@ -1797,7 +1712,7 @@ def list_autonomous_virtual_machines( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousVirtualMachineSummary]: try: @@ -1880,7 +1795,7 @@ def list_autonomous_vm_clusters( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousVmClusterSummary]: try: @@ -1933,7 +1848,7 @@ def list_backup_destination( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[BackupDestinationSummary]: try: @@ -1981,7 +1896,7 @@ def list_backups( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[BackupSummary]: try: @@ -2071,7 +1986,7 @@ def list_cloud_autonomous_vm_clusters( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[CloudAutonomousVmClusterSummary]: try: @@ -2166,7 +2081,7 @@ def list_cloud_exadata_infrastructures( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[CloudExadataInfrastructureSummary]: try: @@ -2225,7 +2140,7 @@ def list_cloud_vm_cluster_updates( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[UpdateSummary]: try: @@ -2308,7 +2223,7 @@ def list_cloud_vm_clusters( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[CloudVmClusterSummary]: try: @@ -2345,7 +2260,7 @@ def list_console_connections( db_node_id: Annotated[Optional[Any], ("The database node `OCID`__.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ConsoleConnectionSummary]: try: @@ -2406,7 +2321,7 @@ def list_console_histories( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ConsoleHistoryCollection]: try: @@ -2457,7 +2372,7 @@ def list_container_database_patches( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[AutonomousPatchSummary]: try: @@ -2491,7 +2406,7 @@ def list_data_guard_associations( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DataGuardAssociationSummary]: try: @@ -2588,7 +2503,7 @@ def list_database_software_images( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DatabaseSoftwareImageSummary]: try: @@ -2679,7 +2594,7 @@ def list_databases( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DatabaseSummary]: try: @@ -2724,7 +2639,7 @@ def list_db_home_patch_history_entries( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[PatchHistoryEntrySummary]: try: @@ -2755,7 +2670,7 @@ def list_db_home_patches( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[PatchSummary]: try: @@ -2843,7 +2758,7 @@ def list_db_homes( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DbHomeSummary]: try: @@ -2929,7 +2844,7 @@ def list_db_nodes( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DbNodeSummary]: try: @@ -3011,7 +2926,7 @@ def list_db_servers( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DbServerSummary]: try: @@ -3059,7 +2974,7 @@ def list_db_system_compute_performances( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DbSystemComputePerformanceSummary]: try: @@ -3089,7 +3004,7 @@ def list_db_system_patches( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[PatchSummary]: try: @@ -3127,7 +3042,7 @@ def list_db_system_shapes( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DbSystemShapeSummary]: try: @@ -3173,7 +3088,7 @@ def list_db_system_storage_performances( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DbSystemStoragePerformanceSummary]: try: @@ -3262,7 +3177,7 @@ def list_db_systems( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DbSystemSummary]: try: @@ -3344,7 +3259,7 @@ def list_db_versions( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[DbVersionSummary]: try: @@ -3435,7 +3350,7 @@ def list_exadata_infrastructures( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ExadataInfrastructureSummary]: try: @@ -3501,7 +3416,7 @@ def list_exadb_vm_cluster_updates( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ExadbVmClusterUpdateSummary]: try: @@ -3587,7 +3502,7 @@ def list_exadb_vm_clusters( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ExadbVmClusterSummary]: try: @@ -3675,7 +3590,7 @@ def list_exascale_db_storage_vaults( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ExascaleDbStorageVaultSummary]: try: @@ -3763,7 +3678,7 @@ def list_execution_actions( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ExecutionActionSummary]: try: @@ -3850,7 +3765,7 @@ def list_execution_windows( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ExecutionWindowSummary]: try: @@ -3931,7 +3846,7 @@ def list_external_container_databases( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ExternalContainerDatabaseSummary]: try: @@ -4016,7 +3931,7 @@ def list_external_database_connectors( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ExternalDatabaseConnectorSummary]: try: @@ -4098,7 +4013,7 @@ def list_external_non_container_databases( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ExternalNonContainerDatabaseSummary]: try: @@ -4182,7 +4097,7 @@ def list_external_pluggable_databases( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ExternalPluggableDatabaseSummary]: try: @@ -4260,7 +4175,7 @@ def list_flex_components( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[FlexComponentCollection]: try: @@ -4345,7 +4260,7 @@ def list_gi_version_minor_versions( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[GiMinorVersionSummary]: try: @@ -4406,7 +4321,7 @@ def list_gi_versions( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[GiVersionSummary]: try: @@ -4444,7 +4359,7 @@ def list_key_stores( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[KeyStoreSummary]: try: @@ -4541,7 +4456,7 @@ def list_maintenance_run_history( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[MaintenanceRunHistorySummary]: try: @@ -4650,7 +4565,7 @@ def list_maintenance_runs( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[MaintenanceRunSummary]: try: @@ -4732,7 +4647,7 @@ def list_oneoff_patches( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[OneoffPatchSummary]: try: @@ -4812,7 +4727,7 @@ def list_pluggable_databases( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[PluggableDatabaseSummary]: try: @@ -4909,7 +4824,7 @@ def list_scheduled_actions( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ScheduledActionCollection]: try: @@ -5011,7 +4926,7 @@ def list_scheduling_plans( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[SchedulingPlanCollection]: try: @@ -5094,7 +5009,7 @@ def list_scheduling_policies( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[SchedulingPolicySummary]: try: @@ -5172,7 +5087,7 @@ def list_scheduling_windows( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[SchedulingWindowSummary]: try: @@ -5230,7 +5145,7 @@ def list_system_versions( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[SystemVersionCollection]: try: @@ -5311,7 +5226,7 @@ def list_vm_cluster_networks( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[VmClusterNetworkSummary]: try: @@ -5356,7 +5271,7 @@ def list_vm_cluster_patches( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[PatchSummary]: try: @@ -5409,7 +5324,7 @@ def list_vm_cluster_updates( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[VmClusterUpdateSummary]: try: @@ -5490,7 +5405,7 @@ def list_vm_clusters( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[VmClusterSummary]: try: @@ -5556,7 +5471,7 @@ def resource_pool_shapes( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[ResourcePoolShapeCollection]: try: @@ -5593,7 +5508,7 @@ def get_application_vip( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ApplicationVip: try: @@ -5618,7 +5533,7 @@ def get_autonomous_container_database( ], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousContainerDatabase: try: @@ -5653,7 +5568,7 @@ def get_autonomous_container_database_dataguard_association( ], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousContainerDatabaseDataguardAssociation: try: @@ -5688,7 +5603,7 @@ def get_autonomous_container_database_resource_usage( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousContainerDatabaseResourceUsage: try: @@ -5716,7 +5631,7 @@ def get_autonomous_database( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousDatabase: try: @@ -5744,7 +5659,7 @@ def get_autonomous_database_backup( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousDatabaseBackup: try: @@ -5782,7 +5697,7 @@ def get_autonomous_database_dataguard_association( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousDatabaseDataguardAssociation: try: @@ -5812,7 +5727,7 @@ def get_autonomous_database_regional_wallet( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousDatabaseWallet: try: @@ -5843,7 +5758,7 @@ def get_autonomous_database_software_image( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousDatabaseSoftwareImage: try: @@ -5873,7 +5788,7 @@ def get_autonomous_database_wallet( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousDatabaseWallet: try: @@ -5905,7 +5820,7 @@ def get_autonomous_exadata_infrastructure( ], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousExadataInfrastructure: try: @@ -5928,7 +5843,7 @@ def get_autonomous_patch( autonomous_patch_id: Annotated[Optional[Any], ("The autonomous patch `OCID`__.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousPatch: try: @@ -5952,7 +5867,7 @@ def get_autonomous_virtual_machine( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousVirtualMachine: try: @@ -5986,7 +5901,7 @@ def get_autonomous_vm_cluster( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousVmCluster: try: @@ -6016,7 +5931,7 @@ def get_autonomous_vm_cluster_resource_usage( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> AutonomousVmClusterResourceUsage: try: @@ -6039,7 +5954,7 @@ def get_backup( backup_id: Annotated[Optional[Any], ("The backup `OCID`__.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> Backup: try: @@ -6068,7 +5983,7 @@ def get_backup_destination( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> BackupDestination: try: @@ -6100,7 +6015,7 @@ def get_cloud_autonomous_vm_cluster( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> CloudAutonomousVmCluster: try: @@ -6133,7 +6048,7 @@ def get_cloud_autonomous_vm_cluster_resource_usage( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> CloudAutonomousVmClusterResourceUsage: try: @@ -6169,7 +6084,7 @@ def get_cloud_exadata_infrastructure( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> CloudExadataInfrastructure: try: @@ -6205,7 +6120,7 @@ def get_cloud_exadata_infrastructure_unallocated_resources( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> CloudExadataInfrastructureUnallocatedResources: try: @@ -6241,7 +6156,7 @@ def get_cloud_vm_cluster( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> CloudVmCluster: try: @@ -6270,7 +6185,7 @@ def get_cloud_vm_cluster_iorm_config( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExadataIormConfig: try: @@ -6302,7 +6217,7 @@ def get_cloud_vm_cluster_update( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> Update: try: @@ -6335,7 +6250,7 @@ def get_cloud_vm_cluster_update_history_entry( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> UpdateHistoryEntry: try: @@ -6364,7 +6279,7 @@ def get_console_connection( ], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ConsoleConnection: try: @@ -6390,7 +6305,7 @@ def get_console_history( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ConsoleHistory: try: @@ -6420,7 +6335,7 @@ def get_console_history_content( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> list[Any]: try: @@ -6449,7 +6364,7 @@ def get_data_guard_association( ], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> DataGuardAssociation: try: @@ -6469,7 +6384,7 @@ def get_database( database_id: Annotated[Optional[Any], ("The database `OCID`__.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> Database: try: @@ -6488,7 +6403,7 @@ def get_database_software_image( database_software_image_id: Annotated[Optional[Any], ("The DB system `OCID`__.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> DatabaseSoftwareImage: try: @@ -6513,7 +6428,7 @@ def get_database_upgrade_history_entry( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> DatabaseUpgradeHistoryEntry: try: @@ -6537,7 +6452,7 @@ def get_db_home( db_home_id: Annotated[Optional[Any], ("The Database Home `OCID`__.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> DbHome: try: @@ -6557,7 +6472,7 @@ def get_db_home_patch( patch_id: Annotated[Optional[Any], ("The `OCID`__ of the patch.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> Patch: try: @@ -6582,7 +6497,7 @@ def get_db_home_patch_history_entry( ], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> PatchHistoryEntry: try: @@ -6604,7 +6519,7 @@ def get_db_node( db_node_id: Annotated[Optional[Any], ("The database node `OCID`__.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> DbNode: try: @@ -6629,7 +6544,7 @@ def get_db_server( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> DbServer: try: @@ -6651,7 +6566,7 @@ def get_db_system( db_system_id: Annotated[Optional[Any], ("The DB system `OCID`__.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> DbSystem: try: @@ -6671,7 +6586,7 @@ def get_db_system_patch( patch_id: Annotated[Optional[Any], ("The `OCID`__ of the patch.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> Patch: try: @@ -6698,7 +6613,7 @@ def get_db_system_patch_history_entry( ], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> PatchHistoryEntry: try: @@ -6731,7 +6646,7 @@ def get_db_system_upgrade_history_entry( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> DbSystemUpgradeHistoryEntry: try: @@ -6772,7 +6687,7 @@ def get_exadata_infrastructure( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExadataInfrastructure: try: @@ -6805,7 +6720,7 @@ def get_exadata_infrastructure_ocpus( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> OCPUs: try: @@ -6843,7 +6758,7 @@ def get_exadata_infrastructure_un_allocated_resources( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExadataInfrastructureUnAllocatedResources: try: @@ -6877,7 +6792,7 @@ def get_exadata_iorm_config( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExadataIormConfig: try: @@ -6909,7 +6824,7 @@ def get_exadb_vm_cluster( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExadbVmCluster: try: @@ -6941,7 +6856,7 @@ def get_exadb_vm_cluster_update( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExadbVmClusterUpdate: try: @@ -6976,7 +6891,7 @@ def get_exadb_vm_cluster_update_history_entry( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExadbVmClusterUpdateHistoryEntry: try: @@ -7010,7 +6925,7 @@ def get_exascale_db_storage_vault( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExascaleDbStorageVault: try: @@ -7034,7 +6949,7 @@ def get_execution_action( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExecutionAction: try: @@ -7058,7 +6973,7 @@ def get_execution_window( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExecutionWindow: try: @@ -7079,7 +6994,7 @@ def get_external_backup_job( backup_id: Annotated[Optional[Any], ("The backup `OCID`__.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExternalBackupJob: try: @@ -7105,7 +7020,7 @@ def get_external_container_database( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExternalContainerDatabase: try: @@ -7139,7 +7054,7 @@ def get_external_database_connector( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExternalDatabaseConnector: try: @@ -7169,7 +7084,7 @@ def get_external_non_container_database( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExternalNonContainerDatabase: try: @@ -7199,7 +7114,7 @@ def get_external_pluggable_database( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ExternalPluggableDatabase: try: @@ -7242,7 +7157,7 @@ def get_infrastructure_target_versions( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> InfrastructureTargetVersion: try: @@ -7272,7 +7187,7 @@ def get_key_store( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> KeyStore: try: @@ -7293,7 +7208,7 @@ def get_maintenance_run( maintenance_run_id: Annotated[Optional[Any], ("The maintenance run OCID.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> MaintenanceRun: try: @@ -7314,7 +7229,7 @@ def get_maintenance_run_history( ], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> MaintenanceRunHistory: try: @@ -7336,7 +7251,7 @@ def get_oneoff_patch( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> OneoffPatch: try: @@ -7368,7 +7283,7 @@ def get_pdb_conversion_history_entry( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> PdbConversionHistoryEntry: try: @@ -7395,7 +7310,7 @@ def get_scheduled_action( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> ScheduledAction: try: @@ -7419,7 +7334,7 @@ def get_scheduling_plan( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> SchedulingPlan: try: @@ -7443,7 +7358,7 @@ def get_scheduling_policy( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> SchedulingPolicy: try: @@ -7468,7 +7383,7 @@ def get_scheduling_window( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> SchedulingWindow: try: @@ -7498,7 +7413,7 @@ def get_vm_cluster( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> VmCluster: try: @@ -7532,7 +7447,7 @@ def get_vm_cluster_network( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> VmClusterNetwork: try: @@ -7555,7 +7470,7 @@ def get_vm_cluster_patch( patch_id: Annotated[Optional[Any], ("The `OCID`__ of the patch.")], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> Patch: try: @@ -7582,7 +7497,7 @@ def get_vm_cluster_patch_history_entry( ], region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> PatchHistoryEntry: try: @@ -7613,7 +7528,7 @@ def get_vm_cluster_update( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> VmClusterUpdate: try: @@ -7646,7 +7561,7 @@ def get_vm_cluster_update_history_entry( ] = None, region: Annotated[ str, - "Region to execute the request, if no region is specified then default will be picked", + "Region to execute the request (Use list_subscribed_regions_tool from identity server to get proper region identifier), if no region is specified then default will be picked", ] = None, ) -> VmClusterUpdateHistoryEntry: try: diff --git a/src/database-mcp-server/oracle/database_mcp_server/tests/test_database.py b/src/oci-database-mcp-server/oracle/oci_database_mcp_server/tests/test_database.py similarity index 91% rename from src/database-mcp-server/oracle/database_mcp_server/tests/test_database.py rename to src/oci-database-mcp-server/oracle/oci_database_mcp_server/tests/test_database.py index 6ad635c4..ee35cc14 100644 --- a/src/database-mcp-server/oracle/database_mcp_server/tests/test_database.py +++ b/src/oci-database-mcp-server/oracle/oci_database_mcp_server/tests/test_database.py @@ -3,11 +3,11 @@ import oci import pytest from fastmcp import Client -from oracle.database_mcp_server.server import mcp +from oracle.oci_database_mcp_server.server import mcp @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_application_vips(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -31,7 +31,7 @@ async def test_list_application_vips(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_container_database_dataguard_associations( mock_get_client, ): @@ -58,7 +58,7 @@ async def test_list_autonomous_container_database_dataguard_associations( @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_container_database_versions(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -82,7 +82,7 @@ async def test_list_autonomous_container_database_versions(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_container_databases(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -103,7 +103,7 @@ async def test_list_autonomous_container_databases(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_database_backups(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -124,7 +124,7 @@ async def test_list_autonomous_database_backups(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_database_character_sets(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -145,7 +145,7 @@ async def test_list_autonomous_database_character_sets(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_database_clones(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -169,7 +169,7 @@ async def test_list_autonomous_database_clones(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_database_dataguard_associations(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -192,7 +192,7 @@ async def test_list_autonomous_database_dataguard_associations(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_database_peers(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -213,7 +213,7 @@ async def test_list_autonomous_database_peers(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_database_refreshable_clones(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -234,7 +234,7 @@ async def test_list_autonomous_database_refreshable_clones(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_database_software_images(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -258,7 +258,7 @@ async def test_list_autonomous_database_software_images(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_databases(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -279,7 +279,7 @@ async def test_list_autonomous_databases(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_db_preview_versions(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -300,7 +300,7 @@ async def test_list_autonomous_db_preview_versions(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_db_versions(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -321,7 +321,7 @@ async def test_list_autonomous_db_versions(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_virtual_machines(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -345,7 +345,7 @@ async def test_list_autonomous_virtual_machines(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_autonomous_vm_clusters(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -366,7 +366,7 @@ async def test_list_autonomous_vm_clusters(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_backup_destination(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -387,7 +387,7 @@ async def test_list_backup_destination(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_backups(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -408,7 +408,7 @@ async def test_list_backups(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_cloud_autonomous_vm_clusters(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -429,7 +429,7 @@ async def test_list_cloud_autonomous_vm_clusters(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_cloud_exadata_infrastructures(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -450,7 +450,7 @@ async def test_list_cloud_exadata_infrastructures(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_cloud_vm_cluster_updates(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -471,7 +471,7 @@ async def test_list_cloud_vm_cluster_updates(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_cloud_vm_clusters(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -492,7 +492,7 @@ async def test_list_cloud_vm_clusters(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_console_connections(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -513,7 +513,7 @@ async def test_list_console_connections(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_console_histories(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -534,7 +534,7 @@ async def test_list_console_histories(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_container_database_patches(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -558,7 +558,7 @@ async def test_list_container_database_patches(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_data_guard_associations(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -579,7 +579,7 @@ async def test_list_data_guard_associations(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_database_software_images(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -600,7 +600,7 @@ async def test_list_database_software_images(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_databases(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -621,7 +621,7 @@ async def test_list_databases(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_home_patch_history_entries(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -642,7 +642,7 @@ async def test_list_db_home_patch_history_entries(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_home_patches(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -663,7 +663,7 @@ async def test_list_db_home_patches(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_homes(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -684,7 +684,7 @@ async def test_list_db_homes(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_nodes(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -705,7 +705,7 @@ async def test_list_db_nodes(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_servers(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -729,7 +729,7 @@ async def test_list_db_servers(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_system_compute_performances(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -750,7 +750,7 @@ async def test_list_db_system_compute_performances(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_system_patches(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -771,7 +771,7 @@ async def test_list_db_system_patches(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_system_shapes(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -792,7 +792,7 @@ async def test_list_db_system_shapes(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_system_storage_performances(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -813,7 +813,7 @@ async def test_list_db_system_storage_performances(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_systems(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -834,7 +834,7 @@ async def test_list_db_systems(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_db_versions(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -855,7 +855,7 @@ async def test_list_db_versions(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_exadata_infrastructures(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -876,7 +876,7 @@ async def test_list_exadata_infrastructures(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_exadb_vm_cluster_updates(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -897,7 +897,7 @@ async def test_list_exadb_vm_cluster_updates(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_exadb_vm_clusters(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -918,7 +918,7 @@ async def test_list_exadb_vm_clusters(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_exascale_db_storage_vaults(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -939,7 +939,7 @@ async def test_list_exascale_db_storage_vaults(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_execution_actions(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -960,7 +960,7 @@ async def test_list_execution_actions(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_execution_windows(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -981,7 +981,7 @@ async def test_list_execution_windows(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_external_container_databases(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1002,7 +1002,7 @@ async def test_list_external_container_databases(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_external_database_connectors(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1026,7 +1026,7 @@ async def test_list_external_database_connectors(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_external_non_container_databases(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1047,7 +1047,7 @@ async def test_list_external_non_container_databases(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_external_pluggable_databases(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1068,7 +1068,7 @@ async def test_list_external_pluggable_databases(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_flex_components(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1089,7 +1089,7 @@ async def test_list_flex_components(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_gi_version_minor_versions(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1110,7 +1110,7 @@ async def test_list_gi_version_minor_versions(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_gi_versions(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1131,7 +1131,7 @@ async def test_list_gi_versions(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_key_stores(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1152,7 +1152,7 @@ async def test_list_key_stores(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_maintenance_run_history(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1173,7 +1173,7 @@ async def test_list_maintenance_run_history(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_maintenance_runs(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1194,7 +1194,7 @@ async def test_list_maintenance_runs(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_oneoff_patches(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1215,7 +1215,7 @@ async def test_list_oneoff_patches(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_pluggable_databases(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1236,7 +1236,7 @@ async def test_list_pluggable_databases(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_scheduled_actions(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1257,7 +1257,7 @@ async def test_list_scheduled_actions(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_scheduling_plans(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1278,7 +1278,7 @@ async def test_list_scheduling_plans(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_scheduling_policies(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1299,7 +1299,7 @@ async def test_list_scheduling_policies(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_scheduling_windows(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1320,7 +1320,7 @@ async def test_list_scheduling_windows(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_system_versions(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1345,7 +1345,7 @@ async def test_list_system_versions(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_vm_cluster_networks(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1369,7 +1369,7 @@ async def test_list_vm_cluster_networks(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_vm_cluster_patches(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1390,7 +1390,7 @@ async def test_list_vm_cluster_patches(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_vm_cluster_updates(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1411,7 +1411,7 @@ async def test_list_vm_cluster_updates(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_list_vm_clusters(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1432,7 +1432,7 @@ async def test_list_vm_clusters(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_resource_pool_shapes(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1453,7 +1453,7 @@ async def test_resource_pool_shapes(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_delete_pluggable_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1478,7 +1478,7 @@ async def test_delete_pluggable_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_pluggable_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1499,7 +1499,7 @@ async def test_get_pluggable_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_update_pluggable_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1523,7 +1523,7 @@ async def test_update_pluggable_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_create_pluggable_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1547,8 +1547,8 @@ async def test_create_pluggable_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") -@patch("oracle.database_mcp_server.server.call_create_pdb") +@patch("oracle.oci_database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.call_create_pdb") async def test_create_pluggable_database_from_local_clone(mock_call, mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1571,8 +1571,8 @@ async def test_create_pluggable_database_from_local_clone(mock_call, mock_get_cl @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") -@patch("oracle.database_mcp_server.server.call_create_pdb") +@patch("oracle.oci_database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.call_create_pdb") async def test_create_pluggable_database_from_remote_clone(mock_call, mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1596,8 +1596,8 @@ async def test_create_pluggable_database_from_remote_clone(mock_call, mock_get_c @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") -@patch("oracle.database_mcp_server.server.call_create_pdb") +@patch("oracle.oci_database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.call_create_pdb") async def test_create_pluggable_database_from_relocate(mock_call, mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1621,7 +1621,7 @@ async def test_create_pluggable_database_from_relocate(mock_call, mock_get_clien @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_application_vip(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1642,7 +1642,7 @@ async def test_get_application_vip(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_container_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1665,7 +1665,7 @@ async def test_get_autonomous_container_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_container_database_dataguard_association(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1691,7 +1691,7 @@ async def test_get_autonomous_container_database_dataguard_association(mock_get_ @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_container_database_resource_usage(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1716,7 +1716,7 @@ async def test_get_autonomous_container_database_resource_usage(mock_get_client) @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1737,7 +1737,7 @@ async def test_get_autonomous_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_database_backup(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1758,7 +1758,7 @@ async def test_get_autonomous_database_backup(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_database_dataguard_association(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1784,7 +1784,7 @@ async def test_get_autonomous_database_dataguard_association(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_database_regional_wallet(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1805,7 +1805,7 @@ async def test_get_autonomous_database_regional_wallet(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_database_software_image(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1826,7 +1826,7 @@ async def test_get_autonomous_database_software_image(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_database_wallet(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1847,7 +1847,7 @@ async def test_get_autonomous_database_wallet(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_exadata_infrastructure(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1868,7 +1868,7 @@ async def test_get_autonomous_exadata_infrastructure(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_patch(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1889,7 +1889,7 @@ async def test_get_autonomous_patch(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_virtual_machine(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1910,7 +1910,7 @@ async def test_get_autonomous_virtual_machine(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_vm_cluster(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1931,7 +1931,7 @@ async def test_get_autonomous_vm_cluster(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_autonomous_vm_cluster_resource_usage(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1952,7 +1952,7 @@ async def test_get_autonomous_vm_cluster_resource_usage(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_backup(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1973,7 +1973,7 @@ async def test_get_backup(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_backup_destination(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -1994,7 +1994,7 @@ async def test_get_backup_destination(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_cloud_autonomous_vm_cluster(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2015,7 +2015,7 @@ async def test_get_cloud_autonomous_vm_cluster(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_cloud_autonomous_vm_cluster_resource_usage(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2038,7 +2038,7 @@ async def test_get_cloud_autonomous_vm_cluster_resource_usage(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_cloud_exadata_infrastructure(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2059,7 +2059,7 @@ async def test_get_cloud_exadata_infrastructure(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_cloud_exadata_infrastructure_unallocated_resources(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2082,7 +2082,7 @@ async def test_get_cloud_exadata_infrastructure_unallocated_resources(mock_get_c @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_cloud_vm_cluster(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2103,7 +2103,7 @@ async def test_get_cloud_vm_cluster(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_cloud_vm_cluster_iorm_config(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2124,7 +2124,7 @@ async def test_get_cloud_vm_cluster_iorm_config(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_cloud_vm_cluster_update(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2145,7 +2145,7 @@ async def test_get_cloud_vm_cluster_update(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_cloud_vm_cluster_update_history_entry(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2169,7 +2169,7 @@ async def test_get_cloud_vm_cluster_update_history_entry(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_console_connection(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2190,7 +2190,7 @@ async def test_get_console_connection(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_console_history(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2211,7 +2211,7 @@ async def test_get_console_history(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_console_history_content(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2232,7 +2232,7 @@ async def test_get_console_history_content(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_data_guard_association(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2256,7 +2256,7 @@ async def test_get_data_guard_association(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2277,7 +2277,7 @@ async def test_get_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_database_software_image(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2298,7 +2298,7 @@ async def test_get_database_software_image(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_database_upgrade_history_entry(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2322,7 +2322,7 @@ async def test_get_database_upgrade_history_entry(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_db_home(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2343,7 +2343,7 @@ async def test_get_db_home(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_db_home_patch(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2364,7 +2364,7 @@ async def test_get_db_home_patch(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_db_home_patch_history_entry(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2388,7 +2388,7 @@ async def test_get_db_home_patch_history_entry(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_db_node(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2409,7 +2409,7 @@ async def test_get_db_node(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_db_server(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2430,7 +2430,7 @@ async def test_get_db_server(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_db_system(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2451,7 +2451,7 @@ async def test_get_db_system(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_db_system_patch(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2475,7 +2475,7 @@ async def test_get_db_system_patch(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_db_system_patch_history_entry(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2499,7 +2499,7 @@ async def test_get_db_system_patch_history_entry(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_db_system_upgrade_history_entry(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2523,7 +2523,7 @@ async def test_get_db_system_upgrade_history_entry(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_exadata_infrastructure(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2544,7 +2544,7 @@ async def test_get_exadata_infrastructure(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_exadata_infrastructure_ocpus(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2565,7 +2565,7 @@ async def test_get_exadata_infrastructure_ocpus(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_exadata_infrastructure_un_allocated_resources(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2588,7 +2588,7 @@ async def test_get_exadata_infrastructure_un_allocated_resources(mock_get_client @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_exadata_iorm_config(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2609,7 +2609,7 @@ async def test_get_exadata_iorm_config(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_exadb_vm_cluster(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2630,7 +2630,7 @@ async def test_get_exadb_vm_cluster(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_exadb_vm_cluster_update(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2651,7 +2651,7 @@ async def test_get_exadb_vm_cluster_update(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_exadb_vm_cluster_update_history_entry(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2675,7 +2675,7 @@ async def test_get_exadb_vm_cluster_update_history_entry(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_exascale_db_storage_vault(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2696,7 +2696,7 @@ async def test_get_exascale_db_storage_vault(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_execution_action(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2717,7 +2717,7 @@ async def test_get_execution_action(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_execution_window(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2738,7 +2738,7 @@ async def test_get_execution_window(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_external_backup_job(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2759,7 +2759,7 @@ async def test_get_external_backup_job(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_external_container_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2780,7 +2780,7 @@ async def test_get_external_container_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_external_database_connector(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2801,7 +2801,7 @@ async def test_get_external_database_connector(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_external_non_container_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2822,7 +2822,7 @@ async def test_get_external_non_container_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_external_pluggable_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2843,7 +2843,7 @@ async def test_get_external_pluggable_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_infrastructure_target_versions(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2864,7 +2864,7 @@ async def test_get_infrastructure_target_versions(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_key_store(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2885,7 +2885,7 @@ async def test_get_key_store(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_maintenance_run(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2906,7 +2906,7 @@ async def test_get_maintenance_run(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_maintenance_run_history(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2927,7 +2927,7 @@ async def test_get_maintenance_run_history(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_oneoff_patch(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2948,7 +2948,7 @@ async def test_get_oneoff_patch(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_pdb_conversion_history_entry(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2972,7 +2972,7 @@ async def test_get_pdb_conversion_history_entry(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_pluggable_database(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -2993,7 +2993,7 @@ async def test_get_pluggable_database(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_scheduled_action(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -3014,7 +3014,7 @@ async def test_get_scheduled_action(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_scheduling_plan(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -3035,7 +3035,7 @@ async def test_get_scheduling_plan(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_scheduling_policy(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -3056,7 +3056,7 @@ async def test_get_scheduling_policy(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_scheduling_window(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -3080,7 +3080,7 @@ async def test_get_scheduling_window(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_vm_cluster(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -3101,7 +3101,7 @@ async def test_get_vm_cluster(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_vm_cluster_network(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -3125,7 +3125,7 @@ async def test_get_vm_cluster_network(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_vm_cluster_patch(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -3146,7 +3146,7 @@ async def test_get_vm_cluster_patch(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_vm_cluster_patch_history_entry(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -3167,7 +3167,7 @@ async def test_get_vm_cluster_patch_history_entry(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_vm_cluster_update(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client @@ -3188,7 +3188,7 @@ async def test_get_vm_cluster_update(mock_get_client): @pytest.mark.asyncio -@patch("oracle.database_mcp_server.server.get_database_client") +@patch("oracle.oci_database_mcp_server.server.get_database_client") async def test_get_vm_cluster_update_history_entry(mock_get_client): mock_client = MagicMock() mock_get_client.return_value = mock_client diff --git a/src/database-mcp-server/pyproject.toml b/src/oci-database-mcp-server/pyproject.toml similarity index 87% rename from src/database-mcp-server/pyproject.toml rename to src/oci-database-mcp-server/pyproject.toml index 91e34c8b..cc45c246 100644 --- a/src/database-mcp-server/pyproject.toml +++ b/src/oci-database-mcp-server/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "oracle.database-mcp-server" +name = "oracle.oci-database-mcp-server" version = "1.0.1" description = "OCI Database Service MCP server" readme = "README.md" @@ -24,7 +24,7 @@ classifiers = [ ] [project.scripts] -"oracle.database-mcp-server" = "oracle.database_mcp_server.server:main" +"oracle.oci-database-mcp-server" = "oracle.oci_database_mcp_server.server:main" [build-system] requires = ["hatchling"] diff --git a/src/database-mcp-server/uv.lock b/src/oci-database-mcp-server/uv.lock similarity index 100% rename from src/database-mcp-server/uv.lock rename to src/oci-database-mcp-server/uv.lock diff --git a/src/oci-identity-mcp-server/README.md b/src/oci-identity-mcp-server/README.md index 518080fd..90bd6237 100644 --- a/src/oci-identity-mcp-server/README.md +++ b/src/oci-identity-mcp-server/README.md @@ -18,6 +18,13 @@ uvx oracle.oci-identity-mcp-server ORACLE_MCP_HOST= ORACLE_MCP_PORT= uvx oracle.oci-identity-mcp-server ``` +## Environment Variables + +The server supports the following environment variables: + +- `OCI_CONFIG_PROFILE`: OCI configuration profile name (default: "DEFAULT") +- `TENANCY_ID_OVERRIDE`: Overrides the tenancy ID from the config file + ## Tools | Tool Name | Description | @@ -28,6 +35,9 @@ ORACLE_MCP_HOST= ORACLE_MCP_PORT= uvx oracle.o | get_current_tenancy | Get current tenancy information. | | create_auth_token | Create an authentication token for a user. | | get_current_user | Get current user information. | +| get_compartment_by_name_tool | Return a compartment matching the provided name | +| list_subscribed_regions_tool | Return a list of all regions the customer (tenancy) is subscribed to | + ⚠️ **NOTE**: All actions are performed with the permissions of the configured OCI CLI profile. We advise least-privilege IAM setup, secure credential management, safe network practices, secure logging, and warn against exposing secrets. diff --git a/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/__init__.py b/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/__init__.py index 1e55aeef..67bba36e 100644 --- a/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/__init__.py +++ b/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/__init__.py @@ -5,4 +5,4 @@ """ __project__ = "oracle.oci-identity-mcp-server" -__version__ = "2.1.0" +__version__ = "2.1.1" diff --git a/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/server.py b/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/server.py index b0c55825..62cfbc69 100644 --- a/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/server.py +++ b/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/server.py @@ -142,7 +142,7 @@ def get_current_tenancy() -> Tenancy: config = oci.config.from_file( profile_name=os.getenv("OCI_CONFIG_PROFILE", oci.config.DEFAULT_PROFILE) ) - tenancy_id = config["tenancy"] + tenancy_id = os.getenv("TENANCY_ID_OVERRIDE", config["tenancy"]) response: oci.response.Response = client.get_tenancy(tenancy_id) data: oci.identity.models.Tenancy = response.data diff --git a/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/tests/test_identity_tools.py b/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/tests/test_identity_tools.py index cd676978..5b6bce30 100644 --- a/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/tests/test_identity_tools.py +++ b/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server/tests/test_identity_tools.py @@ -174,6 +174,54 @@ async def test_get_current_user(self, mock_config_from_file, mock_get_client): assert result["id"] == "user1" + @pytest.mark.asyncio + @patch("oracle.oci_identity_mcp_server.server.list_compartments_internal") + async def test_get_compartment_by_name(self, mock_list_compartments): + mock_list_compartments.return_value = [ + {"id": "comp1", "name": "TargetComp"}, + {"id": "comp2", "name": "OtherComp"}, + ] + + async with Client(mcp) as client: + result = ( + await client.call_tool( + "get_compartment_by_name", + { + "tenancy_id": "test_tenancy", + "compartment_name": "TargetComp", + }, + ) + ).structured_content + + assert result["id"] == "comp1" + assert result["name"] == "TargetComp" + + @pytest.mark.asyncio + @patch("oracle.oci_identity_mcp_server.server.get_identity_client") + async def test_list_subscribed_regions(self, mock_get_client): + mock_client = MagicMock() + mock_get_client.return_value = mock_client + + mock_list_response = create_autospec(oci.response.Response) + mock_list_response.data = [ + MagicMock(region_name="us-phoenix-1"), + MagicMock(region_name="us-ashburn-1"), + ] + mock_client.list_region_subscriptions.return_value = mock_list_response + + async with Client(mcp) as client: + result = ( + await client.call_tool( + "list_subscribed_regions", + { + "tenancy_id": "test_tenancy", + }, + ) + ).structured_content + + assert "regions" in result + assert result["regions"] == ["us-phoenix-1", "us-ashburn-1"] + class TestServer: @patch("oracle.oci_identity_mcp_server.server.mcp.run") diff --git a/src/oci-identity-mcp-server/pyproject.toml b/src/oci-identity-mcp-server/pyproject.toml index e717d761..f2bbc54a 100644 --- a/src/oci-identity-mcp-server/pyproject.toml +++ b/src/oci-identity-mcp-server/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "oracle.oci-identity-mcp-server" -version = "2.1.0" +version = "2.1.1" description = "OCI Identity Service MCP server" readme = "README.md" requires-python = ">=3.13" diff --git a/src/oci-identity-mcp-server/uv.lock b/src/oci-identity-mcp-server/uv.lock index 80fc4726..02a9c217 100644 --- a/src/oci-identity-mcp-server/uv.lock +++ b/src/oci-identity-mcp-server/uv.lock @@ -735,7 +735,7 @@ wheels = [ [[package]] name = "oracle-oci-identity-mcp-server" -version = "2.1.0" +version = "2.1.1" source = { editable = "." } dependencies = [ { name = "fastmcp" }, diff --git a/tox.ini b/tox.ini index 842df56e..310e16ed 100644 --- a/tox.ini +++ b/tox.ini @@ -20,7 +20,7 @@ extend-exclude = src/mysql-mcp-server, src/oci-pricing-mcp-server, src/oracle-db-doc-mcp-server - src/database-mcp-server + src/oci-database-mcp-server [testenv] deps =