list_services
List all cloud services for a provider. Returns slug, name, category, and supported tiers. Use to find valid service keys for ArchSpecs or requirement mapping.
Instructions
List all cloud services supported for a given provider.
Returns one entry per service with its slug, human-readable name, category
(compute / database / storage / networking / etc.), and supported tiers.
Use this to discover valid service: keys when hand-authoring ArchSpecs
or mapping requirements to services.
Behavior: Pure lookup from the bundled service registry — no LLM, no network, no cloud access.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| provider | No | Cloud provider slug. Values: 'aws' (47 services), 'gcp' (25), 'azure' (28), 'databricks'. | aws |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- The MCP tool handler function for 'list_services'. Uses a decorator-based registration (@mcp.tool()) and calls ServiceRegistry().list_services(provider) to return cloud services for a given provider as a list of dicts.
@mcp.tool() def list_services( provider: Annotated[ str, Field( description=( "Cloud provider slug. Values: 'aws' (47 services), 'gcp' (25), 'azure' (28), 'databricks'." ), examples=["aws", "gcp", "azure", "databricks"], ), ] = "aws", ) -> list[dict]: """List all cloud services supported for a given provider. Returns one entry per service with its slug, human-readable name, category (compute / database / storage / networking / etc.), and supported tiers. Use this to discover valid `service:` keys when hand-authoring ArchSpecs or mapping requirements to services. Behavior: Pure lookup from the bundled service registry — no LLM, no network, no cloud access. """ from cloudwright.registry import ServiceRegistry services = ServiceRegistry().list_services(provider) return [s.to_dict() for s in services] - packages/mcp/cloudwright_mcp/server.py:19-30 (registration)The server creates a FastMCP instance and calls module.register(mcp) for each tool group, including the 'export' module which contains list_services.
def create_server(tools: set[str] | None = None) -> FastMCP: """Create a FastMCP server with selected tool groups. Args: tools: Set of group names to register. None = all groups. Valid groups: design, cost, validate, analyze, export, session. """ mcp = FastMCP("cloudwright", instructions="Architecture intelligence for cloud engineers") for name, module in _GROUPS.items(): if tools is None or name in tools: module.register(mcp) - packages/mcp/cloudwright_mcp/server.py:7-16 (registration)The import statement that brings in the 'export' tool module (which contains list_services) so it can be registered.
from cloudwright_mcp.tools import analyze, cost, design, export, session, validate _GROUPS = { "design": design, "cost": cost, "validate": validate, "analyze": analyze, "export": export, "session": session, } - packages/mcp/cloudwright_mcp/tools/export.py:9-10 (registration)The register() function in export.py that decorates tool functions (including list_services) with @mcp.tool() to register them with the FastMCP server.
def register(mcp: FastMCP) -> None: @mcp.tool() - The ServiceRegistry.list_services() method which is the core helper that filters all registered services by provider name and returns a list of ServiceDef objects.
def list_services(self, provider: str) -> list[ServiceDef]: """All services for a specific provider.""" return [svc for (p, _), svc in self._services.items() if p == provider]