Internship Scout & Quality of Life MCP Server

Integrates Eurostat quality-of-life metrics and real-time job searching

README.md

Project Report: AI-Powered Internship Scout & European City Quality of Life MCP Server

1. Executive Summary

This project automates the search for an international internship by cross-referencing real-time job availability with official quality-of-life (QoL) metrics. By bridging the gap between employment opportunities and living standards, the system allows users to find roles in cities that align with their personal values.

2. System Architecture

The system utilizes a containerized architecture managed via Docker, ensuring a consistent environment for the Model MCP server and the n8n automation engine.

  • MCP Server: A custom Python application built with FastAPI (exposed via FastMCP) that serves as the
  • n8n: Orchestrates the logic flow, LLM prompting, and final delivery.
  • External APIs:

3. MCP Server Logic & Data Management

alt text

3.1 Eurostat Data Manager

The EurostatDataManager class is responsible for the lifecycle of city data, from ingestion to ranking.

Ranking Methodology

The system calculates a weighted normalized score for each city. Two critical logic layers ensure the ranking is accurate:

  1. Polarity Correction: To ensure a high score always represents "better" quality, the system identifies "negative" indicators (e.g., crime, pollution, or long commute times). For these, the normalized value is inverted.

  2. Normalization: Values are scaled according to their unit types (percentages, minutes, or currency) to allow for a fair comparison between disparate metrics like "Average Rent" and "Air Quality."

  3. Fallback Logic: Recognizing that data for smaller municipalities can be sparse, the server implements a recursive fallback. If no statistical indicators are available for a requested city, it defaults to a population-based ranking to ensure the user still receives valid geographic suggestions.

3.2 Tavily API Manager

The TavilyManager serves as the bridge to the live web. Unlike standard search engines, Tavily is optimized for LLM context, returning clean, high-relevance content.

4. Workflow Implementation

The n8n workflow follows an 8-stage pipeline to transform a user's vague preferences into a structured report:

  1. User Input Capture: Collects target technologies, countries of interest, and QoL preferences.

  2. Schema Alignment: Retrieves valid Eurostat criteria via get_criteria_list().

  3. LLM Mapping: Translates natural language (e.g., "I hate traffic") into database-friendly codes.

  4. Multi-City Ranking: Identifies the top 2 cities per country that match the weighted criteria.

  5. Targeted Web Scraping: Calls search_offers() for each identified city.

  6. Information Extraction: An LLM parses raw HTML/text into a structured schema: Company, Position, Skills, Summary, Location, and URL.

  7. Data Consolidation: Aggregates the top 10 offers into a CSV and a Discord-ready summary.

  8. Final Delivery: Disseminates the findings via Discord webhook.

alt text

5. Setup and Installation

To get this project up and running, follow these steps:

Prerequisites

  • Python 3.12

  • Docker & Docker Composedeployment.

  • uv

5.1. Clone the Repository

First, clone the project repository to your local machine:

git clone git@github.com:c-r-lewis/n8n-international-internship-scout.git

5.2. Environment Configuration

Create a .env file in the root of the project directory. This file will hold your environment variables, including API keys.

TAVILY_API_KEY="your_tavily_api_key_here"
POSTGRES_PASSWORD="your_n8n_postgres_password_here"

Note: Obtain your Tavily API key from the Tavily website.

5.3. Install Dependencies

Using uv, install the project dependencies:

uv sync

5.4. Prepare Data

The application relies on Eurostat data and a world cities dataset.

  • Eurostat Data: The eurostat_data_manager.py script is responsible for populating the eurostat_data/cities.db SQLite database. To ingest the data, you can use mcp inspector and call the download_eurostat_data function.

  • World Cities Data: Ensure ressources/worldcities.csv is present. This file provides base geographical information for cities.

6. Running the Application

You can run the application using Docker Compose for a containerized setup or directly using uvicorn for local development.

Tools 3

get_criteria_listRetrieves valid Eurostat criteria for ranking cities.
search_offersSearches for real-time internship listings using the Tavily API.
download_eurostat_dataPopulates the local SQLite database with Eurostat city indicators.

Environment Variables

TAVILY_API_KEYrequiredAPI key for the Tavily search engine
POSTGRES_PASSWORDrequiredPassword for the n8n postgres database

Try it

Find me internships in software engineering in cities with the best air quality and low crime rates.
List the top 5 European cities for a data science internship based on population and transport metrics.
Search for marketing internships in Berlin and rank the city based on my quality of life preferences.
Update the Eurostat database and find me internship opportunities in cities with high safety scores.

Frequently Asked Questions

What are the key features of Internship Scout & Quality of Life?

Cross-references real-time job availability with official Eurostat quality-of-life metrics. Calculates weighted normalized scores for city ranking based on user-defined criteria. Implements polarity correction to invert negative indicators like pollution or crime. Provides recursive fallback logic to population-based ranking when statistical data is sparse. Integrates with Tavily API for AI-optimized, high-relevance internship search results.

What can I use Internship Scout & Quality of Life for?

Students looking for international internships in cities that match their personal living standards. Job seekers wanting to filter internship opportunities by specific quality-of-life metrics like commute time or rent. Researchers analyzing the correlation between employment opportunities and European city living standards.

How do I install Internship Scout & Quality of Life?

Install Internship Scout & Quality of Life by running: git clone git@github.com:c-r-lewis/n8n-international-internship-scout.git && uv sync

What MCP clients work with Internship Scout & Quality of Life?

Internship Scout & Quality of Life works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep Internship Scout & Quality of Life docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Open Conare