From 4680b7ec4b6817a211268ff55d3cc49b6443c65d Mon Sep 17 00:00:00 2001 From: Algis Dumbris Date: Tue, 30 Dec 2025 15:09:20 +0200 Subject: [PATCH 1/3] docs: fix toolset names and add missing toolsets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix networks → networking (actual toolset name) - Add gpu_virtual toolset for GPU virtual cluster management - Add missing toolsets to docs: security, storage, ai, containers - Clarify gpu_baremetal vs gpu_virtual distinction - Update example to use correct toolset names (storage, networking) --- README.md | 14 +++++++++----- gcore_mcp_server/config/toolsets.py | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 96f9f7c..c00b0e2 100644 --- a/README.md +++ b/README.md @@ -81,13 +81,17 @@ export GCORE_TOOLS="cloud.*,waap.*" The system includes several predefined toolsets for common workflows: - **`management`**: Core account and project management -- **`instances`**: Virtual machine operations -- **`volumes`**: Storage management -- **`networks`**: Network and security management +- **`instances`**: Virtual machine operations - **`baremetal`**: Bare metal server operations -- **`gpu_baremetal`**: GPU cluster management +- **`gpu_baremetal`**: GPU bare metal cluster management +- **`gpu_virtual`**: GPU virtual cluster management +- **`networking`**: Networks, Floating IPs, Load Balancers +- **`security`**: Security Groups, SSH Keys, Secrets +- **`storage`**: Volumes, File Shares +- **`ai`**: AI Clusters - **`ai_ml`**: AI/ML inference services - **`billing`**: Cost reports and billing information +- **`containers`**: Container registries - **`cleanup`**: Deletion and cleanup operations - **`list`**: List/read-only operations @@ -115,7 +119,7 @@ When using combined mode: export GCORE_TOOLS="cloud.instances.create,cloud.instances.delete,cloud.volumes.create" # Full cloud management -export GCORE_TOOLS="management,instances,volumes,networks" +export GCORE_TOOLS="management,instances,storage,networking" # GPU cluster operations with custom additions export GCORE_TOOLS="gpu_baremetal,cloud.instances.create,waap.*" diff --git a/gcore_mcp_server/config/toolsets.py b/gcore_mcp_server/config/toolsets.py index ea80bbd..25cbbb7 100644 --- a/gcore_mcp_server/config/toolsets.py +++ b/gcore_mcp_server/config/toolsets.py @@ -53,6 +53,22 @@ def get_raw_toolsets() -> dict[str, list[str]]: "cloud.gpu_baremetal_clusters.images.get", "cloud.gpu_baremetal_clusters.images.delete", ], + "gpu_virtual": [ + # GPU Virtual Clusters + "cloud.gpu_virtual_clusters.create", + "cloud.gpu_virtual_clusters.get", + "cloud.gpu_virtual_clusters.delete", + "cloud.gpu_virtual_clusters.list", + "cloud.gpu_virtual_clusters.update", + "cloud.gpu_virtual_clusters.interfaces.list", + "cloud.gpu_virtual_clusters.servers.list", + "cloud.gpu_virtual_clusters.servers.get", + "cloud.gpu_virtual_clusters.servers.get_console", + "cloud.gpu_virtual_clusters.flavors.list", + "cloud.gpu_virtual_clusters.images.list", + "cloud.gpu_virtual_clusters.images.get", + "cloud.gpu_virtual_clusters.volumes.list", + ], "ai_ml": [ # Inference "cloud.inference.get_capacity_by_region", From 6cc96bd098b72ffed7eb95c8898088d8f31b947b Mon Sep 17 00:00:00 2001 From: Pedro Oliveira Date: Fri, 6 Feb 2026 16:30:00 +0000 Subject: [PATCH 2/3] fix: align toolset names with gcore-python SDK v0.31.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gpu_baremetal_clusters → gpu_baremetal.clusters (SDK property path) - gpu_virtual_clusters → gpu_virtual.clusters (SDK property path) - load_balancers.l7policies → load_balancers.l7_policies (underscore) - volumes.snapshots → volume_snapshots (top-level resource) - Remove nonexistent ai_clusters and inference.models entries - Clean up dead shortening rules --- README.md | 8 +-- gcore_mcp_server/config/settings.py | 3 - gcore_mcp_server/config/toolsets.py | 82 ++++++++++++------------- gcore_mcp_server/domain/gcore_domain.py | 58 ++++++++--------- 4 files changed, 70 insertions(+), 81 deletions(-) diff --git a/README.md b/README.md index c00b0e2..09a3614 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Add the server to your Cursor IDE configuration file (`~/.cursor/mcp.json`): "args": ["--from", "gcore-mcp-server@git+https://github.com/G-Core/gcore-mcp-server.git", "gcore-mcp-server"], "env": { "GCORE_API_KEY": "4***1", - "GCORE_TOOLS": "instances,management,cloud.gpu_baremetal_clusters.*" + "GCORE_TOOLS": "instances,management,cloud.gpu_baremetal.clusters.*" } } } @@ -43,7 +43,7 @@ The server uses a **unified configuration approach** via the `GCORE_TOOLS` envir ```bash # Mixed toolsets and patterns -export GCORE_TOOLS="instances,management,cloud.gpu_baremetal_clusters.*,dns.records.create" +export GCORE_TOOLS="instances,management,cloud.gpu_baremetal.clusters.*,dns.records.create" # Only toolsets export GCORE_TOOLS="instances,management" @@ -68,13 +68,13 @@ export GCORE_TOOLS="cloud.*,waap.*" 3. **Pattern Mode** (custom tool filtering) - Use wildcard patterns to match tool names from the Gcore SDK - Exact matches: `cloud.instances.create`, `dns.records.delete` - - Wildcard matches: `cloud.*`, `waap.*`, `cloud.gpu_baremetal_clusters.*` + - Wildcard matches: `cloud.*`, `waap.*`, `cloud.gpu_baremetal.clusters.*` - Example: `GCORE_TOOLS="cloud.instances.*,waap.*"` 4. **Combined Mode** (toolsets + patterns) - Mix predefined toolsets with custom patterns - Toolset definitions have priority over pattern matches - - Example: `GCORE_TOOLS="instances,cloud.gpu_baremetal_clusters.*"` + - Example: `GCORE_TOOLS="instances,cloud.gpu_baremetal.clusters.*"` #### Available Toolsets diff --git a/gcore_mcp_server/config/settings.py b/gcore_mcp_server/config/settings.py index ed9693a..b717a9e 100644 --- a/gcore_mcp_server/config/settings.py +++ b/gcore_mcp_server/config/settings.py @@ -24,8 +24,6 @@ def get_shortening_rules() -> dict[str, str]: "interfaces": "ifaces", "metrics": "metr", "baremetal": "bm", - "gpu_baremetal_clusters": "gpu_bm_clusters", - "l7_policies": "l7pols", "health_monitors": "health_mon", "members": "membs", "statuses": "stats", @@ -40,7 +38,6 @@ def get_shortening_rules() -> dict[str, str]: "requests": "reqs", "role_assignments": "roleasgns", "billing_reservations": "billresrvs", - "models": "mdls", "logs": "logs", "registry_credentials": "regcreds", # Method parts / verbs diff --git a/gcore_mcp_server/config/toolsets.py b/gcore_mcp_server/config/toolsets.py index 25cbbb7..288b625 100644 --- a/gcore_mcp_server/config/toolsets.py +++ b/gcore_mcp_server/config/toolsets.py @@ -32,50 +32,48 @@ def get_raw_toolsets() -> dict[str, list[str]]: ], "gpu_baremetal": [ # GPU Baremetal Clusters - "cloud.gpu_baremetal_clusters.create", - "cloud.gpu_baremetal_clusters.get", - "cloud.gpu_baremetal_clusters.delete", - "cloud.gpu_baremetal_clusters.list", - "cloud.gpu_baremetal_clusters.rebuild", - "cloud.gpu_baremetal_clusters.resize", - "cloud.gpu_baremetal_clusters.powercycle_all_servers", - "cloud.gpu_baremetal_clusters.reboot_all_servers", - "cloud.gpu_baremetal_clusters.interfaces.list", - "cloud.gpu_baremetal_clusters.servers.delete", - "cloud.gpu_baremetal_clusters.servers.attach_interface", - "cloud.gpu_baremetal_clusters.servers.detach_interface", - "cloud.gpu_baremetal_clusters.servers.get_console", - "cloud.gpu_baremetal_clusters.servers.powercycle", - "cloud.gpu_baremetal_clusters.servers.reboot", - "cloud.gpu_baremetal_clusters.flavors.list", - "cloud.gpu_baremetal_clusters.images.upload", - "cloud.gpu_baremetal_clusters.images.list", - "cloud.gpu_baremetal_clusters.images.get", - "cloud.gpu_baremetal_clusters.images.delete", + "cloud.gpu_baremetal.clusters.create", + "cloud.gpu_baremetal.clusters.get", + "cloud.gpu_baremetal.clusters.delete", + "cloud.gpu_baremetal.clusters.list", + "cloud.gpu_baremetal.clusters.rebuild", + "cloud.gpu_baremetal.clusters.resize", + "cloud.gpu_baremetal.clusters.powercycle_all_servers", + "cloud.gpu_baremetal.clusters.reboot_all_servers", + "cloud.gpu_baremetal.clusters.interfaces.list", + "cloud.gpu_baremetal.clusters.servers.delete", + "cloud.gpu_baremetal.clusters.servers.attach_interface", + "cloud.gpu_baremetal.clusters.servers.detach_interface", + "cloud.gpu_baremetal.clusters.servers.get_console", + "cloud.gpu_baremetal.clusters.servers.powercycle", + "cloud.gpu_baremetal.clusters.servers.reboot", + "cloud.gpu_baremetal.clusters.flavors.list", + "cloud.gpu_baremetal.clusters.images.upload", + "cloud.gpu_baremetal.clusters.images.list", + "cloud.gpu_baremetal.clusters.images.get", + "cloud.gpu_baremetal.clusters.images.delete", ], "gpu_virtual": [ # GPU Virtual Clusters - "cloud.gpu_virtual_clusters.create", - "cloud.gpu_virtual_clusters.get", - "cloud.gpu_virtual_clusters.delete", - "cloud.gpu_virtual_clusters.list", - "cloud.gpu_virtual_clusters.update", - "cloud.gpu_virtual_clusters.interfaces.list", - "cloud.gpu_virtual_clusters.servers.list", - "cloud.gpu_virtual_clusters.servers.get", - "cloud.gpu_virtual_clusters.servers.get_console", - "cloud.gpu_virtual_clusters.flavors.list", - "cloud.gpu_virtual_clusters.images.list", - "cloud.gpu_virtual_clusters.images.get", - "cloud.gpu_virtual_clusters.volumes.list", + "cloud.gpu_virtual.clusters.create", + "cloud.gpu_virtual.clusters.get", + "cloud.gpu_virtual.clusters.delete", + "cloud.gpu_virtual.clusters.list", + "cloud.gpu_virtual.clusters.update", + "cloud.gpu_virtual.clusters.interfaces.list", + "cloud.gpu_virtual.clusters.servers.list", + "cloud.gpu_virtual.clusters.servers.get", + "cloud.gpu_virtual.clusters.servers.get_console", + "cloud.gpu_virtual.clusters.flavors.list", + "cloud.gpu_virtual.clusters.images.list", + "cloud.gpu_virtual.clusters.images.get", + "cloud.gpu_virtual.clusters.volumes.list", ], "ai_ml": [ # Inference "cloud.inference.get_capacity_by_region", "cloud.inference.flavors.list", "cloud.inference.flavors.get", - "cloud.inference.models.list", - "cloud.inference.models.get", "cloud.inference.deployments.create", "cloud.inference.deployments.list", "cloud.inference.deployments.get", @@ -101,7 +99,7 @@ def get_raw_toolsets() -> dict[str, list[str]]: "cloud.secrets.delete", "cloud.ssh_keys.delete", "cloud.load_balancers.delete", - "cloud.load_balancers.l7policies.delete", + "cloud.load_balancers.l7_policies.delete", "cloud.load_balancers.listeners.delete", "cloud.load_balancers.pools.delete", "cloud.reserved_fixed_ips.delete", @@ -115,9 +113,9 @@ def get_raw_toolsets() -> dict[str, list[str]]: "cloud.placement_groups.delete", "cloud.registries.delete", "cloud.file_shares.delete", - "cloud.gpu_baremetal_clusters.delete", - "cloud.gpu_baremetal_clusters.servers.delete", - "cloud.gpu_baremetal_clusters.images.delete", + "cloud.gpu_baremetal.clusters.delete", + "cloud.gpu_baremetal.clusters.servers.delete", + "cloud.gpu_baremetal.clusters.images.delete", "cloud.instances.delete", "cloud.instances.images.delete", ], @@ -128,9 +126,9 @@ def get_raw_toolsets() -> dict[str, list[str]]: "cloud.baremetal.images.list", "cloud.baremetal.flavors.list", "cloud.baremetal.servers.list", - "cloud.gpu_baremetal_clusters.list", - "cloud.gpu_baremetal_clusters.flavors.list", - "cloud.gpu_baremetal_clusters.images.list", + "cloud.gpu_baremetal.clusters.list", + "cloud.gpu_baremetal.clusters.flavors.list", + "cloud.gpu_baremetal.clusters.images.list", "cloud.networks.list", "cloud.networks.subnets.list", "cloud.networks.routers.list", diff --git a/gcore_mcp_server/domain/gcore_domain.py b/gcore_mcp_server/domain/gcore_domain.py index 8b1fb24..9b84151 100644 --- a/gcore_mcp_server/domain/gcore_domain.py +++ b/gcore_mcp_server/domain/gcore_domain.py @@ -176,7 +176,7 @@ def get_resource_shortening_rules() -> Dict[str, str]: "pools": "pools", "members": "mbrs", "health_monitors": "hms", - "l7policies": "l7pols", + "l7_policies": "l7pols", "l7rules": "l7rules", "security_groups": "secgrps", "security_group_rules": "secgrp_rules", @@ -191,9 +191,9 @@ def get_resource_shortening_rules() -> Dict[str, str]: "nodes": "nodes", "registries": "regs", "file_shares": "fshares", - "ai_clusters": "ai_clstrs", "inference": "infer", "deployments": "deploys", + "volume_snapshots": "vol_snaps", "cost_reports": "cost_rpts", } @@ -311,20 +311,20 @@ def get_toolset_definitions() -> Dict[str, List[str]]: ], "gpu": [ # GPU Clusters - "cloud.gpu_baremetal_clusters.create", - "cloud.gpu_baremetal_clusters.list", - "cloud.gpu_baremetal_clusters.get", - "cloud.gpu_baremetal_clusters.update", - "cloud.gpu_baremetal_clusters.delete", - "cloud.gpu_baremetal_clusters.flavors.list", - "cloud.gpu_baremetal_clusters.servers.create", - "cloud.gpu_baremetal_clusters.servers.list", - "cloud.gpu_baremetal_clusters.servers.get", - "cloud.gpu_baremetal_clusters.servers.delete", - "cloud.gpu_baremetal_clusters.images.list", - "cloud.gpu_baremetal_clusters.images.get", - "cloud.gpu_baremetal_clusters.images.update", - "cloud.gpu_baremetal_clusters.images.delete", + "cloud.gpu_baremetal.clusters.create", + "cloud.gpu_baremetal.clusters.list", + "cloud.gpu_baremetal.clusters.get", + "cloud.gpu_baremetal.clusters.update", + "cloud.gpu_baremetal.clusters.delete", + "cloud.gpu_baremetal.clusters.flavors.list", + "cloud.gpu_baremetal.clusters.servers.create", + "cloud.gpu_baremetal.clusters.servers.list", + "cloud.gpu_baremetal.clusters.servers.get", + "cloud.gpu_baremetal.clusters.servers.delete", + "cloud.gpu_baremetal.clusters.images.list", + "cloud.gpu_baremetal.clusters.images.get", + "cloud.gpu_baremetal.clusters.images.update", + "cloud.gpu_baremetal.clusters.images.delete", ], "networking": [ # Networks @@ -377,11 +377,11 @@ def get_toolset_definitions() -> Dict[str, List[str]]: "cloud.load_balancers.pools.update", "cloud.load_balancers.pools.delete", # L7 Policies - "cloud.load_balancers.l7policies.create", - "cloud.load_balancers.l7policies.list", - "cloud.load_balancers.l7policies.get", - "cloud.load_balancers.l7policies.update", - "cloud.load_balancers.l7policies.delete", + "cloud.load_balancers.l7_policies.create", + "cloud.load_balancers.l7_policies.list", + "cloud.load_balancers.l7_policies.get", + "cloud.load_balancers.l7_policies.update", + "cloud.load_balancers.l7_policies.delete", ], "security": [ # Security Groups @@ -420,11 +420,11 @@ def get_toolset_definitions() -> Dict[str, List[str]]: "cloud.volumes.revert_to_last_snapshot", "cloud.volumes.attach_to_instance", "cloud.volumes.detach_from_instance", - "cloud.volumes.snapshots.create", - "cloud.volumes.snapshots.list", - "cloud.volumes.snapshots.get", - "cloud.volumes.snapshots.update", - "cloud.volumes.snapshots.delete", + "cloud.volume_snapshots.create", + "cloud.volume_snapshots.list", + "cloud.volume_snapshots.get", + "cloud.volume_snapshots.update", + "cloud.volume_snapshots.delete", # File Shares "cloud.file_shares.create", "cloud.file_shares.list", @@ -460,12 +460,6 @@ def get_toolset_definitions() -> Dict[str, List[str]]: "cloud.quotas.get_global", ], "ai": [ - # AI Clusters - "cloud.ai_clusters.create", - "cloud.ai_clusters.list", - "cloud.ai_clusters.get", - "cloud.ai_clusters.update", - "cloud.ai_clusters.delete", # Inference "cloud.inference.deployments.create", "cloud.inference.deployments.list", From 2c2ab0c518215f8fd924ffc569ad901d4b7087db Mon Sep 17 00:00:00 2001 From: Pedro Oliveira Date: Thu, 12 Mar 2026 13:11:34 +0000 Subject: [PATCH 3/3] trigger ci