Skip to main content
Glama
dewgod07-a11y

Greenfinger MCP Server

README.md
# ๐ŸŒฑ ๊ทธ๋ฆฐํ•‘๊ฑฐ MCP ์„œ๋ฒ„

> ์‹๋ฌผ ๋ณ‘ํ•ด์ถฉ ์ง„๋‹จยท์‹๋ณ„ ยท ์‹๋ฌผ ์ถ”์ฒœ ยท ์ •์› ๋ ˆ์ด์•„์›ƒ ์„ค๊ณ„ ยท ํ™”๋ถ„ ๊ด€๋ฆฌ ยท ๊ด€๋ฆฌ ์ผ์ •ยท์•Œ๋ฆผ ยท ์›์˜ˆ ์ž์žฌ ์•ˆ๋‚ด
> ์นด์นด์˜ค PlayMCP ๋“ฑ๋ก์šฉ MCP ์„œ๋ฒ„ (๋‚˜๋ฌด์˜์‚ฌ MCP์™€ ๋™์ผ ๊ตฌ์กฐ ์žฌ์‚ฌ์šฉ)

---

## ๐Ÿ“ ํŒŒ์ผ ๊ตฌ์กฐ

```
garden_doc_mcp/
โ”‚
โ”œโ”€โ”€ server.py              โ† ๋กœ์ปฌ ์‹คํ–‰ ์ง„์ž…์  (stdio)
โ”œโ”€โ”€ main.py                 โ† ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ ์ง„์ž…์  (streamable-http, uvicorn main:app)
โ”œโ”€โ”€ requirements.txt        โ† ์„ค์น˜ํ•  ํŒจํ‚ค์ง€ ๋ชฉ๋ก
โ”œโ”€โ”€ .env.example             โ† ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์˜ˆ์‹œ (๋ณต์‚ฌํ•ด์„œ .env๋กœ ์‚ฌ์šฉ)
โ”œโ”€โ”€ Dockerfile               โ† ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ์šฉ
โ”‚
โ”œโ”€โ”€ tools/                   โ† Tool ๊ตฌํ˜„ ํŒŒ์ผ 5๊ฐœ (Tool 13๊ฐœ)
โ”‚   โ”œโ”€โ”€ diagnosis.py         โ† ๐Ÿ”ฌ ๋ณ‘ํ•ด์ถฉ ์ง„๋‹จยท์‹๋ณ„ (3๊ฐœ)
โ”‚   โ”œโ”€โ”€ design.py             โ† ๐ŸŒฑ ์‹๋ฌผ ์ถ”์ฒœยท์ •์› ์„ค๊ณ„ยท๊ด€๋ฆฌ ๊ฐ€์ด๋“œ (4๊ฐœ)
โ”‚   โ”œโ”€โ”€ schedule.py           โ† ๐Ÿ“… ๊ด€๋ฆฌ ์ผ์ •ยท์•Œ๋ฆผ (2๊ฐœ, ์นด์นด์˜ค ์—ฐ๋™)
โ”‚   โ”œโ”€โ”€ pots.py                โ† ๐Ÿชด ํ™”๋ถ„ ๊ด€๋ฆฌ (3๊ฐœ, ํ™”๋ถ„ ์ง„๋‹จ ํฌํ•จ)
โ”‚   โ””โ”€โ”€ materials.py          โ† ๐Ÿงฐ ์›์˜ˆ ์ž์žฌ ์•ˆ๋‚ด (1๊ฐœ)
โ”‚
โ”œโ”€โ”€ config/
โ”‚   โ””โ”€โ”€ settings.py           โ† ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋กœ๋“œ (API ํ‚ค ๋“ฑ)
โ”‚
โ””โ”€โ”€ data/
    โ””โ”€โ”€ plant_db.py           โ† ์‹๋ฌผยทํ™”๋ถ„ยท๊ณ„์ ˆ ์ž‘์—…ยท์ž์žฌ ์ž์ฒด ์ง€์‹ ๋ฒ ์ด์Šค
```

---

## Tool ๋ชฉ๋ก (13๊ฐœ)

