From 4d06fb3207e9e4be1511589f07680ee4a2e0c99d Mon Sep 17 00:00:00 2001 From: Jakub Vacek Date: Tue, 11 Aug 2026 15:53:32 +0200 Subject: [PATCH] feat: vs code docs --- .../ai/images/vscode/agent-plugins-apify.webp | Bin 0 -> 40130 bytes sources/platform/integrations/ai/index.mdx | 8 + sources/platform/integrations/ai/vscode.md | 155 ++++++++++++++++++ sources/platform/integrations/index.mdx | 8 + .../platform/integrations/vscode-white.svg | 57 +++++++ static/img/platform/integrations/vscode.svg | 41 +++++ 6 files changed, 269 insertions(+) create mode 100644 sources/platform/integrations/ai/images/vscode/agent-plugins-apify.webp create mode 100644 sources/platform/integrations/ai/vscode.md create mode 100644 static/img/platform/integrations/vscode-white.svg create mode 100644 static/img/platform/integrations/vscode.svg diff --git a/sources/platform/integrations/ai/images/vscode/agent-plugins-apify.webp b/sources/platform/integrations/ai/images/vscode/agent-plugins-apify.webp new file mode 100644 index 0000000000000000000000000000000000000000..003d8cc1c995c0204d632a259cd6bd38124bf750 GIT binary patch literal 40130 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%0DV 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 + ## By provider diff --git a/sources/platform/integrations/ai/vscode.md b/sources/platform/integrations/ai/vscode.md new file mode 100644 index 0000000000..cc3df4b50b --- /dev/null +++ b/sources/platform/integrations/ai/vscode.md @@ -0,0 +1,155 @@ +--- +title: VS Code integration +sidebar_label: VS Code +description: Learn how to install the Apify agent plugin in VS Code to discover, run, and build Actors with the Apify MCP server, bundled skills, and a routing agent. +slug: /integrations/vscode +--- + +import ThirdPartyDisclaimer from '@site/sources/_partials/_third-party-integration.mdx'; + +[VS Code](https://code.visualstudio.com/) is Microsoft's code editor. Its [agent plugins](https://code.visualstudio.com/docs/agent-customization/agent-plugins) are prepackaged bundles of agent customizations - skills, agents, and MCP servers - that you install from a plugin marketplace and use in chat. + +The [Apify plugin](https://github.com/apify/apify-github-copilot-plugin) is published in the [Awesome Copilot](https://awesome-copilot.github.com/plugins) marketplace, which VS Code registers by default. It connects VS Code to Apify's library of [Actors](https://apify.com/store) and bundles: + +- The [Apify MCP server](/integrations/mcp) for searching Apify Store, running Actors, and retrieving datasets through the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro). +- An `apify` routing agent that picks the right tool or skill from a natural-language request. +- Five built-in skills for common workflows (see [Bundled skills](#bundled-skills) below). + +This guide covers installation from the plugin marketplace in VS Code. + + + +## Prerequisites + +- [An Apify account](https://console.apify.com/sign-up) - sign up for free if you don't have one. +- [VS Code](https://code.visualstudio.com/) version 1.120 or newer, with AI features enabled and signed in. +- Agent plugin support enabled - set `chat.plugins.enabled` to `true` in Settings. + +## Install the plugin + +1. Open the Extensions view (`Ctrl+Shift+X`, or `Cmd+Shift+X` on macOS) and enter `@agentPlugins` in the search field. Alternatively, run **Chat: Plugins** from the Command Palette (`Ctrl+Shift+P`, or `Cmd+Shift+P` on macOS). + +1. Find the **apify** plugin in the list. Type `apify` after the filter to narrow the results. + +1. Select **Install**. + + ![The Agent Plugins view in the VS Code Extensions sidebar with the apify plugin from the awesome-copilot marketplace and its Install button](./images/vscode/agent-plugins-apify.webp) + +1. The first time you install a plugin from a marketplace, VS Code shows a trust prompt. Review the source and confirm. + +The installed plugin appears in the **Agent Plugins - Installed** section of the Extensions view. + +## Authenticate to Apify + +The plugin bundles the Apify MCP server (`https://mcp.apify.com/`), and VS Code starts it as soon as the plugin is enabled. Read-only tools like searching Apify Store and fetching Actor details work without signing in, but you need to authenticate to run Actors and access your account data. + +1. VS Code prompts that the MCP server wants to authenticate to `console-backend.apify.com`. Select **Allow**. + +1. Complete the Apify OAuth flow in your browser and choose the account to connect. + +1. Run **MCP: List Servers** from the Command Palette and confirm that `apify-mcp-server` is running. + +:::tip Session persistence + +The connection stays authenticated for future sessions. You can revoke access at any time in [Apify Console > Settings > Integrations](https://console.apify.com/settings/integrations). + +::: + +## Run your first prompt + +Open Chat, select the **apify** agent from the mode picker, and describe what you want in natural language. The agent routes the request to the right tool or skill, so you don't need to name tools yourself. + +> Use Apify to find a good Actor for scraping Google Maps places. Show me the best option, its input requirements, pricing model, and what kind of dataset output it returns. Do not run the Actor yet. + +The agent searches Apify Store, fetches the top Actor's details through the Apify MCP server, and summarizes its inputs, pricing, and output - all without running the Actor. + +To check what's available, ask the agent to list its Apify tools. + +## Bundled skills + +| Skill | Description | +| --- | --- | +| `apify-ultimate-scraper` | CLI-driven extraction using existing Actors for multi-step scraping and lead-generation workflows. | +| `apify-actor-development` | Full Actor lifecycle - template selection, development, local testing, and deployment with `apify push`. | +| `apify-actorization` | Converts existing JavaScript, TypeScript, Python, or CLI projects into Apify Actors. | +| `apify-generate-output-schema` | Generates dataset and key-value store schemas for existing Actors. | +| `apify-sdk-integration` | Integrates Actor execution into applications using the `apify-client` package. | + +Example prompts that route to specific skills: + +_Ultimate scraper:_ + +> Find 10 highly rated coffee shops in Seattle with name, address, rating, phone, and website. + +_Actor development:_ + +> Create an Apify Actor that accepts a `startUrl` and `maxPages` input, crawls the site, and stores each page title and URL. + +_SDK integration:_ + +> Add Apify to this project. The Node.js API route should run an Actor and return dataset items as JSON. + +## Manage the plugin + +- To update the plugin, run **Extensions: Check for Extension Updates** from the Command Palette. VS Code also checks every 24 hours when `extensions.autoUpdate` is enabled. +- To enable or disable the plugin, use its context menu in the **Agent Plugins - Installed** section of the Extensions view. Disabling it stops the bundled MCP server and hides the `apify` agent and skills from chat. You can disable it globally or for a single workspace. +- To remove the plugin, right-click it in **Agent Plugins - Installed** and select **Uninstall**. + +## Troubleshooting + +### The apify plugin doesn't appear in the list + +Confirm that `chat.plugins.enabled` is set to `true` and that you're running VS Code 1.120 or newer. If you overrode the `chat.plugins.marketplaces` setting, add the marketplace back: + +```json +// settings.json +"chat.plugins.marketplaces": [ + "github/awesome-copilot" +] +``` + +### The Apify MCP server doesn't start + +Run **MCP: List Servers** from the Command Palette, select `apify-mcp-server`, and start or restart it. Check the **Output** panel (**MCP: apify-mcp-server**) - a successful start ends with a line about the discovered tools. In Chat, open **Configure Tools** and confirm that **Apify MCP Server** is enabled for the `apify` agent. + +### Browser doesn't open, or OAuth fails + +If the browser doesn't open automatically, copy the OAuth URL from the VS Code dialog and paste it into your browser manually. + +If you're running VS Code over SSH, in a dev container, or in any environment without a browser, the MCP OAuth flow can't complete. Authenticate locally first so the connection is stored, or use the Apify CLI and SDK paths instead - run `apify login`, or set `APIFY_TOKEN` with a token from [Apify Console > Settings > Integrations](https://console.apify.com/settings/integrations): + +```bash +export APIFY_TOKEN= +``` + +### Installation fails with "destination path already exists" + +A previous install left a cached copy of the plugin. Delete the cached directory and install again: + +- macOS: `~/Library/Application Support/Code/agentPlugins/github.com/apify/apify-github-copilot-plugin` +- Linux: `~/.config/Code/agentPlugins/github.com/apify/apify-github-copilot-plugin` +- Windows: `%APPDATA%\Code\agentPlugins\github.com\apify\apify-github-copilot-plugin` + +### The agent picks the wrong skill or transport + +Start from the **apify** agent. It is the single entry point that detects the available transport and routes each request to the correct tool or skill. + +## Limitations + +- Agent plugin support in VS Code is a preview feature, so its settings and behavior may change between releases. +- Long-running Actors may exceed the time a single tool call waits for completion. Reduce the scope or split the work across multiple prompts. +- Each Actor run consumes Apify platform usage from your plan in addition to any VS Code usage. See [Billing](/account/billing) for details. +- Skills that edit files in your project (Actor development, actorization, SDK integration) make local changes - review them before deploying or committing. + +## Related integrations + +- [GitHub Copilot integration](/integrations/github-copilot) - Install the same plugin from its source repository in VS Code +- [Cursor integration](/integrations/cursor) - Install the Apify plugin in Cursor +- [MCP server integration](/integrations/mcp) - Use the Apify MCP server with other clients + +## Resources + +- [Apify plugin repository](https://github.com/apify/apify-github-copilot-plugin) - Source repository and full README with advanced setup notes +- [Agent plugins in VS Code](https://code.visualstudio.com/docs/agent-customization/agent-plugins) - Official VS Code documentation +- [Awesome Copilot plugin marketplace](https://awesome-copilot.github.com/plugins) - Browse the plugins VS Code registers by default +- [Apify Store](https://apify.com/store) - Browse Actors you can run from VS Code diff --git a/sources/platform/integrations/index.mdx b/sources/platform/integrations/index.mdx index 3a3978252e..e64507a39b 100644 --- a/sources/platform/integrations/index.mdx +++ b/sources/platform/integrations/index.mdx @@ -155,6 +155,14 @@ Plug Apify Actors into the AI stack - chat clients like Claude and ChatGPT via t imageUrlDarkTheme="/img/platform/integrations/cursor-white.svg" smallImage /> + [See all AI integrations →](/integrations/ai) diff --git a/static/img/platform/integrations/vscode-white.svg b/static/img/platform/integrations/vscode-white.svg new file mode 100644 index 0000000000..66699157dd --- /dev/null +++ b/static/img/platform/integrations/vscode-white.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/platform/integrations/vscode.svg b/static/img/platform/integrations/vscode.svg new file mode 100644 index 0000000000..c453e633f3 --- /dev/null +++ b/static/img/platform/integrations/vscode.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +