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 ์์กด์ ์ต์ํํ์ต๋๋ค.
- ์กฐ๊ฒฝ์
์ฒด ๊ฒ์(์นด์นด์ค๋งต ์ฐ๋) ๊ธฐ๋ฅ์ ์ ์ธํ์ต๋๋ค โ ํ๊ฐ๋๋(ํ๋ถยท๋ฒ ๋๋คยท์ค๋ด) ์ค์ฌ์ผ๋ก ๋ฒ์๋ฅผ ์ขํ์ต๋๋ค.
- ๋ฌผ์ฃผ๊ธฐ๋ ๊ณ ์ ์ฃผ๊ธฐ๋ง์ผ๋ก๋ ์ ํํ ์ ์๋ค๋ ํ๊ณ๋ฅผ ์ธ์ ํ๊ณ , ๊ณ์ ๋ณ ์๋ ๊ฐ๊ฒฉ ์ถ์ฒ + "๊ณ ์
์๋ฆผ์ ์ฐธ๊ณ ์ฉ, ํ ์ํ๋ฅผ ๋จผ์ ํ์ธ" ๋ฌธ๊ตฌ๋ฅผ ํญ์ ํฌํจํด ๊ณผ์ตยท๊ฑด์กฐ ์คํ ์ํ์ ์ค์์ต๋๋ค.
(์ฌ์ง์ผ๋ก ์ค์ ํ ์ ์๋ถ์ ํ๋ณํ๋ ๋ฐฉ์์ ์กฐ๋ช
ยทํ๋ฉด ํ๋ง ๋ณด์ด๋ ํ๊ณ๋ก ์ฑํํ์ง ์์์ต๋๋ค.)
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues