Skip to main content
Glama

create_application

Create and manage ArgoCD applications by specifying details such as name, project, repository URL, and destination server. Automate sync, prune resources, and enable self-healing for efficient deployment.

Instructions

Create a new application in ArgoCD

Args:
    name: The name of the application (required)
    project: The project name (required)
    repo_url: The Git repository URL (required)
    path: Path within the repository (required)
    dest_server: Destination K8s API server URL (required)
    dest_namespace: Destination namespace (required)
    revision: Git revision (default: HEAD)
    automated_sync: Enable automated sync (default: False)
    prune: Auto-prune resources (default: False)
    self_heal: Enable self-healing (default: False)
    namespace: Application namespace
    validate: Whether to validate the application before creation
    upsert: Whether to update the application if it already exists

Returns:
    The created application details

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
automated_syncNo
dest_namespaceYes
dest_serverYes
nameYes
namespaceNo
pathYes
projectYes
pruneNo
repo_urlYes
revisionNoHEAD
self_healNo
upsertNo
validateNo

Implementation Reference

  • The handler function that implements the create_application tool. It constructs an Application object from parameters, adds sync policy if needed, converts to API format, and POSTs to ArgoCD API.
    async def create_application(
        name: str,
        project: str,
        repo_url: str,
        path: str,
        dest_server: str,
        dest_namespace: str,
        revision: str = "HEAD",
        automated_sync: bool = False,
        prune: bool = False,
        self_heal: bool = False,
        namespace: str = "",
        validate: bool = True,
        upsert: bool = False,
    ) -> Dict[str, Any]:
        """
        Create a new application in ArgoCD
    
        Args:
            name: The name of the application (required)
            project: The project name (required)
            repo_url: The Git repository URL (required)
            path: Path within the repository (required)
            dest_server: Destination K8s API server URL (required)
            dest_namespace: Destination namespace (required)
            revision: Git revision (default: HEAD)
            automated_sync: Enable automated sync (default: False)
            prune: Auto-prune resources (default: False)
            self_heal: Enable self-healing (default: False)
            namespace: Application namespace
            validate: Whether to validate the application before creation
            upsert: Whether to update the application if it already exists
    
        Returns:
            The created application details
        """
        # Create application structure
        app = Application(
            name=name,
            project=project,
            source=ApplicationSource(
                repo_url=repo_url, path=path, target_revision=revision
            ),
            destination=ApplicationDestination(
                server=dest_server, namespace=dest_namespace
            ),
        )
    
        # Add sync policy if automated sync is enabled
        if automated_sync:
            app.sync_policy = ApplicationSyncPolicy(
                automated=True, prune=prune, self_heal=self_heal
            )
    
        if namespace:
            app.namespace = namespace
    
        # Convert to API format
        data = application_to_api_format(app)
    
        # Add query parameters
        params = {}
        if validate:
            params["validate"] = "true"
        if upsert:
            params["upsert"] = "true"
    
        success, response = await make_api_request(
            "applications", method="POST", data=data, params=params
        )
    
        if success:
            logger.info(f"Application '{name}' created successfully")
            return response
        else:
            logger.error(f"Failed to create application '{name}': {response.get('error')}")
            return {"error": response.get("error", "Failed to create application")}
  • server.py:43-43 (registration)
    Registers the create_application function as an MCP tool using the FastMCP tool decorator.
    mcp.tool()(applications.create_application)
  • Dataclass defining the Application model used by the create_application handler for structuring input data and serialization to ArgoCD API format.
    class Application:
        """
        ArgoCD application model
        """
    
        name: str
        project: str
        source: ApplicationSource
        destination: ApplicationDestination
        sync_policy: Optional[ApplicationSyncPolicy] = None
        namespace: str = "argocd"
        status: Optional[ApplicationStatus] = None
  • Helper function to convert the Application dataclass to the exact dictionary format required by the ArgoCD API, used within the handler.
    def application_to_api_format(app: Application) -> Dict[str, Any]:
        """
        Convert an Application object to the format expected by ArgoCD API
    
        Args:
            app: Application object
    
        Returns:
            Dictionary in ArgoCD API format
        """
        source = {
            "repoURL": app.source.repo_url,
            "path": app.source.path,
            "targetRevision": app.source.target_revision,
        }
    
        # Add optional source fields if they exist
        if app.source.helm is not None:
            source["helm"] = app.source.helm  # type: ignore
        if app.source.kustomize is not None:
            source["kustomize"] = app.source.kustomize  # type: ignore
        if app.source.directory is not None:
            source["directory"] = app.source.directory  # type: ignore
    
        destination = {
            "server": app.destination.server,
            "namespace": app.destination.namespace,
        }
    
        if app.destination.name:
            destination["name"] = app.destination.name
    
        result = {
            "metadata": {"name": app.name, "namespace": app.namespace},
            "spec": {"project": app.project, "source": source, "destination": destination},
        }
    
        # Add sync policy if provided
        if app.sync_policy:
            sync_policy = {}
    
            if app.sync_policy.automated:
                sync_policy["automated"] = {
                    "prune": app.sync_policy.prune,
                    "selfHeal": app.sync_policy.self_heal,
                    "allowEmpty": app.sync_policy.allow_empty,
                }
    
            if app.sync_policy.sync_options:
                # Convert to list for compatibility with API
                sync_policy["syncOptions"] = list(app.sync_policy.sync_options)  # type: ignore
    
            if app.sync_policy.retry:
                sync_policy["retry"] = app.sync_policy.retry
    
            # Add the sync policy to the spec
            spec = result.get("spec")
            if isinstance(spec, dict):
                spec["syncPolicy"] = sync_policy
    
        return result

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/severity1/argocd-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server