Skip to main content
Glama
mtpajula

Tekuila MCP Server

by mtpajula

๐Ÿฝ๏ธ Tekuila MCP Server

An MCP (Model Context Protocol) server for accessing Tekuila restaurant menus with AI-powered healthy meal recommendations.

Features

  • ๐Ÿ“… Daily & Weekly Menus: Get current day and week menus from Tekuila restaurant

  • ๐Ÿค– AI-Powered Analysis: Intelligent health recommendations and meal planning

  • ๐Ÿ“Š Date Context: Current date awareness for better planning

  • ๐ŸŒฑ Health-Focused: Prioritizes vegetarian options while considering taste

  • ๐Ÿ”ง Universal Compatibility: Works with Claude Desktop, Cursor, LM Studio, and other MCP clients

Related MCP server: foodvisor-mcp

Quick Start

Prerequisites

  • Python 3.12 or higher

  • uv package manager

Installation

  1. Clone and setup:

    git clone <your-repo>
    cd tekuila
    uv sync
  2. Run the server:

    For cloud hosting (HTTP transport):

    uv run python main.py

    For local development (stdio transport):

    uv run python tekuila.py

Transport Modes

The server supports two different transport modes:

Stdio Transport (tekuila.py)

  • Use case: Local development and MCP client integration

  • How it works: Communicates via standard input/output

  • Best for: Claude Desktop, Cursor, LM Studio, and other MCP clients

  • Command: uv run python tekuila.py

HTTP Transport (main.py)

  • Use case: Cloud hosting and web deployment

  • How it works: Runs as an HTTP server on port 8000

  • Best for: Cloud platforms, Docker containers, web services

  • Command: uv run python main.py

  • URL: http://127.0.0.1:8000 (when running locally)

Connect to MCP Clients

Claude Desktop

Add this to your claude_desktop_config.json (uses stdio transport):

{
  "mcpServers": {
    "tekuila": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/tekuila",
        "run",
        "tekuila.py"
      ]
    }
  }
}

Cursor

The server also works with Cursor's MCP integration. Configure it in your Cursor MCP settings.

LM Studio

Compatible with LM Studio's MCP server support. Add the server configuration in LM Studio's MCP settings.

Available Tools

Basic Menu Tools

  • get_current_day_menu() - Get today's menu with date context

  • get_current_week_menu() - Get this week's menu with date context

  • get_current_date() - Get current date and time context

AI-Powered Planning Tools

  • analyze_daily_menu() - Get today's menu with AI analysis instructions

  • plan_weekly_menu() - Get week's menu with planning guide

Prompts (for clients with prompt support)

  • analyze_menu_selection - AI-powered daily menu analysis

  • weekly_menu_planning - AI-powered weekly meal planning

Usage Examples

Daily Menu Analysis

What's on the menu today at Tekuila?

Weekly Planning

Help me plan my meals for this week with healthy recommendations.

AI Analysis

Analyze today's menu and recommend the healthiest options.

Menu Structure

The server understands Finnish menu categories:

  • ๐ŸŒฑ Vegaaninen kasvislounas - Vegan lunch (healthiest)

  • ๐Ÿฅฌ Kasvislounas - Vegetarian lunch (good option)

  • ๐Ÿ– Lounas - Regular lunch (meat options)

  • โญ POP UP Bistro - Special/expensive options

  • ๐Ÿฐ Jรคlkiruoka - Desserts

AI Analysis Features

Health Priority System

  1. Vegaaninen kasvislounas - Usually healthiest (vegan)

  2. Kasvislounas - Good vegetarian option

  3. Lounas - Regular meat option

  4. POP UP Bistro - Special/expensive option

Analysis Guidelines

  • Nutritional Quality: Evaluates protein sources, vegetables, cooking methods

  • Processing Level: Prefers whole foods over processed options

  • Taste Balance: Considers if vegetarian options are actually appealing

  • Value Assessment: Evaluates if special options are worth the cost

Red Flags

  • Overly processed vegetarian options (like simple carrot crepes)

  • Deep-fried items (paistettu)

  • Heavy cream/cheese sauces (kerma, juusto)

  • Lack of vegetables or protein

Technical Details

RSS Integration

  • Current Day: https://www.compass-group.fi/menuapi/feed/rss/current-day?costNumber=0605&language=fi

  • Current Week: https://www.compass-group.fi/menuapi/feed/rss/current-week?costNumber=0605&language=fi

Dependencies

  • httpx - HTTP client for RSS fetching

  • mcp[cli] - Model Context Protocol server framework

Architecture

  • Simple RSS Parsing: Extracts day + menu content

  • AI-Powered Analysis: Lets AI analyze menu text intelligently

  • Shared Instructions: Reuses prompt content across tools and prompts

  • Date Awareness: Includes current date context for better planning

Development

Project Structure

