Entropic 2.11.1
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
53 }
54
62 ServerResponse execute(const std::string& args_json) override;
63};
64
72ServerResponse WebFetchTool::execute(const std::string& args_json) {
73 auto args = nlohmann::json::parse(args_json);
74 std::string url = args.at("url").get<std::string>();
75
76 static constexpr int default_max = 20000;
77 static constexpr int cap_max = 50000;
78 int max_length = args.value("max_length", default_max);
79 max_length = std::min(max_length, cap_max);
80
81 logger->info("[web_fetch] url='{}' max_length={}", url, max_length);
82
83 return {
84 "Web fetch not yet connected (requires cpp-httplib integration)",
85 {}
86 };
87}
88
89// ── WebSearchTool ───────────────────────────────────────────────
90
96class WebSearchTool : public ToolBase {
97public:
105 : ToolBase(std::move(def)) {}
106
116 }
117
125 ServerResponse execute(const std::string& args_json) override;
126};
127
135ServerResponse WebSearchTool::execute(const std::string& args_json) {
136 auto args = nlohmann::json::parse(args_json);
137 std::string query = args.at("query").get<std::string>();
138
139 static constexpr int default_max = 5;
140 static constexpr int cap_max = 10;
141 int max_results = args.value("max_results", default_max);
142 max_results = std::min(max_results, cap_max);
143
144 logger->info("[web_search] query='{}' max_results={}",
145 query, max_results);
146
147 return {
148 "Web search not yet connected (requires cpp-httplib integration)",
149 {}
150 };
151}
152
153// ── WebServer ───────────────────────────────────────────────────
154
166WebServer::WebServer(const std::string& data_dir)
167 : MCPServerBase("web") {
168
169 std::string tools_dir = data_dir + "/tools";
170
171 auto fetch_def = load_tool_definition(
172 "web_fetch", "web", tools_dir);
173 web_fetch_ = std::make_unique<WebFetchTool>(
174 std::move(fetch_def));
175
176 auto search_def = load_tool_definition(
177 "web_search", "web", tools_dir);
178 web_search_ = std::make_unique<WebSearchTool>(
179 std::move(search_def));
180
181 register_tool(web_fetch_.get());
182 register_tool(web_search_.get());
183
184 logger->info("WebServer initialized with 2 tools");
185}
186
192WebServer::~WebServer() = default;
193
194} // 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:72
MCPAccessLevel required_access_level() const override
Read-only tool — requires READ access.
Definition web.cpp:51
WebFetchTool(ToolDefinition def)
Construct from tool definition.
Definition web.cpp:41
Tool for web search queries.
Definition web.cpp:96
MCPAccessLevel required_access_level() const override
Read-only tool — requires READ access.
Definition web.cpp:114
ServerResponse execute(const std::string &args_json) override
Execute web search (placeholder).
Definition web.cpp:135
WebSearchTool(ToolDefinition def)
Construct from tool definition.
Definition web.cpp:104
WebServer(const std::string &data_dir)
Construct with data dir.
Definition web.cpp:166
~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:99
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.