# Create Connector

> Generate Harness Connector YAML for integrations and create/test via MCP. Use when user says "create connector", "git connector", "aws connector", "docker connector", "cloud connector", or wants to connect Harness to external services.

- Skill: `harness/create-connector` (Agent Skill)
- Install (CLI): `npx skillmds@latest add harness/create-connector`
- Raw SKILL.md: https://api.skillmd.com/api/skills/harness/create-connector/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- License: Apache-2.0
- Author: harness (https://skillmd.com/u/harness)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/harness/create-connector

---


# Create Connector

Generate Harness Connector YAML and create/test via MCP.

## Instructions

1. **Identify connector type** - Determine what service to connect (Git provider, cloud provider, container registry, Kubernetes cluster)
2. **Generate YAML** using the templates below, filling in credentials and endpoint details
3. **Create via MCP** using `harness_create` with resource_type `connector`
4. **Test connection** using `harness_execute` with action `test_connection` to verify

## Git Connectors

### GitHub
```yaml
connector:
  name: GitHub
  identifier: github_connector
  type: Github
  spec:
    url: https://github.com/myorg
    type: Account                    # Account or Repo
    authentication:
      type: Http
      spec:
        type: UsernameToken
        spec:
          username: myuser
          tokenRef: github_pat       # Secret reference
    apiAccess:
      type: Token
      spec:
        tokenRef: github_pat
    executeOnDelegate: false
```

### GitLab
```yaml
connector:
  name: GitLab
  identifier: gitlab_connector
  type: Gitlab
  spec:
    url: https://gitlab.com/myorg
    type: Account
    authentication:
      type: Http
      spec:
        type: UsernameToken
        spec:
          username: myuser
          tokenRef: gitlab_token
```

### Bitbucket
```yaml
connector:
  name: Bitbucket
  identifier: bitbucket_connector
  type: Bitbucket
  spec:
    url: https://bitbucket.org/myorg
    type: Account
    authentication:
      type: Http
      spec:
        type: UsernameToken
        spec:
          username: myuser
          tokenRef: bitbucket_app_password
```

## Cloud Connectors

### AWS
```yaml
connector:
  name: AWS
  identifier: aws_connector
  type: Aws
  spec:
    credential:
      type: ManualConfig          # ManualConfig, InheritFromDelegate, Irsa, OidcAuthentication
      spec:
        accessKeyRef: aws_access_key
        secretKeyRef: aws_secret_key
    delegateSelectors: []         # Optional: target specific delegates
    executeOnDelegate: false
```

### GCP
```yaml
connector:
  name: GCP
  identifier: gcp_connector
  type: Gcp
  spec:
    credential:
      type: ManualConfig          # ManualConfig, InheritFromDelegate, OidcAuthentication
      spec:
        secretKeyRef: gcp_service_account_key
    executeOnDelegate: false
```

### Azure
```yaml
connector:
  name: Azure
  identifier: azure_connector
  type: Azure
  spec:
    credential:
      type: ManualConfig
      spec:
        auth:
          type: Secret
          spec:
            secretRef: azure_client_secret
        applicationId: <app_id>
        tenantId: <tenant_id>
    azureEnvironmentType: AZURE     # AZURE, AZURE_US_GOVERNMENT
    executeOnDelegate: false
```

## Registry Connectors

### Docker Hub
```yaml
connector:
  name: Docker Hub
  identifier: dockerhub
  type: DockerRegistry
  spec:
    dockerRegistryUrl: https://index.docker.io/v2/
    providerType: DockerHub
    auth:
      type: UsernamePassword
      spec:
        username: myuser
        passwordRef: dockerhub_password
```

### AWS ECR
```yaml
connector:
  name: ECR
  identifier: ecr_connector
  type: Aws
  spec:
    credential:
      type: ManualConfig
      spec:
        accessKeyRef: aws_access_key
        secretKeyRef: aws_secret_key
```

## Kubernetes Connector

```yaml
connector:
  name: K8s Cluster
  identifier: k8s_connector
  type: K8sCluster
  spec:
    credential:
      type: ManualConfig          # ManualConfig, InheritFromDelegate
      spec:
        masterUrl: https://k8s-api.example.com
        auth:
          type: ServiceAccount
          spec:
            serviceAccountTokenRef: k8s_sa_token
            caCertRef: k8s_ca_cert
```

## Helm Repository Connector

### HTTP Helm Repo
```yaml
connector:
  name: Helm Repo
  identifier: helm_repo
  type: HttpHelmRepo
  spec:
    helmRepoUrl: https://charts.example.com
    auth:
      type: UsernamePassword      # UsernamePassword or Anonymous
      spec:
        username: myuser
        passwordRef: helm_password
    delegateSelectors: []
```

### OCI Helm Repo
```yaml
connector:
  name: OCI Helm
  identifier: oci_helm
  type: OciHelmRepo
  spec:
    helmRepoUrl: oci://registry.example.com/charts
    auth:
      type: UsernamePassword
      spec:
        username: myuser
        passwordRef: oci_password
```

## Artifact Repository Connectors

### Nexus
```yaml
connector:
  name: Nexus
  identifier: nexus_connector
  type: Nexus
  spec:
    nexusServerUrl: https://nexus.example.com
    version: "3.x"               # "2.x" or "3.x"
    auth:
      type: UsernamePassword
      spec:
        username: admin
        passwordRef: nexus_password
```

### Artifactory
```yaml
connector:
  name: Artifactory
  identifier: artifactory_connector
  type: Artifactory
  spec:
    artifactoryServerUrl: https://artifactory.example.com
    auth:
      type: UsernamePassword
      spec:
        username: admin
        passwordRef: artifactory_password
```

## Ticketing Connectors

### Jira
```yaml
connector:
  name: Jira
  identifier: jira_connector
  type: Jira
  spec:
    jiraUrl: https://mycompany.atlassian.net
    auth:
      type: UsernamePassword
      spec:
        username: user@company.com
        passwordRef: jira_api_token
```

### ServiceNow
```yaml
connector:
  name: ServiceNow
  identifier: servicenow_connector
  type: ServiceNow
  spec:
    serviceNowUrl: https://mycompany.service-now.com
    auth:
      type: UsernamePassword
      spec:
        username: admin
        usernameRef: snow_username
        passwordRef: snow_password
```

## Creating and Testing via MCP

Create connector:
```
Call MCP tool: harness_create
Parameters:
  resource_type: "connector"
  org_id: "<organization>"
  project_id: "<project>"
  body: <connector YAML>
```

Test connection:
```
Call MCP tool: harness_execute
Parameters:
  resource_type: "connector"
  action: "test_connection"
  resource_id: "<connector_identifier>"
  org_id: "<organization>"
  project_id: "<project>"
```

Browse available connector types:
```
Call MCP tool: harness_list
Parameters:
  resource_type: "connector_catalogue"
```

## Examples

- "Create a GitHub connector with PAT" - Github type with token auth
- "Set up AWS connector" - Aws type with access key credentials
- "Create Docker Hub connector" - DockerRegistry type
- "Connect to my K8s cluster" - K8sCluster with service account
- "Create a Helm repo connector" - HttpHelmRepo type for chart repositories
- "Set up Jira connector" - Jira type for approval and ticketing integration
- "Create Nexus connector" - Nexus type for artifact repository

## Performance Notes

- Always test the connection after creation using `harness_execute` with action `test_connection`.
- Verify that referenced secrets exist before creating the connector.
- For cloud connectors, confirm IAM permissions match the intended usage (read-only vs. read-write).

## Troubleshooting

### Connection Test Fails
- Verify credentials/tokens are valid and not expired
- Check network connectivity (delegate may need access)
- Ensure proper IAM permissions for cloud connectors

### Secret References
- Secrets must exist before creating the connector
- Use format: `account.secret_name` for account-level secrets
- Use just `secret_name` for project-level secrets

### Delegate Selectors
- Use `delegateSelectors` to target connectors at specific delegates
- Required when the service is only reachable from specific network locations
- Match delegate tags exactly (case-sensitive)

