Entropic 2.14.3
Local-first agentic inference engine
Loading...
Searching...
No Matches
entropic::BashServer Class Reference

Bash MCP server for shell command execution. More...

#include <entropic/mcp/servers/bash.h>

Inheritance diagram for entropic::BashServer:
Collaboration diagram for entropic::BashServer:

Public Member Functions

 BashServer (const std::filesystem::path &working_dir, const std::string &data_dir, int timeout=30)
 Construct with working directory and data dir.
 
 ~BashServer () override
 Destructor.
 
std::string get_permission_pattern (const std::string &tool_name, const std::string &args_json) const override
 Permission pattern: "execute:{base_cmd} *".
 
bool set_working_dir (const std::string &path) override
 Set working directory.
 
const std::filesystem::path & working_dir () const
 Get the working directory.
 
int timeout () const
 Get the enforced per-command timeout.
 
- Public Member Functions inherited from entropic::MCPServerBase
 MCPServerBase (std::string name)
 Construct with server name.
 
const std::string & name () const
 Get the server name.
 
void register_tool (ToolBase *tool)
 Register a tool with this server.
 
std::string list_tools () const
 List all registered tools as a JSON array string.
 
std::string execute (const std::string &tool_name, const std::string &raw_args_json)
 Execute a tool and wrap result in ServerResponse JSON.
 
virtual bool skip_duplicate_check (const std::string &tool_name) const
 Check if a tool should skip duplicate detection.
 
virtual bool configure (const std::string &config_json)
 Configure the server after creation.
 
const ToolRegistry & registry () const
 Get the tool registry (const).
 

Additional Inherited Members

- Protected Attributes inherited from entropic::MCPServerBase
std::string name_
 Server name.
 
ToolRegistry registry_
 Tool registry.
 

Detailed Description

Bash MCP server for shell command execution.

Single tool: execute. Runs /bin/sh -c in the server's working directory as the leader of its OWN process group, captures stdout and stderr together, and enforces timeout() on the wall clock: on expiry the whole group is SIGKILLed (background children included), the shell is reaped, and the model gets a typed timeout error naming the limit and the elapsed time, with whatever the command printed so far. When the command finishes normally, anything it left running in its group is killed too — a tool call does not leave processes behind. (A command that deliberately leaves its group, e.g. via setsid, escapes this.)

What it does NOT do
It does not filter commands. Nothing here inspects the command text: whether a command runs at all is decided before execute() is reached, by the permission layer (permissions.allow / permissions.deny patterns, keyed by get_permission_pattern()) and the tool-approval gate. Until v2.13.0 this comment claimed the server "blocks dangerous commands" and "enforces timeout"; neither was true — there was never a denylist, and the timeout was stored and never read.
Version
2.13.0

Definition at line 44 of file bash.h.

Constructor & Destructor Documentation

◆ BashServer()

entropic::BashServer::BashServer ( const std::filesystem::path &  working_dir,
const std::string &  data_dir,
int  timeout = 30 
)

Construct with working directory and data dir.

Parameters
working_dirDefault working directory for commands.
data_dirPath to bundled data directory.
timeoutPer-command wall-clock limit in seconds (enforced since v2.13.0; mcp.bash.timeout_seconds, default 30).
Version
2.13.0

A thin MCPServerBase subclass: it builds its one tool, registers it, and overrides only get_permission_pattern and set_working_dir.

Parameters
working_dirDefault working directory for commands.
data_dirPath to bundled data directory.
timeoutCommand timeout in seconds. @req REQ-MCP-001 @req REQ-MCP-023
Version
1.8.5

Definition at line 528 of file bash.cpp.

◆ ~BashServer()

entropic::BashServer::~BashServer ( )
overridedefault

Destructor.

@dg_internal

Version
1.8.5

Member Function Documentation

◆ get_permission_pattern()

std::string entropic::BashServer::get_permission_pattern ( const std::string &  tool_name,
const std::string &  args_json 
) const
overridevirtual

Permission pattern: "execute:{base_cmd} *".

Parameters
tool_nameTool name.
args_jsonArguments JSON.
Returns
Permission pattern with base command.
Version
1.8.5

Approval granularity matters here: keying on the base command means an operator's "always allow" applies to a command family rather than to every shell invocation.

Parameters
tool_nameTool name.
args_jsonArguments JSON.
Returns
"<tool>:<base command> *" — for python -m x, the pattern names python. Unparseable arguments degrade to a base command of "unknown" (logged), never a wildcard. @req REQ-MCP-023 @req REQ-MCP-009
Version
1.8.5

Reimplemented from entropic::MCPServerBase.

Definition at line 572 of file bash.cpp.

◆ set_working_dir()

bool entropic::BashServer::set_working_dir ( const std::string &  path)
overridevirtual

Set working directory.

Set the working directory.

Parameters
pathNew working directory.
Returns
true on success.
Version
1.8.5

Re-targets the server so a sandbox swap does not require reconstructing it.

Parameters
pathNew working directory.
Returns
true — the re-target always succeeds; the path itself is validated per call by is_safe_cwd. @req REQ-MCP-023
Version
1.8.5

Reimplemented from entropic::MCPServerBase.

Definition at line 600 of file bash.cpp.

◆ timeout()

int entropic::BashServer::timeout ( ) const

Get the enforced per-command timeout.

Get command timeout.

Returns
Timeout in seconds.
Version
2.13.0
Returns
The enforced per-command timeout in seconds. @req REQ-MCP-023
Version
1.8.5

Definition at line 623 of file bash.cpp.

◆ working_dir()

const std::filesystem::path & entropic::BashServer::working_dir ( ) const

Get the working directory.

Returns
Working directory path.
Version
1.8.5
Returns
The directory commands default to when a call omits working_dir. @req REQ-MCP-023
Version
1.8.5

Definition at line 613 of file bash.cpp.


The documentation for this class was generated from the following files: