Skip to main content
Glama

🎬 Encoding DevOps MCP Server: AI-Powered Video Encoding Assistant

GitHub stars GitHub contributors GitHub last commit open issues Python Version PRs Welcome

Ever been woken up at 3 AM by a failed encoding job? Say goodbye to those late-night troubleshooting sessions! This Model Context Protocol (MCP) server connects Anthropic's Claude directly to your encoding workflow, making video encoding issues a breeze to handle.

✨ What's Cool About This?

  • Smart Error Translation: Turns cryptic "moov atom not found" messages into plain English

  • Real-time Analysis: Connects directly to your encoding workflow and database

  • Human-Friendly Responses: Generates clear, actionable solutions for your team

  • Auto-Email Draft: Creates professional client communications with context

  • Always On Guard: Monitors your encoding jobs 24/7

  • Keeps You in Control: Suggests actions but lets you make the final call

Related MCP server: envious-canvas

🚀 Getting Started

You'll Need

  • Python 3.11 or higher

  • Claude Desktop

  • Your encoding workflow API credentials

  • OMDB API key (optional, for movie metadata)

Quick Setup

  1. Install the package using UV:

curl -LsSf https://astral.sh/uv/install.sh | sh
uv pip install encoding-devops
  1. Set up your environment:

# Copy the example config
cp .env.example .env

# Add your API keys
nano .env
  1. Register with Claude Desktop:

uv run mcp install ./src/encoding_devops/main.py

💡 How to Use It

# Start the MCP server
uv run mcp dev ./src/encoding_devops/main.py

# In Claude Desktop, you can now ask things like:
"What's wrong with job XYZ-123?"
"Draft an email about the failed encoding job"
"Check the encoding cluster status"

🔧 Under the Hood

The MCP server uses three main components to help you:

  1. Resources: Email templates, error guides, and documentation

  2. Tools: Job status checks, log analysis, and email drafting

  3. Prompts: Instructions that help Claude understand encoding issues

🤝 Want to Help?

We'd love your input! Here's how you can contribute:

  1. Fork it

  2. Create your feature branch (git checkout -b feature/awesome-feature)

  3. Commit your changes (git commit -m 'Add awesome feature')

  4. Push to the branch (git push origin feature/awesome-feature)

  5. Open a Pull Request

📋 Coming Soon

  • Integration with more encoding workflow systems

  • Advanced log analysis patterns

  • Automated health checks

  • Slack notifications

  • Custom email templates

📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙌 Thanks To

  • Anthropic team for the MCP framework

  • All our contributors

  • The DevOps community for feedback and suggestions


💤 Built by a developer who wanted to sleep through the night. If this helps you too, give us a star!

Read the full story behind this project in my Medium article about using MCP to handle encoding fires.

Available Tools

8 tools
get_clientsB

Get list of all clients

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a read-only listing but does not disclose pagination, ordering, result limits, permissions required, or whether the list can be large. For a zero-annotation tool, this is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or redundancy. It is efficient, though it is also under-specified rather than richly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no annotations, and no parameters, the description is the only source of information, yet it says nothing about the shape, size, or format of the returned client list. More detail is warranted to let an agent use the result confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which sets the baseline at 4. There are no argument semantics to explain, and the description correctly implies no filtering input is accepted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get list') and resource ('clients'), so an agent can tell what it returns. It adds no scope or filter qualifiers ('all clients'), and sibling tools operate on unrelated resources (jobs, movies, email), so no differentiation is needed or provided.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no when-to-use guidance, no prerequisites (e.g., auth or role needed to enumerate all clients), and names no alternative. With no parameters, there is nothing to guide, but the absence of any usage context leaves the agent to infer invocation conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_job_by_nameC

Get details of an encoding job by its name

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It never states what happens when the name doesn't exist, whether names are unique or case-sensitive, what fields are returned, or that this is a read-only operation beyond the weak implication of 'Get'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence, front-loaded with the verb and resource and free of padding. It is efficient, though its brevity is partly under-specification rather than disciplined conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the definition is minimally viable but thin: an agent still lacks name-uniqueness semantics and any sense of what the returned 'details' contain. With no annotations to fall back on, more disclosure would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter is documented only as 'Name' with type string. The description's 'by its name' merely restates the parameter name, adding no format, uniqueness, or matching semantics for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (encoding job) plus the lookup key (by its name), which does distinguish it from the id-based sibling get_job_tasks_by_id. However, it never names that sibling or any other alternative, so the differentiation is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus get_job_tasks_by_id, get_latest_jobs, or any id-based lookup. The only hint is the phrase 'by its name', which leaves the agent to infer the selection condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_job_tasks_by_idC

