From 4bc721c3bf7589b519c5730d093f704ce56e3f09 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Mon, 29 Jun 2026 21:43:54 +0900 Subject: refactor: MCP層をmcpc APIベースに刷新 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 独自JSON-RPC処理をmcpcへ置き換え - 各MCPツールを個別ソースへ分離 - 共通コンテキストと登録処理を整理 - mcpc互換修正と統合テストを更新 --- src/mcp/tools/delete_message.c | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/mcp/tools/delete_message.c (limited to 'src/mcp/tools/delete_message.c') diff --git a/src/mcp/tools/delete_message.c b/src/mcp/tools/delete_message.c new file mode 100644 index 0000000..ae924d7 --- /dev/null +++ b/src/mcp/tools/delete_message.c @@ -0,0 +1,50 @@ +#include "mcp/tools/common/registry.h" + +#include "mcp/tools/common/common.h" +#include "mcp/tools/common/context.h" + +#include + +#include "base/allocator.h" + +static void +call_delete_message(const mcpc_tool_t *tool, mcpc_ucbr_t *result) +{ + tiny_mcp_tools_context_t *context = tiny_mcp_tools_context_current(); + char *message_id = tiny_mcp_tool_get_string(tool, "message_id", TINY_MESSAGE_ID_LENGTH); + char *session = tiny_mcp_tool_get_string(tool, "session_id", TINY_SESSION_ID_MAX); + tiny_store_status_t status; + if (!context || !message_id || !session || !tiny_message_id_valid(message_id)) + { + tiny_mcp_tool_add_error( + result, "VALIDATION_ERROR", "message_id must be a canonical 26-character ULID"); + } + else + { + status = tiny_store_delete(context->store, message_id, session[0] ? session : NULL); + if (status != TINY_STORE_OK && status != TINY_STORE_NOT_FOUND) + { + tiny_mcp_tool_add_error( + result, tiny_store_status_name(status), "delete record was not written"); + } + else + { + mcpc_toolcall_result_add_text_printf8( + result, + (const char8_t *)(status == TINY_STORE_OK ? "{\"status\":\"OK\"}" + : "{\"status\":\"NOT_FOUND\"}")); + } + } + free(message_id); + free(session); +} + +bool +tiny_mcp_register_delete_message(mcpc_server_t *server) +{ + mcpc_tool_t *tool = tiny_mcp_tool_new("delete_message", "Delete a message", call_delete_message); + return tool && tiny_mcp_tool_add_property(tool, "message_id", "Message ULID", MCPC_U8STR) + && tiny_mcp_tool_add_property( + tool, "session_id", "Session ID; empty if omitted", MCPC_U8STR) + && mcpc_server_add_tool(server, tool) == MCPC_EC_0; +} -- cgit v1.2.3