hamonikr-community-mcp

chaeya/hamonikr-community-mcp

3.2

If you are the rightful owner of hamonikr-community-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

The HamoniKR Community MCP Server facilitates AI programs to manage posts within the HamoniKR community efficiently.

Tools
7
Resources
0
Prompts
0

HamoniKR Community MCP Server

ํ•˜๋ชจ๋‹ˆ์นด ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•œ MCP (Model Context Protocol) ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์ด ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ AI ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ํ•˜๋ชจ๋‹ˆ์นด ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ฒŒ์‹œ๊ธ€ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋กœ๊ทธ์ธ ๊ด€๋ฆฌ: ์ž๋™ ๋กœ๊ทธ์ธ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ
  • ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ: ๊ณต์ง€์‚ฌํ•ญ ๋ฐ Q&A ๊ฒŒ์‹œํŒ์— ๊ธ€ ์ž‘์„ฑ
  • ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ: ํŠน์ • ๊ฒŒ์‹œ๊ธ€์˜ ๋‚ด์šฉ, ์ž‘์„ฑ์ž, ์ž‘์„ฑ์ผ ๋“ฑ ์กฐํšŒ
  • ๋Œ“๊ธ€ ์ž‘์„ฑ: ํŠน์ • ๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€ ์ถ”๊ฐ€
  • ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •: ๊ธฐ์กด ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •
  • ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ: ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ
  • ์ƒํƒœ ํ™•์ธ: ๋กœ๊ทธ์ธ ์ƒํƒœ ๋ฐ ์„ธ์…˜ ์ •๋ณด ์กฐํšŒ

์„ค์น˜ ๋ฐ ์„ค์ •

git clone https://github.com/chaeya/hamonikr-community-mcp.git
cd hamonikr-community-mcp

# 1. ์„ค์น˜ (Playwright ๋ธŒ๋ผ์šฐ์ € ํฌํ•จ ์ž๋™ ์„ค์น˜)
npm install

# 2. ๋นŒ๋“œ
npm run build

# 3. ์‹œ์ž‘ (๊ธฐ๋ณธ์ ์œผ๋กœ SSE ์„œ๋ฒ„)
npm start

์‚ฌ์šฉ์ž ์ž๊ฒฉ์ฆ๋ช… ์„ค์ •

๋ณด์•ˆ์„ ์œ„ํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค:

export HAMONIKR_USERNAME="your-email@example.com"
export HAMONIKR_PASSWORD="your-password"

๋˜๋Š” .env ํŒŒ์ผ์„ ์ƒ์„ฑ:

echo "HAMONIKR_USERNAME=your-email@example.com" > .env
echo "HAMONIKR_PASSWORD=your-password" >> .env
chmod 600 .env

โš ๏ธ ์ค‘์š”: config/default.json์— ์ง์ ‘ ์ž๊ฒฉ์ฆ๋ช…์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์€ ๋ณด์•ˆ์ƒ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์„ค์ • ๋ฐฉ๋ฒ•์€ ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

MCP ํด๋ผ์ด์–ธํŠธ ์„ค์ •

์ด ์„œ๋ฒ„๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • stdio ๋ฐฉ์‹: ๋กœ์ปฌ์—์„œ ์ง์ ‘ ์‹คํ–‰ (Claude Code, Cursor ๋“ฑ)
  • SSE ๋ฐฉ์‹: ์›๊ฒฉ ์„œ๋ฒ„๋กœ ์‹คํ–‰ (์›น ํด๋ผ์ด์–ธํŠธ ๋“ฑ)
1. stdio ๋ฐฉ์‹ (๋กœ์ปฌ ์‚ฌ์šฉ)

Claude Code์—์„œ ์„ค์ •:

  1. Claude Code ์„ค์ • ํŒŒ์ผ ์—ด๊ธฐ:

    # macOS
    ~/.claude/claude_code_config.json
    
    # Windows
    %USERPROFILE%\.claude\claude_code_config.json
    
    # Linux
    ~/.claude/claude_code_config.json
    
  2. ๋‹ค์Œ ์„ค์ • ์ถ”๊ฐ€:

    {
      "mcpServers": {
        "hamonikr-community": {
          "command": "node",
          "args": ["/full/path/to/hamonikr-community-mcp/dist/index.js"],
          "env": {
            "HAMONIKR_USERNAME": "your-email@example.com",
            "HAMONIKR_PASSWORD": "your-password"
          }
        }
      }
    }
    

Cursor์—์„œ ์„ค์ •:

  1. Cursor ์„ค์ • ํŒŒ์ผ ์œ„์น˜:

    # macOS
    ~/Library/Application Support/Cursor/User/mcp_servers.json
    
    # Windows
    %APPDATA%\Cursor\User\mcp_servers.json
    
    # Linux
    ~/.config/Cursor/User/mcp_servers.json
    
  2. ์„ค์ • ๋‚ด์šฉ:

    {
      "mcpServers": {
        "hamonikr-community": {
          "command": "node",
          "args": ["/full/path/to/hamonikr-community-mcp/dist/index.js"],
          "env": {
            "HAMONIKR_USERNAME": "your-email@example.com",
            "HAMONIKR_PASSWORD": "your-password"
          }
        }
      }
    }
    

Continue ๋“ฑ ๊ธฐํƒ€ MCP ์ง€์› ๋„๊ตฌ:

๋Œ€๋ถ€๋ถ„์˜ MCP ํด๋ผ์ด์–ธํŠธ๋Š” ๋น„์Šทํ•œ ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

{
  "mcpServers": {
    "hamonikr-community": {
      "command": "node",
      "args": ["/absolute/path/to/hamonikr-community-mcp/dist/index.js"],
      "env": {
        "HAMONIKR_USERNAME": "your-email@example.com",
        "HAMONIKR_PASSWORD": "your-password"
      }
    }
  }
}

์ฃผ์˜์‚ฌํ•ญ:

  • ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ํ•„์ˆ˜ (์˜ˆ: /home/username/hamonikr-community-mcp/dist/index.js)
  • ๋จผ์ € npm install && npm run build ์‹คํ–‰ ํ•„์š”
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ž๊ฒฉ์ฆ๋ช… ์„ค์ • (๋ณด์•ˆ์ƒ ๊ถŒ์žฅ)
2. SSE ๋ฐฉ์‹ (์›๊ฒฉ ์‚ฌ์šฉ)

์„œ๋ฒ„ ์‹œ์ž‘:

# ๊ธฐ๋ณธ ์‹œ์ž‘ (SSE ๋ชจ๋“œ)
npm start

# ๊ฐœ๋ฐœ ๋ชจ๋“œ
npm run dev

# stdio ๋ชจ๋“œ๋กœ ์‹œ์ž‘ํ•˜๋ ค๋ฉด
npm run start:stdio

ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ:

  • SSE ์—”๋“œํฌ์ธํŠธ: http://localhost:5678/sse
  • Health Check: http://localhost:5678/health

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •:

export PORT=5678
export CORS_ORIGIN="*"  # ๋˜๋Š” ํŠน์ • ๋„๋ฉ”์ธ
export HAMONIKR_USERNAME="your-email@example.com"
export HAMONIKR_PASSWORD="your-password"

์›น ํด๋ผ์ด์–ธํŠธ ํ…Œ์ŠคํŠธ: ๋ธŒ๋ผ์šฐ์ €์—์„œ test-sse-client.html์„ ์—ด์–ด์„œ SSE ์—ฐ๊ฒฐ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐํƒ€ MCP ํด๋ผ์ด์–ธํŠธ์—์„œ SSE ์‚ฌ์šฉ:

// JavaScript ์˜ˆ์ œ
const eventSource = new EventSource('http://localhost:5678/sse');
eventSource.onmessage = function(event) {
  const data = JSON.parse(event.data);
  console.log('MCP Response:', data);
};

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ (Tools)

1. hamonikr_login

ํ•˜๋ชจ๋‹ˆ์นด ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜: ์—†์Œ

์˜ˆ์ œ:

{
  "name": "hamonikr_login",
  "arguments": {}
}

2. hamonikr_create_post

์ƒˆ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • title: ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ (๋ฌธ์ž์—ด, ํ•„์ˆ˜)
  • content: ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ (๋ฌธ์ž์—ด, ํ•„์ˆ˜)
  • board: ๊ฒŒ์‹œํŒ ํƒ€์ž… (๋ฌธ์ž์—ด, ํ•„์ˆ˜) - notice ๋˜๋Š” qna

์˜ˆ์ œ:

{
  "name": "hamonikr_create_post",
  "arguments": {
    "title": "ํ•˜๋ชจ๋‹ˆ์นด ์‚ฌ์šฉ ํŒ",
    "content": "์œ ์šฉํ•œ ํ•˜๋ชจ๋‹ˆ์นด ์‚ฌ์šฉ ํŒ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.",
    "board": "qna"
  }
}

3. hamonikr_add_comment

ํŠน์ • ๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • postUrl: ๋Œ“๊ธ€์„ ๋‹ฌ ๊ฒŒ์‹œ๊ธ€์˜ URL (๋ฌธ์ž์—ด, ํ•„์ˆ˜)
  • content: ๋Œ“๊ธ€ ๋‚ด์šฉ (๋ฌธ์ž์—ด, ํ•„์ˆ˜)

์˜ˆ์ œ:

{
  "name": "hamonikr_add_comment",
  "arguments": {
    "postUrl": "https://hamonikr.org/hamoni_board/144520",
    "content": "์œ ์šฉํ•œ ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!"
  }
}

4. hamonikr_edit_post

๊ธฐ์กด ๊ฒŒ์‹œ๊ธ€์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • postUrl: ์ˆ˜์ •ํ•  ๊ฒŒ์‹œ๊ธ€์˜ URL (๋ฌธ์ž์—ด, ํ•„์ˆ˜)
  • title: ์ƒˆ๋กœ์šด ์ œ๋ชฉ (๋ฌธ์ž์—ด, ์„ ํƒ์‚ฌํ•ญ)
  • content: ์ƒˆ๋กœ์šด ๋‚ด์šฉ (๋ฌธ์ž์—ด, ์„ ํƒ์‚ฌํ•ญ)

์˜ˆ์ œ:

{
  "name": "hamonikr_edit_post",
  "arguments": {
    "postUrl": "https://hamonikr.org/hamoni_board/144520",
    "title": "์ˆ˜์ •๋œ ์ œ๋ชฉ",
    "content": "์ˆ˜์ •๋œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค."
  }
}

5. hamonikr_get_post

ํŠน์ • ๊ฒŒ์‹œ๊ธ€์˜ ๋‚ด์šฉ์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • postUrl: ์กฐํšŒํ•  ๊ฒŒ์‹œ๊ธ€์˜ URL (๋ฌธ์ž์—ด, ํ•„์ˆ˜)

์˜ˆ์ œ:

{
  "name": "hamonikr_get_post",
  "arguments": {
    "postUrl": "https://hamonikr.org/hamoni_board/144520"
  }
}

์‘๋‹ต ์˜ˆ์‹œ:

{
  "success": true,
  "message": "๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์กฐํšŒํ–ˆ์Šต๋‹ˆ๋‹ค.",
  "post": {
    "title": "์œˆ๋„์šฐ์˜ ์Œ์„ฑ์ž…๋ ฅ ๊ธฐ๋Šฅ ์ฒ˜๋ฆ„ ํ•˜๋ชจ๋‹ˆ์นด์—์„œ๋„ ์Œ์„ฑ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ• ๊นŒ์š”?",
    "content": "์œˆ๋„์—์„œ๋Š” ์ปจํŠธ๋กค + H ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ด๋ ‡๊ฒŒ ์Œ์„ฑ ์ž…๋ ฅ ์ฐฝ์ด ๋‚˜ํƒ€๋‚˜๊ณ  ์Œ์„ฑ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋ชจ๋‹ˆ์นด์—์„œ๋„ ์Œ์„ฑ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ• ๊นŒ์š”?",
    "author": "์˜ฅํฌ์ •",
    "date": "2025.06.25 22:39",
    "views": 259,
    "comments": 3,
    "url": "https://hamonikr.org/hamoni_board/144520"
  }
}

