Skip to main content
Glama

L2 Modding MCP

MCP Server for Lineage 2 / Unreal Engine 2.5 asset modding — 25 tools. Extract, modify, repackage textures (.utx), generate procedural meshes (.usx), parse animations (.ukx), sounds (.uax), and maps (.unr).

Features

Textures

  • Extract/inspect/import textures from .utx packages

  • Codec: DXT1/DXT3/DXT5/P8/RGBA8/RGB8/G16 (decode + encode)

  • Batch process: grayscale, invert, brightness, contrast, resize, blur, sharpen

  • Batch import: folder of PNGs → .utx in one step

  • Normal map, AO map, specular map generation

  • Texture atlas builder (grid packing)

  • PBR channel packer (metallic/roughness/AO/height → RGBA)

3D Meshes

  • Procedural castle generator (towers, walls, battlements, gate, keep, floor)

  • StaticMesh serializer for .usx packages

  • Export to OBJ and FBX ASCII

  • Import from OBJ back into the pipeline

  • LOD generator (vertex decimation, LOD0–LOD3)

  • Collision mesh generator (box, cylinder)

  • Procedural heightmap terrain (hills, mountains, plains, island, noise)

Animations (.ukx)

  • Parse AnimationSequence data (frames, bones, tracks)

  • Export to BVH format (Blender/Maya compatible)

Sounds (.uax)

  • List sound assets

  • Extract sounds to WAV (PCM and embedded WAV)

Maps (.unr)

  • Parse level data: brushes, static meshes, lights, player starts

Package Management

  • Package browser: scan directories for mesh↔texture cross-references

  • Package optimizer: remove dead exports, reduce size

  • Package comparator: diff two packages

Related MCP server: soft-ue-cli

Installation

pip install -e .

Usage with opencode

Add to opencode.json:

{
  "mcp": {
    "l2-modding": {
      "type": "local",
      "command": ["python", "-m", "l2_mcp.server"],
      "enabled": true
    }
  }
}

MCP Tools (25)

Textures

Tool

Description

l2_list_package

List all assets in .utx/.usx/.ukx

l2_list_names

List name table entries

l2_texture_info

Detailed texture info (format, mips, palette)

l2_extract_texture

Extract single texture to PNG

l2_extract_all_textures

Extract all textures to directory

l2_import_texture

Replace texture with PNG (repacks .utx)

l2_batch_process

Batch transform (grayscale, invert, etc.)

l2_batch_import_textures

Folder of PNGs → .utx

l2_gen_normal_map

Generate normal/AO/specular map

l2_build_atlas

Pack textures into atlas grid

l2_pack_pbr

Pack metallic/roughness/AO/height → RGBA

Meshes & Level Design

Tool

Description

l2_create_castle

Generate procedural 3D castle

l2_generate_textures

Generate stone/roof/floor/gate textures

l2_create_usx_package

Export meshes to .usx

l2_export_obj

Export meshes to OBJ or FBX

l2_import_obj

Import OBJ → mesh pipeline

l2_generate_lods

Generate LOD0–LOD3 by decimation

l2_gen_collision

Generate collision mesh (box/cylinder)

l2_gen_terrain

Procedural heightmap terrain

Animations

Tool

Description

l2_animation_info

List animations in .ukx

l2_export_animation

Export animation to BVH

Sounds

Tool

Description

l2_list_sounds

List sounds in .uax

l2_extract_sound

Extract sound to WAV

l2_extract_all_sounds

Extract all sounds to WAV

Package Management

Tool

Description

l2_compare_packages

Diff two packages

l2_scan_directory

Scan L2 folder for mesh↔texture refs

l2_optimize_package

Strip dead exports, reduce size

l2_parse_map

Read .unr maps (brushes, actors, lights)

Supported Texture Formats

ID

Format

Description

0

P8

256-color paletted

1

RGBA8

32-bit RGBA

3

DXT1/BC1

4 bpp, optional 1-bit alpha

4

RGB8

24-bit RGB

5

DXT3/BC2

8 bpp, explicit alpha

6

DXT5/BC3

8 bpp, interpolated alpha

B

G16

16-bit grayscale

Project Structure

src/l2_mcp/
├── server.py          # MCP server (25 tools)
└── upk/
    ├── reader.py      # Binary reader (compact indices, GUIDs)
    ├── package.py     # UPK parser (.utx/.usx/.ukx) + serializer
    ├── texture.py     # DXT codec + texture decode/encode
    ├── writer.py      # Package rebuilder / repacker
    ├── mesh.py        # StaticMesh serializer + primitives
    ├── castle.py      # Procedural castle generator
    ├── obj_io.py      # OBJ/FBX export
    ├── obj_import.py  # OBJ import
    ├── animation.py   # .ukx parser + BVH export
    ├── normal_map.py  # Normal/AO/specular map generator
    ├── batch_builder.py # Batch import + heightmap terrain
    ├── lod.py         # LOD generator + collision mesh
    ├── browser.py     # Package scanner + optimizer
    ├── atlas.py       # Texture atlas + PBR packer
    ├── sound.py       # .uax sound extractor
    └── unr.py         # .unr map parser

License

MIT

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

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/Hysteria-xyz/l2-modding-mcp'

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