Entropic 2.3.8
Local-first agentic inference engine
Loading...
Searching...
No Matches
web.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
16
17#include <nlohmann/json.hpp>
18
19#include <algorithm>
20#include <string>
21
22static auto logger = entropic::log::get("mcp.web");
23
24namespace entropic {
25
26// ── WebFetchTool ────────────────────────────────────────────────
27
33class WebFetchTool : public ToolBase {
34public:
42 : ToolBase(std::move(def)) {}
43
52 }
53
61 ServerResponse execute(const std::string& args_json) override;
62};
63
71ServerResponse WebFetchTool::execute(const std::string& args_json) {
72 auto args = nlohmann::json::parse(args_json);
73 std::string url = args.at("url").get<std::string>();
74
75 static constexpr int default_max = 20000;
76 static constexpr int cap_max = 50000;
77 int max_length = args.value("max_length", default_max);
78 max_length = std::min(max_length, cap_max);
79
80 logger->info("[web_fetch] url='{}' max_length={}", url, max_length);
81
82 return {
83 "Web fetch not yet connected (requires cpp-httplib integration)",
84 {}
85 };
86}
87
88// ── WebSearchTool ───────────────────────────────────────────────
89
95class WebSearchTool : public ToolBase {
96public:
104 : ToolBase(std::move(def)) {}
105
114 }
115
123 ServerResponse execute(const std::string& args_json) override;
124};
125
133ServerResponse WebSearchTool::execute(const std::string& args_json) {
134 auto args = nlohmann::json::parse(args_json);
135 std::string query = args.at("query").get<std::string>();
136
137 static constexpr int default_max = 5;
138 static constexpr int cap_max = 10;
139 int max_results = args.value("max_results", default_max);
140 max_results = std::min(max_results, cap_max);
141
142 logger->info("[web_search] query='{}' max_results={}",
143 query, max_results);
144
145 return {
146 "Web search not yet connected (requires cpp-httplib integration)",
147 {}
148 };
149}
150
151// ── WebServer ───────────────────────────────────────────────────
152
159WebServer::WebServer(const std::string& data_dir)
160 : MCPServerBase("web") {
161
162 std::string tools_dir = data_dir + "/tools";
163
164 auto fetch_def = load_tool_definition(
165 "web_fetch", "web", tools_dir);
166 web_fetch_ = std::make_unique<WebFetchTool>(
167 std::move(fetch_def));
168
169 auto search_def = load_tool_definition(
170 "web_search", "web", tools_dir);
171 web_search_ = std::make_unique<WebSearchTool>(
172 std::move(search_def));
173
174 register_tool(web_fetch_.get());
175 register_tool(web_search_.get());
176
177 logger->info("WebServer initialized with 2 tools");
178}
179
185WebServer::~WebServer() = default;
186
187} // namespace entropic
Concrete base class for MCP servers (80% logic).
Definition server_base.h:66
void register_tool(ToolBase *tool)
Register a tool with this server.
Abstract base class for individual MCP tools.
Definition tool_base.h:45
Tool for fetching web page content by URL.
Definition web.cpp:33
ServerResponse execute(const std::string &args_json) override
Fetch web page content (placeholder).
Definition web.cpp:71
MCPAccessLevel required_access_level() const override
Read-only tool — requires READ access.
Definition web.cpp:50
WebFetchTool(ToolDefinition def)
Construct from tool definition.
Definition web.cpp:41
Tool for web search queries.
Definition web.cpp:95
MCPAccessLevel required_access_level() const override
Read-only tool — requires READ access.
Definition web.cpp:112
ServerResponse execute(const std::string &args_json) override
Execute web search (placeholder).
Definition web.cpp:133
WebSearchTool(ToolDefinition def)
Construct from tool definition.
Definition web.cpp:103
WebServer(const std::string &data_dir)
Construct with data dir.
Definition web.cpp:159
~WebServer() override
Destructor.
spdlog initialization and logger access.
ENTROPIC_EXPORT std::shared_ptr< spdlog::logger > get(const std::string &name)
Get or create a named logger.
Definition logging.cpp:211
Activate model on GPU (WARM → ACTIVE).
ToolDefinition load_tool_definition(const std::string &tool_name, const std::string &server_prefix, const std::string &data_dir)
Load a tool definition from a JSON file.
Definition tool_base.cpp:81
MCPAccessLevel
MCP tool access level for per-identity authorization.
Definition config.h:38
@ READ
Read-only operations (e.g., read_file, list_directory)
MCPServerBase concrete base class + ServerResponse.
Structured result from tool execution.
Definition server_base.h:33
Parsed tool definition from JSON schema file.
Definition tool_base.h:27
Abstract base class for individual MCP tools.
Web MCP server — web_fetch + web_search.