Skip to main content
Glama
README.md
# ffdecmcp

MCP (Model Context Protocol) wrapper for **JPEXS Free Flash Decompiler (FFDec)** - expose SWF decompilation and analysis tools to AI assistants like Claude.

## Tools

### 1. `decompile_swf`
Decompile all ActionScript code from a SWF file to organized directory structure.

**Parameters:**
- `swf_path` (required): Absolute path to SWF file
- `output_dir` (required): Directory for decompiled scripts
- `timeout` (optional): Timeout in seconds (default: 60)

### 2. `extract_actionscript`
Extract specific ActionScript classes by name (AS3 only). Faster than full decompilation when you only need specific classes.

**Parameters:**
- `swf_path` (required): Absolute path to SWF file
- `class_names` (required): List of class names (e.g., `['com.example.Main']`)
- `output_dir` (required): Directory for extracted classes
- `timeout` (optional): Timeout in seconds (default: 60)

### 3. `list_symbols`
List all ActionScript classes and symbols in a SWF file. Great for exploring a SWF before full decompilation.

**Parameters:**
- `swf_path` (required): Absolute path to SWF file

**Returns:** Structured JSON with packages, classes, and total count

### 4. `extract_assets`
Extract images, sounds, fonts, shapes, movie clips, and binary data from SWF.

**Parameters:**
- `swf_path` (required): Absolute path to SWF file
- `output_dir` (required): Directory for extracted assets
- `asset_types` (optional): Types to extract - `image`, `sound`, `font`, `shape`, `movie`, `binaryData`, `all` (default: `["all"]`)
- `timeout` (optional): Timeout in seconds (default: 60)

### 5. `get_swf_metadata`
Extract SWF header information (dimensions, frame rate, compression, etc.). Fast and doesn't require decompilation.

**Parameters:**
- `swf_path` (required): Absolute path to SWF file

**Returns:** JSON with version, width, height, frame_rate, frame_count, compression

### 6. `deobfuscate`
Run FFDec's deobfuscation algorithms to remove obfuscation and anti-decompilation tricks.

**Parameters:**
- `swf_path` (required): Absolute path to obfuscated SWF
- `output_path` (required): Path for deobfuscated SWF
- `level` (optional): Deobfuscation level - `traps`, `deadcode`, `max` (default: `max`)
- `timeout` (optional): Timeout in seconds (default: 60)

## Quick Start

**Prerequisites:** Python 3.10+ and Java (for running the FFDec JAR).

### Claude Code

```bash
claude mcp add ffdecmcp -- uvx ffdecmcp
```

That's it. On first run, FFDec will be auto-downloaded if not already installed.

### Claude Desktop

Add to your config file (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, `%APPDATA%\Claude\claude_desktop_config.json` on Windows):

```json
{
  "mcpServers": {
    "ffdecmcp": {
      "command": "uvx",
      "args": ["ffdecmcp"]
    }
  }
}
```

### Standalone

```bash
# Just run it - FFDec will be auto-downloaded to ~/.ffdecmcp/ if needed
uvx ffdecmcp

# Or point to an existing FFDec installation
uvx ffdecmcp --ffdec-path /path/to/ffdec.jar
```

## Installation

No installation is required when using `uvx`. For a permanent install:

```bash
uv pip install ffdecmcp
# or
pip install ffdecmcp
```

### FFDec

FFDec is automatically downloaded on first run if not found. You can also install it manually.

The server finds FFDec in this order:

1. `--ffdec-path` CLI arg / `FFDEC_PATH` env var
2. Previously auto-downloaded JAR (`~/.ffdecmcp/ffdec.jar`)
3. Common install locations and PATH
5. Auto-download from GitHub

### CLI Options

```
ffdecmcp [--ffdec-path PATH] [--timeout SECONDS]
```

| Option | Env Var | Description |
|---|---|---|
| `--ffdec-path` | `FFDEC_PATH` | Path to FFDec (JAR, native binary, or WSL path) |
| `--timeout` | `FFDEC_TIMEOUT` | Default timeout in seconds (default: 60) |

CLI arguments take precedence over environment variables.

### Development

```bash
git clone https://github.com/sublimnl/ffdecmcp.git
cd ffdecmcp
uv pip install -e ".[dev]"
```

### Example Usage in Claude

```
You: Can you analyze this SWF file for me?
Path: C:\Users\foo\game.swf

Claude will:
1. Use get_swf_metadata to check dimensions, version, etc.
2. Use list_symbols to see what classes are present
3. Use decompile_swf to extract all ActionScript code
4. Analyze the decompiled code and provide insights
```

## References

- **FFDec**: https://github.com/jindrapetrik/jpexs-decompiler
- **FFDec CLI Docs**: https://github.com/jindrapetrik/jpexs-decompiler/wiki/Commandline-arguments
- **Model Context Protocol**: https://modelcontextprotocol.io
- **FastMCP**: https://github.com/jlowin/fastmcp

## License

MIT License - see LICENSE file for details

## Contributing

Contributions welcome! Please open an issue or PR on GitHub.

TDQS

A4.2/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct aspect of SWF analysis (metadata, symbols, deobfuscation, full decompilation, selective extraction, assets). No functional overlap, so an agent can easily choose the right tool.

Naming Consistency4/5

Most tools follow verb_noun pattern (e.g., decompile_swf, extract_assets). Only 'deobfuscate' deviates as a single verb, but it is still clear and consistent with the domain.

Tool Count5/5

6 tools cover the full SWF analysis workflow from metadata to full decompilation, well-balanced and neither sparse nor bloated.

Completeness5/5

The set covers all major SWF analysis needs: metadata, structure listing, deobfuscation, full code decompilation, selective class extraction, and asset extraction. No obvious gaps for standard reverse engineering tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues