๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
Milten
์„œ๋น„์Šค๋ธ”๋กœ๊ทธMCP์†Œ๊ฐœ๋ฌธ์˜ํ•˜๊ธฐ
Englishะ ัƒััะบะธะนุงู„ุนุฑุจูŠุฉไธญๆ–‡ๆ—ฅๆœฌ่ชžํ•œ๊ตญ์–ดEspaรฑolDeutschItalianoFranรงaisPortuguรชs
๋กœ๊ทธ์ธ
์„œ๋น„์Šค๋ธ”๋กœ๊ทธMCP์†Œ๊ฐœ๋ฌธ์˜ํ•˜๊ธฐ
Englishะ ัƒััะบะธะนุงู„ุนุฑุจูŠุฉไธญๆ–‡ๆ—ฅๆœฌ่ชžํ•œ๊ตญ์–ดEspaรฑolDeutschItalianoFranรงaisPortuguรชs
  1. ํ™ˆ
  2. /Milten MCP

์—ฐ๋™ / MODEL CONTEXT PROTOCOL

Milten MCP: AI ์–ด์‹œ์Šคํ„ดํŠธ์—์„œ ์›น์‚ฌ์ดํŠธ ๊ฐ์‚ฌ ํ™•์ธ

Codex, Cursor ๋˜๋Š” Claude Code๋ฅผ ์ €์žฅ๋œ Milten ๊ฐ์‚ฌ ๊ฒฐ๊ณผ์— ์—ฐ๊ฒฐํ•˜์„ธ์š”. Model Context Protocol(MCP)์„ ํ†ตํ•ด ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ ์›น์‚ฌ์ดํŠธ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์ฝ๊ณ  ๋ณด๊ณ ์„œ ๋ฐ์ดํ„ฐ์— ๊ทผ๊ฑฐํ•œ ์ตœ์ ํ™” ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Milten MCP ์„ค์ •๋„๊ตฌ ์ฐธ์กฐ

Milten MCP

HTTP

์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ Milten ๊ฐ์‚ฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ณผ์ •

  1. 01

    ๊ฐ์‚ฌ ์ฐพ๊ธฐ

    list_audits
  2. 02

    ์ธก์ •๊ฐ’ ์ฝ๊ธฐ

    get_audit_report
  3. 03

    ์ตœ์ ํ™” ๊ณ„ํš ๊ฐ€์ ธ์˜ค๊ธฐ

    get_optimization_plan

์ฝ๊ธฐ ์ „์šฉ ์•ก์„ธ์Šค

์ €์žฅ๋œ ๊ฐ์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์Šค์บ”์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ Milten ํ† ํฐ์„ ์ฐจ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ผ๋ฆฌ ์•ก์„ธ์Šค

ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์ „์— Milten์— ๋ฌธ์˜ํ•˜์—ฌ ๊ณ„์ •์—์„œ MCP ์„œ๋ฒ„์™€ ์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ด์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๋ฌธ์˜ โ†—

ํŽ˜์ด์ง€ ๋ชฉ์ฐจ

  • MCP ์„ค์ •
  • ์•ก์„ธ์Šค ํ† ํฐ
  • ๋„๊ตฌ ์ฐธ์กฐ
  • ํ”„๋กฌํ”„ํŠธ ์˜ˆ์‹œ
  • ๋ฌธ์ œ ํ•ด๊ฒฐ

Milten MCP ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•

Milten MCP๋Š” ์›๊ฒฉ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. Streamable HTTP์™€ ์‚ฌ์šฉ์ž ์ง€์ • Authorization ํ—ค๋”๋ฅผ ์ง€์›ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์— ์„œ๋ฒ„ URL๊ณผ ์•ก์„ธ์Šค ํ† ํฐ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๋กœ์ปฌ์— Milten ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ URL
https://milten.io/mcp
์ธ์ฆ
Authorization: Bearer <PAT>

ํ•„์š”ํ•œ ํ•ญ๋ชฉ

Milten ๊ณ„์ •๊ณผ ๊ฐœ์ธ ์•ก์„ธ์Šค ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ณ ์„œ๋ฅผ ์ฝ์œผ๋ ค๋ฉด ํ•ด๋‹น ๊ณ„์ •์ด ์†Œ์œ ํ•œ ๊ธฐ์กด ๊ฐ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Milten ์›น์‚ฌ์ดํŠธ์—์„œ ์ƒˆ ๊ฐ์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.

Milten์— ๋กœ๊ทธ์ธ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰
Codex

<PAT>๋ฅผ ํ† ํฐ ๋น„๋ฐ€ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์ „์ฒด ๋ธ”๋ก์„ Bash ๋˜๋Š” Zsh์—์„œ ์‹คํ–‰ํ•˜์„ธ์š”. ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  Codex ์„ค์ • ํŒŒ์ผ(๊ธฐ๋ณธ๊ฐ’: ~/.codex/config.toml)์˜ http_headers์— Authorization์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด milten ์„ค์ •์ด ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. Codex๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์„ธ์š”. ์ด ํŒŒ์ผ์—๋Š” ๋น„๋ฐ€ ๊ฐ’์ด ํฌํ•จ๋˜๋ฏ€๋กœ ๊ณต๊ฐœํ•˜์ง€ ๋งˆ์„ธ์š”.

ํ„ฐ๋ฏธ๋„
codex mcp add milten --url https://milten.io/mcp &&
cat >> "${CODEX_HOME:-$HOME/.codex}/config.toml" <<'EOF'

[mcp_servers.milten.http_headers]
Authorization = "Bearer <PAT>"
EOF
ํด๋ผ์ด์–ธํŠธ ๋ฌธ์„œ โ†—
Cursor

๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ~/.cursor/mcp.json์˜ mcpServers์— milten ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋ ค๋ฉด .cursor/mcp.json์— ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๊ธฐ์กด ์„œ๋ฒ„ ํ•ญ๋ชฉ์€ ์œ ์ง€ํ•˜์„ธ์š”.

MILTEN_MCP_TOKEN์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ ํ† ํฐ์„ ์„ค์ •ํ•˜์„ธ์š”. ํ† ํฐ์„ ๋ณ€๊ฒฝํ•œ ๋’ค์—๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์„ธ์š”. ํ„ฐ๋ฏธ๋„์—์„œ ์„ค์ •ํ•œ ๋ณ€์ˆ˜๋Š” ๋ฐ”ํƒ• ํ™”๋ฉด์—์„œ ์‹คํ–‰ํ•œ ์•ฑ์— ์ž๋™์œผ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

.cursor/mcp.json
{
  "mcpServers": {
    "milten": {
      "url": "https://milten.io/mcp",
      "headers": {
        "Authorization": "Bearer ${env:MILTEN_MCP_TOKEN}"
      }
    }
  }
}
ํด๋ผ์ด์–ธํŠธ ๋ฌธ์„œ โ†—
Claude Code

์ด ํ•ญ๋ชฉ์„ ํ”„๋กœ์ ํŠธ์˜ .mcp.json์— ์ถ”๊ฐ€ํ•˜์„ธ์š”. Claude Code๋Š” ์‹œ์ž‘ํ•  ๋•Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ์Šน์ธ ์š”์ฒญ์ด ํ‘œ์‹œ๋˜๋ฉด ํ”„๋กœ์ ํŠธ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์„ ์Šน์ธํ•˜์„ธ์š”.

MILTEN_MCP_TOKEN์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ ํ† ํฐ์„ ์„ค์ •ํ•˜์„ธ์š”. ํ† ํฐ์„ ๋ณ€๊ฒฝํ•œ ๋’ค์—๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์„ธ์š”. ํ„ฐ๋ฏธ๋„์—์„œ ์„ค์ •ํ•œ ๋ณ€์ˆ˜๋Š” ๋ฐ”ํƒ• ํ™”๋ฉด์—์„œ ์‹คํ–‰ํ•œ ์•ฑ์— ์ž๋™์œผ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

.mcp.json
{
  "mcpServers": {
    "milten": {
      "type": "http",
      "url": "https://milten.io/mcp",
      "headers": {
        "Authorization": "Bearer ${MILTEN_MCP_TOKEN}"
      }
    }
  }
}
ํด๋ผ์ด์–ธํŠธ ๋ฌธ์„œ โ†—

๋„๊ตฌ 6๊ฐœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ

MCP ํด๋ผ์ด์–ธํŠธ์—์„œ milten์„ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”. list_audits, get_audit_report, get_optimization_plan, get_audit_section, compare_audits, get_monitoring_history๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. list_audits๋ถ€ํ„ฐ ํ˜ธ์ถœํ•˜๊ณ  ์‘๋‹ต์˜ auditId๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๊ฐ์‚ฌ๊ฐ€ ์—†์œผ๋ฉด ๋นˆ ๋ชฉ๋ก์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค.

Milten ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐฉ๋ฒ•

Milten์— ๋กœ๊ทธ์ธํ•œ ํ›„ ๊ณ„์ • ํ™”๋ฉด์˜ โ€˜ํ”„๋กœํ•„ โ†’ API ํ‚คโ€™์—์„œ ๊ฐœ์ธ ์•ก์„ธ์Šค ํ† ํฐ(Personal Access Token, PAT)์„ ์ƒ์„ฑํ•˜๊ณ  ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ํ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MCP ํด๋ผ์ด์–ธํŠธ๋Š” Authorization: Bearer ํ—ค๋”๋กœ ํ† ํฐ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. MCP ์„œ๋ฒ„๋Š” ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค๋‚˜ OAuth ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ

Milten์— ๋กœ๊ทธ์ธํ•˜๊ณ  ํ”„๋กœํ•„์—์„œ โ€˜API ํ‚คโ€™๋ฅผ ์—ฌ์„ธ์š”. ์ด๋ฆ„๊ณผ ๋งŒ๋ฃŒ์ผ์„ ์ž…๋ ฅํ•œ ๋‹ค์Œ โ€˜ํ† ํฐ ์ƒ์„ฑโ€™์„ ๋ˆ„๋ฅด์„ธ์š”.

API ํ‚ค ์—ด๊ธฐ

๋น„๋ฐ€ ๊ฐ’์€ ํ•œ ๋ฒˆ๋งŒ ํ‘œ์‹œ๋˜๋ฏ€๋กœ ์ง€๊ธˆ ๋ณต์‚ฌํ•˜์„ธ์š”. ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•˜๊ณ  ์œ„์˜ ์„ค์ • ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜์„ธ์š”. ํ† ํฐ id๋Š” ํ๊ธฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชฉ๋ก์— ๋‚จ์Šต๋‹ˆ๋‹ค.

ํ† ํฐ์—๋Š” ์ž์‹ ์˜ ๊ฐ์‚ฌ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” audits:read ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. name์€ ํ•„์ˆ˜์ด๋ฉฐ ์ตœ๋Œ€ 100๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค. expiresAt์€ RFC 3339 ํ˜•์‹์˜ ๋ฏธ๋ž˜ ์‹œ๊ฐ์ด์–ด์•ผ ํ•˜๋ฉฐ ํ˜„์žฌ๋ถ€ํ„ฐ ์ตœ๋Œ€ 366์ผ ์ด๋‚ด๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ† ํฐ ์กฐํšŒ ๋ฐ ํ๊ธฐ

โ€˜API ํ‚คโ€™ ๋ชฉ๋ก์—๋Š” ์ด๋ฆ„, ๋งŒ๋ฃŒ์ผ, ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. โ€˜ํ๊ธฐโ€™๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ํ† ํฐ์˜ MCP ์•ก์„ธ์Šค๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ๋œ ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜์œผ๋กœ ์•„๋ž˜ ๊ณ„์ • API ๊ฒฝ๋กœ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. GET์€ ์‹œํฌ๋ฆฟ์„ ์ œ์™ธํ•œ ํ† ํฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ๊ธฐํ•  ๋•Œ๋Š” {id}๋ฅผ ํ† ํฐ ID๋กœ ๋ฐ”๊พธ์„ธ์š”. DELETE๋Š” 204๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ดํ›„ ํ•ด๋‹น ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” MCP ์š”์ฒญ์€ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

๊ณ„์ • API
GET /v1/personal-access-tokens/
DELETE /v1/personal-access-tokens/{id}

MCP ๋„๊ตฌ: ๊ฐ์‚ฌ, ๋ณด๊ณ ์„œ, ์ตœ์ ํ™” ๊ณ„ํš

MCP ํด๋ผ์ด์–ธํŠธ๋Š” ์ด JSON ์ธ์ˆ˜๋ฅผ tools/call์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ณ ์„œ๋‚˜ ๊ณ„ํš์„ ์š”์ฒญํ•  ๋•Œ๋Š” ์˜ˆ์‹œ UUID๋ฅผ list_audits ์‘๋‹ต์˜ auditId๋กœ ๋ฐ”๊พธ์„ธ์š”. ์›น์‚ฌ์ดํŠธ URL์ด ์•„๋‹Œ ๊ฐ์‚ฌ ID๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

01

list_audits

์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•œ ๊ฐ์‚ฌ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋ฉด ํŠน์ • ํ”„๋กœ์ ํŠธ๋กœ ๋ชฉ๋ก์„ ์ขํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ์ˆ˜
๋ชจ๋“  ํ•„๋“œ๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. projectId: ํ”„๋กœ์ ํŠธ UUID; page: 1 ์ด์ƒ์˜ ์ •์ˆ˜(๊ธฐ๋ณธ๊ฐ’ 1); limit: 1โ€“50์˜ ์ •์ˆ˜(๊ธฐ๋ณธ๊ฐ’ 10).
์‘๋‹ต
audits์—๋Š” auditId, url, operation, status, createdAt์ด ํฌํ•จ๋˜๋ฉฐ, ๊ฐ’์ด ์žˆ์œผ๋ฉด projectId์™€ error๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. count๋Š” ์ „์ฒด ๊ฐœ์ˆ˜์ด๊ณ  page์™€ limit๋Š” ํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. truncated๊ฐ€ true์ด๋ฉด limit๋ฅผ ์ค„์—ฌ ๋‹ค์‹œ ์š”์ฒญํ•˜์„ธ์š”. ์ƒํƒœ๋Š” running, completed ๋˜๋Š” failed์ž…๋‹ˆ๋‹ค.
list_audits ยท JSON
{
  "page": 1,
  "limit": 10
}
02

get_audit_report

์ €์žฅ๋œ ๋ณด๊ณ ์„œ์˜ ๋ชจ๋“  ์„น์…˜๊ณผ ๊ฐ„๋‹จํ•œ ์ง€ํ‘œ ์š”์•ฝ์„ ์ฝ์Šต๋‹ˆ๋‹ค.

์ธ์ˆ˜
auditId: ํ•„์ˆ˜. list_audits์—์„œ ๊ฐ€์ ธ์˜จ ๊ฐ์‚ฌ UUID์ž…๋‹ˆ๋‹ค.
์‘๋‹ต
audit์—๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€, filling์—๋Š” Lighthouse, HAR, CrUX, llmAdvice ๋“ฑ์„ ํฌํ•จํ•œ ๋ชจ๋“  ์ €์žฅ๋œ ์„น์…˜์ด {type, data} ํ˜•์‹์œผ๋กœ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. analysis๋Š” ์ง€ํ‘œ์™€ ๋ฌธ์ œ์˜ ์š”์•ฝ์ž…๋‹ˆ๋‹ค. trustNote๋Š” ์‚ฌ์ดํŠธ ์ฝ˜ํ…์ธ ๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ์ž„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ณธ ํ•œ๋„๋Š” 1 MiB์ด๋ฉฐ, ์ดˆ๊ณผํ•˜๋ฉด ๋ณด๊ณ ์„œ๋ฅผ ์ž˜๋ผ๋‚ด๋Š” ๋Œ€์‹  ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
get_audit_report ยท JSON
{
  "auditId": "123e4567-e89b-42d3-a456-426614174000"
}
03

get_optimization_plan

๋ณด๊ณ ์„œ์— ํ‘œ์‹œ๋˜๋Š” ์ €์žฅ๋œ llmAdvice ๊ณ„ํš์„ ์ฝ์Šต๋‹ˆ๋‹ค. MCP๋Š” ์ƒˆ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ LLM์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ธ์ˆ˜
auditId: ํ•„์ˆ˜ UUID; focus: all(๊ธฐ๋ณธ๊ฐ’), lcp, inp, cls ๋˜๋Š” backend; limit: 1โ€“25์˜ ์ •์ˆ˜(๊ธฐ๋ณธ๊ฐ’ 10).
์‘๋‹ต
plan์—๋Š” source, summary, recommendations, truncated๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถŒ์žฅ ์‚ฌํ•ญ์˜ ์ˆœ์„œ์™€ ํ•„๋“œ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค: priority(critical, medium, low), metrics, metricSavings, title, resources, evidence, action, effect, verification. focus๋Š” metrics๋กœ ํ•„ํ„ฐ๋งํ•˜๋ฉฐ backend๋Š” TTFB์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. limit์œผ๋กœ ๋ชฉ๋ก์ด ์ค„์–ด๋“ค๋ฉด truncated๋Š” true์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ํ…์ŠคํŠธ ๊ณ„ํš์€ ํ•„ํ„ฐ๋ง ์—†์ด output์— ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ €์žฅ๋œ ๊ณ„ํš์ด ์—†์œผ๋ฉด diagnostic์„ ํ™•์ธํ•˜์„ธ์š”.
get_optimization_plan ยท JSON
{
  "auditId": "123e4567-e89b-42d3-a456-426614174000",
  "focus": "lcp",
  "limit": 3
}
04

get_audit_section

๋งˆ์ง€๋ง‰์œผ๋กœ ์ €์žฅ๋œ ๋ณด๊ณ ์„œ ์„น์…˜์„ ์ฝ์Šต๋‹ˆ๋‹ค. ํฐ ๋ฐฐ์—ด์€ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ์ˆ˜
auditId์™€ section์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. section์€ har ๊ฐ™์€ filling์˜ type์ž…๋‹ˆ๋‹ค. ์„ ํƒ ์‚ฌํ•ญ์ธ path๋Š” /log/entries ๊ฐ™์€ JSON Pointer์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์€ offset 0๋ถ€ํ„ฐ, limit 1โ€“200(๊ธฐ๋ณธ 50)์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์—๋Š” ํŽ˜์ด์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ƒ๋žตํ•˜์„ธ์š”.
์‘๋‹ต
data๋Š” ์›๋ž˜ ํ•„๋“œ์™€ null์„ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์€ total, nextOffset, truncated๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. truncated๊ฐ€ false๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ nextOffset์œผ๋กœ ๊ณ„์† ์กฐํšŒํ•˜์„ธ์š”. ์‘๋‹ต์ด ๋„ˆ๋ฌด ํฌ๋ฉด path ๋ฒ”์œ„๋ฅผ ์ขํžˆ๊ฑฐ๋‚˜ limit์„ ์ค„์ด์„ธ์š”.
get_audit_section ยท JSON
{
  "auditId": "123e4567-e89b-42d3-a456-426614174000",
  "section": "har",
  "path": "/log/entries",
  "limit": 20
}
05

compare_audits

๊ฐ™์€ URL๊ณผ ๊ฒ€์‚ฌ ์œ ํ˜•์˜ ๋‚ด ๊ฐ์‚ฌ ๋‘ ๊ฑด์„ ๋น„๊ตํ•˜์—ฌ ์ธก์ •๊ฐ’, ์ž„๊ณ„๊ฐ’์— ๋”ฐ๋ฅธ ๋ฌธ์ œ, ์ €์žฅ๋œ ๊ถŒ์žฅ ์‚ฌํ•ญ์˜ ๋ณ€ํ™”๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ธ์ˆ˜
baselineAuditId๋Š” ๊ธฐ์ค€ ๊ฐ์‚ฌ, candidateAuditId๋Š” ์ดํ›„ ๊ฐ์‚ฌ์ž…๋‹ˆ๋‹ค. ๋‘ UUID๋Š” list_audits์—์„œ ๊ฐ€์ ธ์˜ค์„ธ์š”. ์‹คํ—˜์‹ค ์ง€ํ‘œ๋Š” basic, inp, ttfb๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
์‘๋‹ต
delta = candidate โˆ’ baseline์ด๋ฉฐ ๋ˆ„๋ฝ๋œ ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. comparable๊ณผ warnings๋ฅผ ํ™•์ธํ•˜์„ธ์š”. findings๋Š” added, resolved, persisting, uncompared๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๊ถŒ์žฅ ์‚ฌํ•ญ์€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” title๋กœ ์—ฐ๊ฒฐ๋˜๋ฉฐ ์ €์žฅ๋œ ๋‘ ๊ณ„ํš๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
compare_audits ยท JSON
{
  "baselineAuditId": "123e4567-e89b-42d3-a456-426614174000",
  "candidateAuditId": "e6723288-f28c-4b62-8a4e-7dc395958c0c"
}
06

get_monitoring_history

๋‚ด ๋ชจ๋‹ˆํ„ฐ๋ง ํŽ˜์ด์ง€์˜ ์ €์žฅ๋œ ์ธก์ • ๊ฒฐ๊ณผ๋ฅผ ์ตœ์‹ ์ˆœ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์‚ฌ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ธ์ˆ˜
monitoringUnitId๋Š” ํ•„์ˆ˜์ด๋ฉฐ ๋ชจ๋‹ˆํ„ฐ๋ง ํŽ˜์ด์ง€์˜ Core UUID(coreMonitoringUnitId)์ž…๋‹ˆ๋‹ค. auditId๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. dateFrom๊ณผ dateTo๋Š” ์–‘ ๋์„ ํฌํ•จํ•˜๋Š” RFC 3339 ๋ฒ”์œ„์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ ์ตœ๊ทผ 30์ผ์ž…๋‹ˆ๋‹ค. page๋Š” 1๋ถ€ํ„ฐ, limit์€ 1โ€“50(๊ธฐ๋ณธ 20)์ž…๋‹ˆ๋‹ค.
์‘๋‹ต
results์—๋Š” ๋‚ ์งœ, ์ง€ํ‘œ, ๊ธฐ๊ธฐ, ์ง€์—ญ, affectedAlert๊ฐ€ ํฌํ•จ๋˜๋ฉฐ count์™€ hasMore๋„ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ํŽ˜์ด์ง€์—๋Š” ๋ฐ˜ํ™˜๋œ dateFrom๊ณผ dateTo๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜์„ธ์š”. ๊ณผ๊ฑฐ์˜ 0์€ ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. INP๋Š” ์‹คํ—˜์‹ค ์ธก์ •๊ฐ’์ด๋ฉฐ CrUX p75๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
get_monitoring_history ยท JSON
{
  "monitoringUnitId": "e09aa948-a541-4404-bcdc-9e5621c11891",
  "page": 1,
  "limit": 20
}

AI ์–ด์‹œ์Šคํ„ดํŠธ์— ๋ณด๋‚ผ ํ”„๋กฌํ”„ํŠธ ์˜ˆ์‹œ

์—ฐ๊ฒฐ ํ›„ ์–ด์‹œ์Šคํ„ดํŠธ ์ฑ„ํŒ…์—์„œ ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์–ด์‹œ์Šคํ„ดํŠธ๋Š” MCP ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์‹œ์ง€๋“ค์€ ๋ณ„๋„์˜ ์„œ๋ฒ„ ๋ช…๋ น์ด ์•„๋‹™๋‹ˆ๋‹ค.

  1. 01

    ๋‚ด Milten ๊ฐ์‚ฌ ๋ชฉ๋ก์„ ๋ณด์—ฌ ์ฃผ๊ณ  example.com์˜ ์™„๋ฃŒ๋œ ๊ฐ์‚ฌ ์ค‘ ๊ฐ€์žฅ ์ตœ๊ทผ ํ•ญ๋ชฉ์„ ์ฐพ์•„ ์ค˜.

  2. 02

    ๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ์ฝ์–ด ์ค˜. ์–ด๋–ค ์ง€ํ‘œ๊ฐ€ ๋А๋ฆฐ ๋กœ๋”ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ๊ฐ’๊ณผ ๋‹จ์œ„๋ฅผ ํ•จ๊ป˜ ์•Œ๋ ค ์ค˜.

  3. 03

    LCP์— ์ดˆ์ ์„ ๋งž์ถ˜ ์ตœ์ ํ™” ๊ณ„ํš์„ ๊ฐ€์ ธ์™€ ์ค˜. ๋ณด๊ณ ์„œ์— ๊ทผ๊ฑฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ตœ๋Œ€ ์„ธ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ์•ˆํ•˜๊ณ  ๊ฐ๊ฐ์˜ ํšจ๊ณผ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด ์ค˜.

์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ

ํ† ํฐ์œผ๋กœ ๊ณ„์ •์„ ์‹๋ณ„ํ•˜๋ฏ€๋กœ userId๋Š” ๋„๊ตฌ ์ธ์ˆ˜์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ํ•„ํ„ฐ๋Š” ์ž์‹ ์˜ ๊ฐ์‚ฌ ๋ชฉ๋ก๋งŒ ์ขํžˆ๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๊ฐ์‚ฌ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. MCP๋Š” ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์Šค์บ”์„ ์‹œ์ž‘ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ๋Œ€์ƒ ์›น์‚ฌ์ดํŠธ์˜ ํ…์ŠคํŠธ๋Š” ๋ณด๊ณ ์„œ ๋ฐ์ดํ„ฐ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ , ์—์ด์ „ํŠธ์— ๋Œ€ํ•œ ์ง€์‹œ๋กœ ํ•ด์„ํ•˜์ง€ ๋งˆ์„ธ์š”.

๋ฌธ์ œ ํ•ด๊ฒฐ

404 / JSON ๋Œ€์‹  HTML ๋ฐ˜ํ™˜

ํ˜„์žฌ ํ™˜๊ฒฝ์—์„œ MCP ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๊ฒฝ๋กœ๋Š” ๋์— ์Šฌ๋ž˜์‹œ๋‚˜ ์–ธ์–ด ์ ‘๋‘์‚ฌ ์—†์ด /mcp๋ฅผ ์ •ํ™•ํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ ํŽ˜์ด์ง€๋Š” ๋‹ค๋ฅธ URL์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

401 unauthorized

