Enable MCP tools in POSIX simulator

This commit is contained in:
Adolfo Reyna
2026-09-22 16:44:06 -04:00
parent fd82efe08f
commit 9630707b41
5 changed files with 253 additions and 4 deletions
@@ -0,0 +1,66 @@
#ifndef ESP_PLATFORM
#include <app/event.h>
#include <app/manifest.h>
#include <app/scheduler.h>
#include <lvgl/lvgl.h>
#include <lvgl_window_manager/window_manager.h>
namespace tt::app::mcpsettings {
struct Context { AppInstanceId instanceId; };
void createMcpInfo(lv_obj_t* parent, void* userData) {
auto* context = static_cast<Context*>(userData);
lv_obj_t* title = lv_label_create(parent);
lv_label_set_text(title, "MCP Settings");
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 18);
lv_obj_t* info = lv_label_create(parent);
lv_label_set_text(info,
"MCP is available while the simulator web server is running.\n\n"
"Endpoint: POST /api/mcp\n"
"JSON-RPC methods: tools/list, tools/call\n\n"
"Simulator tools: get_capabilities, list_apps, run_app\n\n"
"Open the simulator dashboard/API at http://127.0.0.1/api/sysinfo.");
lv_label_set_long_mode(info, LV_LABEL_LONG_WRAP);
lv_obj_set_width(info, LV_PCT(90));
lv_obj_align(info, LV_ALIGN_CENTER, 0, 8);
(void)context;
}
int32_t appMain(int, char**) {
Context context{app_scheduler_current_app_id()};
TaskEventGroup group{};
task_event_group_construct(&group);
AppEventSubscription subscription{};
if (app_event_subscribe(&subscription, &group) != ERROR_NONE) {
task_event_group_destruct(&group);
return -1;
}
auto window = window_manager_create(context.instanceId, createMcpInfo, &context);
bool close = false;
while (!close) {
task_event_group_wait_any(&group, nullptr, portMAX_DELAY);
AppEvent event{};
while (app_event_poll(&subscription, &event) == ERROR_NONE) {
if (event.type == APP_EVENT_CLOSE) { close = true; break; }
}
}
window_manager_remove(window);
app_event_unsubscribe(&subscription);
task_event_group_destruct(&group);
return 0;
}
extern const AppManifest manifest = {
.id = "McpSettings",
.name = "MCP Settings",
.category = APP_CATEGORY_SETTINGS,
.location = {APP_LOCATION_MEMORY, reinterpret_cast<void*>(appMain)},
.flags = 0,
.stack = {.depth = 8192, .desired_memory_capability = 0}
};
}
#endif