Skip to main content
Glama
duaghwls

File Manage MCP Server

by duaghwls
README.md
# ๐Ÿ“‚ File Manage MCP Server

Windows์šฉ ๋กœ์ปฌ MCP ์„œ๋ฒ„๋กœ, LLM์ด ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

## โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

- **๋””๋ ‰ํ† ๋ฆฌ ๋ถ„์„**: ํŒŒ์ผ/ํด๋” ๋ชฉ๋ก ์กฐํšŒ, ๋‚ ์งœ ์ •๋ณด ์ถ”์ถœ
- **ํŒŒ์ผ ๋‚ด์šฉ ํ™•์ธ**: ํ…์ŠคํŠธ/์ฝ”๋“œ ํŒŒ์ผ ์Šค๋‹ˆํŽซ ์ฝ๊ธฐ (cp949/euc-kr ์ธ์ฝ”๋”ฉ ์ง€์›)
- **์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ**: EXIF ์ •๋ณด์—์„œ ์ดฌ์˜ ๋‚ ์งœ ์ถ”์ถœ
- **์ง€๋Šฅํ˜• ํŒŒ์ผ ๋ถ„์„**: ํ…์ŠคํŠธ ๋ถ„์„ ๋ฐ ์ด๋ฏธ์ง€ ๋ถ„์„์„ ํ†ตํ•œ ํŒŒ์ผ๋ช… ์ œ์•ˆ (LLM ์—ฐ๋™)
- **ํŒŒ์ผ ๊ทธ๋ฃนํ•‘**: ๊ด€๋ จ ํŒŒ์ผ ๋ถ„์„ ๋ฐ ์ž๋™ ๊ทธ๋ฃนํ•‘ ์ œ์•ˆ
- **ํŒŒ์ผ ์ž‘์—…**: ์ด๋™, ์ด๋ฆ„ ๋ณ€๊ฒฝ, ํด๋” ์ƒ์„ฑ, ์˜๋ฏธ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ํŒŒ์ผ๋ช… ์ •๋ฆฌ
- **์ผ๊ด„ ์ฒ˜๋ฆฌ**: ๋‚ ์งœ ์ ‘๋‘์‚ฌ ์ผ๊ด„ ์ถ”๊ฐ€, ๋‹ค์ค‘ ํŒŒ์ผ ๊ทธ๋ฃน ํด๋” ์ด๋™
- **์•ˆ์ „ ๊ธฐ๋Šฅ**: Dry Run ๋ชจ๋“œ, ์ƒŒ๋“œ๋ฐ•์Šค ์ œํ•œ, ์‹œ์Šคํ…œ ํด๋” ๋ณดํ˜ธ

## ๐Ÿ“‹ ํŒŒ์ผ ์ •๋ฆฌ ๊ทœ์น™

### 2๊ฐ€์ง€ ์ ˆ๋Œ€ ๊ทœ์น™
1. **5๋‹จ๊ณ„ ๊ทœ์น™**: ๋””๋ ‰ํ† ๋ฆฌ ๊นŠ์ด๋Š” ์ตœ๋Œ€ 5๋‹จ๊ณ„๊นŒ์ง€
2. **๋ฒˆํ˜ธ ์ฒด๊ณ„**: ํด๋”๋Š” `00~99` ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ (์˜ˆ: `01_Project`), `99`๋Š” Archive์šฉ

### ๋ช…๋ช… ๊ทœ์น™
- **ํด๋”**: `NN_์ด๋ฆ„` ํ˜•์‹ (์˜ˆ: `01_Business`, `02_Project`)
- **ํŒŒ์ผ**: `YYMMDD_ํŒŒ์ผ๋ช…` ํ˜•์‹ (์˜ˆ: `251202_ํšŒ์˜๋ก.docx`)
- **๋ฒ„์ „**: `_v1.0` ํ˜•์‹ (Final, ์ตœ์ตœ์ตœ์ข… ๊ธˆ์ง€!)

## ๐Ÿš€ ์„ค์น˜ ๋ฐ ์‹คํ–‰

### ์š”๊ตฌ ์‚ฌํ•ญ
- Windows 10/11
- Python 3.13+
- uv

### uv dependency ์„ค์น˜
   ```bash
   uv pip install -r requirements.txt
   ```


## โš™๏ธ Claude Desktop ์„ค์ •

### Claude Desktop ์„ค์ • (`claude_desktop_config.json`)

Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "file-organization-agent": {
      "command": "uv",
      "args": [
        "--directory",
        "{your_path}/FileManageMCP",
        "run",
        "python",
        "server.py"
      ]
    }
  }
}
```

## ๐Ÿ› ๏ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ

### ์„ค์ • ๋„๊ตฌ
| ๋„๊ตฌ | ์„ค๋ช… |
|------|------|
| `tool_set_dry_run` | Dry Run ๋ชจ๋“œ ์„ค์ • (๊ธฐ๋ณธ: ํ™œ์„ฑํ™”) |
| `tool_get_status` | ํ˜„์žฌ ์„ค์ • ์ƒํƒœ ํ™•์ธ |
| `tool_configure_workspace` | ์ž‘์—… ์˜์—ญ(์ƒŒ๋“œ๋ฐ•์Šค) ์„ค์ • |

### ๋ถ„์„ ๋„๊ตฌ (Read-Only)
| ๋„๊ตฌ | ์„ค๋ช… |
|------|------|
| `tool_list_directory` | ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์šฉ ์กฐํšŒ (๋‚ ์งœ ์ •๋ณด ํฌํ•จ) |
| `tool_read_file_snippet` | ํŒŒ์ผ ๋‚ด์šฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ |
| `tool_get_image_metadata` | ์ด๋ฏธ์ง€ EXIF ์ •๋ณด ์ถ”์ถœ |
| `tool_analyze_directory_structure` | ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๋ถ„์„ ๋ฐ ๋ฌธ์ œ์  ํŒŒ์•… |

### ๊ณ ๊ธ‰ ๋ถ„์„ ๋ฐ ์ •๋ฆฌ ๋„๊ตฌ
| ๋„๊ตฌ | ์„ค๋ช… |
|------|------|
| `tool_find_files_needing_rename` | ์˜๋ฏธ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ํŒŒ์ผ๋ช…์„ ๊ฐ€์ง„ ํŒŒ์ผ ์ฐพ๊ธฐ (์ •๋ฆฌ ๋Œ€์ƒ ๋ฐœ๊ตด) |
| `tool_suggest_filename_from_content` | ํŒŒ์ผ ๋‚ด์šฉ(ํ…์ŠคํŠธ/๋ฌธ์„œ) ๋ถ„์„์šฉ ์š”์•ฝ ์ •๋ณด ๋ฐ˜ํ™˜ |
| `tool_get_image_for_analysis` | ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋ถ„์„์šฉ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜ (LLM Vision ์—ฐ๋™) |
| `tool_analyze_file_relationships` | ํŒŒ์ผ ๊ด€๊ณ„ ๋ถ„์„ ๋ฐ ๊ทธ๋ฃนํ•‘ ์ œ์•ˆ |

### ์•ก์…˜ ๋„๊ตฌ (Dry Run ์ง€์›)
| ๋„๊ตฌ | ์„ค๋ช… |
|------|------|
| `tool_move_file` | ํŒŒ์ผ ์ด๋™ |
| `tool_rename_file` | ํŒŒ์ผ/ํด๋” ์ด๋ฆ„ ๋ณ€๊ฒฝ |
| `tool_rename_with_suggestion` | LLM ์ œ์•ˆ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝ (๊ณ ๊ธ‰) |
| `tool_create_folder` | ์ƒˆ ํด๋” ์ƒ์„ฑ |
| `tool_group_files_into_folder` | ๊ด€๋ จ ํŒŒ์ผ๋“ค์„ ์ƒˆ ํด๋”๋กœ ์ผ๊ด„ ์ด๋™ (๊ณ ๊ธ‰) |
| `tool_batch_rename_with_date` | ๋‚ ์งœ ์ ‘๋‘์‚ฌ ์ผ๊ด„ ์ถ”๊ฐ€ |

## ๐Ÿ”’ ์•ˆ์ „ ๊ธฐ๋Šฅ

### Dry Run ๋ชจ๋“œ (๊ธฐ๋ณธ ํ™œ์„ฑํ™”)
- ๋ชจ๋“  ํŒŒ์ผ ์ˆ˜์ • ์ž‘์—…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๋งŒ ์ˆ˜ํ–‰
- ์‹ค์ œ ๋ณ€๊ฒฝ ์ „ ์˜ˆ์ƒ ๊ฒฐ๊ณผ ํ™•์ธ ๊ฐ€๋Šฅ
- `tool_set_dry_run(false)` ํ˜ธ์ถœ๋กœ ์‹ค์ œ ๋ชจ๋“œ ์ „ํ™˜

### ์ƒŒ๋“œ๋ฐ•์Šค ์ œํ•œ
- `tool_configure_workspace`๋กœ ์ž‘์—… ์˜์—ญ ์„ค์ •
- ์„ค์ •๋œ ์˜์—ญ ์™ธ๋ถ€ ์ ‘๊ทผ ์ฐจ๋‹จ

### ์‹œ์Šคํ…œ ํด๋” ๋ณดํ˜ธ
์ ‘๊ทผ ์ฐจ๋‹จ๋˜๋Š” ๊ฒฝ๋กœ:
- `C:\Windows`
- `C:\Program Files`
- `C:\Program Files (x86)`
- `.git`, `node_modules` ๋“ฑ

## ๐Ÿ“– ์‚ฌ์šฉ ์˜ˆ์‹œ

### ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ

```
User: D:\Downloads ํด๋”๋ฅผ ์ •๋ฆฌํ•ด์ค˜

AI: 
1. ๋จผ์ € ์ž‘์—… ์˜์—ญ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
   โ†’ tool_configure_workspace("D:\\Downloads")

2. ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
   โ†’ tool_get_status()  # Dry Run ํ™œ์„ฑํ™” ํ™•์ธ

3. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.
   โ†’ tool_analyze_directory_structure("D:\\Downloads")

4. ์˜๋ฏธ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ํŒŒ์ผ๋ช… ํŒŒ์ผ๋“ค์„ ์ฐพ์•„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
   โ†’ tool_find_files_needing_rename("D:\\Downloads")
   โ†’ tool_suggest_filename_from_content(...) ๋˜๋Š” tool_get_image_for_analysis(...)
   โ†’ tool_rename_with_suggestion(...)

5. ๋‚จ์€ ํŒŒ์ผ๋“ค์„ ์ฃผ์ œ๋ณ„๋กœ ๊ทธ๋ฃนํ•‘ํ•ฉ๋‹ˆ๋‹ค.
   โ†’ tool_analyze_file_relationships("D:\\Downloads")
   โ†’ tool_group_files_into_folder("D:\\Downloads", "01_References", ["file1.txt", "file2.pdf"])

6. ๊ฒฐ๊ณผ ํ™•์ธ ํ›„ ์‹ค์ œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
   โ†’ tool_set_dry_run(false)
   โ†’ (์œ„ ์ž‘์—… ์‹ค์ œ ์ˆ˜ํ–‰)
```


## ๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

```
FileManageMCP/
โ”œโ”€โ”€ server.py          # MCP ์„œ๋ฒ„ ์ง„์ž…์  (FastMCP)
โ”œโ”€โ”€ tools.py           # MCP ๋„๊ตฌ ํ•จ์ˆ˜ ๊ตฌํ˜„
โ”œโ”€โ”€ utils.py           # ์œ ํ‹ธ๋ฆฌํ‹ฐ (๊ฒฝ๋กœ ๊ฒ€์ฆ, ์ธ์ฝ”๋”ฉ ์ฒ˜๋ฆฌ)
โ”œโ”€โ”€ requirements.txt   # Python ์˜์กด์„ฑ
โ””โ”€โ”€ README.md          # ์ด ๋ฌธ์„œ
```

## ๐Ÿ“ธ ์‹คํ–‰ ์˜ˆ์‹œ
![FileManageMCP Result](FileManageMCP_Result.jpg)

## ๐Ÿ“œ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.