Skip to main content
Glama
mtpajula

Tekuila MCP Server

by mtpajula
README.md
# ๐Ÿฝ๏ธ 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

## Quick Start

### Prerequisites

- Python 3.12 or higher
- [uv](https://docs.astral.sh/uv/) package manager

### Installation

1. **Clone and setup:**
   ```bash
   git clone <your-repo>
   cd tekuila
   uv sync
   ```

2. **Run the server:**
   
   **For cloud hosting (HTTP transport):**
   ```bash
   uv run python main.py
   ```
   
   **For local development (stdio transport):**
   ```bash
   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):

```json
{
  "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
```bash
# 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](LICENSE) file for details.

---

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

TDQS

B3.3/5.0

Scored across 5 tools

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