diff --git a/README.md b/README.md index 96f9f7c..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,26 +68,30 @@ 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 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/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 ea80bbd..288b625 100644 --- a/gcore_mcp_server/config/toolsets.py +++ b/gcore_mcp_server/config/toolsets.py @@ -32,34 +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", ], "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", @@ -85,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", @@ -99,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", ], @@ -112,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",