❝ MCP Server · NextFlows Academy

An MCP server for finding the right words, on demand.

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.

Try it live View on GitHub
❝
The only way to do great work is to love what you do.
— Steve Jobs
get_daily_quote() category: motivation

What this project is

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.

Tools exposed6
Transportstdio
ValidationZod v4
RuntimeNode 20+
LanguageTypeScript
Data sourcelocal + external API

Everything the server exposes

Three read tools for finding quotes, three write tools for managing the dataset.

get_daily_quote read

Gets a daily inspirational quote from a safe local file or the external API, falling back locally if neither is reachable.

Owner · Tala file?: string
search_quotes read

Searches for quotes matching a keyword, topic, or author name, with a bounded result count.

Owner · Dareen keyword, limit?
list_categories read

Lists all available quote categories and tags currently present in the dataset.

Owner · Saja limit?
create_quote write

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.

Owner · Tala quote, author, category
update_quote write

Updates one or more fields of an existing quote by id. Fails cleanly as a no-op if the id doesn't exist.

Owner · Dareen id, quote?/author?/category?
delete_quote write

Permanently deletes exactly one quote by id. Backs up the dataset first and refuses to empty the collection.

Owner · Saja id, confirm: true

Run the tools for real

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.

Result
// 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.

Who built it

Three members, six tools, one shared dataset.

TS
Tala Saabneh
Daily quote & creation
get_daily_quote create_quote
DA
Dareen Abualhaj
Search & updates
search_quotes update_quote
SS
Saja Sayare
Categories & deletion
list_categories delete_quote

Read the source

Full implementation, schemas, security docs, and test plan — all in one repository.

View repository on GitHub →