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

Resolved 💬 3 comments Opened Feb 21, 2026 by nickels Closed Feb 21, 2026

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.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