Portfolio Data Analytics MCP Server
# Python Portfolio — Data Analytics MCP Server
A self-contained demo portfolio project built to showcase Python skills
relevant to a **data-analytics / AI-assisted development** role.
It is a working **MCP (Model Context Protocol) server** that exposes data
analytics tools — load a CSV, compute summary statistics, filter rows, rank
columns, compute correlations. An AI assistant (or any MCP client) can drive
it over the standard protocol.
> **Why an MCP server?** This is a real, production-shaped type of software:
> it connects AI agents to tools and data. I build MCP servers and AI agents
> as part of my daily work, and this project demonstrates those exact skills
> in a clean, self-contained way.
## Features
- `load_csv` — ingest a CSV dataset, get back its inferred schema
- `list_datasets` — show all registered datasets
- `summary` — pandas `describe()` statistics
- `filter_rows` — filter on a numeric column (`>`, `<`, `>=`, …)
- `top_rows` — top-N rows by a numeric column
- `correlation` — Pearson correlation between two columns
A built-in demo dataset (`campaigns`) lets it run immediately with no setup.
## Quickstart
```bash
# install deps + dev tools
uv sync --dev
# run tests (13 tests covering all tools)
uv run pytest -q
# run as an MCP server over stdio (used by MCP clients)
uv run portfolio_data_mcp.py
# run over SSE for local HTTP testing
uv run portfolio_data_mcp.py --transport sse --port 8765
```
### Test with the mcp CLI
```bash
# register the server so an MCP client can connect
uv run mcp install portfolio_data_mcp.py --name "portfolio-data"
```
## Example
```bash
echo 'channel,spend,conversions
social,3500,210
search,4200,330
display,3800,95
email,1100,180' | uv run python -c "
import asyncio, portfolio_data_mcp as m
asyncio.run(m.main()) # starts stdio server
"
```
Then from an MCP client:
```
tools: load_csv(name="x", csv_text=...) -> schema
summary(name="x") -> statistics
top_rows(name="x", column="spend", n=3)
```
## Project layout
```
python-portfolio/
├── portfolio_data_mcp.py # the MCP server (tools + logic)
├── tests/
│ └── test_portfolio_mcp.py # 13 passing tests
├── pyproject.toml
└── README.md
```
## Tech
Python · MCP SDK (`mcp`) · pandas · pytest · type hints · uv
---
© Volodymyr — Vienna, Austria. Part of my job-search portfolio.
TDQS
Scored across 6 tools
Each tool targets a distinct data operation: loading, listing, summarizing, filtering, sorting, and correlation. There is a slight potential for overlap between summary and correlation, but they are clearly differentiated by scope (full dataset vs. pairwise columns).
All tool names follow a consistent verb_noun pattern (load_csv, list_datasets, summary, filter_rows, top_rows, correlation). The naming is clear, predictable, and uses lowercase with underscores uniformly.
With 6 tools, the server is well-scoped for a portfolio data analytics use case. Each tool serves a specific, essential analytic function without unnecessary bloat or redundancy.
The tool set covers basic data loading and exploration (summary, filtering, sorting, correlation) but lacks key operations such as grouping/aggregation, joining datasets, or data transformation (e.g., adding columns). This leaves notable gaps for a comprehensive analytics workflow.