Skip to main content
Glama
Kong

For Five Coffee MCP Server

by Kong

CI License Node.js Version

For Five Coffee MCP Server

A Model Context Protocol (MCP) server that provides access to For Five Coffee menu data. Works with Claude Desktop, Cursor, and other MCP clients, plus provides a REST API.

Quick Start

git clone https://github.com/Kong/for-five-mcp.git
cd for-five-mcp
npm install
npm start

This starts both:

  • MCP Server (stdio) - for AI assistants

  • HTTP API (port 3000) - for web apps

Related MCP server: @striderlabs/mcp-shakeshack

MCP Client Setup

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "for-five-coffee": {
      "command": "node",
      "args": ["/path/to/for-five-mcp/server.js"]
    }
  }
}

Cursor

Option 1: Let Cursor start the server Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "for-five-coffee": {
      "command": "node",
      "args": ["/path/to/for-five-mcp/server.js"],
      "env": {
        "PORT": "3000"
      }
    }
  }
}

Option 2: Connect to already running server If you're running npm start separately, add this to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "for-five-coffee": {
      "url": "http://localhost:3000/mcp",
      "transport": "http"
    }
  }
}

This connects Cursor to the running MCP server via HTTP JSON-RPC 2.0 transport.

Usage Examples

Ask Your AI Assistant

  • "What coffee drinks does For Five Coffee have?"

  • "Search for pastries on the menu"

  • "What's the cheapest coffee option?"

  • "Show me all tea varieties"

Use the HTTP API

# Get full menu
curl http://localhost:3000/api/menu

# Search for items
curl "http://localhost:3000/api/menu/search?q=latte"

# Get categories
curl http://localhost:3000/api/menu/categories

In Your Code

// Fetch menu data
const response = await fetch('http://localhost:3000/api/menu');
const menu = await response.json();

// Search items
const search = await fetch('http://localhost:3000/api/menu/search?q=coffee');
const results = await search.json();
import requests

# Get menu
menu = requests.get('http://localhost:3000/api/menu').json()

# Search
results = requests.get('http://localhost:3000/api/menu/search', 
                      params={'q': 'latte'}).json()

Available Endpoints

Endpoint

Description

GET /

Server info

GET /health

Health check

GET /api/menu

Full menu

GET /api/menu/search?q={query}

Search items

GET /api/menu/categories

All categories

GET /api/menu/category/{name}

Items by category

POST /mcp

MCP JSON-RPC 2.0 endpoint

MCP Tools

  • get_full_menu - Get complete menu

  • search_menu_items - Search by query

  • get_menu_categories - List categories

  • get_items_by_category - Filter by category

Development

npm run dev          # Start with auto-restart
npm test             # Run all tests
npm run test:unit    # Unit tests only
npm run test:http    # HTTP API tests only  
npm run test:mcp     # MCP transport tests only
npm run test:integration # Integration tests only
npm run lint         # Check code style

Troubleshooting

MCP not working?

  • Check the absolute path to server.js in your config

  • Restart your MCP client after config changes

  • Run npm start manually to test

HTTP API not responding?

  • Make sure server is running: npm start

  • Check port 3000 isn't in use: lsof -i :3000

  • Test: curl http://localhost:3000/health

No menu data?

  • Check internet connection

  • The server handles SSL issues automatically

  • Website structure may have changed (fallbacks included)

License

Apache 2.0

Available Tools

4 tools
get_full_menuB

Fetch the complete menu from For Five Coffee including all categories and items

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions fetching data but doesn't specify whether this is a read-only operation, potential rate limits, authentication requirements, or what the return format looks like (e.g., structure of categories and items). For a tool with zero annotation coverage, this leaves significant behavioral gaps.

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, efficient sentence that front-loads the key information ('Fetch the complete menu') and adds necessary detail ('including all categories and items') without any wasted words. It's appropriately sized for a simple tool with no parameters.

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

Completeness3/5

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

Given the tool's simplicity (0 parameters, no output schema), the description is minimally adequate but lacks depth. It doesn't explain the return structure (e.g., how categories and items are organized), which would be helpful since no output schema exists. For a tool fetching complex menu data, more contextual detail about the response would improve completeness.

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?

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description adds no parameter information, which is appropriate here since no parameters exist. A baseline score of 4 is given as the description doesn't need to compensate for any parameter documentation gaps.

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

Purpose4/5

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

The description clearly states the action ('Fetch') and target resource ('complete menu from For Five Coffee including all categories and items'), making the tool's purpose immediately understandable. It distinguishes itself from siblings by specifying 'complete menu' rather than filtered subsets, though it doesn't explicitly name the sibling tools for comparison.

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 context by specifying 'complete menu' versus filtered options, suggesting this tool is for retrieving all data at once rather than subsets. However, it doesn't explicitly state when to use this versus alternatives like 'get_menu_categories' or 'search_menu_items', leaving some ambiguity about optimal use cases.

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

get_items_by_categoryB

Get all menu items from a specific category

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYesThe category name to filter by

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool retrieves items but doesn't mention whether it's paginated, returns all items at once, requires authentication, has rate limits, or what happens if the category doesn't exist. This leaves significant behavioral gaps for a read operation.

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, efficient sentence that directly states the tool's function without unnecessary words. It's appropriately sized for a simple tool and front-loads the core purpose immediately.

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

Completeness3/5

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

For a simple read tool with one parameter and no output schema, the description covers the basic purpose adequately. However, without annotations or output details, it lacks information about return format (e.g., list structure, item fields) and error handling, making it minimally viable but incomplete.

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

Parameters3/5

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

The schema description coverage is 100% (the single parameter 'category' is fully documented in the schema), so the baseline is 3. The description adds no additional parameter information beyond what's already in the schema, such as category format examples or constraints.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('menu items') with a specific scope ('from a specific category'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'search_menu_items' or 'get_full_menu', which prevents a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'search_menu_items' or 'get_full_menu'. It mentions filtering by category but doesn't explain when category-based filtering is preferred over other methods, leaving the agent with no usage context.

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

get_menu_categoriesB

Get all available menu categories

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves categories but doesn't mention aspects like whether it's read-only, requires authentication, has rate limits, or what the return format looks like (e.g., list structure). This leaves significant gaps for an agent to understand its behavior.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy for an agent to parse quickly.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'all available menu categories' entails (e.g., format, pagination, or filtering), and with no structured data to fall back on, an agent would have insufficient context to use the tool effectively beyond its basic purpose.

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?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description adds no parameter information, which is appropriate here, but doesn't compensate for any gaps since there are none. A baseline of 4 is given as it meets minimal requirements without redundancy.

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

Purpose4/5

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

The description clearly states the action ('Get') and resource ('all available menu categories'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'get_full_menu' or 'get_items_by_category', which might also retrieve menu-related data but with different scopes or filters.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'get_full_menu' (which might include items) or 'get_items_by_category' (which filters by category). The description implies it retrieves categories only, but lacks explicit comparisons or exclusions for sibling tools.

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

search_menu_itemsC

Search for specific menu items by name or category

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch term to find in menu items (name, description, or category)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the basic function without disclosing behavioral traits. It doesn't mention whether this is a read-only operation, how results are returned (e.g., pagination, sorting), error handling, or any constraints like rate limits, which is inadequate for a search 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 a single, efficient sentence with zero waste, clearly front-loading the tool's purpose. Every word earns its place, making it appropriately sized and well-structured for quick understanding.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the search returns (e.g., list of items, error formats), behavioral aspects, or how it differs from siblings, leaving gaps in understanding for an AI agent despite the simple parameter schema.

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

Parameters3/5

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

The description adds minimal meaning beyond the input schema, which has 100% coverage and fully documents the single 'query' parameter. The description implies the query searches across name, description, or category, but the schema already states this, so it doesn't compensate significantly. Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('search') and resource ('menu items') with specific criteria ('by name or category'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_items_by_category' or 'get_full_menu', which limits its score to 4 instead of 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_items_by_category' or 'get_full_menu'. It mentions searching 'by name or category' but doesn't clarify if this is for filtered queries versus retrieving all items, leaving usage context implied at best.

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

TDQS

B3.4/5.0
Disambiguation4/5

The tools are mostly distinct with clear purposes: get_full_menu retrieves everything, get_items_by_category filters by category, get_menu_categories lists categories only, and search_menu_items searches by name or category. However, get_items_by_category and search_menu_items could potentially overlap if searching by category, but their descriptions clarify the distinction—one lists all items in a category while the other searches within items.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case: get_full_menu, get_items_by_category, get_menu_categories, and search_menu_items. The verbs 'get' and 'search' are appropriately used and maintain a predictable naming convention throughout the set.

Tool Count5/5

With 4 tools, this server is well-scoped for a coffee shop menu domain. Each tool serves a distinct function in retrieving or filtering menu data, and the count is appropriate—not too sparse or bloated—for the apparent purpose of exploring a menu.

Completeness4/5

The tool set covers the core read operations for a menu: fetching the full menu, filtering by category, listing categories, and searching items. A minor gap is the lack of tools for updating or managing the menu (e.g., add_item, update_price), but as a read-only surface for menu exploration, it is reasonably complete.

Maintenance

ActivityInactive
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

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/Kong/for-five-mcp'

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