In settings, open connectors, add a custom connector, paste the server address and connect.
Tell your AI. NULX does it.
NULX runs an MCP server. Connect it to an AI app such as Claude, ChatGPT or Cursor and handle uploads, subtitles, folders, playback protection, share links and analytics in conversation. You can connect on the Free plan.
Connect
Paste one address.
Add the address below in your AI app's connector (MCP) settings and the NULX sign-in page opens. Sign in, press Allow, and you are done. There is no API key to copy.
MCP server address
https://nulx.dev/mcp
-
01
Add the address
In your AI app's connector or MCP settings, add a custom server with the address above.
-
02
Sign in to NULX and allow
In the window that opens, sign in to NULX, review what the AI app can do, and allow it.
-
03
Just ask
Ask in plain words, like "show me this week's uploads", and the AI picks and runs the NULX tools.
Connecting each app
In settings, turn on developer mode under apps and connectors, create a connector with the server address and choose OAuth.
Run this in a terminal, then sign in with /mcp inside Claude Code.
claude mcp add --transport http nulx https://nulx.dev/mcp
Add the server address to the MCP settings file.
{
"mcpServers": {
"nulx": { "url": "https://nulx.dev/mcp" }
}
}
Just say it
From upload to sharing, in conversation.
- “Show me the videos in the wetra folder.”
- “Upload ~/Videos/lecture-03.mp4 with auto captions and tell me when it's ready to play.”
- “Rename lesson 3 to 'Lesson 3 · State' and move it to the course folder.”
- “Translate the Korean subtitles into English and add them.”
- “Make this video private and create a 7-day share link with PIN 1234.”
- “How should I put this video on my course site? Check its embed rules and existing site deliveries.”
- “Give me a stable public player link for this video, if it is public and ready.”
- “What were my 5 most-watched videos in the last 30 days?”
Uploading files works in AI tools that can read files on your computer (Claude Code, Cursor and similar). In web chat apps, manage, edit, subtitle and share in conversation, and upload on the NULX website.
Tools
42 tools your AI can use
The AI chooses and runs these tools. Every tool follows the same permissions and plan rules as the public API.
| Tool | What it does |
|---|---|
Connect Cloudflare for R2nulx_get_cloudflare_setup_link |
When storage or protected playback needs Cloudflare access, give the owner this NULX dashboard link. Each owner approves their own Cloudflare account in the browser; MCP never receives or asks for a Cloudflare token. Existing videos need a separate migration before changing their playback domain. |
List videosnulx_list_videos |
List videos in the NULX library, newest first. Filter by text, folder, tag or status. Returns id, title, folder, protection, status and size. Pass next_cursor back as cursor for the next page. |
Get videonulx_get_video |
Full details of one video: metadata, folder, protection, processing status and progress, tags. |
Check a video end to endnulx_check_video |
Checks everything about one video and says what is left to do: upload and encoding progress, playback readiness, delivery blocks, subtitles (including auto captions and translations in progress), protection and share links. Use it after an upload and whenever the user asks whether a video is ready. |
Edit video detailsnulx_update_video |
Change a video's title, description, folder, schedule or catalogue fields. Only the fields you pass change. |
Move videos to a foldernulx_move_videos |
Move one or more videos into a folder (or out of every folder with folder_id null). Videos take the folder's protection setting. |
Set or remove tagsnulx_set_video_tags |
Add, change or remove key/value tags on a video. |
Change who can play a videonulx_set_video_protection |
Set one video to public, private or signed playback. |
Get playback credentialsnulx_get_playback |
Get HLS/DASH and time-limited playback credentials for a ready video. Signed video watch/embed URLs expire; private video playback requires an existing viewer token. For a link to share or an iframe to copy, use nulx_get_distribution instead. |
Choose how to share or embed a videonulx_get_distribution |
Start here when the user asks to share, embed, publish on a site, or distribute a video. Shows public links, revocable protected links, assigned site deliveries, owner-only external HLS handoff, readiness and restrictions. Choose the audience before creating a link or changing protection. Site delivery does not publish a website. |
Download the original filenulx_get_download_url |
A short-lived (5 minute) URL to download the original uploaded file. |
Find duplicate uploadsnulx_find_duplicates |
Check whether a file was already uploaded, by SHA-256 checksum or original filename. |
Retry a failed videonulx_retry_video |
Re-run encoding for a video whose last encoding failed. |
Move a video to the trashnulx_trash_video |
Move a video to the trash. It stops playing and its files are deleted after the trash period unless restored with nulx_restore_video. Confirm with the user first. |
List the trashnulx_list_trash |
Videos in the trash with the date their files will be deleted. |
Restore a video from the trashnulx_restore_video |
Bring a trashed video back to the library. |
List foldersnulx_list_folders |
Every folder as a flat list in tree order. path is the full location from the top level ("A / B / C"); trust path and parent_id, not list order, for where a folder is. Use id as folder_id / parent_id in other tools. |
Create a foldernulx_create_folder |
Create a folder, optionally inside another folder. |
Rename or move a foldernulx_update_folder |
Rename a folder, change its description or order, or move it under another folder (parent_id null for top level). |
Protect a foldernulx_set_folder_protection |
Set playback protection for a folder and every video in it, and optionally the only websites allowed to embed them. |
Delete a foldernulx_delete_folder |
Delete a folder and its sub-folders. Videos inside are NOT deleted; they move up to the parent folder. Confirm with the user first. |
List subtitlesnulx_list_subtitles |
Subtitle tracks on a video, with language, label and status (translations run in the background). |
Add subtitlesnulx_add_subtitle |
Add a subtitle track from SRT or WebVTT text. |
Edit subtitlesnulx_update_subtitle |
Change a subtitle track's label or language, or replace its text with new WebVTT/SRT content. |
Delete subtitlesnulx_delete_subtitle |
Remove a subtitle track from a video. |
Translate subtitlesnulx_translate_subtitle |
Create a translated copy of a subtitle track (runs in the background; check with nulx_list_subtitles). |
Re-time subtitlesnulx_sync_subtitle |
Re-time a subtitle track so it lines up with another track on the same video. |
List site deliveriesnulx_list_site_deliveries |
List sites configured for embeds, including their video and folder assignments, status, allowed iframe domains and language. A site delivery scopes and measures embeds; it is not a share link or a website deployment. Create or edit sites in the NULX dashboard as the account owner. |
List share linksnulx_list_share_links |
Live share links for a video. |
Create a share linknulx_create_share_link |
Create a link someone without an account can open to watch one protected (private or signed) video. Optional PIN and expiry. |
Stop a share linknulx_revoke_share_link |
Stop a share link immediately. |
Start an uploadnulx_start_upload |
Step 1 of 3 to upload a local video file. Returns an upload_id and the part size. Then split the file into parts of that size, get their URLs with nulx_get_upload_part_urls, PUT each part (keep each response's ETag header) and finish with nulx_complete_upload. Uploads count toward the plan's monthly encoding hours; when they run out, new encoding pauses until next month rather than costing more (nulx_get_plan_usage shows the balance). |
Get upload part URLsnulx_get_upload_part_urls |
Step 2: signed PUT URLs for the parts of an upload (up to 100 per call). Every part except the last must be at least the part size from nulx_start_upload. |
Finish an uploadnulx_complete_upload |
Step 3: tell NULX every part is uploaded. Pass each part's number and the ETag from its PUT response. Encoding starts right away; follow with nulx_check_video. |
Upload statusnulx_get_upload |
State of an upload and the video it created. |
Cancel an uploadnulx_cancel_upload |
Abort an unfinished upload and discard its parts. |
Plan, usage and extra chargesnulx_get_plan_usage |
This month's encoding hours used against the plan's included hours, what happens when they run out, and exactly when anything is charged beyond the fixed monthly fee (overage only on accounts whose limit was raised on request; automatic captions per minute where turned on). Check it before large uploads and whenever the user asks about cost. |
Viewing analyticsnulx_get_analytics |
Plays, unique viewers, watch time, completion rate, daily series, top videos and countries for the account. |
Analytics for one videonulx_get_video_analytics |
Plays, viewers and watch time for one video. |
List webhooksnulx_list_webhooks |
Webhook endpoints and the events they receive. |
Add a webhooknulx_create_webhook |
Send NULX events (e.g. video ready) to an https URL. The signing secret is shown once in the result. |
Remove a webhooknulx_delete_webhook |
Stop sending events to a webhook endpoint. |
Safety
Only what you allow, and you can disconnect any time.
- The account owner has to allow the connection on the NULX sign-in page. The AI app never receives a password or an API key.
- The AI can move videos to the trash but cannot delete anything permanently. It cannot change billing, your plan, account settings, storage connections or your team.
- A connected AI app appears on the API keys page of your dashboard as 'AI · app name'. Delete it there to disconnect immediately.
- You can connect an AI app on the Free plan. Plan limits still apply to its actions.