Skip to content

Commit 064eb2f

Browse files
authored
Update dbtools-mcp-server.py (#14)
* Update dbtools-mcp-server.py The functions use the OCI SDK's list_compartments method without pagination, which by default returns only the first 100 results. get_compartment_by_name "fails" if the compartment name is not within the initial 100 results (e.g a tenancy with +300 compartments) which raise Compartment '{compartment_name}' not found * Update dbtools-mcp-server.py delete get_compartment_by_name_v2
1 parent f20f015 commit 064eb2f

File tree

1 file changed

+29
-12
lines changed

1 file changed

+29
-12
lines changed

src/dbtools-mcp-server/dbtools-mcp-server.py

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,25 +40,42 @@
4040
)
4141
tenancy_id = os.getenv("TENANCY_ID_OVERRIDE", config['tenancy'])
4242

43+
def list_all_compartments_internal(only_one_page: bool , limit = 100 ):
44+
"""Internal function to get List all compartments in a tenancy"""
45+
response = identity_client.list_compartments(
46+
compartment_id=tenancy_id,
47+
compartment_id_in_subtree=True,
48+
access_level="ACCESSIBLE",
49+
lifecycle_state="ACTIVE",
50+
limit = limit
51+
)
52+
compartments = response.data
53+
compartments.append(identity_client.get_compartment(compartment_id=tenancy_id).data)
54+
if only_one_page : # limiting the number of items returned
55+
return compartments
56+
while response.has_next_page:
57+
response = identity_client.list_compartments(
58+
compartment_id=tenancy_id,
59+
compartment_id_in_subtree=True,
60+
access_level="ACCESSIBLE",
61+
lifecycle_state="ACTIVE",
62+
page=response.next_page,
63+
limit = limit
64+
)
65+
compartments.extend(response.data)
66+
67+
return compartments
68+
4369
@mcp.tool()
4470
def list_all_compartments() -> str:
4571
"""List all compartments in a tenancy with clear formatting"""
46-
compartments = identity_client.list_compartments(tenancy_id).data
47-
compartments.append(identity_client.get_compartment(compartment_id=tenancy_id).data)
48-
return str(compartments)
72+
return str(list_all_compartments_internal(True))
4973

5074
def get_compartment_by_name(compartment_name: str):
5175
"""Internal function to get compartment by name with caching"""
52-
compartments = identity_client.list_compartments(
53-
compartment_id=tenancy_id,
54-
compartment_id_in_subtree=True,
55-
access_level="ACCESSIBLE",
56-
lifecycle_state="ACTIVE"
57-
)
58-
compartments.data.append(identity_client.get_compartment(compartment_id=tenancy_id).data)
59-
76+
compartments = list_all_compartments_internal(False)
6077
# Search for the compartment by name
61-
for compartment in compartments.data:
78+
for compartment in compartments:
6279
if compartment.name.lower() == compartment_name.lower():
6380
return compartment
6481

0 commit comments

Comments
 (0)