Windpaint
Connect

Cursor

Add the Windpaint plugin or MCP server to Cursor to generate images and video from the agent.

The Windpaint plugin for Cursor adds five skills and the hosted MCP server. Cursor’s agent can then generate media, run products, and write code against the Windpaint API.

Prerequisites

Install the plugin

Install Windpaint from the plugin marketplace

Open Cursor’s plugin marketplace, search for Windpaint, and install it. The plugin’s source is the public repo windpaint-ai/skills.

Set your key

In the plugin’s configuration, set WINDPAINT_API_KEY to your aak_... key. The bundled MCP server sends it as Authorization: Bearer ....

Check the connection

Open Cursor Settings → MCP. windpaint should be enabled with 20 tools listed. Then ask the agent “What’s my Windpaint credit balance?”. It calls get_balance and answers.

MCP server only

To add just the tools, put this in .cursor/mcp.json in your project, or ~/.cursor/mcp.json for every project:

.cursor/mcp.json
{
  "mcpServers": {
    "windpaint": {
      "url": "https://mcp.windpaint.ai/mcp",
      "headers": {
        "Authorization": "Bearer ${env:WINDPAINT_API_KEY}"
      }
    }
  }
}

${env:WINDPAINT_API_KEY} is read from the environment Cursor was launched from, so the key stays out of the file. Export it in your shell profile and start Cursor from a terminal (cursor .), or replace the reference with the key itself in the global file only. Add "X-Windpaint-Project": "my-project" under headers to pin a project.

To get the skills too without the plugin, run npx skills add windpaint-ai/skills in the project. Cursor’s agent also reads AGENTS.md, which points it at the right skill for each task.

Try it

Animate assets/hero.png into a 5 second clip with a slow dolly-in. Estimate first.

What happens:

  1. The agent loads the windpaint and windpaint-video skills and calls list_capabilities to find a live video.generate model, which needs a start frame.
  2. It uploads assets/hero.png with upload_asset. The MCP server can’t read your disk, so the agent reads the file and sends it as data_base64.
  3. It calls estimate_cost with the asset id in start_frame, reports the credits and your balance, and waits for your go-ahead.
  4. It submits with generate (wait=false), then calls wait_for_job until the clip is done, which takes a few minutes.
  5. It calls download_asset, which returns a 15-minute signed URL, saves the MP4 with curl, and reports the path and the credits charged.

Troubleshooting

Next steps