tekuila/
โ”œโ”€โ”€ tekuila.py          # Main MCP server implementation (stdio transport)
โ”œโ”€โ”€ main.py             # HTTP server entry point (streamable-http transport)
โ”œโ”€โ”€ pyproject.toml      # Project configuration
โ”œโ”€โ”€ uv.lock            # Dependency lock file
โ”œโ”€โ”€ .gitignore         # Git ignore rules
โ””โ”€โ”€ README.md          # This file

Running Tests

# Test HTTP server startup (cloud hosting)
uv run python main.py

# Test stdio server startup (local development)
uv run python tekuila.py

# Test individual functions
uv run python -c "from tekuila import get_current_date_context; print(get_current_date_context())"

Troubleshooting

Server Not Starting

  • Check Python version (3.12+ required)

  • Ensure all dependencies are installed: uv sync

  • Check RSS feed URLs are accessible

License

This project is licensed under the MIT License - see the LICENSE file for details.


Enjoy your healthy meals at Tekuila! ๐Ÿฝ๏ธ

Available Tools

5 tools
analyze_daily_menuB

Get today's menu with AI analysis instructions for daily planning.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 the full burden of behavioral disclosure. It mentions 'AI analysis instructions' but doesn't specify what this entails (e.g., format, depth, or limitations). It also doesn't cover other behavioral traits like performance, error handling, or authentication needs. For a tool with no annotations, this leaves significant gaps in understanding how it operates.

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, clear sentence: 'Get today's menu with AI analysis instructions for daily planning.' It is front-loaded with the core purpose and adds value without redundancy. Every word earns its place, making it highly efficient and well-structured.

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 that the tool has 0 parameters, 100% schema coverage, and an output schema exists, the description doesn't need to explain return values or inputs. However, it lacks details on behavioral aspects (e.g., what 'AI analysis instructions' include), and with no annotations, this leaves the agent with incomplete context for a tool that involves analysis. It's adequate but has clear gaps in transparency.

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, and schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, and it appropriately avoids unnecessary details. A baseline of 4 is applied since no parameters exist, and the description doesn't mislead about inputs.

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 tool's purpose: 'Get today's menu with AI analysis instructions for daily planning.' It specifies the verb ('Get'), resource ('today's menu'), and adds value with 'AI analysis instructions for daily planning.' However, it doesn't explicitly distinguish this from sibling tools like 'get_current_day_menu' or 'get_current_week_menu,' which prevents a score 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 Guidelines3/5

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

The description implies usage context through 'today's menu' and 'daily planning,' suggesting it's for current-day tasks. However, it doesn't provide explicit guidance on when to use this tool versus alternatives like 'get_current_day_menu' (which might lack AI analysis) or 'plan_weekly_menu' (for longer-term planning). No exclusions or clear alternatives are stated, so the guidance is only implied.

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

get_current_dateA

Get current date and time context.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/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. It indicates the tool retrieves date/time information, implying a read-only operation, but doesn't disclose behavioral traits like whether it returns local or UTC time, format, or any rate limits. The description adds minimal context beyond the basic purpose.

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 no wasted words, clearly front-loading the tool's purpose. 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.

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 (0 parameters, output schema exists), the description is complete enough for basic understanding. However, with no annotations and an output schema, it could benefit from more behavioral context (e.g., time format), but it's adequate for this low-complexity tool.

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, and schema description coverage is 100%, so no parameter information is needed. The description doesn't add parameter details, which is appropriate, earning a baseline score of 4 for this dimension.

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 tool's purpose with a specific verb ('Get') and resource ('current date and time context'), making it immediately understandable. However, it doesn't differentiate from sibling tools (which are all menu-related), though this isn't necessary since the tool serves a distinct function unrelated to menus.

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 ('current date and time context') but doesn't explicitly state when to use this tool versus alternatives or provide any exclusions. Given the sibling tools are menu-related, this tool likely serves a different purpose, but no explicit guidance is provided.

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

get_current_day_menuB

Get today's menu from Tekuila restaurant.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/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. While 'Get' implies a read operation, it doesn't specify whether this requires authentication, has rate limits, returns structured data, or handles errors. The description lacks essential behavioral context for a tool that presumably fetches dynamic restaurant data.

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 perfectly concise - a single sentence that directly states the tool's purpose without any unnecessary words. It's front-loaded with the core functionality and contains zero redundant information, making it highly efficient for agent comprehension.

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 has zero parameters and an output schema exists, the description covers the basic purpose adequately. However, for a tool that presumably returns dynamic restaurant menu data, the description doesn't address important contextual aspects like data freshness, format of returned menu items, or how 'today' is determined (local time vs. restaurant schedule).

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 zero parameters with 100% schema description coverage, so the schema already fully documents the input requirements. The description appropriately doesn't waste space discussing nonexistent parameters, earning a baseline score of 4 for not introducing confusion about parameters that don't exist.

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 target resource ('today's menu from Tekuila restaurant'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_current_week_menu' or 'analyze_daily_menu', which would require more specific scope clarification.

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_current_week_menu' or 'analyze_daily_menu'. There's no mention of prerequisites, timing considerations, or comparison with sibling tools, leaving the agent without contextual usage instructions.

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

get_current_week_menuB

Get this week's menu from Tekuila restaurant.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/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 what the tool does but doesn't mention any behavioral traits like whether it's read-only, requires authentication, has rate limits, or what the output format might be. This leaves significant gaps for an AI agent.

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 any wasted words. It's appropriately sized and front-loaded, making it easy to parse quickly.

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 annotations, but with an output schema), the description is minimally adequate. It explains what the tool does but lacks details on usage context, behavioral traits, or how it differs from siblings. The output schema may cover return values, but the description doesn't provide enough context for optimal agent use.

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, but since there are no parameters to explain, a baseline of 4 is justified as it doesn't need to compensate for any 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 ('Get') and resource ('this week's menu from Tekuila restaurant'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_current_day_menu' or 'plan_weekly_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 'get_current_day_menu' for daily menus or 'plan_weekly_menu' for planning. It lacks explicit when-to-use or when-not-to-use instructions, offering only basic context.

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

plan_weekly_menuB

Get this week's menu with AI planning instructions for weekly meal planning.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 the full burden of behavioral disclosure. It mentions 'AI planning instructions,' which adds some context beyond a simple fetch, but fails to describe key traits such as whether this is a read-only operation, if it requires authentication, rate limits, or how the AI instructions are generated. For a tool with zero annotation coverage, this leaves significant gaps, scoring 2.

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

Conciseness4/5

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

The description is a single, efficient sentence: 'Get this week's menu with AI planning instructions for weekly meal planning.' It is front-loaded with the core purpose and avoids redundancy. However, it could be slightly more structured by explicitly separating the menu retrieval from the AI instructions, but it remains concise and clear, scoring 4.

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 has 0 parameters, 100% schema coverage, and an output schema exists, the description is minimally adequate. It covers the basic purpose and adds 'AI planning instructions,' but without annotations, it lacks details on behavioral aspects like safety or performance. The output schema should handle return values, so this is acceptable but not thorough, scoring 3.

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, and schema description coverage is 100%, so no parameter documentation is needed. The description does not add parameter information, which is appropriate. Baseline for 0 parameters is 4, as it avoids unnecessary details while being complete for the schema.

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 tool's purpose: 'Get this week's menu with AI planning instructions for weekly meal planning.' It specifies the verb ('Get') and resource ('this week's menu'), and distinguishes it from siblings like 'get_current_week_menu' by adding 'AI planning instructions.' However, it doesn't fully differentiate from 'get_current_week_menu' in terms of scope or output format, keeping it at 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 explicit guidance on when to use this tool versus alternatives like 'get_current_week_menu' or 'analyze_daily_menu.' It implies usage for 'weekly meal planning' but lacks context on prerequisites, exclusions, or specific scenarios. This minimal guidance is insufficient for clear decision-making, scoring 2.

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

TDQS

B3.3/5.0
Disambiguation2/5

Multiple tools have overlapping purposes that could cause confusion. 'analyze_daily_menu' and 'get_current_day_menu' both target today's menu, with the former adding AI analysis instructions. Similarly, 'get_current_week_menu' and 'plan_weekly_menu' both handle the weekly menu, with the latter including planning instructions. This overlap makes it unclear which tool to use for basic retrieval versus enhanced functionality.

Naming Consistency4/5

Tool names follow a consistent snake_case pattern with clear verb_noun structures, such as 'analyze_daily_menu' and 'get_current_date'. However, there is a minor inconsistency: 'get_current_day_menu' and 'get_current_week_menu' use 'day' and 'week' inconsistently with 'daily' and 'weekly' in other tools, but overall the naming is predictable and readable.

Tool Count5/5

With 5 tools, the count is well-scoped for a restaurant menu server focused on daily and weekly planning. Each tool appears to serve a distinct role in the domain, and the number is neither too sparse nor overwhelming, fitting typical expectations for such a purpose.

Completeness3/5

The tool set covers retrieval and planning for daily and weekly menus, but there are notable gaps. For example, there are no tools for updating or modifying menus, handling past or future menus beyond the current period, or managing restaurant details like hours or locations. This limits the server's ability to support full lifecycle operations in the domain.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that provides access to Cronometer nutrition data, enabling users to pull food logs, macro and micronutrient summaries, and biometric data into Claude or Cursor. It supports daily nutrition tracking and raw CSV exports by interfacing with the Cronometer web protocol.
    27
    17
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server integrating Foodvisor nutrition API for food search, meal logging, daily summaries, and progress tracking via LLM agents like Claude.
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for MealMastery AI meal planning that enables users to manage meal plans, recipes, and grocery lists through natural language conversation with AI agents like Claude.
    90
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server enabling AI assistants to manage recipes and ingredients in the WeekPlan app via its REST API.
    1

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/mtpajula/tekuila-mcp'

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