Quote of the Day connects any MCP-compatible AI host — Claude, MCP Inspector, and others — to a curated dataset of quotes. Fetch a daily pick, search by keyword or author, browse categories, and manage the collection directly through six typed, validated tools.
The only way to do great work is to love what you do.— Steve Jobs
Built as a hands-on capstone for a cohort learning to design, secure, and ship a real MCP server.
Quote-of-the-Day is a Model Context Protocol (MCP) server written in TypeScript. It lets an AI host read from — and now write to — a local quotes.json dataset, with an optional external API and a safe local fallback if that API is unavailable.
Every tool is validated with Zod: strict types, length limits, and character allowlists. Write operations are guarded further — atomic file writes, automatic timestamped backups, and an explicit confirm: true requirement before anything is deleted.
The project was built by three members as part of NextFlows Academy's program, Building an MCP for an AI Engine, and is documented end-to-end — design notes, a threat model, a test plan, and example conversations included.
Three read tools for finding quotes, three write tools for managing the dataset.
Gets a daily inspirational quote from a safe local file or the external API, falling back locally if neither is reachable.
Searches for quotes matching a keyword, topic, or author name, with a bounded result count.
Lists all available quote categories and tags currently present in the dataset.
Adds a new quote to the local dataset. Accepts no path or filename — it can only ever write to the server's own data file.
Updates one or more fields of an existing quote by id. Fails cleanly as a no-op if the id doesn't exist.
Permanently deletes exactly one quote by id. Backs up the dataset first and refuses to empty the collection.
The MCP server itself only speaks stdio, so there's no public URL for a browser to call. What runs below is the exact same validation and lookup logic as src/lib/quotes.ts, executing client-side against the real 58-quote dataset from data/quotes.json — not a mockup.
// choose a tool, fill the inputs, run it
Reads run against the live dataset. Writes (create/update/delete) apply to a session-local copy in your browser tab only — exactly like the real tool would behave if it were writing to your own local quotes.json, without affecting other visitors.
Three members, six tools, one shared dataset.
Full implementation, schemas, security docs, and test plan — all in one repository.
View repository on GitHub →