| # | Tool | ์„ค๋ช… | ์—ฐ๋™ |
|---|------|------|------|
| 1 | `diagnose_plant_disease` | ์ฆ์ƒ ํ…์ŠคํŠธ๋กœ ๋ณ‘ํ•ด์ถฉ ์ง„๋‹จ | Claude AI |
| 2 | `diagnose_plant_by_image` | ์‚ฌ์ง„ URL๋กœ ๋ณ‘ํ•ด์ถฉ ์ง„๋‹จ (์ข… ์‹๋ณ„ ํฌํ•จ) | Claude AI (Vision) |
| 3 | `identify_plant_by_image` | ์‚ฌ์ง„ URL๋กœ ๋ณ‘ํ•ด์ถฉ ์ง„๋‹จ ์—†์ด ์‹๋ฌผ ์ข…๋งŒ ์‹๋ณ„ | Claude AI (Vision) |
| 4 | `recommend_plants` | ๊ณต๊ฐ„ยทํ–‡๋น›ยท๋ชฉ์  ์กฐ๊ฑด์œผ๋กœ ์‹๋ฌผ ์ถ”์ฒœ | ์ž์ฒด DB |
| 5 | `design_garden_layout` | ๊ณต๊ฐ„ ์กฐ๊ฑด ๊ธฐ๋ฐ˜ ์ •์› ๋ ˆ์ด์•„์›ƒ ์„ค๊ณ„ | Claude AI |
| 6 | `get_plant_care_guide` | ์‹๋ฌผ๋ณ„ ๋ฌผ์ฃผ๊ธฐยทํ–‡๋น›ยท๋น„๋ฃŒ ๊ฐ€์ด๋“œ | ์ž์ฒด DB |
| 7 | `get_seasonal_tips` | ์›”๋ณ„ ๊ณ„์ ˆ ์›์˜ˆ ์ž‘์—… ์•ˆ๋‚ด | ์ž์ฒด DB |
| 8 | `create_garden_schedule` | ๊ด€๋ฆฌ ์ผ์ • ๋“ฑ๋ก(๋ฌผ์ฃผ๊ธฐ๋Š” ๊ณ„์ ˆ๋ณ„ ๊ฐ„๊ฒฉ ์ž๋™ ๋ฐ˜๋ณต) + ์นด์นด์˜ค ์บ˜๋ฆฐ๋” ์—ฐ๋™ ์ œ์•ˆ | ์นด์นด์˜ค ์บ˜๋ฆฐ๋” |
| 9 | `send_garden_reminder` | ๊ด€๋ฆฌ ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ + ์นด์นด์˜คํ†ก ๋ฐœ์†ก ์ œ์•ˆ | ์นด์นด์˜คํ†ก |
| 10 | `recommend_pot_size` | ์‹๋ฌผ์— ๋งž๋Š” ํ™”๋ถ„ ์žฌ์งˆยท์‚ฌ์ด์ฆˆยท๋ถ„๊ฐˆ์ด ์‹œ๊ธฐ ์ถ”์ฒœ | ์ž์ฒด DB |
| 11 | `diagnose_pot_condition` | ํ™”๋ถ„ ์ฆ์ƒ(๋ฟŒ๋ฆฌ ๋…ธ์ถœยท๋ฐฐ์ˆ˜ ๋ถˆ๋Ÿ‰ ๋“ฑ) ๊ธฐ๋ฐ˜ ๋ถ„๊ฐˆ์ด ์‹œ๊ธ‰๋„ ์ง„๋‹จ | Claude AI |
| 12 | `manage_my_pots` | ๋‚ด๊ฐ€ ํ‚ค์šฐ๋Š” ํ™”๋ถ„ ๋“ฑ๋ก/๋ชฉ๋ก์กฐํšŒ/์‚ญ์ œ | ์ž์ฒด DB |
| 13 | `search_garden_materials` | ํ† ์–‘ยท๋น„๋ฃŒยทํ™”๋ถ„ยท๋„๊ตฌ ์ž์žฌ ์•ˆ๋‚ด | ์ž์ฒด DB |

---

## โšก ๋น ๋ฅธ ์‹œ์ž‘

### 1๋‹จ๊ณ„ โ€” ํŒจํ‚ค์ง€ ์„ค์น˜
```bash
pip install -r requirements.txt
```

### 2๋‹จ๊ณ„ โ€” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํ™•์ธ
`.env` ํŒŒ์ผ์— ์ด๋ฏธ ๋‚˜๋ฌด์˜์‚ฌ MCP์™€ ๋™์ผํ•œ `ANTHROPIC_API_KEY`๊ฐ€ ์ฑ„์›Œ์ ธ ์žˆ์–ด
๋ณ‘ํ•ด์ถฉ ์ง„๋‹จยท์‹๋ณ„(1, 2, 3), ์ •์› ์„ค๊ณ„(5), ํ™”๋ถ„ ์ง„๋‹จ(11)์ด ๋ฐ”๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ Tool์€ ์™ธ๋ถ€ API ํ‚ค๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.

### 3๋‹จ๊ณ„ โ€” ๋กœ์ปฌ ์‹คํ–‰ ํ…Œ์ŠคํŠธ
```bash
python server.py
```

### 4๋‹จ๊ณ„ โ€” PlayMCP ๋“ฑ๋ก
1. [playmcp.kakao.com](https://playmcp.kakao.com) ์ ‘์† โ†’ ์นด์นด์˜ค ๊ณ„์ • ๋กœ๊ทธ์ธ
2. `MCP ์„œ๋ฒ„ ๋“ฑ๋ก` ํด๋ฆญ โ†’ ์„œ๋ฒ„ URL ์ž…๋ ฅ (ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ ํ›„ URL)
3. ๋„๊ตฌํ•จ์—์„œ `์นด์นด์˜ค ํ†ก์บ˜๋ฆฐ๋” MCP`, `์นด์นด์˜คํ†ก ๋‚˜์™€์˜์ฑ„ํŒ… MCP`๋ฅผ ํ•จ๊ป˜ ํ™œ์„ฑํ™”
   (7, 8๋ฒˆ Tool์ด ๋ฐ˜ํ™˜ํ•˜๋Š” `calendar_event_suggestion` / `chat_message_suggestion` ๊ฐ’์„
   AI๊ฐ€ ๊ทธ๋Œ€๋กœ ๋„˜๊ฒจ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค)
4. AI ์ฑ„ํŒ…์ฐฝ์—์„œ ํ…Œ์ŠคํŠธ โ†’ "๋ชฌ์Šคํ…Œ๋ผ ์žŽ์ด ๋…ธ๋ž—๊ฒŒ ๋ณ€ํ–ˆ์–ด์š”" ์ž…๋ ฅ

---

## โ˜๏ธ ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ (์˜ˆ์‹œ)

```bash
docker build -t greenfinger-mcp .
docker run -p 8000:8000 --env-file .env greenfinger-mcp
```

---

## ๐Ÿ’ฌ ํ…Œ์ŠคํŠธ ๋Œ€ํ™” ์˜ˆ์‹œ

```
"๋ชฌ์Šคํ…Œ๋ผ ์žŽ ๋์ด ๊ฐˆ์ƒ‰์œผ๋กœ ๋งˆ๋ฅด๋Š”๋ฐ ์™œ ๊ทธ๋Ÿฐ๊ฐ€์š”?"
โ†’ diagnose_plant_disease ์ž๋™ ์‹คํ–‰

"์ด ์‹๋ฌผ ์‚ฌ์ง„์ธ๋ฐ ์ด๋ฆ„์ด ๋ญ์˜ˆ์š”?" (์‚ฌ์ง„ URL๋งŒ ์ œ๊ณต, ์ฆ์ƒ ์–ธ๊ธ‰ ์—†์Œ)
โ†’ identify_plant_by_image ์ž๋™ ์‹คํ–‰ (๋ณ‘ํ•ด์ถฉ ์ง„๋‹จ์€ ํ•˜์ง€ ์•Š๊ณ  ์ข…๋งŒ ์‹๋ณ„)

"๋ฒ ๋ž€๋‹ค 2ํ‰, ๋ฐ˜์–‘์ง€์ธ๋ฐ ์–ด์šธ๋ฆฌ๋Š” ์‹๋ฌผ ์ถ”์ฒœํ•ด์ค˜"
โ†’ recommend_plants ์ž๋™ ์‹คํ–‰

"3ํ‰ ์˜ฅ์ƒ์— ํ…ƒ๋ฐญํ˜• ์ •์› ์„ค๊ณ„ํ•ด์ค˜"
โ†’ design_garden_layout ์ž๋™ ์‹คํ–‰

"๋ฐฉ์šธํ† ๋งˆํ†  ๋ฌผ์ฃผ๊ธฐ ๋‹ค์Œ ์ผ์ •์œผ๋กœ ๋“ฑ๋กํ•ด์ค˜"
โ†’ care_type="๋ฌผ์ฃผ๊ธฐ"์ด๊ณ  repeat_every_days๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ๊ณ„์ ˆ ๊ธฐ์ค€
   ์ž์ฒด DB(watering_interval_days)์—์„œ ๊ฐ„๊ฒฉ์„ ์ž๋™ ๊ณ„์‚ฐํ•ด ๋ฐ˜๋ณต ๋“ฑ๋ก

"๋ฐ”์งˆ ๋ฌผ์ฃผ๊ธฐ 3์ผ๋งˆ๋‹ค ๋ฐ˜๋ณต ์•Œ๋ฆผ ๊ฑธ์–ด์ค˜"
โ†’ repeat_every_days=3์„ ์ง์ ‘ ์ง€์ •ํ•˜๋ฉด ์ž๋™๊ณ„์‚ฐ ๋Œ€์‹  ๊ทธ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ

"์šฐ๋ฆฌ์ง‘ ๋ชฌ์Šคํ…Œ๋ผ ํ™”๋ถ„ 15cm์ธ๋ฐ ๋ถ„๊ฐˆ์ด ํ•„์š”ํ•ด?"
โ†’ recommend_pot_size ์ž๋™ ์‹คํ–‰

"ํ™”๋ถ„ ๋ฐฐ์ˆ˜๊ตฌ๋กœ ๋ฟŒ๋ฆฌ๊ฐ€ ์‚์ ธ๋‚˜์˜ค๊ณ  ๋ฌผ์ด ๊ฒ‰์œผ๋กœ ํ˜๋Ÿฌ๋‚ด๋ ค์š”"
โ†’ diagnose_pot_condition ์ž๋™ ์‹คํ–‰ (๋ถ„๊ฐˆ์ด ์‹œ๊ธ‰๋„ยท์›์ธ ์ง„๋‹จ)

"๊ฑฐ์‹ค ๋ชฌ์Šคํ…Œ๋ผ ํ™”๋ถ„ ๋“ฑ๋กํ•ด์ค˜"
โ†’ manage_my_pots(action="register") ์ž๋™ ์‹คํ–‰
```

---

## ๐Ÿ“Œ ์ฐธ๊ณ 

- ๋‚˜๋ฌด์˜์‚ฌ MCP(`tree_doctor_mcp`)์™€ ๋™์ผํ•œ ์•„ํ‚คํ…์ฒ˜(FastMCP + Claude API + tools/config/data ๊ตฌ์กฐ)๋ฅผ
  ์žฌ์‚ฌ์šฉํ•ด ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ์‹๋ฌผยทํ™”๋ถ„ยท๊ณ„์ ˆยท์ž์žฌ ์ •๋ณด๋Š” ์ž์ฒด DB(`data/plant_db.py`)๋กœ ๊ตฌ์ถ•ํ•ด ์™ธ๋ถ€ API ์˜์กด์„ ์ตœ์†Œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ์กฐ๊ฒฝ์—…์ฒด ๊ฒ€์ƒ‰(์นด์นด์˜ค๋งต ์—ฐ๋™) ๊ธฐ๋Šฅ์€ ์ œ์™ธํ–ˆ์Šต๋‹ˆ๋‹ค โ€” ํ™ˆ๊ฐ€๋“œ๋‹(ํ™”๋ถ„ยท๋ฒ ๋ž€๋‹คยท์‹ค๋‚ด) ์ค‘์‹ฌ์œผ๋กœ ๋ฒ”์œ„๋ฅผ ์ขํ˜”์Šต๋‹ˆ๋‹ค.
- ๋ฌผ์ฃผ๊ธฐ๋Š” ๊ณ ์ • ์ฃผ๊ธฐ๋งŒ์œผ๋กœ๋Š” ์ •ํ™•ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ํ•œ๊ณ„๋ฅผ ์ธ์ •ํ•˜๊ณ , ๊ณ„์ ˆ๋ณ„ ์ž๋™ ๊ฐ„๊ฒฉ ์ถ”์ฒœ + "๊ณ ์ •
  ์•Œ๋ฆผ์€ ์ฐธ๊ณ ์šฉ, ํ™ ์ƒํƒœ๋ฅผ ๋จผ์ € ํ™•์ธ" ๋ฌธ๊ตฌ๋ฅผ ํ•ญ์ƒ ํฌํ•จํ•ด ๊ณผ์Šตยท๊ฑด์กฐ ์˜คํŒ ์œ„ํ—˜์„ ์ค„์˜€์Šต๋‹ˆ๋‹ค.
  (์‚ฌ์ง„์œผ๋กœ ์‹ค์ œ ํ† ์–‘ ์ˆ˜๋ถ„์„ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ์‹์€ ์กฐ๋ช…ยทํ‘œ๋ฉด ํ™๋งŒ ๋ณด์ด๋Š” ํ•œ๊ณ„๋กœ ์ฑ„ํƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.)