README.mdβ’3.66 kB
# π 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 μλ² κ°λ° ν
νλ¦Ώμ
λλ€.**