Authorization: Bearer์™€ ํ† ํฐ ๋น„๋ฐ€ ๊ฐ’์„ ํ™•์ธํ•˜์„ธ์š”. Codex์— failed (0 tools)๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์œ ํšจํ•œ ํ† ํฐ์œผ๋กœ ์„ค์ •์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๊ณ  Codex๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์„ธ์š”. ๋งŒ๋ฃŒ๋˜๊ฑฐ๋‚˜ ํ๊ธฐ๋œ ํ† ํฐ์€ ๊ต์ฒดํ•˜์„ธ์š”. OAuth ๋กœ๊ทธ์ธ์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

403 origin forbidden

๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ๋Š” MCP ์„œ๋ฒ„์—์„œ ํ•ด๋‹น origin์„ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Milten์— ํด๋ผ์ด์–ธํŠธ ์ด๋ฆ„๊ณผ origin์„ ์•Œ๋ ค ์ฃผ์„ธ์š”. ํ† ํฐ์€ ๋ณด๋‚ด์ง€ ๋งˆ์„ธ์š”.

429 rate limit exceeded

์š”์ฒญ ๋นˆ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋‚˜์ค‘์— ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”. ๊ธฐ๋ณธ ์„œ๋ฒ„ ์ œํ•œ์€ ํ† ํฐ๋‹น ๋ถ„๋‹น 60ํšŒ ์š”์ฒญ์ด๋ฉฐ, ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ œํ•œ์ด ์„ค์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

audit not found / invalid arguments

์ž์‹ ์˜ list_audits ์‘๋‹ต์— ์žˆ๋Š” ๊ฐ์‚ฌ UUID๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ์‚ฌ์™€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๊ฐ์‚ฌ๋Š” ๋ชจ๋‘ audit not found๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์„ค์ •, focus, limit ๊ฐ’์„ ํ™•์ธํ•˜์„ธ์š”.

์ง€ํ‘œ ๋˜๋Š” ๊ถŒ์žฅ ์‚ฌํ•ญ์ด ๋น„์–ด ์žˆ์Œ

audit.status์™€ diagnostic์„ ํ™•์ธํ•˜์„ธ์š”. ์ง€์›๋˜๋Š” ์ง€ํ‘œ๋‚˜ ์ €์žฅ๋œ llmAdvice๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. focus์™€ ์ผ์น˜ํ•˜๋Š” ๊ถŒ์žฅ ์‚ฌํ•ญ์ด ์—†์„ ๋•Œ๋„ ๋ชฉ๋ก์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‚ฌ์ดํŠธ์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค.

503 / temporarily unavailable

์ธ์ฆ ์„œ๋น„์Šค ๋˜๋Š” ๊ฐ์‚ฌ ์„œ๋น„์Šค๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ๊ณ„์†๋˜๋ฉด ์ง€์›ํŒ€์— ๋ฌธ์˜ํ•˜์„ธ์š”.

Milten

์†๋„, SEO ๋ฐ ํ”„๋ŸฐํŠธ์—”๋“œ ํ’ˆ์งˆ์„ ํ™•์ธํ•˜๋Š” ํ”Œ๋žซํผ.

์„ฑ๋Šฅ

  • ์†๋„ ์Šค์บ๋„ˆ
  • INP ๋””๋ฒ„๊ฑฐ
  • BF cache
  • SSR ๊ฒ€์‚ฌ

์ฝ”๋“œ

  • HTML Scanner
  • ๋””์ž์ธ ํ† ํฐ
  • A11Y ๊ฐ์‚ฌ
  • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜

ํšŒ์‚ฌ

  • ๋ฌธ์„œ
  • ๋ธ”๋กœ๊ทธ
  • Milten MCP
  • ๋ฌธ์˜ํ•˜๊ธฐ
ยฉ 2026 Milten์•ฝ๊ด€๊ฐœ์ธ์ •๋ณด
์ฟ ํ‚ค

์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

๋” ๋‚˜์€ ์‚ฌ์ดํŠธ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฟ ํ‚ค ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ๋ฐฉ์นจ.