---
title: "Install AI Content Drop in VS Code | AI Content Drop"
description: "Connect VS Code to the AI Content Drop MCP server with one click or a .vscode/mcp.json file, keep the API key in a prompted secret, and generate video and images from the Chat view."
canonical: "https://aicontentdrop.com/docs/install/vscode"
source: "https://aicontentdrop.com/docs/install/vscode"
---

# AI Content Drop in VS Code

VS Code reads MCP servers from an `mcp.json` file — one at `.vscode/mcp.json`
inside a workspace for just that repo, or the user-level one that the
**MCP: Open User Configuration** command opens for every workspace. Browsing
works immediately with no credential; generating needs an API key.

## Install with one click

The install button on [the VS Code tab of the MCP page](https://aicontentdrop.com/mcp?tab=vscode) opens
VS Code through its `vscode:mcp/install` URL handler with one server
configuration already filled in: the name `aicontentdrop`, the type `http`, and
the URL `https://aicontentdrop.com/mcp`. VS Code shows the configuration, asks you to confirm,
and writes the entry for you.

The handler takes one server configuration and no secret, so the API key is a
separate step below.

## Add it by hand

If the link does nothing in your build, save this as `.vscode/mcp.json` in the
workspace:

```json
{
  "servers": {
    "aicontentdrop": {
      "type": "http",
      "url": "https://aicontentdrop.com/mcp"
    }
  }
}
```

VS Code shows a Start action above the entry. Start it, then open the Chat view
in agent mode and check the tools picker: nine tools should appear under
`aicontentdrop`.

## Verify without a credential

Ask the agent:

> Using AI Content Drop, list the video models under 20 credits.

That is `list_models`, which needs no key. Model ids and credit costs coming
back means the connection works.

## Authorize

Create a key in [Settings → Integrations](https://aicontentdrop.com/settings/integrations).
Keys are shown once and look like `acd_live_…`.

Do not paste the key into the file. Add an `inputs` entry instead, so VS Code
asks for it once, stores it in its secret storage, and sends it as a header:

```json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "acd-api-key",
      "description": "AI Content Drop API key",
      "password": true
    }
  ],
  "servers": {
    "aicontentdrop": {
      "type": "http",
      "url": "https://aicontentdrop.com/mcp",
      "headers": {
        "Authorization": "Bearer ${input:acd-api-key}"
      }
    }
  }
}
```

Restart the server from the entry's action. VS Code prompts for the key on the
first start and does not ask again. The five account tools (`generate_video`,
`generate_image`, `get_generation`, `list_generations`, `get_account`) start
working; the other four never needed the key.

## First generation

> Quote a 5-second Kling 3.0 clip at 1080p, then generate one of a matcha tin
> on a linen backdrop, and poll it until it is done.

The agent should call `estimate_credit_cost`, which returns a `quote_id` valid
for 15 minutes, then `generate_video` with that `quote_id`, then
`get_generation` until the job reports `completed`. Credits are charged on
success only — a failed render costs nothing. A retry with the same `quote_id`
returns the original job rather than a second charge.

## Troubleshooting

**The install link does nothing.** The `vscode:` handler is registered by VS
Code itself; if the browser cannot open it, use the hand-installed file above.
It produces the same entry.

**The server shows an error in the file.** Check the JSON parses; a trailing
comma is the usual cause. Then confirm the URL is `https://aicontentdrop.com/mcp` with no
trailing slash and the type is `http`.

**Account tools answer "requires authorization".** That is the expected reply
with no key, or with one that has been revoked. Re-check the header: it is
`Bearer ` followed by the input reference. If the stored key is stale, give the
`inputs` entry a new `id` (and reference it in the header); VS Code prompts for
the new id on the next start. The four public tools never need a key.

**A generation returns a job id and nothing else.** That is correct. Generation
is submit-and-poll; ask the agent to call `get_generation` with the id.

**`QUOTE_REQUIRED`, `QUOTE_EXPIRED` or `QUOTE_MISMATCH`.** Every generation
needs a fresh `quote_id` from `estimate_credit_cost` for the same model,
duration and resolution. Quote again and retry.

See also: [the plugin overview](https://aicontentdrop.com/plugin) ·
[the MCP reference](https://aicontentdrop.com/docs/mcp) ·
[Cursor install](https://aicontentdrop.com/docs/install/cursor)
