# Model Context Protocol (MCP) LLDB supports the [Model Context Protocol](https://modelcontextprotocol.io) (MCP). This structured, machine-friendly protocol allows AI models to access and interact with external tools, for example debuggers. Using MCP, an AI agent can execute LLDB commands to control the debugger: set breakpoints, inspect memory, step through code. This can range from helping you run a specific command you cannot immediately remember, to a fully agent-driven debugging experience. ## MCP Server To start the MCP server in LLDB, use the `protocol-server start` command. Specify `MCP` as the protocol and provide a URI to listen on. For example, to start listening for local TCP connections on port `59999`, use the following command: ``` (lldb) protocol-server start MCP listen://localhost:59999 MCP server started with connection listeners: connection://[::1]:59999, connection://[127.0.0.1]:59999 ``` The server will automatically stop when exiting LLDB, or it can be stopped explicitly with the `protocol-server stop` command. ``` (lldb) protocol-server stop MCP ``` The commands will fail if a server is already running or not running respectively. ## MCP Client MCP uses standard input/output (stdio) for communication between client and server. The exact configuration depends on the client, but most applications allow you to specify an MCP server as a binary and arguments. This means that you need to use something like `netcat` to connect to LLDB's MCP server and forward communication over stdio over the network connection. ``` ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ │ │ LLDB ├─────socket────┤ netcat ├─────stdio─────┤MCP Client│ │ │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ ``` Configuration example for [Claude Code](https://modelcontextprotocol.io/quickstart/user): ```json { "mcpServers": { "tool": { "command": "/usr/bin/nc", "args": ["localhost", "59999"] } } } ``` Configuration example for [Visual Studio Code](https://code.visualstudio.com/docs/copilot/chat/mcp-servers): ```json { "mcp": { "servers": { "lldb": { "type": "stdio", "command": "/usr/bin/nc", "args": ["localhost", "59999"] } } } } ``` ## Tools Tools are a primitive in the Model Context Protocol that enable servers to expose functionality to clients. LLDB's MCP integration exposes one tool, named `lldb_command` which allows the model to run the same commands a user would type in the LLDB command interpreter. It takes two arguments: 1. The unique debugger ID as a number. 2. The command and its arguments as a string. ## Resources Resources are a primitive in the Model Context Protocol that allow servers to expose content that can be read by clients. LLDB's MCP integration exposes a resource for each debugger and target instance. Debugger resources are accessible using the following URI: ``` lldb://debugger/ ``` Example output: ```json { "contents": [ { "uri": "lldb://debugger/1", "mimeType": "application/json", "text": "{\"debugger_id\":1,\"name\":\"debugger_1\",\"num_targets\":1}" } ] } ``` Debuggers can contain one or more targets, which are accessible using the following URI: ``` lldb://debugger//target/ ``` Example output: ```json { "contents": [ { "uri": "lldb://debugger/1/target/0", "mimeType": "application/json", "text": "{\"arch\":\"arm64-apple-macosx26.0.0\",\"debugger_id\":1,\"dummy\":false,\"path\":\"/bin/count\",\"platform\":\"host\",\"selected\":true,\"target_idx\":0}" } ] } ``` Note that unlike the debugger id, which is unique, the target index is not stable and may be reused when a target is removed and a new target is added. ## Troubleshooting The MCP server uses the `Host` log channel. You can enable logging with the `log enable` command. ``` (lldb) log enable lldb host ```