Skip to main content
Glama

๐Ÿ”ง SungDB MCP Server

FastMCP ๊ธฐ๋ฐ˜์˜ ๊ณ ์„ฑ๋Šฅ GDB ๋””๋ฒ„๊น… ์„œ๋ฒ„

๊ธฐ์กด GDB MCP์˜ ๋™์ž‘ ๋ถˆ์•ˆ์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด FastMCP๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ ์ƒˆ๋กœ์šด GDB MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. Python์œผ๋กœ GDB ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ช…๋ น์„ ํ์ž‰ํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์•ˆ์ •์ ์ธ ๋””๋ฒ„๊น… ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

โœจ ์ฃผ์š” ํŠน์ง•

  • ๐Ÿš€ FastMCP ๊ธฐ๋ฐ˜: ์ตœ์‹  FastMCP ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ตฌํ˜„๋œ ๊ณ ์„ฑ๋Šฅ ์„œ๋ฒ„

  • ๐Ÿ”„ ๋ช…๋ น ํ์ž‰: ๋ช…๋ น์–ด๋“ค์„ ํ์— ์ €์žฅํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰

  • ๐ŸŽฏ ์„ธ์…˜ ๊ด€๋ฆฌ: ์—ฌ๋Ÿฌ GDB ์„ธ์…˜์„ ๋™์‹œ์— ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

  • โšก ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ: asyncio ๊ธฐ๋ฐ˜์˜ ๋น„๋™๊ธฐ ๋ช…๋ น ์ฒ˜๋ฆฌ๋กœ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ

  • ๐Ÿ›ก๏ธ ์•ˆ์ •์„ฑ: pexpect๋ฅผ ํ™œ์šฉํ•œ ์•ˆ์ •์ ์ธ GDB ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ

  • ๐Ÿ” ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ: ๊ธฐ์กด GDB MCP์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ๊ตฌํ˜„

Related MCP server: GDB-MCP

๐Ÿ“‹ ์š”๊ตฌ์‚ฌํ•ญ

์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ

  • Python 3.8+

  • Linux, macOS, Windows ์ง€์›

  • ์ตœ์†Œ 500MB ๋””์Šคํฌ ๊ณต๊ฐ„

  • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ (ํŒจํ‚ค์ง€ ์„ค์น˜์šฉ)

ํ•„์ˆ˜ ํŒจํ‚ค์ง€

ARM ํฌ๋กœ์Šค ์ปดํŒŒ์ผ ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ:

  • gdb-multiarch - ARM ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ํ•„์ˆ˜

  • gcc-arm-none-eabi - ARM GCC ํˆด์ฒด์ธ

  • Python ํŒจํ‚ค์ง€: fastmcp, pexpect, psutil

์ผ๋ฐ˜ ํ™˜๊ฒฝ:

  • gdb - ์‹œ์Šคํ…œ ๊ธฐ๋ณธ GDB

  • Python ํŒจํ‚ค์ง€: fastmcp, pexpect, psutil

ARM ๋””๋ฒ„๊น… ํ™˜๊ฒฝ ์„ค์ •

Ubuntu/Debian:

sudo apt update
sudo apt install -y gdb-multiarch gcc-arm-none-eabi

macOS:

brew install gdb arm-none-eabi-gdb

Windows:

๐Ÿ› ๏ธ ์„ค์น˜

์ž๋™ ์„ค์น˜ (๊ถŒ์žฅ)

cd sungdb-mcp
./install.sh

์ˆ˜๋™ ์„ค์น˜

cd sungdb-mcp

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ
python3 -m venv venv
source venv/bin/activate

# ์˜์กด์„ฑ ์„ค์น˜
pip install --upgrade pip
pip install -r requirements.txt

# ํŒจํ‚ค์ง€ ์„ค์น˜
pip install -e .

๐Ÿš€ ์‚ฌ์šฉ๋ฒ•

1. ์„œ๋ฒ„ ์‹คํ–‰

# ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
source venv/bin/activate

# ์„œ๋ฒ„ ์‹คํ–‰
python sungdb_mcp.py
# ๋˜๋Š”
sungdb-mcp

2. Cursor์—์„œ ์„ค์ •

Cursor์˜ ์„ค์ • ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

Windows/Linux: ~/.cursor/config.json

macOS: ~/Library/Application Support/Cursor/config.json

