Skip to main content
Glama
coderkanasu

MCP Demo — GitHub Copilot + Your Database

by coderkanasu
README.md
# MCP Demo — GitHub Copilot + Your Database

> **What if you could ask Copilot a question and it queried your database to answer it?**
> That's what this demo shows. Clone it, run two commands, and watch it work.

---

## What is MCP?

**Model Context Protocol (MCP)** is an open standard that lets AI assistants like GitHub Copilot connect directly to your tools and data — in real time, with guardrails you control.

Instead of copy-pasting data into chat, Copilot just *asks* your server:

| You type in Copilot Chat | What happens |
|---|---|
| `What tables are in the database?` | Copilot calls `get_schema`, returns your full schema |
| `Show me all products under $200` | Copilot writes and runs the SQL query live |
| `Which users have the admin role?` | Instant answer — emails auto-redacted |

**MCP isn't AI-only.** The same server can be called by scripts, pipelines, or any client. The LLM is just the first killer app.

---

## See It In Action

Real responses from this running server:

**"Show me all products under $200"**

| Product | Price | Stock |
|---|---|---|
| Wireless Mouse | $49.99 | 120 |
| USB-C Hub | $79.99 | 60 |
| External SSD (1TB) | $129.99 | 35 |
| Mechanical Keyboard | $149.99 | 45 |
| Webcam (4K) | $199.99 | 12 |

**Guardrail in action — PII is auto-redacted:**
```json
{
  "rows": [{"id": 1, "name": "Alice Johnson", "email": "[REDACTED]", "role": "admin"}],
  "pii_notice": "The following field(s) were redacted to protect PII: email"
}
```

**Dangerous query? Blocked before it touches the database:**
```json
{ "success": false, "error": "Query contains a blocked pattern and was rejected for security reasons." }
```

---

## Get Running in 3 Steps

**Prerequisites:** Python 3.12+, VS Code, GitHub Copilot extension

```bash
# 1. Install
git clone https://github.com/coderkanasu/mcp-demo && cd mcp-demo
pip install -r requirements.txt   # simple install
# or: pip install -e .            # editable install (for development)

# 2. Set up the database
python mcp_server/db/init_db.py

# 3. Verify it works
python mcp_server/tools/sql_query_tool.py
```

**Connect to Copilot:** A `.vscode/mcp.json` is already included — open this repo in VS Code and Copilot Agent mode picks it up automatically. No manual config needed.

```json
{
  "servers": {
    "demo-sql-server": {
      "type": "stdio",
      "command": "python3",
      "args": ["-m", "mcp_server.server"],
      "env": { "PYTHONPATH": "${workspaceFolder}" }
    }
  }
}
```

Then open **Copilot Chat → Agent mode** and start asking questions.

---

## Built-in Guardrails

This is a demo — but it ships with real security controls, not placeholders:

| Guardrail | Detail |
|---|---|
| **PII auto-redaction** | `email`, `phone`, `address`, `password`, and 9 other field patterns scrubbed from all results |
| **SQL injection blocking** | 17 patterns blocked: `UNION SELECT`, `OR 1=1`, stacked queries, `DROP`, `--` comments, and more |
| **Allowed operations only** | `SELECT`, `INSERT`, `UPDATE` only — `DROP`, `DELETE`, `TRUNCATE` rejected |
| **Row cap** | 100 rows max per query — prevents bulk extraction |
| **Rate limiting** | 30 calls per 60-second window |
| **Audit logging** | Every query logged with timestamp and outcome |
| **Sanitised errors** | Stack traces never returned to the LLM |

**Not included (needed for production):** user authentication, role-based access control, write-operation approval gates. See [PRODUCTION_READINESS.md](docs/guides/PRODUCTION_READINESS.md).

---

## What's Inside

```
mcp_server/
├── server.py               # MCP server — rate limiting, routing, error handling
├── tools/
│   └── sql_query_tool.py   # PII scrubbing, injection blocking, query execution
└── db/
    ├── init_db.py          # Seeds sample e-commerce data
    └── demo.db             # SQLite database (users, products, orders)
.vscode/
└── mcp.json                # Plug-and-play Copilot config
requirements.txt            # pip install -r requirements.txt
pyproject.toml              # package metadata + dev dependencies
```

---

## How It Works

```
You (Copilot Chat)
      │  "Show me all products under $200"
      ▼
GitHub Copilot (Agent mode)
      │  calls get_schema, then execute_query
      ▼
MCP Server  ←── validates, rate-limits, scrubs PII
      │
      ▼
SQLite Database  ←── returns rows
      │
      ▼
Copilot formats and presents the answer
```

---

**Want to extend it?**
- Add a new tool: create a class in `mcp_server/tools/`, register it in `server.py`
- Use a real database: swap SQLite for PostgreSQL/MySQL in `sql_query_tool.py`
- Add auth: wrap `execute_query` with a token check

---

## Requirements

- Python 3.12+
- VS Code with GitHub Copilot (Agent mode)
- macOS / Linux / Windows

---

## License

MIT — free to use, fork, and adapt.