Skip to main content
Glama
VladimirBigunenko

Portfolio Data Analytics MCP Server

README.md
# 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

B3.4/5.0

Scored across 6 tools

Disambiguation4/5

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).

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness3/5

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.

Maintenance

ActivityMaintained
ResponsivenessSyncing