Skip to main content
Glama

openart-mcp

MCP server + Claude skill for OpenArt.ai. OpenArt has no public API, so this drives their web UI as a logged-in user via Playwright.

What's in this repo

  • MCP server (src/) — exposes 5 tools that automate OpenArt character + video workflows

  • Claude skill (skills/openart/SKILL.md) — tells Claude when and how to call the MCP tools

Related MCP server: Playwright MCP Automation

Tools

Tool

Purpose

openart_list_characters

List every character in your OpenArt account

openart_get_character

Get details for one character by ID

openart_create_character

Create a new character from a local image

openart_generate_video

Generate a video of a character speaking a script

openart_get_video_status

Check render status + URL of a generated video

Install

1. Install the MCP server

git clone https://github.com/jbertus/openart-mcp.git
cd openart-mcp
npm install
npx playwright install chromium
npm run build
npm run login   # opens browser, log in to OpenArt, press Enter when done

The login step saves a Playwright storageState JSON to ~/.openart-mcp/auth.json (or %USERPROFILE%\.openart-mcp\auth.json on Windows). The server reuses that session for every subsequent tool call.

2. Register the MCP with your client

Claude Code / Claude Desktop — add to your MCP config (~/.claude/mcp.json or equivalent):

{
  "mcpServers": {
    "openart": {
      "command": "node",
      "args": ["<absolute-path-to-cloned-repo>/dist/index.js"]
    }
  }
}

Other MCP clients — point to node <repo>/dist/index.js with stdio transport.

npx skills add https://github.com/jbertus/openart-mcp --skill openart

The skill teaches Claude when to call which tool and how to format arguments. Without it, Claude can still use the MCP but you'll have to spell out intent more explicitly.

Configuration

Environment variables (all optional):

Var

Default

Purpose

OPENART_STORAGE_STATE

~/.openart-mcp/auth.json

Path to Playwright session JSON

OPENART_HEADLESS

true

Set to false to see the browser during automation

Selector setup (one-time)

The tools in src/tools.ts ship with placeholder DOM selectors marked TODO. OpenArt's UI changes over time, so the selectors need to be captured against the live site:

npx playwright codegen https://openart.ai/suite/characters-and-worlds

Click through the UI for each tool's flow. Playwright generates real selectors. Paste them into the TODO spots in src/tools.ts, rebuild (npm run build), and the tools work.

If the selectors break later (OpenArt redesigns), repeat this step.

Risks

  • Fragile to UI changes. Every OpenArt redesign may break selectors. Re-run codegen and re-patch.

  • Slower than a real API. Each tool call launches a browser session and waits on page loads.

  • Session can expire. Re-run npm run login when prompted.

  • OpenArt may block automation. Anti-bot detection could rate-limit or ban your account. Use sparingly. No recourse if banned.

Testing

npm run inspect    # launches MCP Inspector against the server

Contributing

PRs welcome. If OpenArt's UI changes and the selectors break, open an issue with the new selectors and a brief description of which tool flow needs updating.

License

MIT — see LICENSE.

Available Tools

5 tools
openart_create_characterA

Create a new OpenArt character from an image. Provide name, local image path, optional background story, optional voice ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
image_pathYesAbsolute local file path to the character image
background_storyNo
voice_idNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=false and openWorldHint=true. The description adds little behavioral context beyond the creation action; it does not mention auth requirements, rate limits, or consequences of invalid inputs. With annotations carrying some of the burden, the description is adequate but not enriching.

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?

The description is a single sentence that front-loads the action and lists the parameters. No unnecessary words or redundancy.

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?

The description covers the core purpose and parameter roles, but omits important context: no indication of the return value (e.g., character ID), no mention that the image file must exist locally, and no explanation of the openWorldHint annotation's implications. Given no output schema, return format info would be valuable.

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 only 25% (only image_path described). The description lists the parameters and explicitly marks background_story and voice_id as optional, but does not add format constraints or examples for the undocumented parameters (name, background_story, voice_id). It adds marginal value over the parameter names.

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

Purpose5/5

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

The description explicitly states the action 'Create a new OpenArt character from an image' and lists the required parameters (name, image_path) and optional parameters. It clearly distinguishes from siblings like openart_get_character (retrieve) and openart_list_characters (list).

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

Usage Guidelines4/5

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

The description clearly indicates when to use the tool (to create a character from an image), but it does not provide explicit guidance on when not to use it or compare it directly to sibling tools, though the verb 'create' implies the primary use case.

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

openart_generate_videoA

Generate a video using an existing OpenArt character speaking a script.

ParametersJSON Schema
NameRequiredDescriptionDefault
character_idYes
scriptYesWhat the character says
aspect_ratioNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations indicate no destructiveness but potential side effects; description accurately states generation but does not disclose async behavior or result information. Adequate but not enhanced.

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, concise sentence effectively communicates the tool's core function with no unnecessary words.

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?

Given the presence of sibling 'openart_get_video_status', the description should mention async generation. It also omits return format or success conditions, leaving gaps for 3-parameter tool.

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 only 33% (description only on 'script'). The tool description does not add meaning to 'character_id' or 'aspect_ratio' beyond the schema, failing to compensate for the low coverage.

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

Purpose5/5

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

The description clearly states the action 'generate a video' using an existing OpenArt character and script, which distinguishes it from siblings like 'openart_create_character' and 'openart_get_character'.

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?

No explicit when-to-use or when-not-to-use guidance is provided. The purpose implies usage for video generation from a character and script, but lacks alternatives or prerequisites.

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

openart_get_characterA
Read-only

Get details for a specific OpenArt character by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCharacter ID

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's 'Get details' aligns but adds no extra behavioral context (e.g., rate limits, auth). No contradiction.

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?

One sentence of 10 words with no redundant information, perfectly concise and front-loaded.

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?

Given the simple single-parameter tool, read-only nature, and no output schema, the description is largely complete. Could mention what details are returned (e.g., stats, properties) but not essential.

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 coverage is 100% with one parameter 'id' described as 'Character ID'. Description does not elaborate further (e.g., format, source), so it meets baseline but adds no extra value.

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

Purpose5/5

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

The description uses a specific verb ('Get details') and resource ('specific OpenArt character') with method ('by ID'), clearly distinguishing it from siblings like create, list, or generate.

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?

Implies usage when you need details of a known character by ID, but does not explicitly state when to use vs alternatives like list_characters or create_character. No exclusions or prerequisites provided.

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

openart_get_video_statusB
Read-only

Check the rendering status and URL of an OpenArt video by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
video_idYes

TDQS

B3.3/5.0
Behavior2/5

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

Annotations indicate readOnlyHint and openWorldHint, but description adds no behavioral traits beyond the obvious. No mention of rate limits, response format, or potential errors.

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?

Single sentence, zero waste, perfectly front-loaded with the core action and object.

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 status-check tool with one parameter and annotations present, the description is adequate but lacks mention of output format or error handling.

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 description does not explain the 'video_id' parameter (e.g., format, length, source). A simple parameter but additional context would help.

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

Purpose5/5

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

The description clearly states the verb 'check' and the resource 'rendering status and URL of an OpenArt video', and distinguishes from sibling tools focused on characters and video generation.

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 tool vs alternatives, nor any context on prerequisites or exclusions. Sibling tools exist but no differentiation is provided.

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

openart_list_charactersA
Read-only

List all characters/avatars in the user's OpenArt account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds no further behavioral details beyond the account context, which is minimally informative. No contradictions.

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?

The description is a single concise sentence with front-loaded purpose. Every word is useful.

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

Completeness5/5

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

For a simple list operation with no parameters and full annotation coverage, the description is complete enough. No return value explanation is needed given the tool's transparency.

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 has zero parameters, so the schema coverage is 100%. Per the rule, baseline is 4 as the description need not add parameter info.

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

Purpose5/5

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

The description clearly states the tool lists all characters/avatars in the user's account. It uses a specific verb+resource structure and is distinct from siblings like 'get' (single) and 'create'.

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?

The description implies usage for listing all characters but does not provide explicit when-to-use guidance or mention alternatives such as 'get_character' for individual retrieval.

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

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: creating a character, generating a video, fetching character details, checking video status, and listing characters. No overlap in functionality.

Naming Consistency5/5

All tools follow a consistent 'openart_verb_noun' pattern (e.g., openart_create_character, openart_list_characters), with verbs in imperative form and nouns clearly indicating the resource.

Tool Count5/5

With 5 tools, the set is well-scoped for managing OpenArt characters and videos. Each tool earns its place, covering essential operations without unnecessary bloat.

Completeness4/5

The set covers the core workflow: character creation, retrieval, listing, video generation, and status checking. Missing update and delete operations for characters are minor gaps that agents can work around.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jbertus/openart-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server