[Lldb-commits] [lldb] [lldb] Make MCP server instance global (PR #145616)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 25 10:52:19 PDT 2025
================
@@ -66,16 +87,62 @@ LLDBCommandTool::Call(const llvm::json::Value &args) {
output += err_str;
}
- mcp::protocol::TextResult text_result;
- text_result.content.emplace_back(mcp::protocol::TextContent{{output}});
- text_result.isError = !result.Succeeded();
- return text_result;
+ return createTextResult(output, !result.Succeeded());
}
-std::optional<llvm::json::Value> LLDBCommandTool::GetSchema() const {
+std::optional<llvm::json::Value> CommandTool::GetSchema() const {
+ llvm::json::Object id_type{{"type", "number"}};
llvm::json::Object str_type{{"type", "string"}};
- llvm::json::Object properties{{"arguments", std::move(str_type)}};
+ llvm::json::Object properties{{"debugger_id", std::move(id_type)},
+ {"arguments", std::move(str_type)}};
+ llvm::json::Array required{"debugger_id"};
llvm::json::Object schema{{"type", "object"},
- {"properties", std::move(properties)}};
+ {"properties", std::move(properties)},
+ {"required", std::move(required)}};
return schema;
}
+
+llvm::Expected<protocol::TextResult>
+DebuggerListTool::Call(const protocol::ToolArguments &args) {
+ if (!std::holds_alternative<std::monostate>(args))
+ return createStringError("DebuggerListTool takes no arguments");
+
+ llvm::json::Path::Root root;
+
+ // Return a nested Markdown list with debuggers and target.
+ // Example output:
+ //
+ // - debugger 0
+ // - target 0 /path/to/foo
+ // - target 1
+ // - debugger 1
+ // - target 0 /path/to/bar
+ //
+ // FIXME: Use Structured Content when we adopt protocol version 2025-06-18.
+ std::string output;
+ llvm::raw_string_ostream os(output);
+
+ const size_t num_debuggers = Debugger::GetNumDebuggers();
+ for (size_t i = 0; i < num_debuggers; ++i) {
+ lldb::DebuggerSP debugger_sp = Debugger::GetDebuggerAtIndex(i);
+ if (!debugger_sp)
+ continue;
+
+ os << "- debugger " << i << '\n';
+
+ const TargetList &target_list = debugger_sp->GetTargetList();
+ const size_t num_targets = target_list.GetNumTargets();
+ for (size_t j = 0; j < num_targets; ++j) {
+ lldb::TargetSP target_sp = target_list.GetTargetAtIndex(j);
+ if (!target_sp)
+ continue;
+ os << " - target " << j;
+ // Append the module path if we have one.
+ if (Module *exe_module = target_sp->GetExecutableModulePointer())
+ os << " " << exe_module->GetFileSpec().GetPath();
----------------
JDevlieghere wrote:
good idea!
https://github.com/llvm/llvm-project/pull/145616
More information about the lldb-commits
mailing list