Labsco
MCP SERVER

Sherlog MCP Server

by GetSherlog

One IPython shell per session where every tool result becomes a variable — so the model slices a large payload instead of reading it whole.

Sandboxed Code Execution
Summary
Fewer tools on purpose — the context problem is the design brief.

The README argues that models degrade when given many tools and that dumping large payloads into context makes it worse. The response is the way engineers already work with big data: put the result in a variable and slice it. That is also why external MCP servers mount into the same namespace as DataFrames rather than returning raw text into the transcript.

What it is

A stateful MCP server with a deliberately narrow tool surface. Two tools do the work — a CLI runner and a Python evaluator — and everything they return persists in the session's shell namespace.

What you get
  • call_cli runs a command-line tool inside the session; execute_python_code runs Python in the same namespace
  • Tool results persist as shell variables, so a huge payload is queried rather than read
  • One isolated workspace per session, with state that survives container restarts
  • External MCP servers can be attached with EXTERNAL_MCPS_JSON; their tools appear as external_[server]_[tool] and their results convert to DataFrames in the same namespace
  • Supporting tools cover installing packages and CLIs, inspecting variables, and tree-sitter code retrieval
  • Two container variants: a vanilla one with the GitHub CLI and the Python scientific stack, and an Android one with the SDK, JDK, ADB, Fastboot and the BrowserStack CLI
Requirements

Docker Desktop. Behaviour is tuned by environment variables: MCP_MAX_SESSIONS defaults to 4, MCP_AUTO_RESET_THRESHOLD to 200 operations before automatic cleanup, and MCP_MAX_OUTPUT_SIZE to 50000 bytes per buffer. Google Workspace access is optional and needs GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET. HTTP transport supports remote clients.

Setup effort

One command plus a key — npx -y @modelcontextprotocol/server-filesystem /tmp, then supply credentials