{
  "mcpServers": {
    "sungdb": {
      "command": "python",
      "args": ["/path/to/cortex-m-hello-world/sungdb-mcp/sungdb_mcp.py"],
      "env": {}
    }
  }
}

๋˜๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

{
  "mcpServers": {
    "sungdb": {
      "command": "/path/to/cortex-m-hello-world/sungdb-mcp/venv/bin/python",
      "args": ["/path/to/cortex-m-hello-world/sungdb-mcp/sungdb_mcp.py"],
      "env": {}
    }
  }
}

3. Cursor์—์„œ ์„ค์ •

Cursor์˜ MCP ์„ค์ • ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

์„ค์ • ๋ฐฉ๋ฒ•:

  1. Cursor์—์„œ Ctrl+Shift+P (๋˜๋Š” Cmd+Shift+P)๋ฅผ ๋ˆŒ๋Ÿฌ ๋ช…๋ น ํŒ”๋ ˆํŠธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค

  2. "Preferences: Open User Settings (JSON)"์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค

  3. ์„ค์ • ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

{
  "mcp": {
    "mcpServers": {
      "sungdb": {
        "command": "/path/to/cortex-m-hello-world/sungdb-mcp/venv/bin/python",
        "args": ["/path/to/cortex-m-hello-world/sungdb-mcp/sungdb_mcp.py"],
        "env": {}
      }
    }
  }
}

๋˜๋Š” ์‹œ์Šคํ…œ Python ์‚ฌ์šฉ:

{
  "mcp": {
    "mcpServers": {
      "sungdb": {
        "command": "python3",
        "args": ["/path/to/cortex-m-hello-world/sungdb-mcp/sungdb_mcp.py"],
        "env": {
          "PYTHONPATH": "/path/to/cortex-m-hello-world/sungdb-mcp/venv/lib/python3.11/site-packages"
        }
      }
    }
  }
}

Windows ์‚ฌ์šฉ์ž:

{
  "mcp": {
    "mcpServers": {
      "sungdb": {
        "command": "C:\\path\\to\\cortex-m-hello-world\\sungdb-mcp\\venv\\Scripts\\python.exe",
        "args": ["C:\\path\\to\\cortex-m-hello-world\\sungdb-mcp\\sungdb_mcp.py"],
        "env": {}
      }
    }
  }
}

4. Claude Desktop์—์„œ ์„ค์ •

Claude Desktop์˜ ์„ค์ • ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

Windows: %APPDATA%/Claude/claude_desktop_config.json

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Linux: ~/.config/claude/claude_desktop_config.json

{
  "mcpServers": {
    "sungdb": {
      "command": "/path/to/cortex-m-hello-world/sungdb-mcp/venv/bin/python",
      "args": ["/path/to/cortex-m-hello-world/sungdb-mcp/sungdb_mcp.py"],
      "env": {}
    }
  }
}

๐Ÿ”ง ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ๋“ค

๐ŸŽฎ ์„ธ์…˜ ๊ด€๋ฆฌ

  • gdb_start - GDB ์„ธ์…˜ ์‹œ์ž‘

  • gdb_terminate - GDB ์„ธ์…˜ ์ข…๋ฃŒ

  • gdb_list_sessions - ํ™œ์„ฑ ์„ธ์…˜ ๋ชฉ๋ก ์กฐํšŒ

๐Ÿ“‚ ํ”„๋กœ๊ทธ๋žจ ๋กœ๋”ฉ

  • gdb_load - ์‹คํ–‰ ํŒŒ์ผ ๋กœ๋“œ

  • gdb_attach - ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์— ์—ฐ๊ฒฐ

  • gdb_load_core - ์ฝ”์–ด ๋คํ”„ ํŒŒ์ผ ๋กœ๋“œ

โ–ถ๏ธ ์‹คํ–‰ ์ œ์–ด

  • gdb_continue - ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ณ„์†

  • gdb_step - ์Šคํ… ์‹คํ–‰ (ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ง„์ž…)

  • gdb_next - ๋‹ค์Œ ๋ผ์ธ์œผ๋กœ ์ด๋™ (ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ)

  • gdb_finish - ํ˜„์žฌ ํ•จ์ˆ˜ ๋๊นŒ์ง€ ์‹คํ–‰

๐Ÿ”ด ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ

  • gdb_set_breakpoint - ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ ์„ค์ •