6. hamonikr_delete_post

๊ฒŒ์‹œ๊ธ€์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • postUrl: ์‚ญ์ œํ•  ๊ฒŒ์‹œ๊ธ€์˜ URL (๋ฌธ์ž์—ด, ํ•„์ˆ˜)

์˜ˆ์ œ:

{
  "name": "hamonikr_delete_post",
  "arguments": {
    "postUrl": "https://hamonikr.org/hamoni_board/144520"
  }
}

7. hamonikr_check_status

ํ˜„์žฌ ๋กœ๊ทธ์ธ ์ƒํƒœ์™€ ์„ธ์…˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜: ์—†์Œ

์˜ˆ์ œ:

{
  "name": "hamonikr_check_status",
  "arguments": {}
}

API ์‘๋‹ต ํ˜•์‹

๋ชจ๋“  ๋„๊ตฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์˜ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค:

์„ฑ๊ณต ์‘๋‹ต

{
  "success": true,
  "message": "์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.",
  "postUrl": "https://hamonikr.org/hamoni_board/144520",
  "postId": "144520"
}

์‹คํŒจ ์‘๋‹ต

{
  "success": false,
  "message": "์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค."
}

๊ธฐ์ˆ ์  ์„ธ๋ถ€์‚ฌํ•ญ

  • ์–ธ์–ด: TypeScript
  • ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™”: Playwright
  • ํ”„๋กœํ† ์ฝœ: Model Context Protocol (MCP)
  • ์ง€์› Node.js ๋ฒ„์ „: 18.0.0 ์ด์ƒ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

hamonikr-community-mcp/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ index.ts              # MCP ์„œ๋ฒ„ ์ง„์ž…์  (stdio)
โ”‚   โ”œโ”€โ”€ sse-server.ts         # SSE ์„œ๋ฒ„ ์ง„์ž…์ 
โ”‚   โ”œโ”€โ”€ hamonikr-client.ts    # ํ•˜๋ชจ๋‹ˆ์นด ์ปค๋ฎค๋‹ˆํ‹ฐ ํด๋ผ์ด์–ธํŠธ
โ”‚   โ”œโ”€โ”€ browser-manager.ts    # ๋ธŒ๋ผ์šฐ์ € ๊ด€๋ฆฌ์ž
โ”‚   โ””โ”€โ”€ types.ts              # ํƒ€์ž… ์ •์˜
โ”œโ”€โ”€ config/
โ”‚   โ””โ”€โ”€ default.json          # ์„ค์ • ํŒŒ์ผ
โ”œโ”€โ”€ docs/                     # ๋ฌธ์„œ
โ”œโ”€โ”€ dist/                     # ์ปดํŒŒ์ผ๋œ JavaScript ํŒŒ์ผ
โ”œโ”€โ”€ test-sse-client.html      # SSE ํ…Œ์ŠคํŠธ ํด๋ผ์ด์–ธํŠธ
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ tsconfig.json
โ””โ”€โ”€ README.md

๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ

๊ฐœ๋ฐœ ๋ชจ๋“œ ์‹คํ–‰

# SSE ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๋ชจ๋“œ
npm run dev

# stdio ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๋ชจ๋“œ
npm run dev:stdio

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

npm test

๋นŒ๋“œ

npm run build

๋ณด์•ˆ ์ฃผ์˜์‚ฌํ•ญ

  • ์„ค์ • ํŒŒ์ผ์— ์ €์žฅ๋œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜์„ธ์š”
  • ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๊ฒฉ ์ฆ๋ช…์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค
  • ์ด ๋„๊ตฌ๋Š” ์Šน์ธ๋œ ์‚ฌ์šฉ์ž๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

๋ผ์ด์„ ์Šค

MIT License

๊ธฐ์—ฌํ•˜๊ธฐ

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Push to the branch
  5. Create a Pull Request

์ง€์›

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ ์š”์ฒญ์ด ์žˆ์œผ๋ฉด Issue๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.