Module Notes MCP
An MCP server providing semantic search and retrieval over Cambridge CS Tripos notes. Connects to ChatGPT, Claude, or any MCP client.
module-notes-mcp is a Model Context Protocol (MCP) server that indexes Cambridge Computer Science Tripos notes and exposes them to AI assistants via semantic search. Hook it up to ChatGPT’s MCP plugin and ask questions like “explain the OpenGL rendering pipeline” — it retrieves the relevant notes and provides grounded, sourced answers.
Features
- Semantic search — Cohere
embed-english-v3.0embeddings power the vector index, finding notes by meaning not just keywords. - Module listings — Browse all Cambridge CS modules with year, term, paper, and note count metadata.
- Note retrieval — Fetch full note content (Markdown body) by slug.
- Auto-sync — Pulls fresh notes from the source Git repo every 90 minutes via SSH deploy key.
- Stateless transport — Fresh MCP transport per request, supporting multiple concurrent clients.
Architecture
Built with TypeScript on Express, using the @modelcontextprotocol/sdk for Streamable HTTP transport. Notes are parsed from Markdown (frontmatter + body via gray-matter), embedded in batches via the Cohere API, and indexed with MiniSearch for fast retrieval. The index is cached to disk for fast restarts.
Sources are pluggable via a config/sources.yaml file with ${ENV_VAR} interpolation. The default source clones a private GitHub repo over SSH, walks module JSON metadata and nested Markdown note directories, and feeds everything into the parse → embed → index pipeline.
Deployed on an Oracle Cloud AMD VM behind nginx + Let’s Encrypt HTTPS with Cloudflare as a proxy.
Usage
Add https://mcp.jl1t.uk/mcp as an MCP server in ChatGPT, Claude, or any MCP-compatible client. Four tools are available:
| Tool | What it does |
|---|---|
search | Semantic search with configurable result limit |
get_note | Full note retrieval by slug |
list_modules | All modules with metadata |
list_notes | All notes, filterable by module/source |