Skip to main content
Glama
OUARAS-khelil-Rafik

MCP Study Tools

README.md
# ๐ŸŽ“ MCP Study Tools โ€” Local MCP Study Assistant

A complete checkpoint project implementing a **local Model Context Protocol
(MCP) server** for a study assistant.

## โš ๏ธ Version compatibility

This project intentionally targets the **FastMCP API**:

```python
from mcp.server.fastmcp import FastMCP
```

and pins the MCP SDK to:

```text
mcp[cli]>=1.26,<2
```

This avoids the `MCPServer` import error that occurs when code written for a
different SDK generation is mixed with a FastMCP-based installation.

The project also uses the official MCP stdio client:

```python
from mcp import ClientSession
from mcp.client.stdio import StdioServerParameters, stdio_client
```

## โœจ Checkpoint features

- Local FastMCP server: **MCP Study Tools**
- `explain_topic`
- `create_study_plan`
- `generate_revision_checklist`
- Read-only `project://course-outline`
- Read-only `project://status`
- Structured validation errors
- Empty-topic protection
- Topic length and character validation
- Study days clamped to **1โ€“14**
- Checklist items clamped to **1โ€“12**
- MCP client using stdio
- Tool discovery
- Multiple MCP tool calls
- Agent-style routing
- Explicit tool allow-list
- Failure demonstration
- Security documentation
- Jupyter notebook
- Pytest tests

## ๐Ÿ“ Structure

```text
mcp-study-tools/
โ”œโ”€โ”€ server.py
โ”œโ”€โ”€ client_test.py
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ pyproject.toml
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ docs/
โ”‚   โ””โ”€โ”€ mcp-checkpoint-report.md
โ”œโ”€โ”€ notebooks/
โ”‚   โ””โ”€โ”€ mcp_study_tools_walkthrough.ipynb
โ””โ”€โ”€ tests/
    โ””โ”€โ”€ test_server.py
```

## ๐Ÿš€ Installation on macOS/Linux

From the project folder:

```bash
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
```

Verify the SDK:

```bash
python -c "import mcp; print(mcp.__version__)"
python -c "from mcp.server.fastmcp import FastMCP; print('FastMCP OK')"
```

## ๐Ÿงช Run the client checkpoint

```bash
python client_test.py
```

The client launches `server.py` through the MCP **stdio transport**, initializes
an MCP session, discovers the three tools, calls two tools, demonstrates an
empty-input failure, and performs an agent-style routing example.

Expected discovery:

```text
=== MCP TOOL DISCOVERY ===
[
  "explain_topic",
  "create_study_plan",
  "generate_revision_checklist"
]
```

## ๐Ÿ–ฅ๏ธ MCP Inspector

The CLI development command is:

```bash
mcp dev server.py
```

This starts the server through the MCP development/Inspector workflow.

## ๐Ÿ““ Jupyter

Open:

```text
notebooks/mcp_study_tools_walkthrough.ipynb
```

It covers:
- architecture
- validation
- direct tool behavior
- MCP client connection
- tool discovery
- tool calls
- failure handling
- agent-style routing
- checkpoint verification

## ๐Ÿ” Security

The tools are deliberately low-risk.

### Input validation

Topics:
- must be strings;
- cannot be empty;
- maximum 160 characters;
- restricted to a simple human-readable character set.

### Resource limits

Study days:

```text
1..14
```

Checklist items:

```text
1..12
```

Values outside these ranges are clamped.

### No dangerous capabilities

The server does not:
- execute shell commands;
- execute arbitrary Python;
- make network requests;
- read secrets;
- write arbitrary files;
- mutate persistent application state.

### Agent allow-list

Before an agent-style request is executed:

```python
ensure_allowed(tool_name)
```

Only the three approved learning tools may be invoked.

## โŒ Failure demonstration

Calling:

```python
explain_topic("   ")
```

returns a structured error:

```json
{
  "ok": false,
  "error": {
    "code": "EMPTY_TOPIC",
    "message": "Please provide a topic, for example 'Python functions'.",
    "field": "topic"
  }
}
```

The server does not crash.

## ๐Ÿงช Automated tests

```bash
pytest -q
```

## ๐Ÿ“š Official MCP references

- [MCP Introduction](https://modelcontextprotocol.io/docs/getting-started/intro)
- [Official MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk)
- [MCP GitHub Repository](https://github.com/modelcontextprotocol/modelcontextprotocol)

## ๐Ÿ Requirement mapping

| Requirement | Implementation |
|---|---|
| Python MCP SDK | `requirements.txt` |
| FastMCP server | `server.py` |
| 3 required tools | `server.py` |
| Read-only resource | 2 resources |
| Input validation | `validate_topic()` |
| Empty topic safe error | `EMPTY_TOPIC` |
| Day limit 1โ€“14 | `clamp_integer()` |
| Client test | `client_test.py` |
| Agent demonstration | `pick_tool()` + `ensure_allowed()` |
| Failure documentation | `docs/mcp-checkpoint-report.md` |
| Jupyter | `notebooks/*.ipynb` |
| Comments/documentation | All Python files |