Get tasks for a specific job by its ID

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It never states that this is a read-only operation, whether results are paginated, what happens if the job_id is invalid, or what the response contains, all of which are relevant for a retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler and the key scope constraint placed first. It is efficient, though its brevity reflects under-specification addressed in other dimensions rather than a structural flaw here.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, this is minimally adequate: the agent knows what to pass and roughly what it gets back. Missing are any note on return shape, result limits, or how this differs from sibling job-retrieval tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema documents nothing about job_id. The phrase "by its ID" does convey that job_id is the job's identifier, adding marginal meaning, but the format (name, numeric ID, UUID) and sourcing of that ID are left unstated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("Get tasks") scoped to a single job identified by ID, which is clear enough to act on. It does not, however, differentiate itself from siblings like get_job_by_name or get_latest_jobs, which also retrieve job data, leaving the agent to infer the distinction from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no when-to-use guidance, no prerequisites, and no mention of alternatives. An agent cannot tell from this text when this tool is preferable to get_job_by_name or get_latest_jobs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_latest_jobsB
Get the most recent encoding jobs

Args:
    limit: Number of jobs to return (default: 3, max: 10)

Returns:
    String representation of the latest jobs
ParametersJSON Schema
NameRequiredDescriptionDefault
limitYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose the return shape ('String representation of the latest jobs') and the default/max for limit, but says nothing about permissions, error behavior, ordering semantics, or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and front-loaded: the purpose leads, followed by compact Args/Returns blocks. The Returns line is somewhat redundant with the opening sentence but the total size is appropriate for a one-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read tool with no output schema and no annotations, the description covers both input constraints and the return form. What is missing (auth requirements, ordering guarantees, definition of a 'job') is minor given the tool's low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it largely does, documenting the single parameter's meaning ('number of jobs to return'), its default (3), and its ceiling (max 10). Only a minimum value and behavior when exceeding the max are left unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the most recent encoding jobs'), which is unambiguous and clearly distinct from siblings like get_job_by_name or get_clients. It does not, however, explicitly contrast itself with any sibling or clarify how 'latest' is determined (recency window, ordering).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites, and never names an alternative for retrieving jobs (e.g., get_job_by_name). An agent must infer the use case purely from the verb 'get'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_movie_detailsB
Get detailed information about a movie by its IMDB ID

Args:
    imdb_id: IMDB ID of the movie (e.g., 'tt0111161')

Returns:
    String representation of the movie details
ParametersJSON Schema
NameRequiredDescriptionDefault
imdb_idYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full behavioral burden. It does disclose the return shape at a high level ('String representation of the movie details'), which is more than nothing, but it omits any detail on what fields appear, error behavior for a bad ID, or rate/auth considerations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core sentence is front-loaded and efficient, and the Args block adds a useful format example. The 'Returns' line is vague docstring boilerplate that adds little, keeping this out of the top tier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read lookup with no output schema and no annotations this is minimally adequate: it covers the input and gestures at the return type. It doesn't describe what detail fields are returned or how failures are surfaced, which the absence of an output schema leaves open.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single parameter has no schema description, so the description must compensate. It does so by naming the parameter, stating its meaning ('IMDB ID of the movie'), and giving a concrete format example ('tt0111161'), which is genuinely useful for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get detailed information about a movie') plus the lookup key ('by its IMDB ID'), so the agent knows exactly what the tool does. It stops short of distinguishing itself from the sibling 'search_movie', which an agent must infer is the ID-less alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance and no mention of the sibling 'search_movie'. The phrase 'by its IMDB ID' only weakly implies the precondition that an ID must already be known, so usage is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

is_cluster_busyB

