Skip to content

plugin marketplace add incompatible with Azure DevOps git URLs (no .git suffix support) #27526

Description

@nickels

Environment:

  • Claude Code version: latest
  • OS: macOS (Darwin 24.6.0)
  • Git host: Azure DevOps (dev.azure.com)

Description:

Azure DevOps git URLs use the format https://dev.azure.com/{org}/{project}/_git/{repo} and never accept a .git suffix. Claude Code's marketplace URL detection relies on the .git suffix to distinguish a git repository URL from an HTTP endpoint URL. This creates a fundamental incompatibility:

Attempt Command Result
Without .git /plugin marketplace add https://dev.azure.com/org/project/_git/repo Treated as HTTP URL. Fetches HTML page. Fails: Invalid marketplace schema from URL: : Invalid input: expected object, received string
With .git /plugin marketplace add https://dev.azure.com/org/project/_git/repo.git Treated as git repo (correct). Azure DevOps rejects: TF401019: The Git repository with name or identifier repo.git does not exist

Azure DevOps categorically rejects .git suffix — it interprets repo.git as a literal repository name rather than stripping the suffix like GitHub/GitLab do:

$ git clone https://dev.azure.com/org/project/_git/repo       # works
$ git clone https://dev.azure.com/org/project/_git/repo.git    # TF401019 not found

Workaround attempted — local path also fails:

/plugin marketplace add /path/to/cloned/repo

When the plugin is installed and enabled via local path, Claude Code enters an infinite loop cycling on git-remote-https, making it unusable.

Repository structure (verified correct):

repo-root/
├── .claude-plugin/
│   └── marketplace.json       # valid marketplace manifest
└── plugin-name/
    ├── .claude-plugin/
    │   └── plugin.json        # valid plugin manifest
    ├── .mcp.json
    ├── commands/
    ├── agents/
    ├── skills/
    └── hooks/

Expected behavior:

Claude Code should support git URLs that don't end in .git. Azure DevOps is one of the three major git hosting platforms (alongside GitHub and GitLab) and its URL scheme is fundamentally incompatible with the current detection heuristic.

Suggested fix:

Consider one or more of:

  1. Detect known git hosting URL patterns (e.g. dev.azure.com/*/_git/*) alongside the .git suffix heuristic
  2. Support an explicit source type in the CLI: /plugin marketplace add --git <url>
  3. Try git ls-remote <url> as a fallback probe when the URL doesn't end in .git but also fails JSON parsing
  4. Support the extraKnownMarketplaces settings path with a source type that doesn't require .git suffix

Additional context:

The extraKnownMarketplaces setting in .claude/settings.json with "source": "url" also documents the .git requirement, meaning there is no workaround for Azure DevOps-hosted marketplaces — neither CLI nor settings-based.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions