Connect your AI assistant, step by step

Your AI coding assistant can answer plycdn questions with working code for your language, and, with an API key, look at your own account: your buckets, a failed upload, a video that will not play, this month's usage. This page takes you from the address to a first question, and shows how to keep the assistant to exactly what you want it to see. The address is https://mcp.plycdn.com/mcp; the protocol is MCP (Model Context Protocol), which Claude Code, Claude Desktop, Cursor, Windsurf and Visual Studio Code all speak.

You need: an AI assistant that supports MCP servers, and, to look at your account, an API key (Use a key made for your assistant). Reading the docs needs no key.

1What your assistant can do

Without a key, it can search and read these docs, fetch the code for a task in ASP.NET Core, Node.js, Python, React, Angular or plain HTTP, explain an error code and its fix, and list what plycdn can do.

With your key, it can also look at your account, only as far as the key reaches:

Ask it to What it uses
Say which organization and key it is using, what the key reaches, and the regions and products whoami
List your storage buckets and the S3 and Azure addresses of one list_buckets, get_bucket_endpoints
Show recent storage requests and why one was refused get_request_log, check_integration
Show this period's usage against your plan get_usage
List your video libraries, check one video, list a live input's streams list_video_libraries, get_video_status, list_live_streams
Show what needs attention in your searchable library get_library_health
Read any other part of your account that a key can read read

It can make three changes, and it is told to ask you first each time: create a bucket (create_bucket, with an admin key only), upload a small text file of about 900 KB at most to a bucket to check that uploads and delivery work (upload_test_file), and make a link to one file or one video (create_signed_link: a file by its name, or a video of a library by its id, on the library's own address or one of its custom domains; for buckets that tie links to a viewer's address, give that viewer's address as ip).

The test file always goes under plycdn-check/ in the bucket: plycdn-check/plycdn-check.txt unless the assistant gives another name (letters, digits, ., _ and -, such as plycdn-check/rclone-test.txt). It never replaces a file: if a file with that name is already there, the upload is refused, even in a bucket that allows overwriting.

Anything the assistant reads may contain text written by someone else: file names, the paths in your request log (anyone can request an address of a public bucket), transcripts. The assistant is told to treat that as data and never as instructions, but it is one more reason to read what it proposes before you agree to a change.

What it can never do, with any key: show a secret (storage secrets, stream keys, signing keys), reach billing, or do anything your key could not do through the API. Creating a bucket and uploading a test file are recorded as coming from an AI assistant (see Check what it did). Tokens you put in your own addresses (an ad tag, a webhook address) are hidden in its answers.

2Connect it

Make a key first (next section), put it in an environment variable called PLYCDN_API_KEY on your machine, and never paste a key into a file you commit. Restart your assistant after setting PLYCDN_API_KEY: it reads the variable when it starts.

Claude Code

claude mcp add --transport http plycdn https://mcp.plycdn.com/mcp --header "Authorization: ApiKey $PLYCDN_API_KEY"

Cursor (.cursor/mcp.json in your project, or ~/.cursor/mcp.json for every project)

{
  "mcpServers": {
    "plycdn": {
      "url": "https://mcp.plycdn.com/mcp",
      "headers": { "Authorization": "ApiKey ${env:PLYCDN_API_KEY}" }
    }
  }
}

Windsurf (open its MCP settings and choose to edit the raw configuration, mcp_config.json)

{
  "mcpServers": {
    "plycdn": {
      "url": "https://mcp.plycdn.com/mcp",
      "headers": { "Authorization": "ApiKey ${env:PLYCDN_API_KEY}" }
    }
  }
}

Visual Studio Code (.vscode/mcp.json; it asks for the key when the server starts and keeps it out of the file)

{
  "servers": {
    "plycdn": {
      "type": "http",
      "url": "https://mcp.plycdn.com/mcp",
      "headers": { "Authorization": "ApiKey ${input:plycdn-key}" }
    }
  },
  "inputs": [
    { "type": "promptString", "id": "plycdn-key", "description": "plycdn API key", "password": true }
  ]
}

Claude Desktop (connector settings, no file to edit)

  1. Open Customize → Connectors, choose + Add, then Add custom connector.
  2. Name it plycdn and enter the address https://mcp.plycdn.com/mcp.
  3. Set sign-in to No sign in. Under Request headers, add Authorization with the value ApiKey followed by your key. Leave the header out to read the docs only.
  4. Choose Add, then turn the connector on in a conversation from the + button.

In the dashboard: Developers → AI assistants shows the address with a Copy button and each snippet above, and Create a key for your assistant opens the key form already filled in.

AI tools that read llms.txt find the docs without the connector: https://plycdn.com/llms.txt lists every guide, and https://plycdn.com/llms-full.txt has them all in one file.

3Use a key made for your assistant

Give the assistant its own key, so you can see what it does and turn it off without touching your servers.

  1. In the dashboard open Developers → API keys, and choose Create key (or Create a key for your assistant on Developers → AI assistants).
  2. Name it AI assistant.
  3. Set Access to Standard. An admin key lets the assistant create or change more than it needs.
  4. Under Reach choose Only and your organization's name (the default). The key can then see and change that one organization and nothing else of your account, so a mistake or a leaked key stays small.
  5. Choose Create key, copy the key now (it is shown once), and store it in PLYCDN_API_KEY.

To switch the assistant off, deactivate the key (Developers → API keys → Deactivate); its next request is refused.

4Questions to try

  • "Which organization and regions is this plycdn key using?"
  • "List my buckets and give me the S3 address for media."
  • "My upload from rclone failed. Look at the last hour of requests and tell me why."
  • "Is video ... ready to play, and if not, why?"
  • "How much have I used this month, against my plan?"
  • "Show me how to upload a file from ASP.NET Core."
  • "Create a private bucket called test-uploads in Mumbai." (needs an admin key; it asks you first)
  • "Upload a test file to media and make a link to it." (it asks you first)
  • "Make a link to reports/jan.pdf in media that works for an hour."

5Check it works

Ask: "Use plycdn whoami." The answer names your organization, the key's prefix and its scope. Match the prefix to a row in Developers → API keys: each key shows its first characters (for example plyk_a1B2) under its name. If the prefix is the key you made for the assistant, and the reach is the one you chose, the connection is right. Without a key, the account tools tell the assistant to add one and point to this page.

6Check what it did

A bucket an assistant creates and a test file it uploads appear in Account → Audit log marked AI assistant, with the key's name under Who (or "An API key" if the key has since been removed). To see only those, set Made by to AI assistant; the filter stays in the page address, so you can share the view, and Clear removes it. Links it makes and everything it only reads are not listed there; the storage requests it makes while checking an integration are in Storage → Request log.

7Errors and fixes

"The API key sent to this MCP server was not accepted." This is what the assistant tells you when the key is wrong, expired or deactivated (the same key from code answers invalid_api_key). Copy it again from where you stored it, or make a new one, and check the header reads Authorization: ApiKey <key> (not Bearer). The docs tools keep working meanwhile.

"Too many requests without an API key; try again in a minute". Several wrong keys, or many requests with no key, came from the same address. Wait a minute, fix the key as above, and try again.

organization_out_of_key_reach. The assistant named an organization the key does not reach. A key made for one organization can act only on that one; make a key for the other, or a whole-account key.

admin_key_required. Creating a bucket needs an admin key. Make a separate admin key for that single job rather than widening the assistant's key.

A 403 that mentions the origin. A browser page called the server directly. Connect from an assistant app, not from a web page; web pages are refused.

The assistant says the tool needs your API key. The header is missing or empty. In Claude Code run claude mcp list to see what is set; in the others check that PLYCDN_API_KEY is set in the environment the assistant was started from, then restart the assistant.

The assistant cannot see a bucket, or a call is refused. It can do only what the key can do through the API. Check the key's reach and access under Developers → API keys.

An upload test is refused as too large. The test file is for checking, about 900 KB at most as sent; use your tools or SDK for real files.

"A check file with that name already exists; pick another name." A file is already stored under that name in plycdn-check/. Ask the assistant to use another name, or delete the old check file in Storage → Storage buckets (open the bucket, then the plycdn-check folder).

too_many_tool_calls. The assistant sent more than 5 tool calls in one request; nothing ran. Ask it again: it sends them a few at a time.

"Too many docs requests with this API key". One key made more than 300 docs requests in a minute. Wait a minute and try again.

Reference: Authentication and keys, What your key reaches and Team, keys and customers.