Skip to content

Importing VS Code extensions

Before you can reference a VS Code extension in a profile or a run, it must be imported into your Scope deployment. Importing registers the extension's marketplace ID and metadata so that Scope can resolve and install it when a run starts.

Extensions are only used by the VS Code Copilot coding CLI and Claude Code CLI agents do not support extensions — see Choosing a coding agent.

Every VS Code extension has a marketplace ID in the form {publisher}.{name}:

ms-python.python
esbenp.prettier-vscode
dbaeumer.vscode-eslint

This ID is shown on the extension's Visual Studio Marketplace page and in the VS Code extension panel. Scope uses it as the primary key for imported extensions.

  1. Open Extensions in the navigation.
  2. Use the search box to find the extension you want. The search queries both your already-imported extensions and the VS Code Marketplace in one go.
  3. Results from the Marketplace that are not yet imported show an Import button. Click it.
  4. The extension is registered and immediately available for use in profiles.

The Portal also lets you pick a specific version when importing. By default the latest stable version is shown.

Use POST /api/v1/extensions to import an extension programmatically:

Terminal window
curl --request POST \
--url https://your-scope.example.com/api/v1/extensions \
--header 'Content-Type: application/json' \
--data '{
"_id": "ms-python.python",
"publisher": "ms-python",
"name": "Python",
"description": "Python language support with Pylance, debugging, and more",
"origin": "marketplace"
}'

| Field | Required | Description | | --- | --- | --- | | _id | ✅ | Marketplace ID ({publisher}.{name}). | | publisher | ✅ | Publisher identifier (the part before the dot). | | name | ✅ | Human-readable display name. | | description | — | Optional description. | | origin | ✅ | "marketplace" if discovered via search, "manual" if entered by hand. |

If the extension was previously soft-deleted, importing it again restores it.

Before importing, you can search both your internal list and the VS Code Marketplace:

Type in the search box on the Extensions page in the Portal. Results are split into Imported (already in your deployment) and VS Code Marketplace sections.

You can also search programmatically:

Terminal window
curl --request GET \
--url 'https://your-scope.example.com/api/v1/extensions/search?q=python&limit=10'

Each result includes an internal flag (true if already imported).

Terminal window
curl --request GET \
--url https://your-scope.example.com/api/v1/extensions

Once an extension is imported, you can query the Marketplace for available versions:

Terminal window
curl --request GET \
--url https://your-scope.example.com/api/v1/extensions/ms-python.python/versions

Add ?preRelease=true to include pre-release versions.

Deleting an extension is a soft-delete — it disappears from list views and can no longer be added to new profiles, but past runs that used it still resolve correctly.

Terminal window
curl --request DELETE \
--url https://your-scope.example.com/api/v1/extensions/ms-python.python

After importing, reference extensions in a profile's extensions array. You can optionally pin a specific version with @:

{
"extensions": [
"ms-python.python",
"esbenp.prettier-vscode@10.4.0"
]
}
  • Unpinned IDs (e.g. ms-python.python) resolve to the latest stable version at profile-version creation time.
  • Pinned IDs (e.g. esbenp.prettier-vscode@10.4.0) are used as-is.

For more on how extensions fit into profiles, see Defining profiles and Using MCP servers, skills & extensions.

  • Import before you profile. Extensions must be in the internal list before they can appear in a profile. Search and import first, then create the profile.
  • Pin versions for reproducible benchmarks. Unpinned extensions resolve to "latest" — fine for exploration, risky for long-lived comparisons.
  • One extension at a time. There's no bulk-import endpoint. Script multiple POST /api/v1/extensions calls if you need to import several at once.