openart-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@openart-mcpCreate a video of character 'Test' saying 'Hello from OpenArt'."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 workflowsClaude skill (
skills/openart/SKILL.md) — tells Claude when and how to call the MCP tools
Related MCP server: Playwright MCP Automation
Tools
Tool | Purpose |
| List every character in your OpenArt account |
| Get details for one character by ID |
| Create a new character from a local image |
| Generate a video of a character speaking a script |
| 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 doneThe 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.
3. Install the companion skill (optional but recommended)
npx skills add https://github.com/jbertus/openart-mcp --skill openartThe 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 |
|
| Path to Playwright session JSON |
|
| Set to |
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-worldsClick 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 loginwhen 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 serverContributing
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 toolsopenart_create_characterA
Create a new OpenArt character from an image. Provide name, local image path, optional background story, optional voice ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| image_path | Yes | Absolute local file path to the character image | |
| background_story | No | ||
| voice_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| character_id | Yes | ||
| script | Yes | What the character says | |
| aspect_ratio | No |
TDQS
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.
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.
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.
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.
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.
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_characterARead-only
Get details for a specific OpenArt character by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Character ID |
TDQS
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.
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.
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.
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.
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.
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_statusBRead-only
Check the rendering status and URL of an OpenArt video by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes |
TDQS
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.
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.
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.
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.
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.
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_charactersARead-only
List all characters/avatars in the user's OpenArt account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Create and manage cinematic AI video renders through the Future Video Studio Agent API.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to control a browser through Playwright automation tools deployed on Cloudflare Workers. Supports web automation tasks like navigation, typing, clicking, and taking screenshots through natural language commands.
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to control browser automation through natural language prompts using Playwright, supporting visual element interaction, PDF generation, screenshots, and testing assertions.
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to control web browsers through Playwright automation, providing 50+ tools for navigation, interaction, testing, accessibility audits, and visual testing across Chromium, Firefox, and WebKit.15MIT
- AlicenseAqualityDmaintenanceControls Google Flow for image and video generation from an AI agent. Enables generating images with models like Imagen 4, creating videos, managing characters and scenes via browser automation.177048MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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