Skip to main content
Glama
productiveAnalytics

mcp_quote_server

mcp_quote_server

MCP server implementation

Setup MCP configuration

Ensure the .mcp.json points to correct root folder of the project

Related MCP server: Quotes By Api Ninjas MCP Server

Part 0: Run MCP Server

uv run python quote_server/quote_mcp_server.py

Part 1: The MCP server (no API key needed)

The server is quote_server/quote_mcp_server.py: ~65 lines built on the MCP Python SDK's FastMCP helper. It reads quotes.json and exposes two tools:

Tool

Input

Returns

list_categories

The categories that have quotes

get_quote

category

A random quote, or nothing if the category is unknown/empty

try_server.py launches the server over STDIO, speaks MCP to it, and prints a few sample calls. No LLM, no browser, no Node — just the mcp SDK you already installed:

uv run python try_server.py
Tools: list_categories, get_quote
Categories: creativity, engineering, humor, motivation, stoicism
A stoic quote: “We suffer more often in imagination than in reality.” — Seneca
Unknown category 'banana': '' (nothing, as expected)

That's a complete, working MCP server. Everything below is just pointing different hosts at it.

1.2 — Optional: the MCP Inspector

The MCP Inspector is Anthropic's official tool for poking at servers (needs Node/npx). It has two modes.

CLI mode (recommended — no browser, scriptable):

# list the tools
npx @modelcontextprotocol/inspector --cli \
  uv run python quote_server/quote_mcp_server.py \
  --method tools/list

# call a tool
npx @modelcontextprotocol/inspector --cli \
  uv run python quote_server/quote_mcp_server.py \
  --method tools/call --tool-name get_quote --tool-arg category=stoicism

The second command prints the quote as JSON. (If your npm registry rejects scoped packages, add --registry=https://registry.npmjs.org to npx.)

GUI mode:

Point the Inspector at our .mcp.json (the same file Claude Code uses) and name the server — it opens with the STDIO transport and command pre-filled:

npx @modelcontextprotocol/inspector --config .mcp.json --server quotes

A browser tab opens with Transport Type: STDIO, Command: uv, and our arguments already populated. Click Connect (top-left) — the status flips to Connected — then open the Tools tab, List Tools, and run them.

(The committed .mcp.json has an absolute --directory path. If you cloned the repo somewhere other than ~/git/summit-ai-mcp-demo, edit that path first — or regenerate the file with the Claude Code step in 3.1.)

Part 2: Claude Code

claude mcp add quotes --scope project \
  -- uv --directory ~/Dev/Python/mcp_quote_server run python quote_server/quote_mcp_server.py

This writes a .mcp.json in the repo (already committed here as a reference). Run claude in the repo and approve the project server when prompted, then:

> give me a quote about creativity

Verify anytime with inside claude with /mcp

Part 3: Graphify the codebase

Use lower-cost model like minimax3 using Ollama in Claude code

ollama launch claude --model minimax-m3:cloud

Graphify the codebase inside ~/Dev/Python/mcp_quote_server, using skill

/graphify .

The code-base graph would be available inside folder graphify-out

Available Tools

2 tools
get_quoteA

Return a random quote for the given category.

Returns an empty string when the category is unknown or has no quotes, so the assistant can tell the user nothing was found.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that the tool returns a random quote and explicitly states the empty string behavior for unknown categories. This provides good transparency for a simple read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the main purpose, and contains no unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the existence of an output schema, the description covers the main behavior (return random quote) and the empty-string edge case. It is fairly complete, though it could mention that valid categories come from list_categories.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the 'category' parameter. The description only says 'given category' without explaining what constitutes a valid category or hinting at using list_categories to obtain valid values. This is insufficient guidance given the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Return a random quote for the given category.' This is a specific verb-resource pair. The sibling tool list_categories is for listing categories, so this tool clearly differentiates itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the edge case of an unknown or empty category by returning an empty string, allowing the assistant to inform the user. This provides context on when to use the tool and how to handle results, though it does not explicitly state when to use versus list_categories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_categoriesA

List the categories that have at least one quote, comma-separated.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the full burden. It discloses that only categories with at least one quote are listed and that the result is comma-separated. This is reasonably transparent for a read-only list operation, though no side effects or prerequisites are mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no unnecessary words. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with zero parameters and an existing output schema. The description adds the critical detail of comma-separated format and the filtering condition. It is complete for this straightforward list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and the schema coverage is 100% trivially. The description adds no parameter information because none exist, so the baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'categories that have at least one quote', with specific filtering and format ('comma-separated'). It is easily distinguishable from the sibling tool 'get_quote', which retrieves a single quote.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving a list of non-empty categories, but does not explicitly state when to use or avoid it relative to the sibling 'get_quote'. The context is clear but lacks explicit exclusion or alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv0.1.0
    • First observedget_quote
    • First observedlist_categories

TDQS

A4.1/5.0
Disambiguation5/5

The two tools, get_quote and list_categories, have clearly distinct purposes: one retrieves a random quote for a given category, the other lists available categories. There is no overlap or ambiguity.

Naming Consistency5/5

Both tool names follow a consistent verb_noun pattern (get_quote, list_categories), making them predictable and easy to understand.

Tool Count3/5

With only 2 tools, the server is minimal but still functional for a simple quote retrieval purpose. However, it feels thin and might benefit from additional tools like search or management operations.

Completeness2/5

The server covers only basic retrieval (random quote by category and category listing). Missing obvious operations such as adding, updating, deleting quotes, or retrieving all quotes. This leads to significant gaps for a full quote management system.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A sample MCP server that fetches random inspirational quotes, programming jokes, and advice from public APIs. Provides three simple tools for testing and demonstration purposes.
    -
  • A
    license
    B
    quality
    D
    maintenance
    Enables retrieval of random inspirational quotes from various categories including age, art, business, courage, education, friendship, happiness, leadership, and many more through the API Ninjas Quotes API.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that returns motivational quotes matched to the task you're working on, with tools to list topics and explain matches. It also includes a hook for receiving a quote on every prompt submission.
    3
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/productiveAnalytics/mcp_quote_server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server