๐Ÿ”ฅ ์…€ํ”„ํ˜ธ์ŠคํŒ… FireCrawl MCP ์„œ๋ฒ„ sse ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ

๊ธฐ์กด์— stdio ๋ฐฉ์‹์œผ๋กœ ๋˜์–ด ์žˆ๋˜ ์…€ํ”„ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” firecrawl-mcp๋ฅผ sse ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

https://www.gpters.org/dev/post/private-cost-firecrawl-self-PSp0iLLwBupaVBf

stdio ๋ฐฉ์‹๊ณผ sse ๋ฐฉ์‹

STDIO (Standard Input/Output)

STDIO๋Š” ํ‘œ์ค€ ์ž…๋ ฅ/์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์—์„œ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” stdin์„ ํ†ตํ•ด JSON ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  stdout์„ ํ†ตํ•ด ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค

  • ๋ฉ”์‹œ์ง€๋Š” ์ค„๋ฐ”๊ฟˆ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

  • ์„œ๋ฒ„๋Š” ๋กœ๊น…์„ ์œ„ํ•ด stderr๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  • ์„œ๋ฒ„๋Š” ์œ ํšจํ•œ MCP ๋ฉ”์‹œ์ง€๊ฐ€ ์•„๋‹Œ ๋‚ด์šฉ์„ stdout์— ์“ฐ๋ฉด ์•ˆ ๋˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋„ ์œ ํšจํ•œ MCP ๋ฉ”์‹œ์ง€๊ฐ€ ์•„๋‹Œ ๋‚ด์šฉ์„ ์„œ๋ฒ„์˜ stdin์— ์“ฐ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค

SSE (Server-Sent Events)

SSE๋Š” HTTP ์š”์ฒญ์„ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ํ†ต์‹ ์—๋Š” HTTP POST ์š”์ฒญ์„, ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ํ†ต์‹ ์—๋Š” Server-Sent Events๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๋Š” ํ‘œ์ค€ HTTP POST ์š”์ฒญ์„ ํ†ตํ•ด ๋ช…๋ น์„ ์„œ๋ฒ„์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค

  • ์„œ๋ฒ„๋Š” SSE ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ๋ฉ”์‹œ์ง€๋ฅผ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค

  • ๋ถ„์‚ฐ ์•„ํ‚คํ…์ฒ˜์™€ ์—ฌ๋Ÿฌ ๋™์‹œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๋ถ„๋ฆฌ๋œ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹ฌ์ง€์–ด ๋ถ„๋ฆฌ๋œ ๋…ธ๋“œ์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

๊ฐœ๋ฐœ์€ Windsurf๋กœ ์ง„ํ–‰

  • MCP ๊ณต์‹ python SDK ๋‚ด์šฉ ์ค‘ sse ๊ด€๋ จ ์ฝ”๋“œ, md ํŒŒ์ผ๋งŒ Windsurf์— ์ถ”๊ฐ€ํ•˜๊ณ  ์ง์ ‘ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰

  • ํฐ ๋ฌด๋ฆฌ ์—†์ด ์™„๋ฃŒ

๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋์œผ๋‹ˆ ํ…Œ์ŠคํŠธ

  • MCP ์„œ๋ฒ„ ์‹คํ–‰
    python firecrawl_mcp.py --transport sse --port 8000

  • MCP Inspector

    • MCP Inspector๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ MCP ์„œ๋ฒ„ ๊ตฌํ˜„์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ

    • ์„ค์น˜ํ•  ํ•„์š” ์—†์ด ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
      npx @modelcontextprotocol/inspector node build/index.js

      ์ด์ค‘ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ ๊ฒ€์‚ฌ๊ด€์„ ์ฝ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ ๋œ ๊ฒ€์€ ์ƒ‰ ํ™”๋ฉด์€ IP Inspector IP Inspector IP์ž…๋‹ˆ๋‹ค.
      • ํ‘œ์‹œ๋˜๋Š” ์ฃผ์†Œ๋กœ ์ ‘์†

    • Transport Type์„ SSE๋กœ ๋ณ€๊ฒฝ

      ๊ฒ€์€ ์ƒ‰ ๋ฐฐ๊ฒฝ์ด์žˆ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์Šคํฌ๋ฆฐ ์ƒท

      1. ๊ตฌ๋™์‹œํ‚จ MCP ์„œ๋ฒ„ ์ฃผ์†Œ ์ž…๋ ฅ

      2. Connect๋ฒ„ํŠผ์œผ๋กœ MCP ์„œ๋ฒ„ ์—ฐ๊ฒฐ

      3. Tools ํƒญ ์„ ํƒ

      4. List Tools ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Tool ๋ฆฌ์ŠคํŠธ ํ™”์ธ

      5. ํ…Œ์ŠคํŠธํ•  Tool ์„ ํƒ

      6. ์ฃผ์†Œ ์ž…๋ ฅ

      7. ์‹คํ–‰ ํ…Œ์ŠคํŠธ

Claude Desktop ์—ฐ๋™

  • ๊ธฐ๋ณธ์ ์œผ๋กœ Claude Desktop์€ stdio ๋ฐฉ์‹๋งŒ ์ง€์›

  • mcp-remote ๋ฅผ ์‚ฌ์šฉ sse ๋ฐฉ์‹ ์ ์šฉ ๊ฐ€๋Šฅ

    • ์„ค์น˜
      npm install -g mcp-remote

  • ์„ค์ •

	"mcpServers": {
		"firecrawl_mcp": {
			"command": "npx",
			"args": [
				"mcp-remote",
				"http://localhost:8000/firecrawl/sse"
			]
		}
	}

๊ฒฐ๋ก 

์ƒ๊ฐ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ง„ํ–‰๋์œผ๋ฉฐ ์•ž์œผ๋กœ sse ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์กด์— ๊ฐœ๋ฐœํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” Obsidisan MCP ์„œ๋ฒ„๋„ sse ๋ฐฉ์‹์œผ๋กœ ๊ต์ฒดํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

1
1๊ฐœ์˜ ๋‹ต๊ธ€

๐Ÿ‘‰ ์ด ๊ฒŒ์‹œ๊ธ€๋„ ์ฝ์–ด๋ณด์„ธ์š”