CalculatorLib MCP
์์ฒ ๊ฐ์ ๊ณ์ฐ๊ธฐ์ 9๊ฐ์ ๋จ์ ๋ณํ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋จ 12๊ฐ์ ๊ฐ๊ฒฐํ ๋๊ตฌ๋ก ๋ฌถ์ด(๊ณ์ฐ๊ธฐ๋ฅผ ๊ฒ์ํ ๋ค ์คํ) ๋ชจ๋ Model Context Protocol ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. “๋ชธ๋ฌด๊ฒ 70 kg, ํค 170 cm์ผ ๋ ์ BMI๋?” ๋๋ “5 ๋ฏธํฐ๋ฅผ ํผํธ๋ก ๋ณํํด ์ค”์ฒ๋ผ Claude์๊ฒ ๋ฌผ์ด๋ณด๋ฉด, ์ง์ด๋ธ ๊ณ์ฐ ๋์ ์ ๋ขฐํ ์ ์๋ ๋ต์ ๋ฐ์ ์ ์์ต๋๋ค.
60์ด ๋ง์ ์ค์น
์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ณ ๋ฅด๊ณ , ์ค๋ํซ์ ๋ถ์ฌ๋ฃ์ ๋ค ์ฌ์์ํ๋ฉด ๋์ ๋๋ค.
๋ช ๋ น ํ๋๋ง ์คํํ๋ฉด Claude Code๊ฐ ์ฐ๊ฒฐ์ ๊ตฌ์ฑํฉ๋๋ค:
claude mcp add --transport http calculatorlib https://calculatorlib.com/mcp
๋๋ ์ค์ ํ์ผ ~/.claude/mcp.json์ ์ง์ ํธ์งํ๋ ค๋ฉด:
{
"mcpServers": {
"calculatorlib": {
"url": "https://calculatorlib.com/mcp"
}
}
}
Claude Code์์ /mcp๋ก ํ์ธํ์ธ์. calculatorlib๊ฐ ์ฐ๊ฒฐ๋๊ณ 12๊ฐ์ ๋๊ตฌ๊ฐ ํ์๋ฉ๋๋ค.
Claude Desktop ์ค์ ์ ํธ์งํฉ๋๋ค:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
์๋์ mcpServers ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค(๊ธฐ์กด ๋ด์ฉ๊ณผ ๋ณํฉํ์ธ์):
{
"mcpServers": {
"calculatorlib": {
"url": "https://calculatorlib.com/mcp"
}
}
}
Claude Desktop์ ์ฌ์์ํฉ๋๋ค. ์
๋ ฅ์ฐฝ์ ๋ง์น ์์ด์ฝ์ calculatorlib์ 12๊ฐ์ ๋๊ตฌ๊ฐ ํ์๋ฉ๋๋ค.
Cursor ์ค์ → MCP → Add new MCP server๋ฅผ ์ด๊ณ ๋ค์์ ๋ถ์ฌ๋ฃ์ต๋๋ค:
{
"mcpServers": {
"calculatorlib": {
"url": "https://calculatorlib.com/mcp"
}
}
}
Cursor๋ ๋์ผํ Streamable HTTP ์ ์ก์ ์ฌ์ฉํ๋ฏ๋ก JSON ์คํค๋ง๊ฐ Claude Desktop๊ณผ ๋์ผํฉ๋๋ค.
Zed ์ค์ (cmd+, / ctrl+, → Open Settings)์ ํธ์งํ๊ณ context_servers ์๋์ ๊ณ์ฐ๊ธฐ ์๋ฒ๋ฅผ ์ถ๊ฐํฉ๋๋ค:
{
"context_servers": {
"calculatorlib": {
"source": "custom",
"transport": {
"type": "streamable-http",
"url": "https://calculatorlib.com/mcp"
}
}
}
}
์ด์์คํดํธ ํจ๋์ ์๋ก ๊ณ ์น๋ฉด ๊ณ์ฐ๊ธฐ ๋๊ตฌ๋ฅผ ๋ชจ๋ ์์ด์ ํธ ์ค๋ ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Zed์ MCP ์ง์์๋ v0.165 ์ด์์ด ํ์ํฉ๋๋ค.
VS Code์์ Cline ํ์ฅ์ ์ฝ๋๋ค → MCP Servers → Edit Configuration. macOS์์๋ ์ค์ ํ์ผ์ด ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json์ ์์ต๋๋ค(Linux/Win ๊ฒฝ๋ก๋ ๋น์ทํฉ๋๋ค):
{
"mcpServers": {
"calculatorlib": {
"url": "https://calculatorlib.com/mcp",
"transportType": "streamableHttp"
}
}
}
Cline์ ์๋ฒ ์ค์ ์ ์๋์ผ๋ก ๋ค์ ๋ถ๋ฌ์ต๋๋ค. ์ ๋๊ตฌ๋ ๋ช ์ด ๋ด์ MCP ํจ๋์ ํ์๋ฉ๋๋ค.
Windsurf → Cascade → Configure MCP๋ฅผ ์ด๊ฑฐ๋ ~/.codeium/windsurf/mcp_config.json์ ์ง์ ํธ์งํฉ๋๋ค:
{
"mcpServers": {
"calculatorlib": {
"serverUrl": "https://calculatorlib.com/mcp"
}
}
}
Windsurf๋ฅผ ์ฌ์์ํ๋ฉด ๊ณ์ฐ๊ธฐ ๋๊ตฌ๊ฐ Cascade์ ๋๊ตฌ ์ ํ๊ธฐ์ ๋ํ๋ฉ๋๋ค. HTTP ์ ์ก์๋ Windsurf 1.5+๊ฐ ํ์ํฉ๋๋ค.
Streamable HTTP ์ ์ก(์ฌ์ ๋ฒ์ 2025-06-18)์ ์ง์ํ๋ MCP ํธํ ํด๋ผ์ด์ธํธ๋ผ๋ฉด ์ฐ๊ฒฐํ ์ ์์ต๋๋ค:
{
"transport": "streamable-http",
"endpoint": "https://calculatorlib.com/mcp"
}
๋๋ curl๋ก JSON-RPC ์๋ํฌ์ธํธ๋ฅผ ์ง์ ํธ์ถํฉ๋๋ค:
curl -X POST https://calculatorlib.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
์ด๋ฐ ํ๋กฌํํธ๋ฅผ ์๋ํด ๋ณด์ธ์
์ค์นํ ๋ค์๋ ํ์์ฒ๋ผ Claude์๊ฒ ๋งํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค โ ์๋ง์ ๋๊ตฌ๋ฅผ ์์์ ์ ํํฉ๋๋ค.
“๋ชธ๋ฌด๊ฒ 70 kg, ํค 170 cm์ด๋ฉด ์ BMI๋ ์ผ๋ง์ธ๊ฐ์? ๊ฑด๊ฐํ ๋ฒ์์ ์ํ๋์?”
Claude๊ฐ bmi_calculator๋ฅผ ํธ์ถํด BMI 24.22์ WHO ๋ถ๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค.
“5 ๋ฏธํฐ๋ฅผ ํผํธ๋ก, ๊ทธ๋ค์ 200 ํ์ด๋๋ฅผ ํฌ๋ก๊ทธ๋จ์ผ๋ก ๋ณํํด ์ค.”
Claude๊ฐ convert_length์ convert_mass๋ฅผ ์ฐจ๋ก๋ก ํธ์ถํฉ๋๋ค.
“$10 000์ ์ฐ 5% ๋ณต๋ฆฌ๋ก 20๋ ํฌ์ํ๋ฉด ์ต์ข ๊ธ์ก์ ์ผ๋ง์ธ๊ฐ์?”
Claude๊ฐ compound_interest_calculator๋ฅผ ํธ์ถํ๊ณ ์ธ๋ถ ๋ด์ญ์ ๋ณด์ฌ ์ค๋๋ค.
“$300k ์ฃผํ๋ด๋ณด๋์ถ, ๊ธ๋ฆฌ 6.5%, 30๋ ์ํ ์ ์ ๋ฉ์ ๊ธ์ ์ผ๋ง์ธ๊ฐ์?”
Claude๊ฐ ์๊ธ, ๊ธ๋ฆฌ, ๊ธฐ๊ฐ์ผ๋ก home_loan_calculator๋ฅผ ํธ์ถํฉ๋๋ค.
๋ผ์ด๋ธ ํ๋ ์ด๊ทธ๋ผ์ด๋
์ฌ๊ธฐ์์ ๋ฐ๋ก ์๋ฒ๋ฅผ ํธ์ถํ์ธ์ โ https://calculatorlib.com/mcp๋ก ์ค์ JSON-RPC๋ฅผ ๋ณด๋ด๊ณ ์ค์ ์๋ต์ ๋ฐ์ต๋๋ค. ๊ฐ์
์ ํ์ ์์ต๋๋ค.
์ธ์ฆ ํ ํฐ(์ ํ)
์์ JSON-RPC ์์ฒญ & ์๋ต
npx @modelcontextprotocol/inspector๋ฅผ ์คํํ ๋ค https://calculatorlib.com/mcp์ ์ฐ๊ฒฐํฉ๋๋ค(์ ์ก: Streamable HTTP). ๋๊ตฌ ๋ธ๋ผ์ฐ์
๊ณ์ฐ๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ 9๊ฐ์ ๋ณํ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ด๋ฆ์ด๋ ์ ๋ชฉ์ผ๋ก ๊ฒ์ํ์ธ์. Claude์๊ฒ ๋ฌด์์ ์์ฒญํ ์ง ์ฐพ์ ๋ ์ ์ฉํฉ๋๋ค.
์๋ ๋ฐฉ์
- ์๋ํฌ์ธํธ:
https://calculatorlib.com/mcp์ ๋จ์ผPOSTํธ๋ค๋ฌ๊ฐ Streamable HTTP ์์์ JSON-RPC 2.0์ ์ฒ๋ฆฌํฉ๋๋ค(์ ์ก ์ฌ์2025-06-18). - ๋๊ตฌ ์ด๋ฆ ๊ท์น: ๊ณ์ฐ๊ธฐ ์ฌ๋ฌ๊ทธ๋ snake_case๋ฅผ ์ฌ์ฉํฉ๋๋ค(
bmi_calculator,compound_interest_calculator). ๋ณํ๊ธฐ๋convert_<category>ํ์์ ๋๋ค. - ์ ๋ ฅ: ๊ฐ ๋๊ตฌ๋ ๊ณ์ฐ๊ธฐ ํผ ํ๋(ํ์ , ์ด๊ฑฐ, ์ต์/์ต๋)์์ ๋์ถํ JSON Schema๋ฅผ ์ ๊ณตํฉ๋๋ค. ์กฐ๊ฑด๋ถ ํ๋(์: BMI์ ๋ฏธํฐ๋ฒ ๋ ์ผ๋ํ์ด๋๋ฒ)๋ ์ ํ์ผ๋ก ํ์๋๋ฏ๋ก, ์ด๋ค ์กฐํฉ์ด ์ ํจํ์ง๋ ๊ฐ ํ๋์ ์ค๋ช ์ ํ์ธํ์ธ์.
- ์ถ๋ ฅ: ํ ์ค ํ
์คํธ ์์ฝ๊ณผ ํจ๊ป LLM์ด ํ์ฑํ ์ ์๋
structuredContentJSON ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค(์:{ "main": [{...}], "data": [...] }). - ์ ๋ฐ์ดํธ: ์นดํ๋ก๊ทธ๋ 5๋ถ๋ง๋ค ๊ฐฑ์ ๋ฉ๋๋ค โ ์๋ก ๊ฒ์๋ ๊ณ์ฐ๊ธฐ๋ ์๋์ผ๋ก ๋ํ๋ฉ๋๋ค.
๋ค์ด๋ ํธ API(MCP ํด๋ผ์ด์ธํธ ๋ถํ์)
MCP ํด๋ผ์ด์ธํธ ์์ด ํตํฉํ๊ณ ์ถ๋์? ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ฐ JSON ์๋ํฌ์ธํธ๋ก๋ ์ ๊ณตํฉ๋๋ค.
curl -X POST https://calculatorlib.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
curl -X POST https://calculatorlib.com/mcp \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{
"name":"bmi_calculator",
"arguments":{"unitSystem":"metric","weight":70,"height":170}
}
}'
curl -X POST https://calculatorlib.com/mcp \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{
"name":"convert_length",
"arguments":{"value":5,"from":"Meter","to":"Foot"}
}
}'
REST ์๋ํฌ์ธํธ(JSON-RPC ๋ํผ ์์):
/api/calculators/schemas?q=<keywords>โ ๊ณ์ฐ๊ธฐ ๊ฒ์(์ ๋ ฅ ์คํค๋ง๊ฐ ํฌํจ๋ ์ ํ๋ ๊ฒฐ๊ณผ)- /api/converter/categories โ ๋จ์๊ฐ ํฌํจ๋ ๋ณํ ์นดํ ๊ณ ๋ฆฌ
POST /api/converter/convertโ ์ง์ ๋ณํ, ๋ณธ๋ฌธ{ category, from, to, value }
์ธ์ฆ(์ ํ์ด์ง๋ง ๊ถ์ฅ)
์ต๋ช ํธ์ถ๋ ๋์ํฉ๋๋ค โ ์ธ์ฆ์ ์ ํ์ ๋๋ค. ํ ํฐ์ ์ถ๊ฐํ๋ฉด /account/mcp-logs์์ ์ฌ์ฉ์๋ณ ์ฌ์ฉ ๋ถ์์ด ํ์ฑํ๋ฉ๋๋ค. ํ ํฐ์ผ๋ก ๋ณด๋ธ ๋ชจ๋ ํธ์ถ์ด ์ง์ฐ ์๊ฐ, ์ค๋ฅ ์ฌ์ , ํธ์ถํ ๊ณ์ฐ๊ธฐ์ ํจ๊ป ํ์๋ฉ๋๋ค.
ํ ํฐ ๋ฐ๊ธฐ(60์ด)
- ๋ก๊ทธ์ธํฉ๋๋ค(๋๋ ๋จผ์ ๊ณ์ ์ ์์ฑ).
- /account/api-tokens๋ก ์ด๋ํฉ๋๋ค.
- Generate token์ ํด๋ฆญํฉ๋๋ค. ๊ฐ์ ํ ๋ฒ๋ง ํ์๋๋ฏ๋ก ๋ณต์ฌํ์ธ์.
MCP ํด๋ผ์ด์ธํธ์ ์ถ๊ฐํ๊ธฐ
๊ณต๊ฐ ์ค์น์ ๋์ผํ ์ค์ ํ์ผ์ headers.Authorization ํ๋๋ง ์ถ๊ฐํฉ๋๋ค:
{
"mcpServers": {
"calculatorlib": {
"url": "https://calculatorlib.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}
์ ์ฌ์ฉํ๋์?
- ๊ฐ์ธ ์ฌ์ฉ ๋ก๊ทธ โ ๊ฐ์ฅ ๋ง์ด ํธ์ถํ๋ ๊ณ์ฐ๊ธฐ์ ์คํจํ๋ ๊ณ์ฐ๊ธฐ๋ฅผ, ๋ณธ์ธ ํ ํฐ ๋ฒ์์์๋ง ํ์ธํฉ๋๋ค(/account/mcp-logs).
- ์ฌ๋ฌ ํด๋ผ์ด์ธํธ, ๋ณ๋ ํ ํฐ โ ๊ธฐ๊ธฐ๋ง๋ค(๋ ธํธ๋ถ, ์๋ฒ, ์์ด์ ํธ) ํ๋์ฉ ๋ฐ๊ธํ์ธ์. ํ๋๋ฅผ ํ๊ธฐํด๋ ๋๋จธ์ง์๋ ์ํฅ์ด ์์ต๋๋ค.
- ํฅํ ์ฌ์ฉ์๋ณ ๊ธฐ๋ฅ์ ํ ๋ โ ์ถํ ์๋ ์ ํ / ํ ๋น๋ / ์ ์ฅ๋ ํ๋ฆฌ์ ์ ์ถ๊ฐํ๋ฉด ์ธ์ฆ๋ ํธ์ถ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
Bearer ํ ํฐ์ ์ฌ์ฉํ๋ curl
curl -X POST https://calculatorlib.com/mcp \
-H 'Authorization: Bearer YOUR_TOKEN_HERE' \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
์๋ฒ ์ด์์์๊ฒ: MCP_REQUIRE_AUTH=true๋ก ์ค์ ํ๋ฉด ๋ชจ๋ ํธ์ถ์ ํ ํฐ์ ์๊ตฌํ ์ ์์ต๋๋ค(์ต๋ช
→ 401). ๊ธฐ์กด MCP_API_TOKEN ํ๊ฒฝ ๋ณ์๋ ๋จ์ผ ๊ณต์ ๋น๋ฐ์ ํตํ ์ฐํ ์๋จ์ผ๋ก ๊ณ์ ๋์ํฉ๋๋ค.
FAQ & ๋ฌธ์ ํด๊ฒฐ
๋ฌด๋ฃ์ธ๊ฐ์? ์๋ ์ ํ์ด ์๋์?
์ ์ฟผ๋ฆฌ๋ฅผ ์ ์ฅํ๋์?
Claude๊ฐ ๊ฐ๋ ๋๊ตฌ๊ฐ ์ ์ฉํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ์ง ์์๋ค๊ณ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
์ ์ฌ์ฉ ๋ด์ญ์ด ๊ณ์ ์ ํ์๋๋๋ก ์ธ์ฆํ ์ ์๋์?
/mcp ์์ฒญ์ Authorization: Bearer <token>์ผ๋ก ์ ๋ฌํ๋ฉด ํธ์ถ์ด /account/mcp-logs์ ํ์๋ฉ๋๋ค. ์ ์ฒด ํด๋ผ์ด์ธํธ ์ค์ ์ ์์ ์ธ์ฆ ์น์
์ ์ฐธ๊ณ ํ์ธ์.ํ ํฐ์ ์์ด๋ฒ๋ ธ์ต๋๋ค. ๋ณต๊ตฌํ ์ ์๋์?
๊ณ์ฐ๊ธฐ๋ฅผ ๋ง ๊ฒ์ํ๋๋ฐ ์ธ์ ํ์๋๋์?
๋๊ตฌ ์ด๋ฆ์ด URL์์ ๋ณด์ด๋ ์ฌ๋ฌ๊ทธ์ ์ผ์นํ์ง ์๋์?
/bmi-calculator๋ bmi_calculator๊ฐ ๋ฉ๋๋ค.