Stickman Character MCP Server

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.

Category
访问服务器

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_PATHS in rig.py) expressed in head-radius units and drawn via translate(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: #D51918 bright red, #A01513 mid, #7E1212 shadow, #C2C3C5 face shading, #D2D3D5 ground 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 for sit.

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.
  • sit now draws a simple wooden chair via prop="chair". Other props would slot into _chair_svg's pattern in rig.py.
  • render_animation keyframes can be produced programmatically for a "character walks across screen" shot: sweep hip_shift while alternating walk_1 / walk_2.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选