McpSidecar
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@McpSidecarSearch Microsoft Learn for C# HttpClient code samples."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
McpSidecar
McpSidecar is a Python command-line project for running an OpenAI Agents SDK workload inside a hardened, disposable Docker sandbox with a colocated MCP server sidecar.
The project started from the sibling SandboxAgent repository, but changes the topology so the AI agent container is complemented by:
a Squid proxy container that controls network egress
an MCP server container that exposes local MCP tools and resources
a Docker internal network that lets the agent call the MCP sidecar without exposing the sidecar directly to the host
This is an experimental sandboxing and MCP-sidecar project and should not be treated as a finished security model.
The current workload uses the OpenAI Agents SDK to answer a Microsoft Learn
code-sample question. The agent reads a local answer-format resource from the
MCP sidecar, calls a Microsoft Learn code-sample search tool through that same
sidecar, saves the final answer as answer.txt, and prints the answer to
stdout.
Current Workflow
Run the project from the repository root:
.\.venv\Scripts\python.exe -m sandbox_agentThe host-side command loads src/sandbox_agent/sandbox_spec.toml, generates a
Dockerfile and low-level Docker profile from that spec, builds or reuses a
hash-tagged Docker image for the agent, builds or reuses the MCP sidecar image,
creates a per-run Docker network, starts the Squid proxy container, starts the
MCP sidecar container, starts a disposable agent container, streams the agent's
stdout and stderr to the terminal, persists artifacts, and then removes the
disposable containers and network.
Inside the agent container, Sandbox Agent:
Creates an OpenAI Agents SDK agent.
Reads the MCP resource
mcp-sidecar://instructions/answer-format.md.Calls the MCP tool
microsoft_code_sample_searchwithlanguage="csharp".Answers how an instance of
HttpClientshould be obtained when using C# and .NET 8.Saves the exact answer text to
/sandbox-output/answer.txt.Prints the same answer text to stdout.
Run artifacts are written under .docker_sandbox/runs/run-*.
Sandbox Spec
The sandbox is driven by a declarative TOML file:
schema_version = 1
capabilities = [
"network",
"mcp_client",
"openai_agents",
]
allowed_domains = [
".example.com",
".gov.uk",
".microsoft.com"
]
allowed_ip_addresses = []The design rule is that capabilities soften the sandbox only when necessary. Unknown keys and unsupported capability values fail closed.
allowed_domains and allowed_ip_addresses refine the network capability.
They do not enable networking by themselves.
Environment variables can be declared explicitly:
[[environment_variables]]
name = "API_BASE_URL"
value = "https://example.com"Or copied from the host:
[[environment_variables]]
name = "OPENAI_API_KEY"
from_host = trueOpenAI-backed capabilities add OPENAI_API_KEY automatically where the sandbox
system knows the provider convention.
Capabilities
The current workload uses these capabilities:
network: enables the Squid egress gateway. Network access is default-deny unless domains or IP addresses are allowed by the resolved profile.mcp_client: installs the Python MCP client package in the agent image and requires thenetworkcapability.openai_agents: installsopenai-agents, requiresnetwork, adds.openai.com, and forwardsOPENAI_API_KEYfrom the host.
The MCP sidecar itself is started by the host-side Docker harness when running
the sandbox_agent workload with a network gateway.
MCP Sidecar
The sidecar package can run directly:
.\.venv\Scripts\python.exe -m mcp_sidecar --host 0.0.0.0 --port 8000By default it uses streamable HTTP on port 8000. The Docker harness starts it
on the internal Docker network with the alias mcp-sidecar, and passes this
connection string into the agent container:
MCP_SIDECAR_URL=http://mcp-sidecar:8000/mcpThe sidecar currently exposes these MCP tools:
get_html_element_name: returns a hard-coded HTML element name used by an earlier sample workload.microsoft_docs_search: proxies Microsoft Learn documentation search.microsoft_docs_fetch: proxies Microsoft Learn documentation fetch.microsoft_code_sample_search: proxies Microsoft Learn code sample search.
The sidecar currently exposes this MCP resource:
mcp-sidecar://instructions/answer-format.md: a Markdown answer format that the agent must read before composing its final answer.
The Microsoft wrapper tools call the public Microsoft Learn MCP endpoint:
https://learn.microsoft.com/api/mcpWhen the sidecar is started by the Docker harness, it receives proxy environment variables so its outbound HTTP and HTTPS traffic goes through the Squid gateway:
HTTP_PROXY=http://egress-gateway:3128
HTTPS_PROXY=http://egress-gateway:3128
NO_PROXY=localhost,127.0.0.1,mcp-sidecarThe MCP sidecar Docker image uses python:3.12-slim and installs the mcp
package. The host runner bind-mounts src/mcp_sidecar into the sidecar
container as read-only source so sidecar Python changes are visible to the next
run without rebuilding the image.
Run Artifacts
A successful run directory contains files similar to:
.docker_sandbox/runs/run-YYYY-mm-dd-HH-MM-SS/
Dockerfile
answer.txt
config.json
gateway-logs.json
gateway-start-results.json
landlock-policy.json
mcp-sidecar-logs.json
mcp-sidecar-metadata.json
mcp-sidecar-start-results.json
mcp-sidecar-stderr.txt
mcp-sidecar-stdout.txt
mcp-sidecar-tool-calls.jsonl
resolved-profile.json
run-metadata.json
sandbox-spec.json
seccomp-profile.json
squid.conf
stderr.txt
stdout.txtanswer.txt contains the final answer saved by the agent. stdout.txt
contains the same answer as printed by the in-container process. stderr.txt
should normally be empty.
mcp-sidecar-tool-calls.jsonl is the sidecar audit log. It records MCP resource
reads and tool calls, including arguments, success or failure, and a short
result preview. A successful current run should include a resource record for
mcp-sidecar://instructions/answer-format.md and a tool record for
microsoft_code_sample_search.
The repository also includes ARCHITECTURE.png, a static infographic showing
the current host, Docker network, Squid proxy, MCP sidecar, AI agent container,
Microsoft Learn endpoint, and artifact flow.
Sandbox Probes
The project can run the copied SandboxTester probe suite against the generated sandbox:
.\.venv\Scripts\python.exe -m sandbox_agent --test-sandboxBy default, probe evidence is redacted from report.json. To serialize evidence
for troubleshooting, run:
.\.venv\Scripts\python.exe -m sandbox_agent --test-sandbox --serialize-evidenceRequirements
Python 3.11.
PowerShell on Windows.
Docker Desktop with Linux containers enabled.
OPENAI_API_KEYin the host environment for the OpenAI Agents SDK workload.Network access during image builds to download Python packages and Docker base images.
Network access during runs to allowed model-provider and Microsoft Learn endpoints through the Squid gateway.
Docker image builds can take several minutes the first time an image is created.
Setup
Create the virtual environment and install development dependencies:
.\scripts\setup-dev.ps1The setup script expects Python 3.11 at the path configured in
scripts\setup-dev.ps1.
Development Checks
Run formatting, linting, type checking, and tests:
.\scripts\check.ps1This runs:
ruff format .ruff check .pyrightpytest
Architecture
The project has four main packages:
sandbox_agent: the in-container workload. It owns the OpenAI Agents SDK prompt, tool adapters, MCP client calls into the sidecar, and answer saving.mcp_sidecar: the MCP server container workload. It owns local MCP resources, local MCP tools, Microsoft Learn proxy tools, streamable HTTP server setup, and sidecar audit logging.docker_sandbox: the host/container harness copied and adapted from the sibling sandbox projects. It owns sandbox spec loading, Dockerfile generation, profile resolution, image creation, Docker local network creation, Squid gateway setup, MCP sidecar startup, disposable agent container execution, artifact persistence, and teardown.sandbox_tester: the copied probe suite used by--test-sandboxto producereport.jsonfor comparing sandbox behavior over time.
The command path deliberately differs by location:
On the host,
python -m sandbox_agentdelegates todocker_sandbox.Inside the container,
python -m sandbox_agentruns the workload.
The in-container path is guarded by SANDBOX_AGENT_CONTAINER=1 and expected
mounts such as /sandbox-output, /sandbox-work, and /sandbox-source/src.
The default Docker topology for the current workload is:
Docker host
docker_sandbox host runner
|
+-- Docker internal network
|
+-- sandbox-agent-* container
| MCP_SIDECAR_URL=http://mcp-sidecar:8000/mcp
|
+-- mcp-sidecar-* container
| HTTP_PROXY=http://egress-gateway:3128
|
+-- squid proxy container
network alias: egress-gatewayThe agent container does not call the Microsoft Learn MCP endpoint directly. It calls the local MCP sidecar, and the sidecar performs the upstream Microsoft Learn MCP call through Squid.
Project Structure
ARCHITECTURE.png Static Docker topology infographic
src/sandbox_agent/
__main__.py Package entry point for python -m sandbox_agent
cli.py Host delegation and in-container workload entry point
openai_agent.py OpenAI Agents SDK workload
openai_tools.py OpenAI Agents SDK tool adapters
sandbox_spec.toml Declarative sandbox capability spec
tools.py Neutral tools, MCP client calls, and answer saving
src/mcp_sidecar/
__main__.py Package entry point for python -m mcp_sidecar
audit.py JSONL audit logging for resources and tools
cli.py MCP sidecar command-line entry point
resources.py Local MCP resources
server.py FastMCP server construction
tools.py Local and Microsoft Learn proxy tools
dockerfile/Dockerfile MCP sidecar image definition
src/docker_sandbox/
__main__.py Package entry point for python -m docker_sandbox
cli.py Docker sandbox command-line orchestration
container_factory.py Docker image inspection and build
container_guard.py Runtime guard for in-container execution
landlock_runner.py Linux Landlock path-policy launcher
models.py Docker orchestration dataclasses
profiles.py Legacy named profile definitions
run_results.py Local run artifact persistence
sandbox_container.py Containers, network, sidecars, artifacts, teardown
sandbox_spec.py Spec validation and profile/Dockerfile generation
dockerfile/remove_python_packaging.py
dockerfile/runtime_sitecustomize.py
src/sandbox_tester/
Probe definitions and report generation used by --test-sandbox
tests/
test_mcp_sidecar.py
test_mcp_sidecar_container.py
test_mcp_sidecar_dockerfile.py
test_sandbox_agent_tools.py
test_sandbox_spec.py
test_sandbox_tester_serialization.py
test_smoke.py
scripts/
setup-dev.ps1
check.ps1Notes
McpSidecar is a learning and hardening exercise, not a security proof. The container policy reduces accidental host exposure and makes required capability softening visible, but Docker, Landlock, seccomp, Squid, MCP tool boundaries, and Python runtime guards should not be interpreted as a complete isolation guarantee.
Generated content can vary between runs because it is model-generated. Model API calls may incur usage costs.
Run artifacts under .docker_sandbox/runs are ignored by Git.
The Microsoft Learn MCP endpoint is treated as an upstream third-party MCP server. The local sidecar currently proxies selected tools from that endpoint; future versions may add authenticated upstream MCP servers or host-local resources.
Third-Party Notices
This project uses third-party packages including mcp, openai,
openai-agents, and pillow. It also uses Docker images such as
python:3.12-slim for the MCP sidecar and ubuntu/squid:latest for the Squid
gateway. See each package and image license metadata for details.
License
GNU General Public License v3.0. See the LICENSE file for details.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SomeNewKid/McpSidecar'
If you have feedback or need assistance with the MCP directory API, please join our Discord server