Skip to main content
Glama
README.md
# magika-mcp

MCP server for [Google Magika](https://github.com/google/magika) — AI-powered file type detection.

Magika uses a deep learning model to identify file types from their content, not just extensions. This MCP server makes Magika's capabilities available to any MCP client (Claude Code, Claude Desktop, etc.).

## Quick Start

Add to your MCP client config:

```json
{
  "mcpServers": {
    "magika": {
      "command": "npx",
      "args": ["-y", "magika-mcp"]
    }
  }
}
```

For **Claude Code**, add it with:

```bash
claude mcp add magika -- npx -y magika-mcp
```

## Tools

### `identify_file`
Identify a single file's content type.

**Input:** `path` (string) — file path
**Output:** Enriched result with label, MIME type, group, description, extensions, confidence score, is_text flag.

### `identify_files`
Batch-identify multiple files.

**Input:** `paths` (string[]) — array of file paths
**Output:** Array of enriched results.

### `identify_content`
Identify content from raw base64-encoded bytes.

**Input:** `content` (string) — base64-encoded file content
**Output:** Enriched result.

### `identify_directory`
Recursively scan a directory and identify all files.

**Input:**
- `path` (string) — directory path
- `recursive` (boolean, default: true) — scan recursively
- `limit` (number, default: 1000) — max files to process

**Output:** Array of enriched results with file paths.

### `get_content_type_info`
Look up metadata for a known content type label (no file analysis).

**Input:** `label` (string) — content type label (e.g., "python", "pdf", "jpeg")
**Output:** MIME type, group, description, extensions, is_text.

### `list_supported_types`
List all content types Magika can detect.

**Input:** `group` (string, optional) — filter by group (e.g., "code", "image", "document", "archive")
**Output:** Array of content types with metadata.

## Example Output

```json
{
  "path": "/path/to/file.py",
  "label": "python",
  "mime_type": "text/x-python",
  "group": "code",
  "description": "Python source",
  "extensions": ["py", "pyi"],
  "is_text": true,
  "score": 0.997,
  "overwrite_reason": "none"
}
```

## How It Works

- Uses `MagikaNode` from the `magika` npm package (TensorFlow.js) for classification
- Enriches results with a bundled content types knowledge base (MIME types, groups, descriptions, extensions)
- The model (~5MB) downloads automatically on first use and is cached by TensorFlow.js
- Lazy initialization — model loads on first tool call, not at server startup

## Requirements

- Node.js >= 18

## License

MIT