Stickman Character MCP Server
Enables MCP-compatible coding agents to control a posable, rigged stickman character by setting joint angles and facial expressions, and to render still frames or full animations as SVG, PNG, GIF, or MP4.
README
Stickman Character MCP Server
Turns your Red-Hat-engineer stickman reference art into a posable, rigged character that any MCP-compatible coding agent (Claude Code, Claude Desktop, Cursor, etc.) can control directly — set joint angles, pick a facial expression, and render single frames or full animations (GIF/MP4). Because every frame is generated from the same parametric SVG rig, the character stays perfectly on-model across an entire video instead of drifting the way frame-by-frame image generation does.
Staying on-model
The rig is measured directly off the reference sheet rather than approximated, so a render lines up with the source art almost pixel for pixel:
- Proportions were taken from the front-view reference (1024px source, head outer radius 121px) and scaled by 0.546 onto the 400x520 canvas — spine 215px, upper/fore arm 108/120, upper/lower leg 126/127, limb stroke ~19px, head centre 133px above the shoulder fork.
- The fedora is a vector trace of the reference hat, not a hand-built
approximation. It ships as normalised SVG paths (
HAT_PATHSinrig.py) expressed in head-radius units and drawn viatranslate(head) scale(head_radius), so it rides the head through any tilt and keeps the exact brim sweep, crown pinch and band of the original. - Palette is sampled from the art:
#D51918bright red,#A01513mid,#7E1212shadow,#C2C3C5face shading,#D2D3D5ground shadow. - The face matches the reference conventions — the neutral face is two solid black ovals and no mouth. White-eyeball-and-pupil eyes are used only for happy/excited/surprised, and angry uses slanted wedges with gritted teeth, exactly as in the reference expression sheets.
hat_color is still fully parametric: pass any hex and the mid and shadow
tones are derived from it using the reference's own 1.0 / 0.742 / 0.592 ramp.
What's inside
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.toml
Install
cd stickman_mcp
python3 -m venv venv
source venv/bin/activate
pip install -e .
This pulls in mcp, cairosvg (SVG→PNG rendering) and pillow (GIF
export). GIF/PNG-sequence export needs no extra system deps; MP4 export
requires ffmpeg to be installed and on your PATH.
Register it as an MCP server
Claude Desktop / Claude Code — add to your MCP config
(~/Library/Application Support/Claude/claude_desktop_config.json on
macOS, or the equivalent Claude Code config):
{
"mcpServers": {
"stickman": {
"command": "/absolute/path/to/stickman_mcp/venv/bin/python",
"args": ["-m", "stickman_mcp.server"],
"cwd": "/absolute/path/to/stickman_mcp"
}
}
}
Or run it standalone over stdio to test:
python -m stickman_mcp.server
Tools exposed
| Tool | What it does |
|---|---|
list_pose_presets |
Lists built-in poses and their full definitions, so a pose can be copied and tweaked |
list_expressions |
Lists built-in facial expressions |
list_joints |
Lists every controllable joint and its default angle, for hand-authored poses |
render_pose |
Renders one frame — a preset name and/or explicit joint overrides, an expression, optional hands/prop. Returns a PNG (or raw SVG). |
render_animation |
Renders a full keyframe animation (poses + expressions + hold/transition timings) to GIF, MP4, or a PNG sequence. |
render_walk_cycle |
Convenience: N-step looping walk cycle. |
render_run_cycle |
Convenience: N-step looping run cycle. |
Joints (all angles in degrees, 0 = straight down, + = clockwise)
l_shoulder, l_elbow, r_shoulder, r_elbow, l_hip, l_knee,
r_hip, r_knee, neck (head tilt), spine (torso lean),
hip_shift (px, horizontal), body_lift (px, vertical, negative = up).
l_ is the character's left, i.e. the viewer's right. Mirrored poses need
opposite-signed knee angles (l_knee=86, r_knee=-86) so both shins bend
the same way.
Style keys (per pose, not interpolated — they snap at the keyframe)
hands—"blob"(default),"open", or"fist". Also accepts a dict for per-side control:{"r": "open"}leaves the other hand a blob.front_arm—"l","r"or"both", drawing that arm over the head. Needed whenever a hand lands on the face (facepalm,thinking_pose), since the hat brim is ~1.5x the head width and would otherwise cover it.prop— currently"chair", drawn behind the character forsit.
Poses
idle, 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.
Expressions
neutral, happy, excited, sad, angry, surprised, thinking,
wink, talking, calm.
Example: a coding agent building a short clip
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",
)
An agent can also skip presets entirely and hand-author a pose:
render_pose(
joints={"r_shoulder": -90, "r_elbow": 20, "neck": -10},
expression="excited",
)
Transitions use smoothstep easing, so poses ease in and out rather than sliding linearly between keyframes.
Notes / next steps
- The rig covers front-facing 2D poses only (matching most of the reference set). A left/right-facing profile variant — for the side-profile and walking-toward-camera references — is the natural next addition: the skeleton already supports it, but the head, face and traced hat would each need a profile variant.
sitnow draws a simple wooden chair viaprop="chair". Other props would slot into_chair_svg's pattern inrig.py.render_animationkeyframes can be produced programmatically for a "character walks across screen" shot: sweephip_shiftwhile alternatingwalk_1/walk_2.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。