Skip to main content
Glama
skax-joonho-park

Cafeteria MCP

Cafeteria MCP

Configurable MCP server for cafeteria menu lookup.

Deploy to Render

The server exposes a single MCP tool, get_cafeteria_menu, and supports stdio plus HTTP/SSE transports.

Configuration

Set these environment variables in your runtime or hosting provider:

CAFETERIA_API_URL=<form-post-api-url>
CAFETERIA_CAMPUS=<campus-code>
CAFETERIA_SEQ=<cafeteria-sequence>
CAFETERIA_ORIGIN=<optional-origin-header>
CAFETERIA_SKIP_TLS_VERIFY=false
MCP_TRANSPORT=http

CAFETERIA_ORIGIN is optional. When omitted, the origin is derived from CAFETERIA_API_URL. The upstream request is sent as POST with query parameters and Content-Length: 0. Set CAFETERIA_SKIP_TLS_VERIFY=true only when the upstream cafeteria API requires curl-style -k behavior.

Related MCP server: munich-mensa-mcp

Tool

get_cafeteria_menu

  • ymd: lookup date, YYYYMMDD or YYYY-MM-DD. Defaults to today in Asia/Seoul.

  • mealType: LN for lunch, DN for dinner.

Local stdio

npm start

MCP client example:

{
  "mcpServers": {
    "cafeteria": {
      "command": "node",
      "args": [
        "/absolute/path/to/src/server.mjs"
      ]
    }
  }
}

HTTP/SSE

MCP_TRANSPORT=http PORT=3333 npm start
  • Health check: GET http://127.0.0.1:3333/health

  • MCP SSE: GET http://127.0.0.1:3333/sse

  • MCP SSE message post: POST http://127.0.0.1:3333/messages?sessionId=...

  • MCP JSON-RPC test endpoint: POST http://127.0.0.1:3333/mcp

Hosting environments that provide PORT automatically run the HTTP/SSE transport.

Render

Deploy the repository with the included render.yaml Blueprint.

After deployment, set the required secret environment variables in Render. The public MCP SSE URL will be:

https://<render-service-name>.onrender.com/sse

See outputs/render-sse-mcp.md for a short registration note.

Supabase Probe

This repository also includes a Supabase Edge Function probe at supabase/functions/cafeteria-probe. Use it before porting the MCP server to confirm whether the Supabase runtime can reach the cafeteria API.

Required Supabase secrets:

CAFETERIA_API_URL
CAFETERIA_CAMPUS
CAFETERIA_SEQ
CAFETERIA_ORIGIN

Probe URLs after deployment:

https://<project-ref>.functions.supabase.co/cafeteria-probe?target=google
https://<project-ref>.functions.supabase.co/cafeteria-probe?target=cafeteria&ymd=20260608&mealType=LN

Supabase MCP

The Supabase Edge Function MCP endpoint is available at:

https://<project-ref>.functions.supabase.co/cafeteria-mcp

It supports MCP JSON-RPC methods including initialize, tools/list, and tools/call.

Tests

npm run test:sse
npm run test:mcp
npm run test:api -- 20260608 LN

test:api requires the environment variables above.

Available Tools

1 tool
get_cafeteria_menuA

환경변수로 설정된 식당 API에서 메뉴를 조회합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
ymdNo조회일자. YYYYMMDD 또는 YYYY-MM-DD. 생략하면 Asia/Seoul 기준 오늘입니다.
mealTypeNoLN은 점심, DN은 저녁입니다.

TDQS

A3.5/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 for behavioral disclosure. The description only mentions the source (API set by environment variable) and action (retrieve), but does not explicitly state whether it is read-only, how failures are handled, or any side effects. It lacks details beyond the minimal definition.

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 concise sentence with zero wasted words. It efficiently conveys the core purpose without unnecessary elaboration.

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 retrieval tool with two optional parameters, the description is minimally adequate. However, it lacks any information about the return format, response structure, or environment variable details, and there is no output schema to compensate. This leaves some gaps for an agent to infer.

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?

Schema description coverage is 100%, with each parameter (ymd, mealType) having a clear description in the schema. The tool description adds no additional parameter meaning, so the baseline score of 3 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 specific action ('retrieve menu') and the resource ('restaurant API set by environment variable'), matching the tool name. Since no sibling tools are present, differentiation is not needed, so it fully satisfies the purpose clarity criterion.

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 menu data, but provides no explicit when-to-use guidance, exclusions, or mention of alternatives. Given the absence of sibling tools, the implied context is acceptable, but it does not proactively guide the agent on when to choose this tool.

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.

  1. 1 tool updatev0.1.0
    • First observedget_cafeteria_menu

TDQS

A3.7/5.0

Scored across 1 tool

Disambiguation5/5

The server has only one tool, so there is no ambiguity or risk of confusing it with others. Its purpose is clearly described as retrieving the cafeteria menu.

Naming Consistency5/5

The single tool name follows a clear verb_noun pattern (get_cafeteria_menu), which is standard and unambiguous. With only one tool, there is no inconsistency.

Tool Count3/5

The server has only one tool, which feels thin and borderline for a general-purpose server. However, it may be acceptable for a narrowly-scoped cafeteria menu fetcher, though it limits broader utility.

Completeness4/5

The tool covers the core use case of retrieving the cafeteria menu. However, it lacks any parameters for specifying a date or restaurant, and there is no backup or additional features, making it somewhat limited but not severely incomplete.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers