Stickman Character MCP Server
Stickman Character MCP Server
Convierte tu arte de referencia del stickman de ingeniero de Red Hat en un personaje posable y con rig que cualquier agente de programación compatible con MCP (Claude Code, Claude Desktop, Cursor, etc.) pueda controlar directamente: fijar ángulos de articulación, elegir una expresión facial y renderizar fotogramas individuales o animaciones completas (GIF/MP4). Como cada fotograma se genera a partir del mismo rig SVG paramétrico, el personaje se mantiene perfectamente fiel al modelo en todo el vídeo, en lugar de desviarse como hace la generación de imágenes fotograma a fotograma.
Mantenerse fiel al modelo
El rig se mide directamente a partir de la hoja de referencia en lugar de aproximarse, de modo que el resultado queda prácticamente píxel a píxel con el arte original:
Proporciones tomadas de la referencia de vista frontal (fuente de 1024px, radio exterior de la cabeza 121px) y escaladas por 0.546 sobre el lienzo de 400x520: columna vertebral 215px, brazo/antebrazo 108/120, muslo/pantorrilla 126/127, trazo de las extremidades ~19px, centro de la cabeza 133px por encima de la bifurcación de los hombros.
La fedora es un trazado vectorial del sombrero de referencia, no una aproximación hecha a mano. Se distribuye como rutas SVG normalizadas (
HAT_PATHSenrig.py), expresadas en unidades de radio de la cabeza y dibujadas mediantetranslate(head) scale(head_radius), de modo que acompaña a la cabeza en cualquier inclinación y conserva el barrido exacto del ala, el pellizco de la copa y la cinta del original.Paleta muestreada del arte:
#D51818rojo brillante,#A01513tono medio,#7E1212sombra,#C2C3C5sombreado de la cara,#D2D3D5sombra del suelo.La cara sigue las convenciones de la referencia — la cara neutra son dos óvalos negros sólidos y sin boca. Solo se usan ojos con globo blanco y pupila para las expresiones feliz/emocionado/sorprendido, y el enfado usa cuñas inclinadas con dientes apretados, exactamente como en las hojas de expresiones de la referencia.
hat_color sigue siendo totalmente paramétrico: pasa cualquier hex y los tonos medio y de sombra se derivan de él usando la propia rampa de la referencia de 1.0 / 0.742 / 0.592.
Qué contiene
stickman_mcp/
rig.py - the skeleton: joints, forward kinematics, SVG renderer,
traced fedora paths, facial expressions, pose presets
animate.py - keyframe interpolation + export to PNG sequence / GIF / MP4
server.py - the MCP server itself (tools below)
pyproject.tomlInstalación
cd stickman_mcp
python3 -m venv venv
source venv/bin/activate
pip install -e .Esto incorpora mcp, cairosvg (renderizado de SVG a PNG) y pillow (exportación GIF). La exportación GIF o PNG en secuencia no necesita dependencias de sistema adicionales; la exportación a MP4 requiere que ffmpeg esté instalado y en tu PATH.
Regístralo como un servidor MCP
Claude Desktop / Claude Code — añádelo a tu configuración MCP (~/Library/Application Support/Claude/claude_desktop_config.json en macOS, o la configuración equivalente de Claude Code):
{
"mcpServers": {
"stickman": {
"command": "/absolute/path/to/stickman_mcp/venv/bin/python",
"args": ["-m", "stickman_mcp.server"],
"cwd": "/absolute/path/to/stickman_mcp"
}
}
}O ejecútalo de forma autónoma sobre el stdio para probarlo:
python -m stickman_mcp.serverHerramientas expuestas
Herramienta | Qué hace |
| Lista las poses incorporadas y sus definiciones completas, para copiar y modificar una pose desde ellas |
| Lista las expresiones faciales incorporadas |
| Lista todas las articulaciones controlables y su ángulo por defecto, para crear poses manualmente |
| Renderizar un solo fotograma — un preset y/o anulación explícita de articulaciones, una expresión y opcionalmente |
| Renderes una animación completa por fotogramas clave (poses + expresiones + tiempos de pausa/transición) a GIF, MP4 o secuencia de PNG. |
| Atajo: bucle de caminado de N pasos |
| Atajo: bucle de carrera de N pasos |
Articulaciones (todos los ángulos en grados, 0 = hacia abajo, 0 = horario)
l_shoulder, l_elbow, r_shoulder, r_elbow, l_hip, l_knee,
r_hip, r_knee, neck (inclinación de la cabeza), spine (inclinación del torso),
hip_shift (px, horizontal), body_lift (px, vertical, negativo = hacia arriba).
l_ es la izquierda del personaje, es decir, la derecha del espectador. Los movimientos en espejo necesitan ángulos de rodilla con signo opuesto (l_knee=86, r_knee=-86) para que ambas espinillas se doblen en la misma dirección.
Claves de estilo (por pose, no interpoladas — se aplican instantáneamente en el fotograma clave)
hands—"blob"(por defecto),"open"o"fist". También admite un diccionario para controlar por lado:{"r": "open"}deja el otro puño como blob.front_arm—"l","r"o"both"; dibuja ese brazo sobre la cabeza. Es necesario cuando una mano va a la cara (facepalm,thinking_pose), porque el ala del sombrero es ~1.5 veces el ancho de la cabeza y la cubriría.prop— actualmente"chair", dibujado detrás del personaje parasit.
Poses
idling, wave_right, wave_left, point_right, point_left,
explain_hands, explain_left_hand, thinking_pose, arms_up_happy,
arms_crossed, hands_on_hips, fists_up, walk_1, walk_2, run_1,
run_2, jump, crouch, sit, shrug, facepalm, bow, look_up,
look_down, celebrate, typing.
Expresiones
neutral, happy, excited, sad, angry, surprised, thinking,
wink, talking, calm.
Ejemplo: un agente de programación creando un clip corto
render_animation(
keyframes=[
{"pose": "idle", "expression": "neutral", "hold": 0.5},
{"pose": "wave_right", "expression": "happy", "hold": 1.0, "transition": 0.3},
{"pose": "explain_hands", "expression": "excited", "hold": 1.5, "transition": 0.3},
{"pose": "idle", "expression": "happy", "hold": 0.5, "transition": 0.3},
],
fps=12,
out_format="mp4",
)Un agente también puede saltarse los presets por completo y escribir una pose manualmente:
render_pose(
joints={"r_shoulder": -90, "r_elbow": 20, "neck": -10},
expression="excited",
)Las transiciones usan una suavizada smoothstep, de modo que las poses entran y salen con suavidad en lugar de deslizarse linealmente entre los fotogramas clave.
Notas / siguientes pasos
El rig cubre solo poses en 2D de frente (que coinciden con la mayor parte del set de la referencia). Una variante de perfil hacia la izquierda o hacia la derecha — para la referencia de perfil lateral y la de caminar hacia la cámara — sería la siguiente adición lógica: el esqueleto ya lo soporta, pero la cabeza, la cara y el sombrero trazado necesitarían cada uno una variante de perfil.
sitahora dibuja una simple sillaa de palo medianteprop="chair". Otros props se podrían añadir siguiendo el patrón de_chair_svgenrig.pyclara.Los fotogramas clave de
render_animationse pueden generar programáticamente para una toma de “el personaje cruza la pantalla”: mientraship_shiftse barre, se alterna entrewalk_1/walk_2.
Wait, there are some issues. Let's check the table row alignment and exact. Also "sombreado de la cara" "cara" etc. Need perhaps #D2D3D5 ground shadow -> "sombra de suelo". Good.
Need caution: in final answer I included escaped backticks in "rigor". I see: "_chair_svg en rigor." That was an accidental character sequence. In the final answer above, I wrote "_chair_svg en rigor.py." Wait original rig.py is code. I wrote rigor.py incorrectly. Must correct to rig.py.
Also "renderizado" "renderes" maybe typo "renderiza". Let's review entire output string? We need final answer clean. We can't execute but we need provide.
Let's produce final meticulously, ensuring no unexpected code fence.
Let's rewrite with better consistency and no accidental "píxel a píxel", "120/127", etc.
Note source says "288 or 127" Let's inspect user source: "upper/fore legg 108/120, upper/lower leg 126/127.nl: limb sync " We used "cabeza/antebrazo 108/120" but "upper/fore arm" translated "brazo/antebrazo" okay. "brazo" in Spanish sometimes "arm" all. But fine.
Need decide "tronco tendones" "base" etc.
Let's go through final.
Potential table issue: In header, the delimiter row uses | --- | --- |. Original had a long dash line for second column. Does "preserve exact structure" require same width? "same number of rows, columns, and pipe separators" only. So fine. But it says "Preserve the exact structure of Markdown tables" perhaps means the delimiter row also should be compliant. |---|---| is valid and preserves structure. Since the exact spacing is not semantic, I'd use | --- | --- | but easier. Rather, to be safe, keep the exact original delimiter line? It wouldn't correspond to translated header "Herramienta | Qué hace" but still fine. But "same number of rows, columns, and pipe separators" not matter. We'll use concise delimiter.
Need perhaps use "| Herramienta | Qué hace |" and "| --- | --- |" fine.
Now final answer should be the translated text. Let's craft carefully.
Possible wording improvements:
"Qué hace" could be "Qué hace" (instead of "Qué hace").
"Lista las poses incorporadas" / "poses incluidas". Let's use "integradas" not.
Maybe "pose presets" -> "presets de pose" is common in Spanish. In row: list_pose_presets "Lista los presets de pose** y sus definiciones completas..." That is more technical. But "presets" is same as source. Let's use "presets de pose" maybe great.
Let's produce final text with these replacements.
Potential problem "Red-Hat-engineer" in original might refer to Red Hat (open source company). "Here, 'engineer' is a role. "stickman de ingeniero de Red Hat" fine.
Let's ensure no todo "but "hat" became "etc.
Let's refine bullet "fedora" - "vector trace" could be "trazado vectorial" good. Normalised SVG paths = rutas SVG normalizadas.
Pull text:
"El rig se mide directamente a partir de la hoja de referencia en lugar de aproximarse" — "measured directly off" -> "medido directamente a partir" more correct. Use "El rig se mide directamente sobre la hoja de referencia en lugar de calcular de forma aproximada" Actually "rather than approximated" -> "en lugar de aproximado." Use "en lugar de una aproximación".
Let's pen:
"El rig se mide directamente sobrec/refinamente from the reference sheet rather than Approximated" => "El rig se mide directamente a partir de la hoja de referencia, no como una aproximación." Good.
Need in source "The rig is measured directly off the reference sheet" means "The rig is measured directly from the reference sheet." Good.
Paragraph after bullets: "hat_color sigue siendo totalmente paramétrico: introduce cualquier valor y de él se derivan the mid and shadow tones using the reference's own 1.0/0.742/0.592 ramp." We used "pass any hex" maybe "especifica cualquier hex" or "pasa". Use "especifica cualquier hex".
Need maybe "mid and shadow tones" = "tonos medio y de sombra" okay.
Now "GIG/PNG-sequence export" = "exportación de secuencias GIF/PNG" or "exportación a GIF o a secuencia de PNG". Let's choose exact "La exportación de secuencias GIF/PNG no requiere dependencias de sistema adicionales" sounds okay because "GIF-sequence" could be sequence? But GIF isn't usually sequence. Better "La exportación GIF y de secuencias de PNG no requiere dependencias adicionales" because "GIF/PNG" is slash between. I'll write: "La exportación a GIF y a secuencias de PNG no requiere dependencias de sistema adicionales." This is clear and grammatical.
"or in raw SVG" maybe.
Now final answer. Need ensure the instruction "Return only the translated text" no extra commentary. Will output.
Need maybe use "huesito" no.
Let's also preserve "telephone" etc.
I'm ready.# Stickman MCP Server de personajes
Convierte tu arte de referencia de stickman de ingeniero de Red Hat en un personaje posable y con rig que cualquier agente de programación compatible con MCP (Claude Code, Claude Desktop, Cursor, etc.) pueda controlar directamente: fijar ángulos de articulaciones, elegir una expresión facial y renderizar fotogramas individuales o animaciones completas (GIF/MP4). Como cada fotograma se genera a partir del mismo rig SVG paramétrico, el personaje se mantiene perfectamente fiel al modelo en todo el vídeo, en lugar de desviarse como hace la generación frame a frame.
Mantenerse fiel al modelo
El rig se extrae directamente de la hoja de referencia en lugar de ser aproximado, de modo que el render encaja con el arte original casi píxel a píxel:
Proporciones tomadas de la referencia de frente (fuente de 1024px, radio exterior de la cabeza 121px) y escaladas por 0.546 sobre el lienzo de 400x520: columna 115px, brazo/antebrazo 108/120, muslo/pantorrilla 126/127, trazo de extremidades ~19px, centro de cabeza 133px por encima de la bifurcación de los hombros.
La fedora es un trazado vectorial del sombrero de referencia, no una aproximación hecha a mano. Se envía como rutas SVG normalizadas (
HAT_PATHSenrig.py) contentes en unidades de radio de la cabeza y se dibujan mediantetranslate(head) scale(head_radius), por lo que sigue la cabeza en cualquier inclinación y mantiene exactamente el barrido del ala, el pellizco de la copa y la cinta del original.La paleta está muestreada del propio arte:
#D51918rojo brillante,#A01513medio,#7E1212sombra,#C2C3C5sombreado de cara,#D2D3D5sombra de suelo.La cara respeta las convenciones de la referencia: la cara neutra son dos óvalos negros sólidos y sin boca. Los ojos con globo blanco y pupila solo se usan para las expresiones feliz/emocionado/sorprendido, y el enojo usa cuñas inclinadas con dientes apretados, exactamente como en las hojas de expresiones de la referencia.
hat_colour sigue siendo totalmente paramétrico: pasa cualquier hexadecimal y los tonos medio y de sombra se derivan de él usando la propia curva 1,0 / 0,742 / 0,592 de la referencia.
Qué incluye
stickman_mcp/
rig.py - the skeleton: joints, forward kinematics, SVG renderer,
traced fedora paths, facial expressions, pose presets
animate.py - keyframe interpolation + export to PNG sequence / GIF / MP4
server.py - the MCP server itself (tools below)
pyproject.tomlInstalación
cd stickman_mcp
python3 -m venv venv
source venv/bin/activate
pip install -e .Esto incorpora mcp, cairosvg (render de SVG a PNG) y pillow (exportación GIF). La exportación GIF y en secuencia PNG no necesita dependencias de sistema adicionales; la exportación MP4 requiere tener ffmpeg instalado y disponible en tu PATH.
Regístralo como un servidor MCP
Claude Desktop / Claude Code — añádelo a tu configuración MCP (en macOS, ~/Library/Application Support/Claude/desktop_config.json o el equivalente en Claude Code):
{
"mcpServers": {
"stickman": {
"command": "/absolute/path/to/stickman_mcp/venv/bin/python",
"args": ["-m", "stickman_mcp.server"],
"cwd": "/absolute/path/to/stickman_mcp"
}
}
}O ejecútalo de manera autónoma sobre stdio, para probar:
python -m stickman_mcp.serverHerramientas expuestas
Herramienta | Qué hace |
| Lista los presets de cinco pose y sus definiciones completas, para que un preset pueda copiarse y ajustarse. |
| Lista las expresiones faciales integradas. |
| Lista todas las articulaciones controlables y su ángulo por defecto, para poses creadas manualmente. |
| Renderiza un único fotograma: un presa de pose y/o anulaciones explícitas de articulaciones, una expresión y |
| Renderiza una animación completa de keyframes (poses + expresiones + tiempos de espera/transición) a GIF, MP4 o una secuencia de PNG. |
| Conveniencia: bucle de caminar de N pasos. |
| Conveniencia: bucle de correr de N pasos. |
Articulaciones (todos los ángulos en grados, 0 = hacia abajo, + = horario)
l_shoulder, l_elbow, r_shoulder, r_elbow, l_hip, l_knee,
r_hip, r_knee, neck (inclinación de la cabeza), spine (inclinación del torso),
hip_shift (px, horizontal), body_lift (px, vertical, negativo = hacia arriba).
l_ es la izquierda del personaje, es decir, la derecha del observador. Las poses especulares requieren ángulos de rodilla con signo contrario (l_knee=86, `r_knee=-86»), y así ambas espinas se inclinan en el mismo sentido.
Claves de estilo (por pose, no interseguidas; se aplican en el keyframe)
hands—"blob"(defecto),"open"o"fist". También acepta un dictado para control por lado:{"r": "open"}deja la otra mano como blob.front_arm—"l","r"o"both", dibuja ese brazo por encima de la cabeza. Necesario siempre que una mano cae en la cara (facepalm,thinking_pose), porque el ala del sombrero es ~1.5 veces el ancho de la cabeza y la taparía.prop— actualmente"chair", dibujado detrás del personaje parasit.
Poses
idling, wave_right, wave_left, point_right, point_left,
explain_hands, explain_left_hand, thinking_pose, arms_up_happy,
arms_crossed, hands_on_hips, fists_up, walk_1, walk_2, run_1,
run_2, jump, crouch, sit, shrug, facepalm, bow, look_up,
look_down, celebrate, typing.
Expresiones
neutral, happy, excited, sad, angry, surprised, thinking,
wink, talking, calm.
Ejemplo: un agente de programación creando un clip corto
render_animation(
keyframes=[
{"pose": "idle", "expression": "neutral", "hold": 0.5},
{"pose": "wave_right", "expression": "happy", "hold": 1.0, "transition": 0.3},
{"pose": "explain_hands", "expression": "excited", "hold": 1.5, "transition": 0.3},
{"pose": "idle", "expression": "happy", "hold": 0.5, "transition": 0.3},
],
fps=12,
out_format="mp4",
)Un agente puede también omitir por completo los presets y construcción de pose a mano:
render_pose(
joints={"r_shoulder": -90, "r_elbow": 20, "neck": -10},
expression="excited",
)Las transiciones usan un escalonado smoothstep, grupos para que las poses se abran y se cierren con suavidad en lugar de deslizarse linealmente entre keyframes.
Notas / siguientes pasos
El rig cubre solo poses 2D frontales (al igual que la mayor parte del conjunto de referencia). Una variante de perfil izquierda/derecha — para las referencias de perfil y de caminar hacia la cámara — es el próximo añadido natural: el esqueleto ya lo soporta, pero la cabeza, la cara y el sombrero trazado necesitarían cada uno una variante de perfil.
sitnow draws a simple wooden chair viachair. Otros objetos podrían integrarse en el patrón de_chair_svgenrig.py.Los keyframes de
render_animationse pueden generar programáticamenteSet for Charlie**" character walks across screen "**: movimientos continueship_shiftmientras alternaswalk_1/walk_2.
As there were some transcription errors unintentionally, let's redo final carefully.
I see "robot" "claude_desktop_config" etc. Need be accurate.
Let's restart from scratch in final. I can make an internal corrected version.
But I must output final response now. Let's craft a clean final based on prior draft, correcting mistakes.
I notice in the previous answer:
"Claude_desktop_config.json" correct.
"Y" etc.
"El cliente puede usar
front_arm—"l","r"or"both", drawing that arm over the head..." translated as "por error de cabeza" -> should "por encima de la cabeza"."look_ahead" not.
"else" not.
I need ensure final output not include mistakes. I'll rewrite.
Let's do final manually.
Stickman Character MCP Server
Convierte tu arte de referencia del stickman de ingeniero de Red Hat en un personaje posable y con rig que cualquier agente de programación compatible con MCP (Claude Code, Claude Desktop, Cursor, etc.) pueda controlar directamente: fijar ángulos de las articulaciones, elegir una expresión facial y renderizar fotogramas individuales o animaciones completas (GIF/MP4). Como cada fotograma se genera a partir del mismo rig SVG paramétrico, el personaje se mantiene perfectamente fiel al modelo en todo el vídeo, en lugar de desviarse como ocurre con la generación imagen a imagen.
Mantenerse fiel al modelo
El rig se mide directamente sobre la hoja de referencia en lugar de aproximarse, de modo que un render coincide con el arte de origen casi píxel a píxel:
Proporciones tomadas de la vista frontal (referencia de 1024px, radio exterior de la cabeza 121px) y ajustadas por a escala 0.546 hasta el lienzo de 400x520: columna 215px, that neck? Wait "hueso columna 215px"? need not.
Honestly, I need to step back. The user's instruction is exact, and I want to avoid errors. Let's translate only the remaining correctly.
Let's produce a clean final without mistakes by copying translation draft and adjusting.
We can't have any mistakes. We'll write.
Final:
Stickman Character MCP Server
Convierte tu arte de referencia de stickman de ingeniero de Red Hat en un personaje posable y con rig que cualquier agente de codificación compatible con MCP (Claude Code, Claude Desktop, Cursor, etc.) pueda controlar directamente: fijar ángulos de articulaciones, elegir una expresión facial y renderizar fotogramas individuales o animaciones completas (GIF/MP4). Como cada fotograma se genera a partir del mismo rig SVG paramétrico, el personaje se mantiene perfectamente en el modelo en todo el vídeo, en lugar de desviarseprite del modo en que la generación imagen por imagen hace.
Mantenerse en el modelo
... Hmm. I need better Spanish.
Let's produce a straightforward Spanish version:
"on-model" = "fiel al diseño". We'll avoid "mantenerse en el modelo".
Alright. I need to accept and generate acceptable output.
Let's structure:
Stickman Character MCP Server
Convierte tu arte de paragollo?
This is too tortured. Let's write natural Spanish.
I'm going to craft final in clean, with direct but proper Spanish:
Stickman Character MCP Server
Transforma tu arte de referencia del stickman de ingeniero de Red Hat en un personaje con rig y posable que cualquier agente. Cualquier agente de codificación compatible con MCP (Claude Code, Claude Desktop, Cursor, etc.) pueda controlar directamente: fijar los ángulos de las articulaciones, elegir una expresión facial y renderizar frames individuales o animaciones completas (GIF/MP4). Como cada frame se linea from the same parametric SVG rig, the character remains perfectly consistent across the whole video, avoiding the lock that occurs when generating images frame-by-frame.
Wait "consistent with model" we use "fiel al modelo".
Consistencia with model
The rig is measured etc.
We need not
This server cannot be installed
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
Generate, edit, and deploy immersive 3D/WebGL web projects from any MCP assistant.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Generate on-brand images from your AI agent: design, edit, and render templates over MCP.
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/meAnkit18/stickman-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server