Skip to main content
Glama
SeoNaRu

Quote MCP Server

by SeoNaRu
README.md
# πŸ“ Sample MCP Server

**company-info-mcp ꡬ쑰λ₯Ό 기반으둜 ν•œ μƒ˜ν”Œ MCP μ„œλ²„**μž…λ‹ˆλ‹€.

이 ν”„λ‘œμ νŠΈλŠ” λ‹€λ₯Έ MCP ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€ λ•Œ μ°Έκ³ ν•  수 μžˆλŠ” ν…œν”Œλ¦Ώμž…λ‹ˆλ‹€.

## ✨ μ£Όμš” κΈ°λŠ₯

- **랜덀 λͺ…μ–Έ 쑰회**: 무료 Quote APIλ₯Ό μ‚¬μš©ν•˜μ—¬ 랜덀 λͺ…μ–Έ κ°€μ Έμ˜€κΈ°
- **λͺ…μ–Έ 검색**: ν‚€μ›Œλ“œλ‘œ λͺ…μ–Έ 검색
- **ID둜 쑰회**: νŠΉμ • ID의 λͺ…μ–Έ 쑰회

## πŸ› οΈ 기술 μŠ€νƒ

- **MCP Framework**: FastMCP
- **HTTP Server**: FastAPI
- **Data Validation**: Pydantic
- **HTTP Client**: Requests
- **Caching**: cachetools (TTL μΊμ‹œ)
- **Environment**: Python-dotenv

## πŸ“¦ μ„€μΉ˜ 및 μ„€μ •

### 1) μ˜μ‘΄μ„± μ„€μΉ˜

```bash
pip install -r requirements.txt
```

### 2) ν™˜κ²½ λ³€μˆ˜ μ„€μ • (선택)

ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— `.env` νŒŒμΌμ„ 생성:

```bash
cp env.example .env
```

`.env` 파일 λ‚΄μš©:

```env
LOG_LEVEL=INFO
PORT=8098
```

> πŸ’‘ 이 μ˜ˆμ œλŠ” 무료 APIλ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ API ν‚€κ°€ ν•„μš” μ—†μŠ΅λ‹ˆλ‹€.

### 3) μ„œλ²„ μ‹€ν–‰

#### MCP μ„œλ²„ λͺ¨λ“œ (stdio)

```bash
python -m src.main
```

#### HTTP μ„œλ²„ λͺ¨λ“œ

```bash
HTTP_MODE=1 python -m src.main
```

HTTP μ„œλ²„λŠ” 기본적으둜 `http://localhost:8098`μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

## πŸ”Œ MCP ν΄λΌμ΄μ–ΈνŠΈ μ„€μ •

### Claude Desktop

`claude_desktop_config.json` νŒŒμΌμ— λ‹€μŒμ„ μΆ”κ°€:

**μ„€μ • 파일 μœ„μΉ˜:**
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
- **Mac**: `~/Library/Application Support/Claude/claude_desktop_config.json`

**μ„€μ • μ˜ˆμ‹œ:**

```json
{
  "mcpServers": {
    "sample-quote": {
      "command": "python",
      "args": ["-m", "src.main"],
      "cwd": "/path/to/sample-mcp-server",
      "env": {
        "LOG_LEVEL": "INFO"
      }
    }
  }
}
```

## 🧰 μ‚¬μš© κ°€λŠ₯ν•œ MCP 도ꡬ

### `health`
μ„œλΉ„μŠ€ μƒνƒœ 확인

### `get_random_quote_tool`
랜덀 λͺ…언을 μ‘°νšŒν•©λ‹ˆλ‹€.

### `search_quotes_tool`
ν‚€μ›Œλ“œλ‘œ λͺ…언을 κ²€μƒ‰ν•©λ‹ˆλ‹€.

**νŒŒλΌλ―Έν„°:**
- `keyword` (ν•„μˆ˜): 검색할 ν‚€μ›Œλ“œ
- `limit` (선택): κ²°κ³Ό 개수 (κΈ°λ³Έκ°’: 10, μ΅œλŒ€: 50)

### `get_quote_by_id_tool`
ID둜 νŠΉμ • λͺ…언을 μ‘°νšŒν•©λ‹ˆλ‹€.

**νŒŒλΌλ―Έν„°:**
- `quote_id` (ν•„μˆ˜): 인용ꡬ ID

## πŸ“‘ HTTP API μ—”λ“œν¬μΈνŠΈ

HTTP λͺ¨λ“œλ‘œ μ‹€ν–‰ μ‹œ λ‹€μŒ μ—”λ“œν¬μΈνŠΈλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

### Health Check

```bash
GET /health
POST /health
```

### 도ꡬ λͺ©λ‘ 쑰회

```bash
GET /tools
```

### 도ꡬ μ‹€ν–‰

```bash
POST /tools/{tool_name}
Content-Type: application/json

{
  "keyword": "success",
  "limit": 5,
  "env": {
    "QUOTE_API_KEY": "your_api_key"
  }
}
```

## πŸ—οΈ ν”„λ‘œμ νŠΈ ꡬ쑰

```
sample-mcp-server/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ main.py          # FastMCP μ„œλ²„ + FastAPI HTTP μ—”λ“œν¬μΈνŠΈ
β”‚   └── tools.py          # μ‹€μ œ API 호좜 둜직
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ pyproject.toml
β”œβ”€β”€ env.example
└── README.md
```

## πŸ“š 이 ν”„λ‘œμ νŠΈλ₯Ό μ°Έκ³ ν•˜μ—¬ μƒˆ MCP λ§Œλ“€κΈ°

1. 이 ν”„λ‘œμ νŠΈλ₯Ό λ³΅μ‚¬ν•˜μ—¬ μƒˆ ν”„λ‘œμ νŠΈ 생성
2. `src/main.py`μ—μ„œ 도ꡬ μ •μ˜ μˆ˜μ •
3. `src/tools.py`μ—μ„œ μ‹€μ œ API 호좜 둜직 κ΅¬ν˜„
4. `pyproject.toml`μ—μ„œ ν”„λ‘œμ νŠΈλͺ… λ³€κ²½
5. `requirements.txt`에 ν•„μš”ν•œ μ˜μ‘΄μ„± μΆ”κ°€
6. `env.example`에 ν•„μš”ν•œ ν™˜κ²½ λ³€μˆ˜ μΆ”κ°€

## πŸ”‘ API ν‚€ μš°μ„ μˆœμœ„

MCP μ„œλ²„λŠ” λ‹€μŒ μˆœμ„œλ‘œ API ν‚€λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€:

1. **μš°μ„ μˆœμœ„ 1**: `arguments.env.QUOTE_API_KEY` (메인 μ„œλ²„μ—μ„œ 받은 ν‚€)
2. **μš°μ„ μˆœμœ„ 2**: `.env` 파일의 `QUOTE_API_KEY` (둜컬 개발용)

## πŸ“„ λΌμ΄μ„ μŠ€

MIT License

---

**이 ν”„λ‘œμ νŠΈλŠ” MCP μ„œλ²„ 개발 ν…œν”Œλ¦Ώμž…λ‹ˆλ‹€.**