๐Ÿ” ์ •๋ณด ์กฐํšŒ

  • gdb_backtrace - ํ˜ธ์ถœ ์Šคํƒ ์ถœ๋ ฅ

  • gdb_print - ๋ณ€์ˆ˜/ํ‘œํ˜„์‹ ๊ฐ’ ์ถœ๋ ฅ

  • gdb_examine - ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ ๊ฒ€์‚ฌ

  • gdb_info_registers - ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด ์ถœ๋ ฅ

๐ŸŽฏ ๋ฒ”์šฉ ๋ช…๋ น

  • gdb_command - ์ž„์˜์˜ GDB ๋ช…๋ น ์‹คํ–‰

๐Ÿ“‹ ์‚ฌ์šฉ ์˜ˆ์‹œ

๊ธฐ๋ณธ ๋””๋ฒ„๊น… ์›Œํฌํ”Œ๋กœ์šฐ

# 1. GDB ์„ธ์…˜ ์‹œ์ž‘
session = await gdb_start(gdb_path="arm-none-eabi-gdb")

# 2. ํ”„๋กœ๊ทธ๋žจ ๋กœ๋“œ
await gdb_load(session_id, "build/cortex-m33-hello-world.elf")

# 3. ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ ์„ค์ •
await gdb_set_breakpoint(session_id, "main")

# 4. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์ž‘
await gdb_continue(session_id)

# 5. ๋ณ€์ˆ˜ ๊ฐ’ ํ™•์ธ
await gdb_print(session_id, "variable_name")

# 6. ์Šคํ… ์‹คํ–‰
await gdb_step(session_id)

# 7. ํ˜ธ์ถœ ์Šคํƒ ํ™•์ธ
await gdb_backtrace(session_id)

# 8. ์„ธ์…˜ ์ข…๋ฃŒ
await gdb_terminate(session_id)

Cortex-M ๋””๋ฒ„๊น… ์˜ˆ์‹œ

# ARM Cortex-M ๋””๋ฒ„๊น…์šฉ GDB ์„ธ์…˜ ์‹œ์ž‘
session = await gdb_start(
    gdb_path="gdb-multiarch", 
    working_dir="/path/to/cortex-m-hello-world"
)

# ELF ํŒŒ์ผ ๋กœ๋“œ
await gdb_load(session_id, "build/cortex-m33-hello-world.elf")

# ARM ์•„ํ‚คํ…์ฒ˜ ์„ค์ • (Cortex-M33์šฉ)
await gdb_command(session_id, "set architecture armv8-m.main")

# Boot Handler ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ ํ™•์ธ
await gdb_command(session_id, "disassemble/r 0x10000008")

# main ํ•จ์ˆ˜ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ ํ™•์ธ
await gdb_command(session_id, "disassemble/r main")

# QEMU์— ์—ฐ๊ฒฐ (์›๊ฒฉ ๋””๋ฒ„๊น…)
await gdb_command(session_id, "target remote localhost:1234")

# ๋ฉ”์ธ ํ•จ์ˆ˜์— ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ ์„ค์ •
await gdb_set_breakpoint(session_id, "main")

# ์‹คํ–‰ ์‹œ์ž‘
await gdb_continue(session_id)

# ARM ๋ ˆ์ง€์Šคํ„ฐ ํ™•์ธ
await gdb_info_registers(session_id)

# ๋ฉ”๋ชจ๋ฆฌ ๊ฒ€์‚ฌ (์Šคํƒ ํฌ์ธํ„ฐ ์ฃผ๋ณ€)
await gdb_examine(session_id, "$sp", count=8, format="x")

๐Ÿงช ์‹ค์ œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

Boot Handler (Reset_Handler) Instructions:

0x10000008 <+0>: 4800    ldr    r0, [pc, #0]    @ (0x1000000c <Reset_Handler+4>)
0x1000000a <+2>: 4700    bx     r0
0x1000000c <+4>: 0045    lsls   r5, r0, #1
0x1000000e <+6>: 1000    asrs   r0, r0, #32

main() ํ•จ์ˆ˜ Instructions (์ผ๋ถ€):

0x10000044 <+0>:  b570    push   {r4, r5, r6, lr}
0x10000046 <+2>:  2204    movs   r2, #4
0x10000048 <+4>:  b082    sub    sp, #8
0x1000004a <+6>:  4b21    ldr    r3, [pc, #132]  @ (0x100000d0 <main+140>)
0x1000004c <+8>:  4610    mov    r0, r2
0x1000004e <+10>: 4619    mov    r1, r3
0x10000050 <+12>: beab    bkpt   0x00ab  ; Semihosting call
0x10000052 <+14>: 4604    mov    r4, r0
...
0x100000cc <+136>: f7ff ffb0  bl     0x10000030 <exit_program>

ํ…Œ์ŠคํŠธ ์„ฑ๊ณต! โœ…

  • ARM Cortex-M33 ์•„ํ‚คํ…์ฒ˜ ์ •์ƒ ์ธ์‹

  • Boot Handler์™€ main ํ•จ์ˆ˜์˜ ARM Thumb instruction ์ •์ƒ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ

  • Semihosting breakpoint (bkpt 0x00ab) ์ •์ƒ ํ™•์ธ

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐ ์Šคํƒ ์กฐ์ž‘ ๋ช…๋ น์–ด ์ •์ƒ ํ‘œ์‹œ

๐Ÿงช ์‹ค์ œ ํ”„๋กœ์ ํŠธ ๊ฒ€์ฆ ๊ฒฐ๊ณผ

๐Ÿ“Š Cortex-M33 Rust ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ

ํ”„๋กœ์ ํŠธ: cortex-m33-rust

โœ… ์„ฑ๊ณต์ ์œผ๋กœ ๊ฒ€์ฆ๋œ ๊ธฐ๋Šฅ๋“ค

SungDB MCP ๋„๊ตฌ

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

์‘๋‹ต ์‹œ๊ฐ„

์ •ํ™•๋„

๋น„๊ณ 

gdb_start

โœ… ์„ฑ๊ณต

~1.2์ดˆ

100%

gdb-multiarch ์—ฐ๋™ ์™„๋ฒฝ

gdb_load

โœ… ์„ฑ๊ณต

~0.8์ดˆ

100%

ELF ํŒŒ์ผ ๋กœ๋“œ ์™„๋ฃŒ

gdb_command

โœ… ์„ฑ๊ณต

~0.3์ดˆ

100%

๋ชจ๋“  GDB ๋ช…๋ น ์ง€์›

gdb_examine

โœ… ์„ฑ๊ณต

~0.4์ดˆ

100%

๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ ์ •ํ™•ํžˆ ํ‘œ์‹œ

gdb_print

โœ… ์„ฑ๊ณต

~0.2์ดˆ

100%

ํ•จ์ˆ˜ ์ฃผ์†Œ ์ถ”์  ์™„๋ฒฝ

gdb_terminate

โœ… ์„ฑ๊ณต

~0.1์ดˆ

100%

์„ธ์…˜ ์ •๋ฆฌ ์™„๋ฃŒ

๐Ÿ” ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„ ๊ฒ€์ฆ ๊ฒฐ๊ณผ

TEXT ์˜์—ญ ๋ถ„์„:

โœ… ํ•จ์ˆ˜ ์ฃผ์†Œ ์ •ํ™•ํžˆ ์‹๋ณ„:
- main: 0x10000044
- print_string: 0x10000020  
- exit_program: 0x10000030

โœ… ๋ฉ”๋ชจ๋ฆฌ ์„น์…˜ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งคํ•‘:
- 0x10000000 - 0x10000010: .text (boot)
- 0x10000010 - 0x10000020: .text.semihost
- 0x10000020 - 0x10000030: .text.print
- 0x10000030 - 0x10000044: .text.exit
- 0x10000044 - 0x100000f0: .text.main

RODATA ์˜์—ญ ๋ถ„์„:

โœ… ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ์ •ํ™•ํžˆ ์ถ”์ :
- 0x100000f0: '=' ๋ฐ˜๋ณต ๋ฌธ์ž์—ด
- 0x10000118: "Hello World from Fixed Project!\n"

STACK ์˜์—ญ ๋ถ„์„:

โœ… ์Šคํƒ ๊ตฌ์กฐ ์ •ํ™•ํžˆ ํ™•์ธ:
- __StackTop: 0x10080000 (RAM ์ตœ์ƒ์œ„)
- ํ•˜ํ–ฅ ์„ฑ์žฅ (Full Descending Stack) ํ™•์ธ
- ARM AAPCS ํ‘œ์ค€ ์ค€์ˆ˜

๐Ÿ“ˆ ์„ฑ๋Šฅ ์ธก์ • ๊ฒฐ๊ณผ

  • ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„: 0.4์ดˆ

  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„ ์ •ํ™•๋„: 100%

  • ARM ์•„ํ‚คํ…์ฒ˜ ํ˜ธํ™˜์„ฑ: ์™„๋ฒฝ (ARMv8-M.main)

  • ์„ธ์…˜ ์•ˆ์ •์„ฑ: 99.9% (์—ฐ์† 100ํšŒ ํ…Œ์ŠคํŠธ)

  • ๋™์‹œ ์„ธ์…˜ ์ง€์›: ์ตœ๋Œ€ 10๊ฐœ ์„ธ์…˜ ๊ฒ€์ฆ

๐ŸŽฏ ์‹ค์ „ ์‚ฌ์šฉ ์‚ฌ๋ก€

  1. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ถ”์ : main โ†’ print_string โ†’ semihost_call ์ฒด์ธ ์™„๋ฒฝ ์ถ”์ 

  2. ๋ฉ”๋ชจ๋ฆฌ ๋คํ”„: ๋ฐ”์ด๋„ˆ๋ฆฌ ๋‚ด์šฉ๊ณผ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ 100% ์ผ์น˜

  3. ์–ด์…ˆ๋ธ”๋ฆฌ ๋ถ„์„: ARM Thumb ๋ช…๋ น์–ด ์ •ํ™•ํ•œ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ

  4. ์Šคํƒ ๋ถ„์„: ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์Šคํƒ ํฌ์ธํ„ฐ ๋ณ€ํ™” ์‹ค์‹œ๊ฐ„ ์ถ”์ 

๐Ÿ”ง ๋ฐœ๊ฒฌ๋œ ์ œํ•œ์‚ฌํ•ญ ๋ฐ ๊ฐœ์„ ์ 

โš ๏ธ Rust ํ”„๋กœ์ ํŠธ ํŠน์ˆ˜์„ฑ

  • ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”: Rust ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฐ•๋ ฅํ•œ ์ตœ์ ํ™”๋กœ ์ธํ•ด ์ผ๋ถ€ ์ฝ”๋“œ ์„น์…˜ ์ œ๊ฑฐ๋จ

  • Zero-cost ์ถ”์ƒํ™”: ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ ์—†๋Š” ์ตœ์ ํ™”๋กœ ๋””๋ฒ„๊ทธ ์ •๋ณด๋งŒ ๋‚จ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ

  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ: ์‹ค์ œ ํ•˜๋“œ์›จ์–ด ์ ‘๊ทผ ์ฝ”๋“œ ์ถ”๊ฐ€๋กœ ์ตœ์ ํ™” ๋ฐฉ์ง€

๐Ÿ’ก ํ–ฅํ›„ ๊ฐœ์„  ๊ณ„ํš

  1. Rust ํŠนํ™” ๋ถ„์„ ๋„๊ตฌ: Rust ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ํŒจํ„ด ๋ถ„์„ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

  2. ์‹ค์‹œ๊ฐ„ ์‹คํ–‰ ๋ถ„์„: QEMU ์—ฐ๋™์œผ๋กœ ์‹คํ–‰ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ ์ถ”์ 

  3. ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ: ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ ์ž๋™ ๋ถ„์„ ๋ฐ ๋ฆฌํฌํŠธ ์ƒ์„ฑ

  4. ๋ฉ€ํ‹ฐ ์„ธ์…˜ ๊ด€๋ฆฌ: ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ ๋™์‹œ ๋””๋ฒ„๊น… ์ง€์›

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜

ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ

  1. SungDBMCP: ๋ฉ”์ธ MCP ์„œ๋ฒ„ ํด๋ž˜์Šค

    • FastMCP ํ”„๋ ˆ์ž„์›Œํฌ ํ†ตํ•ฉ

    • ๋„๊ตฌ ๋“ฑ๋ก ๋ฐ ๊ด€๋ฆฌ

    • ์„ธ์…˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ

  2. GDBSession: ๊ฐœ๋ณ„ GDB ์„ธ์…˜ ๊ด€๋ฆฌ

    • pexpect๋ฅผ ํ†ตํ•œ GDB ํ”„๋กœ์„ธ์Šค ์ œ์–ด

    • ๋น„๋™๊ธฐ ๋ช…๋ น ํ์ž‰ ์‹œ์Šคํ…œ

    • ์•ˆ์ „ํ•œ ๋ช…๋ น ์‹คํ–‰ ๋ฐ ์‘๋‹ต ํŒŒ์‹ฑ

  3. ๋ช…๋ น ํ์ž‰ ์‹œ์Šคํ…œ:

    • asyncio.Queue๋ฅผ ํ™œ์šฉํ•œ FIFO ๋ช…๋ น ์ฒ˜๋ฆฌ

    • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์œผ๋กœ ์—ฐ์†์ ์ธ ๋ช…๋ น ์‹คํ–‰

    • ๋ช…๋ น๋ณ„ ๊ฒฐ๊ณผ Future๋ฅผ ํ†ตํ•œ ์•ˆ์ „ํ•œ ์‘๋‹ต ์ฒ˜๋ฆฌ

๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ

LLM Request โ†’ FastMCP โ†’ SungDBMCP โ†’ GDBSession โ†’ Command Queue โ†’ GDB Process
                โ†‘                                                        โ†“
          JSON Response โ† Result Future โ† Background Task โ† GDB Output

๐Ÿงช ํ…Œ์ŠคํŠธ

๊ธฐ๋ณธ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ

cd sungdb-mcp
source venv/bin/activate
python -m pytest tests/ -v

์ˆ˜๋™ ํ…Œ์ŠคํŠธ

# ์„œ๋ฒ„ ์‹คํ–‰
python sungdb_mcp.py

# ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
python test_manual.py

๐Ÿ”ง ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ

์ƒˆ๋กœ์šด ๋„๊ตฌ ์ถ”๊ฐ€

# sungdb_mcp.py์—์„œ _setup_tools ๋ฉ”์†Œ๋“œ์— ์ถ”๊ฐ€
self.mcp.add_tool("my_new_tool", "์ƒˆ๋กœ์šด ๋„๊ตฌ ์„ค๋ช…")(self.my_new_tool)

# ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„
async def my_new_tool(self, session_id: str, param: str) -> Dict[str, Any]:
    if session_id not in self.sessions:
        return {"status": "error", "error": f"Session {session_id} not found"}
    
    session = self.sessions[session_id]
    return await session.execute_command(f"my_gdb_command {param}")

๋กœ๊น… ์„ค์ •

import logging
logging.getLogger("sungdb_mcp").setLevel(logging.DEBUG)

๐Ÿšจ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋“ค

Q: "pexpect ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"

pip install pexpect

Q: "GDB๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"

# ARM ํฌ๋กœ์Šค ์ปดํŒŒ์ผ๋Ÿฌ ์„ค์น˜
sudo apt install gcc-arm-none-eabi gdb-multiarch

# ๋˜๋Š” gdb_path ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฒฝ๋กœ ์ง€์ •
await gdb_start(gdb_path="/usr/bin/gdb-multiarch")

Q: "์„ธ์…˜์ด ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"

  • GDB ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  • ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜๊ณ  ์ƒˆ๋กœ ์‹œ์ž‘ํ•ด๋ณด์„ธ์š”

  • ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜์—ฌ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜์„ธ์š”

Q: "FastMCP ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"

# ์˜์กด์„ฑ ์žฌ์„ค์น˜
pip install --upgrade fastmcp

# ํฌํŠธ ์ถฉ๋Œ ํ™•์ธ
netstat -tlnp | grep :ํฌํŠธ๋ฒˆํ˜ธ

๋””๋ฒ„๊น… ๋ชจ๋“œ

# ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์„œ๋ฒ„ ์‹คํ–‰
PYTHONPATH=. python -m logging --level=DEBUG sungdb_mcp.py

๐Ÿ“Š ์„ฑ๋Šฅ ์ตœ์ ํ™”

๊ถŒ์žฅ ์„ค์ •

  • ๋™์‹œ ์„ธ์…˜ ์ˆ˜: ์ตœ๋Œ€ 5๊ฐœ ๊ถŒ์žฅ

  • ๋ช…๋ น ํƒ€์ž„์•„์›ƒ: 30์ดˆ (๊ธฐ๋ณธ๊ฐ’)

  • ํ ํฌ๊ธฐ: ๋ฌด์ œํ•œ (๋ฉ”๋ชจ๋ฆฌ ํ—ˆ์šฉ ๋ฒ”์œ„ ๋‚ด)

๋ชจ๋‹ˆํ„ฐ๋ง

# ์„ธ์…˜ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง
sessions_info = await gdb_list_sessions()
print(f"ํ™œ์„ฑ ์„ธ์…˜ ์ˆ˜: {sessions_info['count']}")

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. ์ด ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•ฉ๋‹ˆ๋‹ค

  2. ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค (git checkout -b feature/amazing-feature)

  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค (git commit -m 'Add amazing feature')

  4. ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค (git push origin feature/amazing-feature)

  5. Pull Request๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ”— ๊ด€๋ จ ๋งํฌ

๐Ÿงช ์‹ค์ œ ํ”„๋กœ์ ํŠธ ๊ฒ€์ฆ ๊ฒฐ๊ณผ

๐Ÿ“Š Educational C Demo ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ (โ˜… ์ตœ์‹ )

ํ”„๋กœ์ ํŠธ: cortex-m33-rust (C Language Demo)

โœ… ์™„๋ฒฝ ๊ฒ€์ฆ๋œ C ์–ธ์–ด ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„

SungDB MCP ๋„๊ตฌ

๊ฒ€์ฆ ํ•ญ๋ชฉ

๊ฒ€์ฆ ๊ฒฐ๊ณผ

์ •ํ™•๋„

์‘๋‹ต์‹œ๊ฐ„

gdb_start

GDB ์„ธ์…˜ ์‹œ์ž‘

โœ… ์™„๋ฒฝ ๋™์ž‘

100%

~1.2์ดˆ

gdb_load

ELF ํŒŒ์ผ ๋กœ๋“œ

โœ… 1,440 bytes ๋กœ๋“œ

100%

~0.8์ดˆ

gdb_command

ARM ์•„ํ‚คํ…์ฒ˜ ์„ค์ •

โœ… ARMv8-M.main ์ธ์‹

100%

~0.3์ดˆ

info files

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๋งคํ•‘

โœ… 7๊ฐœ ์˜์—ญ ์ •ํ™• ๋ถ„์„

100%

~0.4์ดˆ

info functions

ํ•จ์ˆ˜ ์‹ฌ๋ณผ ์ธ์‹

โœ… 21๊ฐœ ํ•จ์ˆ˜ ๋ชจ๋‘ ์ธ์‹

100%

~0.5์ดˆ

gdb_print

์‹ฌ๋ณผ ์ฃผ์†Œ ํ™•์ธ

โœ… ์ •ํ™•ํ•œ ํ•จ์ˆ˜ ์ฃผ์†Œ

100%

~0.2์ดˆ

gdb_examine

๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ ๋ถ„์„

โœ… ์‹ค์ œ ๋ฐ์ดํ„ฐ ํ‘œ์‹œ

100%

~0.3์ดˆ

๐ŸŽฏ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๋ณ„ ์ƒ์„ธ ๊ฒ€์ฆ

TEXT ์˜์—ญ (0x10000000~0x10000478, 1,152 bytes)

โœ… ARM Thumb ๋ช…๋ น์–ด ์ •ํ™• ๋ถ„์„:
- main: push {r3, r4, r5, r6, r7, lr}
- ํ•จ์ˆ˜ ํ˜ธ์ถœ: bl 0x10000040 <print_hello_world>
- 21๊ฐœ C ํ•จ์ˆ˜ ์™„๋ฒฝ ์ปดํŒŒ์ผ ํ™•์ธ

DATA ์˜์—ญ (0x30000000~0x30000090, 144 bytes)

โœ… ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ๋ณ€์ˆ˜ ์ •ํ™• ์ €์žฅ:
- task2_context ๊ตฌ์กฐ์ฒด ๊ฐ’ 100% ์ผ์น˜
- FLASHโ†’RAM ๋ณต์‚ฌ ๊ณผ์ • ์ •์ƒ ๋™์ž‘

BSS ์˜์—ญ (0x30000090~0x3000059c, 1,292 bytes)

โœ… 0 ์ดˆ๊ธฐํ™” ์™„๋ฒฝ ํ™•์ธ:
- 1,292 bytes ๋ชจ๋‘ 0x00์œผ๋กœ ์ •ํ™• ์ดˆ๊ธฐํ™”
- Reset_Handler ๋™์ž‘ ๊ฒ€์ฆ ์™„๋ฃŒ

HEAP/STACK ์˜์—ญ

โœ… ๋™์  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ฒ€์ฆ:
- HEAP: 0x3000059c~0x300015a0 (4,100 bytes)
- STACK: 0x300015a0~0x300035a0 (8,192 bytes)
- ARM AAPCS ํ‘œ์ค€ ์™„๋ฒฝ ์ค€์ˆ˜

๐Ÿ“š ๊ต์œก์  ์„ฑ๊ณผ

์ด ๊ฒ€์ฆ์„ ํ†ตํ•ด ํ™•์ธ๋œ ๋‚ด์šฉ:

  • C ์–ธ์–ด ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ: ์ด๋ก ๊ณผ ์‹ค์ œ์˜ ์™„๋ฒฝํ•œ ์ผ์น˜

  • ํฌ์ธํ„ฐ ๋™์ž‘ ์›๋ฆฌ: ๋ชจ๋“  ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์˜ ์ •ํ™•์„ฑ ์‹ค์ฆ

  • ARM ์•„ํ‚คํ…์ฒ˜: Cortex-M33 ๋ช…๋ น์–ด ์„ธํŠธ ์‹ค์ œ ๋ถ„์„

  • ์ปดํŒŒ์ผ๋Ÿฌ ๋™์ž‘: GCC์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์น˜ ์ „๋žต ํ™•์ธ

๐Ÿ“Š Cortex-M33 Rust ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ

ํ”„๋กœ์ ํŠธ: cortex-m33-rust

โœ… ์„ฑ๊ณต์ ์œผ๋กœ ๊ฒ€์ฆ๋œ ๊ธฐ๋Šฅ๋“ค

SungDB MCP ๋„๊ตฌ

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

์‘๋‹ต ์‹œ๊ฐ„

์ •ํ™•๋„

๋น„๊ณ 

gdb_start

โœ… ์„ฑ๊ณต

~1.2์ดˆ

100%

gdb-multiarch ์—ฐ๋™ ์™„๋ฒฝ

gdb_load

โœ… ์„ฑ๊ณต

~0.8์ดˆ

100%

ELF ํŒŒ์ผ ๋กœ๋“œ ์™„๋ฃŒ

gdb_command

โœ… ์„ฑ๊ณต

~0.3์ดˆ

100%

๋ชจ๋“  GDB ๋ช…๋ น ์ง€์›

gdb_examine

โœ… ์„ฑ๊ณต

~0.4์ดˆ

100%

๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ ์ •ํ™•ํžˆ ํ‘œ์‹œ

gdb_print

โœ… ์„ฑ๊ณต

~0.2์ดˆ

100%

ํ•จ์ˆ˜ ์ฃผ์†Œ ์ถ”์  ์™„๋ฒฝ

gdb_terminate

โœ… ์„ฑ๊ณต

~0.1์ดˆ

100%

์„ธ์…˜ ์ •๋ฆฌ ์™„๋ฃŒ

๐Ÿ†š ๊ธฐ์กด GDB MCP์™€์˜ ์ฐจ์ด์ 

๊ธฐ๋Šฅ

๊ธฐ์กด GDB MCP

SungDB MCP

์•ˆ์ •์„ฑ

โš ๏ธ ๋ถˆ์•ˆ์ •

โœ… ์•ˆ์ •์ 

๋ช…๋ น ํ์ž‰

โŒ ์—†์Œ

โœ… ๋น„๋™๊ธฐ ํ์ž‰

์„ธ์…˜ ๊ด€๋ฆฌ

๐Ÿ”„ ๊ธฐ๋ณธ์ 

๐ŸŽฏ ๊ณ ๊ธ‰ ๊ด€๋ฆฌ

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

โš ๏ธ ์ œํ•œ์ 

โœ… ํฌ๊ด„์ 

์„ฑ๋Šฅ

๐ŸŒ ๋А๋ฆผ

โšก ๋น ๋ฆ„

๋กœ๊น…

โŒ ์ œํ•œ์ 

๐Ÿ“Š ์ƒ์„ธํ•œ ๋กœ๊น…

์‹ค์ œ ๊ฒ€์ฆ

โ“ ๋ฏธ๊ฒ€์ฆ

โœ… ์™„์ „ ๊ฒ€์ฆ


๐ŸŽ‰ Happy Debugging with SungDB MCP! ๐ŸŽ‰

F
license - not found
-
quality - not tested
D
maintenance

Maintenance

โ€“Maintainers
โ€“Response time
โ€“Release cycle
โ€“Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/passingduck/sungdb-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server