๐ ๊ฐ์
**ํด๋ก๋(Claude)**๋ Anthropic์ด ๊ฐ๋ฐํ **๋ํ ์ธ์ด ๋ชจ๋ธ(LLM)**๋ก, GPT์ ์ ์ฌํ๊ฒ ์์ฐ์ด ์ดํด ๋ฐ ์์ฑ์ ๋ฅํ AI์
๋๋ค.
์ต๊ทผ Claude์์๋ MCP(Model Context Protocol) ๋๋ “ํด ์ฌ์ฉ(Tool Use)” ๊ธฐ๋ฅ์ ์ง์ํ๋ฉด์,
์ธ๋ถ API, ๊ธฐ๋ฅ ๋๊ตฌ, ๋น์ฆ๋์ค ๋ฐ์ดํฐ์ AI๋ฅผ ์ฐ๊ฒฐํ ์ ์๊ฒ ๋์์ต๋๋ค.
โ ์ด ๊ธ์์๋ Claude์์ MCP ๋ฐฉ์์ผ๋ก ์ธ๋ถ ๋๊ตฌ๋ฅผ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ์ฝ๊ฒ ์๊ฐํฉ๋๋ค.
๐ ์์ ์ฝ๋, ์ค์ ๋ฐฉ์, ์ฐ๋ ํ๋ฆ๊น์ง ํ๋์ ์ ๋ฆฌํด๋๋ฆฝ๋๋ค.
๐ ๋ชฉ์ฐจ
- Claude์ ํด ์ฌ์ฉ ๊ธฐ๋ฅ์ด๋?
- MCP ๋ฐฉ์๊ณผ ํด ์ฐ๋ ๊ฐ๋
- MCP ๋๊ตฌ ์ฐ๋์ ์ํ ์กฐ๊ฑด
- MCP ์ฑ ์์: ๋ ์จ ํ์ธ๊ธฐ
- JSON ํด ํธ์ถ ํ๋ฆ
- ๋ณด์ ๋ฐ ์ธ์ฆ ๊ณ ๋ ค์ฌํญ
- Claude์ GPT์ MCP ๋น๊ต
- ๊ฒฐ๋ก
1. Claude์ ํด ์ฌ์ฉ ๊ธฐ๋ฅ์ด๋?
Claude์ ํด ์ฌ์ฉ ๊ธฐ๋ฅ์ LLM์ด ์ธ๋ถ ์์คํ
์ ๊ธฐ๋ฅ(API) ์ ํธ์ถํด
๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ์์
์ ์ํํ ์ ์๋๋ก ํด์ฃผ๋ ๊ธฐ๋ฅ์
๋๋ค.
๐ง โAI๊ฐ ์ธ๋ถ API๋ฅผ ์ดํดํ๊ณ , ์ง์ ํธ์ถํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์์ฝํด์ ์ ๋ฌํ๋ ๊ตฌ์กฐโ
2. MCP ๋ฐฉ์๊ณผ ํด ์ฐ๋ ๊ฐ๋
Claude์์๋ ๋ค์๊ณผ ๊ฐ์ ํด ์ฐ๋ ๊ตฌ์กฐ๋ฅผ ์ฑํํ๊ณ ์์ต๋๋ค.
plaintext์ฌ์ฉ์ ์ ๋ ฅ โ Claude โ [MCP ํด] ํธ์ถ โ JSON ์๋ต โ Claude๊ฐ ํด์ ํ ์์ฐ์ด ์๋ต
โ MCP(๋ชจ๋ธ ์ปจํ ์คํธ ํ๋กํ ์ฝ) ๊ฐ๋ ์์ฝ
๊ตฌ์ฑ์์ | ์ค๋ช |
---|---|
๋๊ตฌ๋ช | AI๊ฐ ์ฌ์ฉํ ๊ธฐ๋ฅ์ ์ด๋ฆ |
์ค๋ช | ์ด๋ค ์ํฉ์์ ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง์ ๋ํ ํํธ |
์ ๋ ฅ ์คํค๋ง | JSON ํํ๋ก ์์ฒญ์ ํ์ํ ํ๋ผ๋ฏธํฐ ์ ์ |
์๋ต ํฌ๋งท | AI๊ฐ ์ดํด ๊ฐ๋ฅํ JSON ๊ฒฐ๊ณผ |
3. MCP ๋๊ตฌ ์ฐ๋์ ์ํ ์กฐ๊ฑด
Claude๋ ๊ธฐ๋ฅ ๋จ์์ JSON ๊ธฐ๋ฐ ๋๊ตฌ ํธ์ถ ํ์์ ์ฌ์ฉํฉ๋๋ค.
์๋์ ๊ฐ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด AI๊ฐ ๋๊ตฌ๋ฅผ ์๋์ผ๋ก ํธ์ถํฉ๋๋ค.
ํญ๋ชฉ | ์ค๋ช |
---|---|
๋๊ตฌ ์ด๋ฆ | ๋ช
ํํ ๊ธฐ๋ฅ ๋ช
์นญ (get_weather , search_flight ๋ฑ) |
์ค๋ช | ์ธ์ ์ฌ์ฉํด์ผ ํ๋์ง ์ค๋ช
(์ฌ์ฉ์์ ์ง์ญ ๋ ์จ ํ์ธ ์ ) |
ํ๋ผ๋ฏธํฐ ๋ช ์ธ | JSON Schema ํ์์ ํ๋ผ๋ฏธํฐ ์๊ตฌ์ฌํญ (city , date ๋ฑ) |
์๋ต ํฌ๋งท | AI๊ฐ ํด์ํ ์ ์๋ ๊ฒฐ๊ณผ๊ฐ (์: {"temperature": "22๋"} ) |
4. MCP ์ฑ ์์: ๋ ์จ ํ์ธ ํด ์ฐ๋
โจ Claude Tool ์ ์ ์์
json{
"name": "get_weather",
"description": "์ฌ์ฉ์ ์์น์ ํ์ฌ ๋ ์จ๋ฅผ ํ์ธํ ๋ ์ฌ์ฉ",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "๋ ์จ๋ฅผ ํ์ธํ ๋์ ์ด๋ฆ"
}
},
"required": ["city"]
}
}
โ๏ธ API ์๋ฒ ์์ (Flask)
pythonfrom flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/weather', methods=['POST'])
def weather():
data = request.json
city = data.get("city", "Seoul")
# ์ค์ ๋ก๋ ์ธ๋ถ ๋ ์จ API์ ์ฐ๋ ๊ฐ๋ฅ
return jsonify({
"city": city,
"temperature": "22๋",
"condition": "๋ง์"
})
if __name__ == '__main__':
app.run(port=5001)
5. JSON ํด ํธ์ถ ํ๋ฆ
๐ค ์ฌ์ฉ์ ์ ๋ ฅ:
โ์์ธ์ ๋ ์จ ์๋ ค์ค.โ
๐ง Claude ๋ด๋ถ ์ฒ๋ฆฌ:
- ์ฌ์ฉ์์ ์๋ ํ์
โ
get_weather
ํด ํ์ - ์๋์ผ๋ก ๋ค์ JSON ํธ์ถ ์์ฑ:
json{ "city": "์์ธ" }
- MCP ์ฑ์
/weather
์๋ํฌ์ธํธ๋ก POST ์์ฒญ - ๋ค์๊ณผ ๊ฐ์ JSON ์๋ต ์์ :
json{ "city": "์์ธ", "temperature": "22๋", "condition": "๋ง์" }
- Claude๊ฐ ์๋ต์ ๋ค์๊ณผ ๊ฐ์ด ์์ฐ์ด๋ก ๋ณํ:
โ์์ธ์ ํ์ฌ ์จ๋๋ 22๋์ด๋ฉฐ ๋ ์จ๋ ๋ง์ต๋๋ค.โ
6. ๋ณด์ ๋ฐ ์ธ์ฆ ๊ณ ๋ ค์ฌํญ
Claude MCP ์ฐ๋ ์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ API ๋ณดํธ๋ฅผ ์ํด ๋ค์ ์์๋ค์ ๊ณ ๋ คํ์ธ์.
ํญ๋ชฉ | ์ค๋ช |
---|---|
CORS ์ค์ | AI ํธ์ถ์ด ๊ฐ๋ฅํ ๋๋ฉ์ธ๋ง ํ์ฉ |
API Key ๋๋ Token ๋ฐฉ์ ์ธ์ฆ | ํ๋ผ์ด๋น MCP ๋๊ตฌ ์ ๊ทผ ์ ํ |
์์ฒญ ๋ก๊ทธ ๊ธฐ๋ก | AI๊ฐ ์ด๋ค ์์ฒญ์ ํ๋์ง ์ถ์ ๊ฐ๋ฅํ๊ฒ ์ ์ง |
7. Claude์ GPT์ MCP ๋น๊ต
ํญ๋ชฉ | Claude | GPT (OpenAI) |
---|---|---|
ํด ๋ช ์นญ | Tools | Plugins / GPTs |
ํธ์ถ ๋ฐฉ์ | JSON ๊ธฐ๋ฐ ์๋ ํธ์ถ | manifest + OpenAPI ํธ์ถ |
์ ์ฝ ์กฐ๊ฑด | Anthropic ์ฝ์ ์ฐ๋ ํ์ | ์ธ๋ถ URL ๋ฑ๋ก ๋ฐ GPT ์ค์ |
ํ์ฉ ๋ถ์ผ | ๋ํ ๊ธฐ๋ฐ ์๋ ์ฐ๋ ์ต์ | ๊ตฌ์กฐํ๋ API ์ฐ๋ ๋ฐ ์์ ์ ์ฌ์ฉ ์ต์ |
๐ก Claude๋ MCP ์ฐ๋์ด ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ฉฐ ์ง๊ด์ ์ธ ๋ฐ๋ฉด,
GPT๋ ์ค์ ์ด ๋ ๋ณต์กํ์ง๋ง ์ปค์คํฐ๋ง์ด์ง์ด ๋ฐ์ด๋ฉ๋๋ค.
8. ๊ฒฐ๋ก
โ
Claude์์๋ MCP ๋๊ตฌ๋ฅผ ์ฐ๋ํ์ฌ ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ AI๋ก ํธ์ถํ๋ ์๋ํ๋ AI ์์คํ
์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
โ
๋ ์จ, ๊ธ์ต ์ ๋ณด, ํญ๊ณต ์์ฝ, ์ ํ ๊ฒ์ ๋ฑ ๋ค์ํ MCP ๋๊ตฌ๋ฅผ ๋ง๋ค์ด Claude์๊ฒ ์ฐ๊ฒฐํ๋ฉด,
AI๊ฐ ์ง์ ์ธ๋ถ์ ์ํธ์์ฉํ๋ **โ๋ฅ๋์ ๋น์โ**๊ฐ ๋ฉ๋๋ค.
๐ ๋ค์ ๋จ๊ณ
- Flask ๊ธฐ๋ฐ API ์๋ฒ ์ ์
- JSON ๋๊ตฌ ์คํค๋ง ์ ์
- Claude ๊ฐ๋ฐ์ ์ฝ์์์ MCP ๋๊ตฌ ๋ฑ๋ก
- ํด ํธ์ถ ํ๋ฆ ํ ์คํธ
๐ฆ ํ์ํ์ ๊ฒฝ์ฐ Claude MCP์ฉ ์ํ ์ฝ๋, ์ธ์ฆ ํ ํฐ ์ฒ๋ฆฌ, CORS ์ค์ , ํด ๋ฐฐํฌ ํ
ํ๋ฆฟ๋ ์ ๊ณตํด ๋๋ฆด ์ ์์ต๋๋ค.
GPT์ ํจ๊ป, ์ด์ Claude๋ ์ฌ๋ฌ๋ถ์ ์
๋ฌด ์๋ํ ํํธ๋๊ฐ ๋ ์ ์์ต๋๋ค. ๐