[Lldb-commits] [lldb] [lldb][mcp] Get the running MCP server connection information (PR #162752)
Alexandre Perez via lldb-commits
lldb-commits at lists.llvm.org
Thu Oct 9 16:33:41 PDT 2025
https://github.com/aperez created https://github.com/llvm/llvm-project/pull/162752
Currently AFAICT we don't have a way to get the MCP server socket after it started. So this change introduces a new `protocol-server` subcommand that allows us to query the location of a running server:
```
(lldb) protocol-server start MCP listen://localhost:0
MCP server started with connection listeners: connection://[::1]:36051, connection://[127.0.0.1]:36051
(lldb) protocol-server get MCP
MCP server connection listeners: connection://[::1]:36051, connection://[127.0.0.1]:36051
(lldb) protocol-server stop MCP
(lldb) protocol-server get MCP
error: MCP server is not running
```
>From cf719895cfd59ce55d349d8f27ae60ad13a3f96d Mon Sep 17 00:00:00 2001
From: Alexandre Perez <alexandreperez at meta.com>
Date: Thu, 9 Oct 2025 16:23:46 -0700
Subject: [PATCH] [lldb][mcp] Add protocol-server subcommand to get the running
MCP server connection information
---
.../Commands/CommandObjectProtocolServer.cpp | 45 ++++++++++++++++++-
.../Protocol/MCP/ProtocolServerMCP.cpp | 1 +
.../commands/protocol/TestMCPUnixSocket.py | 13 ++++++
3 files changed, 58 insertions(+), 1 deletion(-)
diff --git a/lldb/source/Commands/CommandObjectProtocolServer.cpp b/lldb/source/Commands/CommandObjectProtocolServer.cpp
index c5ab9e9f05bec..ff9d38c84ed2d 100644
--- a/lldb/source/Commands/CommandObjectProtocolServer.cpp
+++ b/lldb/source/Commands/CommandObjectProtocolServer.cpp
@@ -131,15 +131,58 @@ class CommandObjectProtocolServerStop : public CommandObjectParsed {
}
};
+class CommandObjectProtocolServerGet : public CommandObjectParsed {
+public:
+ CommandObjectProtocolServerGet(CommandInterpreter &interpreter)
+ : CommandObjectParsed(interpreter, "protocol-server get",
+ "get protocol server connection information",
+ "protocol-server get <protocol>") {
+ AddSimpleArgumentList(lldb::eArgTypeProtocol, eArgRepeatPlain);
+ }
+
+ ~CommandObjectProtocolServerGet() override = default;
+
+protected:
+ void DoExecute(Args &args, CommandReturnObject &result) override {
+ if (args.GetArgumentCount() < 1) {
+ result.AppendError("no protocol specified");
+ return;
+ }
+
+ llvm::StringRef protocol = args.GetArgumentAtIndex(0);
+ ProtocolServer *server = ProtocolServer::GetOrCreate(protocol);
+ if (!server) {
+ result.AppendErrorWithFormatv(
+ "unsupported protocol: {0}. Supported protocols are: {1}", protocol,
+ llvm::join(ProtocolServer::GetSupportedProtocols(), ", "));
+ return;
+ }
+
+ Socket *socket = server->GetSocket();
+ if (!socket) {
+ result.AppendErrorWithFormatv("{0} server is not running", protocol);
+ return;
+ }
+
+ std::string address =
+ llvm::join(socket->GetListeningConnectionURI(), ", ");
+ result.AppendMessageWithFormatv(
+ "{0} server connection listeners: {1}", protocol, address);
+ result.SetStatus(eReturnStatusSuccessFinishNoResult);
+ }
+};
+
CommandObjectProtocolServer::CommandObjectProtocolServer(
CommandInterpreter &interpreter)
: CommandObjectMultiword(interpreter, "protocol-server",
- "Start and stop a protocol server.",
+ "Start, stop, and query protocol servers.",
"protocol-server") {
LoadSubCommand("start", CommandObjectSP(new CommandObjectProtocolServerStart(
interpreter)));
LoadSubCommand("stop", CommandObjectSP(
new CommandObjectProtocolServerStop(interpreter)));
+ LoadSubCommand("get", CommandObjectSP(
+ new CommandObjectProtocolServerGet(interpreter)));
}
CommandObjectProtocolServer::~CommandObjectProtocolServer() = default;
diff --git a/lldb/source/Plugins/Protocol/MCP/ProtocolServerMCP.cpp b/lldb/source/Plugins/Protocol/MCP/ProtocolServerMCP.cpp
index 33bdd5eec3644..390cf3eeb16a5 100644
--- a/lldb/source/Plugins/Protocol/MCP/ProtocolServerMCP.cpp
+++ b/lldb/source/Plugins/Protocol/MCP/ProtocolServerMCP.cpp
@@ -144,6 +144,7 @@ llvm::Error ProtocolServerMCP::Stop() {
m_server.reset(nullptr);
m_server_info_handle.Remove();
+ m_listener.reset();
return llvm::Error::success();
}
diff --git a/lldb/test/API/commands/protocol/TestMCPUnixSocket.py b/lldb/test/API/commands/protocol/TestMCPUnixSocket.py
index ea9255cc60ef5..9edb97eb791b9 100644
--- a/lldb/test/API/commands/protocol/TestMCPUnixSocket.py
+++ b/lldb/test/API/commands/protocol/TestMCPUnixSocket.py
@@ -32,3 +32,16 @@ def test_unix_socket(self):
startstr="MCP server started with connection listeners:",
substrs=[f"unix-connect://{socket_file}"],
)
+
+ self.expect(
+ "protocol-server get MCP",
+ startstr="MCP server connection listeners:",
+ substrs=[f"unix-connect://{socket_file}"],
+ )
+
+ self.runCmd("protocol-server stop MCP", check=False)
+ self.expect(
+ "protocol-server get MCP",
+ error=True,
+ substrs=["MCP server is not running"],
+ )
More information about the lldb-commits
mailing list