This PR adds an MCP (Model Context Protocol ) server to LLDB. For motivation and background, please refer to the corresponding RFC: https://discourse.llvm.org/t/rfc-adding-mcp-support-to-lldb/86798 I implemented this as a new kind of plugin. The idea is that we could support multiple protocol servers (e.g. if we want to support DAP from within LLDB). This also introduces a corresponding top-level command (`protocol-server`) with two subcommands to `start` and `stop` the server. ``` (lldb) protocol-server start MCP tcp://localhost:1234 MCP server started with connection listeners: connection://[::1]:1234, connection://[127.0.0.1]:1234 ``` The MCP sever supports one tool (`lldb_command`) which executes a command, but can easily be extended with more commands.
35 lines
1020 B
C++
35 lines
1020 B
C++
//===-- MCPError.cpp ------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "MCPError.h"
|
|
#include "llvm/Support/Error.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
#include <system_error>
|
|
|
|
namespace lldb_private::mcp {
|
|
|
|
char MCPError::ID;
|
|
|
|
MCPError::MCPError(std::string message, int64_t error_code)
|
|
: m_message(message), m_error_code(error_code) {}
|
|
|
|
void MCPError::log(llvm::raw_ostream &OS) const { OS << m_message; }
|
|
|
|
std::error_code MCPError::convertToErrorCode() const {
|
|
return llvm::inconvertibleErrorCode();
|
|
}
|
|
|
|
protocol::Error MCPError::toProtcolError() const {
|
|
protocol::Error error;
|
|
error.error.code = m_error_code;
|
|
error.error.message = m_message;
|
|
return error;
|
|
}
|
|
|
|
} // namespace lldb_private::mcp
|