Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.*"
}
}
}
Expand All @@ -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"
Expand All @@ -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

Expand Down Expand Up @@ -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.*"
Expand Down
3 changes: 0 additions & 3 deletions gcore_mcp_server/config/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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
Expand Down
72 changes: 43 additions & 29 deletions gcore_mcp_server/config/toolsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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",
Expand All @@ -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",
],
Expand All @@ -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",
Expand Down
58 changes: 26 additions & 32 deletions gcore_mcp_server/domain/gcore_domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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",
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
Loading