Check if the encoding cluster is busy (has jobs in progress)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It clarifies what "busy" means (jobs in progress), which is genuinely useful, but says nothing about the return shape, whether it is a safe read, throttling, or what counts toward "in progress" — a gap for a status-query tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence, front-loaded with the verb and resource and immediately clarifying the ambiguous term "busy." No waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool this is nearly adequate, but with no output schema the description should state that it returns a boolean/status so the agent knows how to consume the result. That omission is the only real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to document; the baseline of 4 applies. The description adds nothing here because nothing is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ("Check if the encoding cluster is busy") and defines the term in parentheses ("has jobs in progress"), so the agent knows exactly what is being queried. It is clearly distinct from sibling tools like get_job_by_name or get_latest_jobs, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus checking individual job status via get_job_by_name/get_latest_jobs, nor any stated preconditions. The usage context is only implied by the tool name and purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_emailA
Opens the default email client with your message ready to go

Args:
    body: What you want to say in the email
    to: Who to send it to (optional)
    subject: Email subject line (optional)
    cc: CC recipients (optional)
    bcc: BCC recipients (optional)
    ctx: MCP context

Returns:
    str: Quick status message so you know it worked
ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toNo
bccNo
bodyYes
subjectNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral load, and it does disclose the key trait that this hands off to the 'default email client' rather than sending directly, plus that it returns a status string. However, it omits material behavior: whether the message is actually sent, and what happens in headless/no-client environments.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The summary sentence is front-loaded and efficient, and the Args/Returns block is scannable. The only waste is the internal 'ctx' entry, which earns no place in a caller-facing spec.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with zero schema descriptions and no output schema, the description supplies parameter meanings and a return summary, which is close to enough. The remaining gap is the operating-environment requirement, which matters because opening a local mail client can silently fail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it does, naming all five parameters with plain-language meanings and marking to/subject/cc/bcc as optional while body is required. It loses a point for 'ctx: MCP context', which is internal plumbing not useful to the caller.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Opens the default email client with your message ready to go.' It is unambiguous and clearly distinct from all siblings (job/client/movie tools), though no sibling is explicitly named as an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated — an agent can infer this composes a message for the user to review/send, but there is no explicit when-to-use, when-not-to-use, or mention of prerequisites (e.g., a desktop mail client must exist).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_movieC
Search for a movie by title

Args:
    title: Movie title to search for

Returns:
    String representation of the search results
ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It only says it returns a 'String representation of the search results', giving no information about result format, matching behavior, pagination, or empty-result handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and front-loaded, with the purpose in the first line. The Args/Returns boilerplate is mildly redundant but not harmful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-param read tool this is minimally adequate, but with no output schema and no annotations the description should say more about what the returned string contains and how matching works.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter at 0% schema description coverage, the description does map 'title' to 'Movie title to search for', but this adds nothing beyond restating the parameter name. It does not clarify partial-match vs exact-match semantics, which matters for a title search.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Search for a movie by title'), which is clear on its own. However, it never distinguishes itself from the sibling get_movie_details, leaving the agent to guess whether search returns full details or just matches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus get_movie_details, nor any prerequisites or exclusions. The agent must infer the search-vs-detail split entirely from the names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.1.0
    • First observedget_clients
    • First observedget_job_by_name
    • First observedget_job_tasks_by_id
    • First observedget_latest_jobs
    • First observedget_movie_details
    • First observedis_cluster_busy
    • First observedopen_email
    • First observedsearch_movie

TDQS

B3.3/5.0

Scored across 8 tools

Disambiguation4/5

Most tools target clear, distinct resources (clients, cluster status, movie search, email). The three job-related tools (get_job_by_name, get_job_tasks_by_id, get_latest_jobs) share a resource but differ in intent, so only minor confusion is possible.

Naming Consistency4/5

Names follow a consistent snake_case verb_noun pattern (get_job_by_name, get_movie_details, search_movie). The is_cluster_busy predicate is a reasonable deviation for a boolean check rather than a true inconsistency.

Tool Count5/5

Eight tools is well-scoped for this domain, with each covering a distinct query. No redundant or filler tools pad the surface.

Completeness3/5

The surface is read-only: it exposes job lookups, cluster status, and movie info but no submit/create/cancel/retry job operations, which are core to an encoding-ops workflow. Client and email handling are present but job lifecycle coverage is one-sided.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers