ds-mcp-server
The ds-mcp-server is a data science MCP server offering interactive/static plotting, statistical analysis, web tools, and optional system tools.
Interactive Plots (Plotly)
Histograms, scatter plots, box plots, line plots, bar charts, scatter matrices, and correlation heatmaps
Custom interactive charts via Python code (with
px,pd,plt,snspre-injected)
Static Plots (Matplotlib/Seaborn — publication-ready)
Histograms, scatter plots, box plots, line plots, bar charts, pair plots, correlation heatmaps, and word clouds
Custom static charts via Python code
Code is sandboxed by default (blocks dangerous imports/built-ins, 60s timeout)
Dataset Exploration
Compact schema summary of all columns (grouped by type) with unique values
Detailed statistical summary for a specific column
Statistical Analysis
Pearson/Spearman correlations between numeric columns
Group comparisons (T-test for 2 groups, ANOVA for >2 groups)
OLS linear regression with multiple predictors
Rank all numeric features by correlation to a target column
Web Tools
Search the web via DuckDuckGo (no API key required)
Fetch and parse webpage content (title, headings, text, CSS details)
Take screenshots of webpages via headless Chromium (requires Playwright)
Optional System Tools (disabled by default — enable via CLI flag or env var)
Execute arbitrary shell commands
File I/O: read, write, patch, list directories, search files with regex
Manage background processes
Make arbitrary outbound HTTP requests
LLM Provider Support (via ds-mcp-client)
OpenAI, Anthropic Claude, Google Gemini, Ollama, and any OpenAI-compatible endpoint (GPUStack, LM Studio, etc.)
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., "@ds-mcp-servershow me a correlation heatmap of my dataframe"
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.
ds-mcp-server
ds-mcp-server packages a FastMCP server with data science, plotting, statistics, system, and web tools, plus interactive CLI clients for OpenAI-compatible providers and Anthropic Claude.
What's in the box
After you pip install ds-mcp-server, three commands are available:
Command | What it is | When to use it |
| Browser chat UI | You want to chat and see plots in your browser. Start here. |
| Interactive terminal chat | You prefer the CLI. Same features as the web UI, minus inline plot rendering. |
| The MCP server itself | You are configuring an external MCP client (Claude Desktop, LM Studio, Cursor, etc.) to launch it. Do not run this by hand — it will look "frozen" because it's silently waiting for MCP protocol messages on stdin. |
In short: for humans →
ds-mcp-webuiords-mcp-client. For MCP clients configured with acommandfield →ds-mcp-server.
Related MCP server: MCP Chat
Installation
Install from PyPI:
pip install ds-mcp-serverLocal development install:
pip install -e .Optional extras:
pip install -e ".[anthropic]"
pip install -e ".[playwright]"
pip install -e ".[all]"First-time setup (all platforms)
After pip install, you need to tell the client which LLM to talk to. The
fastest way is to let the tool generate a template for you:
ds-mcp-webui --init-envThis writes a .env file to the current folder with every provider commented
out. Open it in any text editor, uncomment the block for your provider, paste
your API key, save, then run ds-mcp-webui again from the same folder.
Alternative: set the variables directly for one session
Windows Command Prompt
set PROVIDER=openai
set API_KEY=sk-your-key-here
set MODEL=gpt-4o
ds-mcp-webuiWindows PowerShell
$env:PROVIDER = "openai"
$env:API_KEY = "sk-your-key-here"
$env:MODEL = "gpt-4o"
ds-mcp-webuimacOS / Linux (bash / zsh)
export PROVIDER=openai
export API_KEY=sk-your-key-here
export MODEL=gpt-4o
ds-mcp-webuiIf you run ds-mcp-webui or ds-mcp-client without any credentials
configured, you'll get a helpful setup message pointing you at these same
options — you can't get stuck.
Quick start
Copy
.env.exampleto.env.Fill in your provider settings.
Install the package.
Run
ds-mcp-webui(browser) ords-mcp-client(terminal) to chat.
The examples below use
export …(bash/zsh syntax). On Windows, useset …in Command Prompt or$env:… = "…"in PowerShell — see First-time setup above, or just runds-mcp-webui --init-envand edit the generated.envfile.
OpenAI
export PROVIDER=openai
export API_KEY=sk-...
export MODEL=gpt-4o
ds-mcp-webui # browser chat → http://127.0.0.1:8765
# or
ds-mcp-client # terminal chatClaude / Anthropic
export PROVIDER=anthropic
export ANTHROPIC_API_KEY=sk-ant-...
export MODEL=claude-opus-4-5
ds-mcp-webuiGemini (OpenAI-compatible endpoint)
export PROVIDER=gemini
export API_KEY=AIza...
export MODEL=gemini-2.0-flash
ds-mcp-webuiOllama
export PROVIDER=ollama
export API_BASE_URL=http://localhost:11434/v1
export MODEL=llama3
ds-mcp-webuiGPUStack / LM Studio / other OpenAI-compatible servers
export PROVIDER=openai-compat
export API_BASE_URL=https://your-endpoint.example/v1
export API_KEY=your-key
export MODEL=your-model
ds-mcp-webuiRunning the MCP server (for external MCP clients only)
If you are wiring up an external MCP client — Claude Desktop, LM Studio,
Cursor, or anything else that spawns MCP servers as subprocesses — point it at
the ds-mcp-server command. You don't run this yourself in a terminal;
the MCP client does it for you and talks to it over stdin/stdout.
ds-mcp-server # what an MCP client will invoke for you
ds-mcp-server --enable-system-tools # add shell/file/HTTP tools (dangerous)If you ran ds-mcp-server in your terminal and it appears to hang after
printing a startup line — that's expected. It's waiting for MCP protocol
messages that only an MCP client can send. Press Ctrl+C to exit and use
ds-mcp-webui or ds-mcp-client instead.
See the Optional system tools section below before
enabling the --enable-system-tools flag.
⚠️ Optional system tools
By default ds-mcp-server only exposes safe read-only data-science tools
(plots, statistics, dataset summaries, web fetch/search). A second group of
system / coder tools is bundled in the package but is disabled by default
because it grants the connected LLM effectively remote-code-execution power.
The gated tools are:
run_shell_command— runs any shell command with your user's privilegesread_file,write_file,patch_file,list_directory— arbitrary file I/Ofind_in_files— regex-search anywhere on diskrun_background_process,stop_background_process,list_background_processeshttp_request— arbitrary outbound HTTP (SSRF risk: can reach localhost, cloud metadata endpoints, internal services, etc.)
Enabling
Only enable inside a sandbox you trust (Docker container, WSL, dedicated VM, or a throwaway user account). The LLM decides when to call these — a single prompt-injection or misinterpretation is enough to trigger destructive actions.
Two equivalent ways to enable:
# Preferred: env var, works with any MCP client (Claude Desktop, LM Studio, …)
export DS_MCP_ENABLE_SYSTEM_TOOLS=1
# Or as a CLI flag when launching the server directly
ds-mcp-server --enable-system-toolsWhen enabled, the server prints a warning banner to stderr at startup listing every dangerous tool that was registered. When disabled, it prints a one-line hint telling you how to opt in.
Claude Desktop config with system tools enabled
{
"mcpServers": {
"ds-mcp-server": {
"command": "ds-mcp-server",
"args": ["--enable-system-tools"]
}
}
}🔒 Sandbox for LLM-generated plotting code
Two tools — generate_custom_plotly and generate_custom_static_plot — accept
a Python code string produced by the LLM and exec() it in-process to render a
plot. Because that code can be influenced by any dataset, webpage, or file the
model reads, ds-mcp-server sandboxes it by default.
What the sandbox blocks
importandfrom ... importstatements (all needed libraries —pd,np,px,go,plt,sns,WordCloud,df— are pre-injected).Calls to
eval,exec,compile,open,__import__,getattr,setattr,delattr,globals,locals,vars,input,breakpoint.Access to any dunder attribute (
.__class__,.__subclasses__, etc.) — this closes the common().__class__.__mro__[-1].__subclasses__()escape.Runaway execution — a 60s wall-clock timeout aborts the tool call.
What the sandbox does NOT block (honest limits)
Filesystem access via pre-imported libraries.
pd.read_csv("/etc/passwd")still works because pandas legitimately needs to read files. For strong isolation run the server inside a container, VM, or dedicated user account.Native-code CPU/memory exhaustion. Python threads cannot interrupt C extensions, so the timeout is best-effort against numpy/pandas hot loops.
Disabling the sandbox
If you trust the LLM and want unrestricted exec (e.g. for advanced plotting
that legitimately needs import), you can opt out:
# Env var (works with any MCP client)
export DS_MCP_ALLOW_UNRESTRICTED_EXEC=1
# Or CLI flag
ds-mcp-server --allow-unrestricted-execWhen disabled, the server prints a warning banner to stderr at startup.
Claude Desktop MCP config
Add the server to your Claude Desktop MCP configuration:
🖥️ Browser chat UI (optional)
Prefer clicking over typing? ds-mcp-server ships with an optional
browser-based chat UI that talks to the same MCP server and renders plots
inline (interactive Plotly HTML in an iframe, PNG/SVG as images).
It's included in the base install — no extras needed:
pip install ds-mcp-serverLaunch it (with your .env in the current directory or in ~/.env):
ds-mcp-webui # http://127.0.0.1:8765
ds-mcp-webui --port 9000 # custom port
ds-mcp-webui -p openai -m gpt-4oThen open the printed URL in your browser. The UI:
Streams tool calls as they happen (little pill chips per tool).
Renders generated plots inline — interactive Plotly plots are fully scrollable/zoomable directly in the chat.
Shows all available MCP tools in a searchable sidebar.
Works with any provider the CLI client supports (OpenAI, Anthropic, Gemini, Ollama, LM Studio / GPUStack / any OpenAI-compat endpoint).
Settings panel (⚙ in the sidebar) lets you toggle the dangerous opt-ins — System / coder tools and Unrestricted
exec()— with clear warnings. Toggling either one restarts the underlying MCP process so the change takes effect without leaving the browser.
By default it binds to 127.0.0.1 (localhost only). Use --host 0.0.0.0
to expose it on your LAN — but be aware that anyone reaching the port can
chat through your API key.
{
"mcpServers": {
"ds-mcp-server": {
"command": "ds-mcp-server",
"args": []
}
}
}Environment variables
Variable | Required | Description |
| No | One of |
| Usually | Generic API key used by OpenAI-compatible providers and as a fallback for Anthropic. |
| Anthropic only | Preferred Anthropic key. |
| Sometimes | Required for |
| No | Model override. Defaults are provider-specific. |
Multi-agent mode (supervisor + workers)
By default one LLM sees every tool at once. As the tool catalogue grows this hurts tool-selection accuracy. Multi-agent mode splits the work across a team:
A supervisor (planner) LLM that runs no tools. It breaks your request into small subtasks, delegates each to the right worker, reads their feedback, retries or re-plans on failure, and writes the final answer.
One worker LLM per tool category (data, plot_interactive, plot_static, stats, web, research, system). Each worker only ever sees the tools in its own category, so its decision space stays small no matter how many tools exist.
# Enable it with --multi-agent
ds-mcp-client --multi-agent
# Use a strong planner and a cheaper worker model
ds-mcp-client --multi-agent \
--planner-model gpt-4o \
--worker-model gpt-4o-mini
# Tune the iteration budgets
ds-mcp-client --multi-agent \
--max-rounds 4 \ # supervisor re-planning rounds
--max-worker-retries 3 \ # times a worker retries a failed task
--max-worker-steps 8 # tool-call iterations inside one worker task
# One-shot, non-interactive
ds-mcp-client --multi-agent --prompt "Load data.csv, correlate all columns, and plot the strongest pair"Everything is also configurable via environment variables:
PLANNER_MODEL, WORKER_MODEL, MAX_ROUNDS, MAX_WORKER_RETRIES, MAX_WORKER_STEPS.
Knob | CLI flag | Env var | Default | Meaning |
Planner model |
|
|
| Model for the supervisor |
Worker model |
|
|
| Model for the workers (make it cheaper) |
Rounds |
|
| 3 | Supervisor planning/re-planning rounds |
Worker retries |
|
| 2 | Retries after a worker's first failed attempt |
Worker steps |
|
| 6 | Tool-call iterations within one worker task |
The data-exploration tools (get_*_summary) are automatically shared into the
plotting and stats workers so they can inspect columns before acting.
In the web UI
Multi-agent mode is also available in ds-mcp-webui — no restart or config
edits required. There are two ways to control it:
Sidebar toggle — a Multi-agent switch with a clear on/off badge. When it's on, the subtitle shows which supervisor/worker models are in use, and each request is routed through the supervisor. You'll see the plan and each worker's progress live in the chat (supervisor round → delegated tasks → per-worker ✓/✗ with the tools used).
Settings → Multi-agent — open the ⚙ settings dialog to enable multi-agent and edit its parameters live: the supervisor (planner) model, the worker model, max rounds, max worker retries, and max worker steps. These apply immediately without restarting the MCP server.
Defaults come from the same PLANNER_MODEL / WORKER_MODEL / MAX_* env vars (or
MODEL). To start the web UI with multi-agent already on, set DS_MCP_MULTI_AGENT=1.
Note: in multi-agent mode each message is handled as a fresh task by the supervisor (it keeps its own working memory for that request), whereas the single-model chat keeps a running conversation across messages.
Available tools
Interactive plots
plot_interactive_histogramplot_interactive_scatterplotplot_interactive_boxplotplot_interactive_lineplotplot_interactive_barchartplot_interactive_scatter_matrixplot_interactive_correlation_heatmapgenerate_custom_plotlyget_all_columns_summaryget_column_summary
Static plots
plot_static_histogramplot_static_scatterplotplot_static_boxplotplot_static_lineplotplot_static_barchartplot_static_pairplotplot_static_correlation_heatmapplot_static_wordcloudgenerate_custom_static_plot
Statistical analysis
run_correlationrun_group_comparisonrun_linear_regressionrank_target_correlations
System tools (opt-in — see Optional system tools)
Only registered when DS_MCP_ENABLE_SYSTEM_TOOLS=1 (or --enable-system-tools).
run_shell_commandread_filewrite_filepatch_filelist_directoryfind_in_filesrun_background_processstop_background_processlist_background_processeshttp_request
Web tools
search_web— DuckDuckGo search, no key requiredfetch_webpage— fetch & parse a URL to structured text (title, headings, text)screenshot_webpage— single-page Chromium screenshot (requiresplaywright)screenshot_webpages— screenshot multiple pages and stitch into one composite PNG
Research & reference tools
No API keys needed for any of these (arXiv, Wikipedia are fully open; YouTube transcript uses the public caption API; GitHub is rate-limited without a token).
Tool | What it does |
| Search arXiv; returns titles, authors, dates, abstracts, PDF links |
| Search GitHub repos ( |
| Read any file from a public repo — accepts blob URLs, raw URLs, or |
| Fetch a Wikipedia article as clean plain text; optional |
| Get a video's transcript with minute-level timestamps; requires |
Optional token: set GITHUB_TOKEN to avoid GitHub's 10 req/hr anonymous rate limit (raises to 30/min).
Requirements
Python 3.11+
mcppandas,numpyplotly,matplotlib,seaborn,wordcloudpingouin,statsmodelsbeautifulsoup4,ddgsopenaianthropic(optional —pip install 'ds-mcp-server[anthropic]')playwright(optional —pip install 'ds-mcp-server[playwright]'+playwright install chromium, for screenshots)youtube-transcript-api(optional —pip install 'ds-mcp-server[research]', foryoutube_transcripttool)
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseBqualityDmaintenanceProvides a complete end-to-end MCP server implementation with file system tools, web scraping capabilities, and system information access. Includes ready-to-use configuration files and integration examples for Claude Desktop, ChatGPT, and other AI models.Last updated6
- Flicense-qualityDmaintenanceA command-line interface application for interactive chat with AI models via the Anthropic API. It supports document retrieval, command-based prompts, and extensible tool integrations through the MCP architecture.Last updated
- Flicense-qualityDmaintenanceA command-line interface application enabling interactive chat with AI models via the Anthropic API. It supports document retrieval, command-based prompts, and extensible tool integrations through the MCP architecture.Last updated
- AlicenseAqualityBmaintenanceProvides browser automation, audio transcription, and LLM chat as MCP tools for any agent.Last updated7MIT
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
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/ahmad-zurih/ds-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server