plugin marketplace add incompatible with Azure DevOps git URLs (no .git suffix support)
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:
- Detect known git hosting URL patterns (e.g.
dev.azure.com/*/_git/*) alongside the.gitsuffix heuristic - Support an explicit source type in the CLI:
/plugin marketplace add --git <url> - Try
git ls-remote <url>as a fallback probe when the URL doesn't end in.gitbut also fails JSON parsing - Support the
extraKnownMarketplacessettings path with a source type that doesn't require.gitsuffix
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.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