qencode MCP server
Commit Sep 21, 2026Lets an AI client submit, monitor, and manage video transcoding, editing, and media storage jobs via the Qencode API.
Also known as Qencode-Corp/mcp, mcp
- Stars
- 1
- Tools
- 16
- Downloads, 30 days
- —
- Latest version
- 1.2.0
- Last commit
- Sep 21, 2026
- License
- MIT
What is qencode MCP?
qencode lets an AI client submit, monitor, and manage video transcoding, editing, and media storage jobs via the Qencode API. It exposes 16 tools, such as transcode_video, start_encode2_raw, get_job_status.
Summary generated from the project's README
About qencode MCP server
Managing video transcoding, editing, and media storage through an AI assistant is possible with this MCP server. It connects compatible clients like Claude, Cursor, ChatGPT, Grok, and Gemini to a Qencode account, allowing users to submit and monitor media jobs using natural language. Instead of managing complex API keys, the server uses browser-based OAuth 2.1 for secure authentication, ensuring your credentials remain within the Qencode portal.
Developers can use specific tools such as transcode_video for standard tasks or start_encode2_raw for custom JSON queries. The server also provides media storage management, including the ability to list buckets, create new ones, and manage objects. It includes a built-in knowledge base of recipes for tasks like HLS ladder encoding, AI upscaling, and speech-to-text, which the agent can access to ensure jobs are configured correctly. You can choose between production and QA environments depending on whether you are deploying live workflows or testing new configurations.
What you can do with it
- 1Automated video transcodingAsk your AI agent to convert a video file into an HLS ladder with specific resolutions.
- 2Media storage managementDirect your AI to organize files by creating new storage buckets or moving public URLs into your account.
- 3Job monitoring and status trackingHave the AI client track the progress of active encoding tasks and provide detailed reports.
Written from the project's README. Every use case is checked against a quote from it.
How to install qencode MCP
Formats verified 10 Nov 2026Install qencode MCP in Claude Code
$ claude mcp add --transport http mcp https://mcp.qencode.com/mcpInstall qencode MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"mcp": {
"url": "https://mcp.qencode.com/mcp"
}
}
}Install qencode MCP in VS Code
.vscode/mcp.json
{
"servers": {
"mcp": {
"type": "http",
"url": "https://mcp.qencode.com/mcp"
}
}
}Install qencode MCP in Codex
~/.codex/config.toml
[mcp_servers.mcp] url = "https://mcp.qencode.com/mcp"
Install qencode MCP in Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"mcp": {
"httpUrl": "https://mcp.qencode.com/mcp"
}
}
}qencode MCP tools 16
Detected from the READMEtranscode_videostart_encode2_rawget_job_statusget_job_status_detailedlist_jobsfetch_job_resultwait_for_jobsearch_qencode_docsfetch_qencode_docopen_playerrefresh_jobslist_buckets
| transcode_video | — | |
| start_encode2_raw | — | |
| get_job_status | — | |
| get_job_status_detailed | — | |
| list_jobs | — | |
| fetch_job_result | — | |
| wait_for_job | — | |
| search_qencode_docs | — | |
| fetch_qencode_doc | — | |
| open_player | — | |
| refresh_jobs | — | |
| list_buckets | — |
Show all 16 toolsShow fewer tools
create_bucketlist_objectsget_download_urldownload_url_to_bucket
| create_bucket | — | |
| list_objects | — | |
| get_download_url | — | |
| download_url_to_bucket | — |
Configuration
NO_NETWORK
| Name | Description | |
|---|---|---|
| NO_NETWORK | — |
Automated checks
Ran Nov 14, 2026Full report →Not verified yet. A server needs a score of 80, no serious finding, and enough data for us to check. How checks work
- Source repository linked and reachableqencode-corp/mcp is public and reachablegithub.com/qencode-corp/mcp ↗Pass
- Package names this repository as its sourceNot checked
- Build provenance (Sigstore attestation)Not checked
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-10-21github.com/qencode-corp/mcp ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNot checked
- No critical advisory in the package or its dependenciesNot checked
- No hidden instructions to the model16 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNo tool named like delete, drop or execPass
- Remote endpoint answers the MCP handshakeHTTPS endpoint answered 401 (sign-in required)Pass
README
View on GitHubqencode-mcp
Model Context Protocol (MCP) server for the Qencode Transcoding API.
Connect any MCP-compatible AI client — Claude, Cursor, ChatGPT, Grok, Gemini — to your Qencode account and let it submit, monitor, and reason about transcoding jobs on your behalf.
Quick example
Once your client is connected (see Connect a client), ask your agent in plain English:
Transcode
https://example.com/input.mp4as an HLS ladder at 1080/720/540/360. Put it in my R2 bucketvideos/demo/.
The agent picks the hls_abr recipe, fills in the per-rendition encoding params, submits via start_encode2_raw, and polls until the job is done.
Prerequisites
- A Qencode portal account with at least one project — sign in at the portal for your environment: https://portal.qencode.com (production) or https://portal-qa.qencode.com (QA). You select the project during the OAuth consent step.
- An MCP-compatible client (Claude, Cursor, ChatGPT, Grok, Gemini, or any custom client).
There are no API keys to copy into client config — authentication is browser-based OAuth.
How it works
The connector uses standard OAuth 2.1 — no API keys in client config. On first use, your client opens a browser, you sign in to your Qencode portal account, pick a project, and approve the requested scopes. The client stores the token; subsequent calls are silent until the token expires.
Scopes the client should request at authorize time (published via Protected Resource Metadata):
| Scope | Purpose |
|---|---|
openid |
OIDC identity |
profile |
Display name |
email |
Account email |
offline_access |
Refresh token |
transcoding:read |
get_job_status, list_jobs, docs tools |
transcoding:write |
transcode_video, start_encode2_raw |
The RS enforces transcoding:read and transcoding:write on access tokens at the transport layer.
Your Qencode API keys never leave the portal. The MCP server derives a short-lived session token per request via an internal portal endpoint.
Environments
The same connector is deployed in two environments. Each has its own domains, accounts, projects, and credentials — sign in to the portal that matches the endpoint you connect to.
| Role | Production | QA (testing) |
|---|---|---|
| MCP endpoint (connect here) | https://mcp.qencode.com/mcp |
https://mcp-qa.qencode.com/mcp |
| Portal (sign in / projects) | https://portal.qencode.com |
https://portal-qa.qencode.com |
| Authorization server | https://auth.qencode.com |
https://auth-qa.qencode.com |
| Qencode API | https://api.qencode.com |
https://api-qa.qencode.com |
The instructions below use the production endpoint. To test against QA, swap in the QA URL and sign in at the QA portal.
Connect a client
Endpoint: https://mcp.qencode.com/mcp — same for every client below. Sign in to your Qencode account when the browser opens and approve access.
QA (internal testing): use
https://mcp-qa.qencode.com/mcpand sign in at the QA portal instead.
| Client | Where to add it | MCP URL / config |
|---|---|---|
| Claude (chat) | Message box → + → Connectors → Add connector | https://mcp.qencode.com/mcp |
| Claude Code | Terminal | claude mcp add --transport http qencode https://mcp.qencode.com/mcp |
| ChatGPT | Apps → search Qencode → Connect; or Developer Mode → Build app | Connector URL: https://mcp.qencode.com/mcp |
| Gemini | ~/.gemini/settings.json → mcpServers |
"httpUrl": "https://mcp.qencode.com/mcp" — then /mcp auth qencode in the CLI |
| Cursor | Settings → Tools & MCP → New MCP Server (or ~/.cursor/mcp.json) |
"url": "https://mcp.qencode.com/mcp" — restart Cursor after saving |
Cursor (mcp.json):
{
"mcpServers": {
"qencode": { "url": "https://mcp.qencode.com/mcp" }
}
}
Gemini (settings.json):
{
"mcpServers": {
"qencode": {
"httpUrl": "https://mcp.qencode.com/mcp",
"timeout": 30000,
"trust": false
}
}
}
Tip: sign in to portal.qencode.com in your browser before connecting — OAuth goes smoother.
What the connector exposes
Tools
Transcoding & jobs
| Tool | Description |
|---|---|
transcode_video |
Submit a job from a source URL to one or more outputs. Convenience wrapper — auto-injects encoder_version: 2 (or 1 for VMAF) when omitted. |
start_encode2_raw |
Escape hatch — submit a job with the full query JSON exactly as the Qencode API expects. |
get_job_status |
One-shot status snapshot by task_token. |
get_job_status_detailed |
Full, authoritative job status, including per-rendition progress and output details. |
list_jobs |
Inline jobs card for the task_tokens of the current conversation — status badges, filters, expandable rows, output URLs. The card refreshes itself while any job is still running. |
fetch_job_result |
Read the contents of a result file produced by an analysis job (transcript, VMAF report, metadata, categorization). |
wait_for_job |
Deprecated. Returns immediately and points at list_jobs; kept so older conversations do not hit "tool not found". |
search_qencode_docs |
Search the built-in knowledge base of recipes and reference docs. |
fetch_qencode_doc |
Fetch the full content of a knowledge-base resource by qencode:// URI (tool-based counterpart to resources/read). |
Playback
| Tool | Description |
|---|---|
open_player |
Render a playable result inline — progressive MP4/WebM or an HLS/DASH manifest. The server applies the calling host's sandbox policy, so which source origins are allowed depends on the client. |
refresh_jobs |
The jobs card's own silent poll. Not meant to be called directly by an agent; it backs the card's auto-refresh and Refresh button. |
Media Storage
Bucket management and ingest for Qencode Media Storage. These ride the same OAuth grant as the transcoding tools — no extra scope and no re-consent.
| Tool | Description |
|---|---|
list_buckets |
List the Media Storage buckets available to the account. |
create_bucket |
Create a new bucket. Called only on an explicit request — not to satisfy a missing destination. |
list_objects |
Browse the contents of a bucket. |
get_download_url |
Return a time-limited download URL for an existing object. |
download_url_to_bucket |
Server-side copy of a public URL into a bucket (ingest, no transcoding). |
Resources
The server ships a knowledge base of recipes and reference docs, exposed as MCP resources so the agent can fetch only what it needs. Notable URIs:
qencode://docs/best-practices— composition defaults the agent applies automaticallyqencode://docs/storage— destination compatibility matrix (Qencode S3, R2, AWS S3, Azure, B2, FTP/SFTP)qencode://docs/error-codes— error code → cause → fixqencode://docs/gotchas— non-obvious API quirksqencode://schema/digest— full attribute reference forstart_encode2qencode://recipe/<slug>— one per feature flow:ai_detection,ai_upscaling,audio_outputs,callbacks,clip_trim,codec_av1,codec_lcevc,drm_aes128,drm_buydrm,drm_doverunner,drm_expressplay,drm_fairplay_ezdrm,drm_forensic_watermark,drm_playready_ezdrm,drm_widevine_ezdrm,hdr_to_sdr,hls_abr,incremental_abr,mp4_ladder,per_title_encoding,refresh_abr_playlist,reliability,repack,rotate_deinterlace,smart_crop,smart_thumbnail,speech_to_text,stitching,subtitles,thumbnails,video_intelligence,video_metadata,vmaf_quality,vr_360,vr_mode,watermark_logo,waveform
Use search_qencode_docs to discover the right recipe URI for a goal.
Prompts (slash commands)
In clients that surface MCP prompts, 40 one-shot templates are available. Each tells the agent to read the matching qencode://recipe/... resource and submit via start_encode2_raw.
ABR / packaging: encode_hls_abr, encode_dash_abr, encode_mp4_ladder, encode_incremental_rung, encode_refreshing_playlist, remux_repack
Codecs / quality: encode_av1, encode_lcevc, tune_per_title, check_vmaf, ai_upscale_video, convert_hdr_to_sdr
Audio / images / text: extract_audio, generate_thumbnails, generate_smart_thumbnails, generate_waveform, transcribe, add_subtitles
Editing / framing: trim_clip, rotate_video, deinterlace_video, enable_smart_crop, add_watermark, add_html_overlay
Immersive: enable_vr_mode, inject_360_metadata
Analysis: get_video_metadata, analyze_video, detect_ai_generated
Probe / stitch: stitch_videos
Production hooks: enable_callbacks, enable_reliability
DRM: encode_aes128_hls, encode_widevine_ezdrm, encode_playready_ezdrm, encode_fairplay_ezdrm, encode_drm_buydrm, encode_drm_expressplay, encode_drm_doverunner, encode_forensic_watermark
Source URL rules
transcode_video and start_encode2_raw accept source values with schemes https://, http://, s3://, or tus:. FTP/SFTP and private/metadata URLs are rejected at the tool boundary (SSRF defence). See docs/security/THREAT_MODEL.md for limitations.
Security
Authentication is OAuth 2.1 only — there is no static-API-key mode. Your Qencode API keys never leave the portal; the server derives a fresh, short-lived session token per request via an internal portal endpoint. Source URLs are validated at the tool boundary (SSRF defence — see Source URL rules).
Full threat model and adversarial test coverage: docs/security/THREAT_MODEL.md.
Development
uv venv && uv pip install -e ".[dev]"
NO_NETWORK=1 pytest -q # offline L1 + L2 + L5 (~900 tests)
pytest -m protocol # MCP wire conformance only
pytest -m unit # per-tool logic (FakeQencode)
pytest -m security # OWASP MCP Top 10 adversarial suite
Protocol tests run fully offline (mocked Authorization Server, portal, and Qencode API). CI is the Jenkins job mcp_automated_tests (Jenkinsfile.manual): manual checkboxes for any layer, nightly L3 cron, weekly L4 cron.
Supported MCP protocol versions
Clients negotiate a version at initialize. This server targets MCP 2025-11-25 as the primary version. CI also runs conformance tests against 2025-06-18 because JSON-RPC batching behavior differs between earlier revisions. We do not claim support for 2025-03-26 or older wire semantics beyond what the underlying SDK negotiates.
| Version | Support | Notes |
|---|---|---|
| 2025-11-25 | Primary | Streamable HTTP, resumable SSE where used |
| 2025-06-18 | CI matrix | Regression guard for mid-2025 clients |
| 2025-03-26 | Not targeted | Batching semantics differ from 2025-06-18 |
Directory listings (Glama)
The connector users install is the hosted endpoint above. For
Glama Servers / awesome-mcp-servers
scoring only, this repo also ships qencode-mcp-inspect (stdio, dummy env,
tools/call refused). That is not a supported client transport. See
docs/glama-release.md.
More docs
- Local server / env vars:
docs/local-development.md - Test layers (L1–L5):
docs/testing.mdandtests/README.md - L3 against live QA / PROD:
tests/integration/README.md - L4 agent evals:
evals/README.md - Pre-release gate:
docs/release-checklist.md
Versioning policy
The connector follows SemVer applied to the MCP surface — tools, prompts, resources, OAuth scopes, and supported protocol versions. Qencode HTTP API changes are out of scope (they are the API's own concern, not the connector's).
- MAJOR — a breaking surface change: a tool/prompt/resource is removed or renamed, a previously optional argument becomes required, an OAuth scope is added or tightened in a way that forces re-consent, or a supported MCP protocol version is dropped.
- MINOR — a backward-compatible addition: a new tool/prompt/resource, a new optional argument, or a newly supported protocol version.
- PATCH — no change to the surface shape: tool/prompt description rewordings, knowledge-base/doc updates, and bug fixes.
Surface changes are guarded by snapshot tests under tests/protocol/. When you change the surface, regenerate the snapshots (python scripts/regen_tools_snapshot.py) and bump the version in the same PR: pyproject.toml, src/qencode_mcp/__init__.py, server.json, and a new CHANGELOG.md entry must all agree.
Links
- Changelog:
CHANGELOG.md - OAuth 2.1 authorization-server spec:
docs/oauth-spec.md - Qencode portal: https://portal.qencode.com (production) · https://portal-qa.qencode.com (QA)
- Qencode API reference: https://docs.qencode.com/api-reference/transcoding
qencode MCP questions
How do I add qencode MCP to Claude Code?
Run claude mcp add --transport http mcp https://mcp.qencode.com/mcp in your terminal. Add --scope user to make it available in every project.
How do I add qencode MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does qencode MCP provide?
It exposes 16 tools, including transcode_video, start_encode2_raw, get_job_status, get_job_status_detailed, list_jobs.
How do I authenticate with the Qencode MCP server?
Authentication is handled via browser-based OAuth 2.1. On first use, your client opens a browser for you to sign in to your Qencode portal and approve access.
Can I use this to manage my video storage?
Yes, the server includes tools for bucket management and ingest for Qencode Media Storage, including listing buckets, creating buckets, and browsing objects.