EMS MCP Server

LLM access to the Event Monitoring System (EMS) API for flight data analytics.

README.md

EMS MCP Server

An MCP (Model Context Protocol) server that provides LLM access to the EMS (Event Monitoring System) API for flight data analytics.

Prerequisites

  • Python 3.11+
  • uv package manager

Installation

git clone <repo-url>
cd ems-mcp

# Create virtual environment
uv venv

# Activate virtual environment
# Windows (cmd):
.venv\Scripts\activate
# Windows (PowerShell):
.venv\Scripts\Activate.ps1
# macOS / Linux:
source .venv/bin/activate

# Install the package
uv pip install -e .

This creates an ems-mcp executable inside the virtual environment:

  • Windows: .venv\Scripts\ems-mcp.exe
  • macOS / Linux: .venv/bin/ems-mcp

Configuration

All MCP clients need three values to connect to your EMS server:

Variable Description
EMS_BASE_URL EMS server URL (e.g. https://your-ems-server.com) -- do not include /api
EMS_USERNAME Your EMS username
EMS_PASSWORD Your EMS password

Claude Code (CLI)

Create a .mcp.json file in the project root:

{
  "mcpServers": {
    "ems-mcp": {
      "command": "C:\\absolute\\path\\to\\ems-mcp\\.venv\\Scripts\\ems-mcp.exe",
      "args": [],
      "env": {
        "EMS_BASE_URL": "https://your-ems-server.com",
        "EMS_USERNAME": "your-username",
        "EMS_PASSWORD": "your-password"
      }
    }
  }
}

Claude Code reads .mcp.json automatically when you open the project directory.

Claude Desktop

Edit claude_desktop_config.json:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Add the server to the mcpServers block:

{
  "mcpServers": {
    "ems-mcp": {
      "command": "C:\\absolute\\path\\to\\ems-mcp\\.venv\\Scripts\\ems-mcp.exe",
      "args": [],
      "env": {
        "EMS_BASE_URL": "https://your-ems-server.com",
        "EMS_USERNAME": "your-username",
        "EMS_PASSWORD": "your-password"
      }
    }
  }
}

On macOS/Linux, use the Unix-style path to the executable (e.g. /home/user/ems-mcp/.venv/bin/ems-mcp).

Restart Claude Desktop after saving changes.

Gemini CLI

Create .gemini/settings.json in the project directory:

{
  "mcpServers": {
    "ems-mcp": {
      "command": "C:\\absolute\\path\\to\\ems-mcp\\.venv\\Scripts\\ems-mcp.exe",
      "args": [],
      "env": {
        "EMS_BASE_URL": "https://your-ems-server.com",
        "EMS_USERNAME": "your-username",
        "EMS_PASSWORD": "your-password"
      }
    }
  }
}

Available Tools

Discovery

  • list_ems_systems -- List available EMS systems
  • list_databases -- Navigate database hierarchy
  • list_fields -- Navigate field hierarchy
  • search_fields -- Search for field IDs by name
  • get_field_info -- Get detailed field metadata and discrete value mappings
  • search_analytics -- Search for time-series analytic IDs

Querying

  • query_database -- Query flight records with filters and sorting
  • query_flight_analytics -- Get time-series data for specific flights

Assets

  • list_fleets -- List aircraft fleets
  • list_aircraft -- List aircraft (tail numbers)
  • list_airports -- List airports with codes and locations
  • list_flight_phases -- List flight phase definitions
  • ping_system -- Check system health and server time

Development

uv pip install -e ".[dev]"
pytest tests/

Troubleshooting

401 Unauthorized -- Check that EMS_USERNAME and EMS_PASSWORD are correct and that the account has API access.

Connection errors -- Verify EMS_BASE_URL does not include a /api suffix. It should be just the server URL (e.g. https://your-ems-server.com).

Server not found by MCP client -- Make sure the path to the ems-mcp executable in your config is an absolute path and that the virtual environment has been created (uv venv && uv pip install -e .).

Tools 13

list_ems_systemsList available EMS systems
list_databasesNavigate database hierarchy
list_fieldsNavigate field hierarchy
search_fieldsSearch for field IDs by name
get_field_infoGet detailed field metadata and discrete value mappings
search_analyticsSearch for time-series analytic IDs
query_databaseQuery flight records with filters and sorting
query_flight_analyticsGet time-series data for specific flights
list_fleetsList aircraft fleets
list_aircraftList aircraft (tail numbers)
list_airportsList airports with codes and locations
list_flight_phasesList flight phase definitions
ping_systemCheck system health and server time

Environment Variables

EMS_BASE_URLrequiredEMS server URL (do not include /api)
EMS_USERNAMErequiredYour EMS username
EMS_PASSWORDrequiredYour EMS password

Try it

List all available EMS systems and their databases.
Find the aircraft tail numbers for the current fleet.
Query flight records for the last 24 hours and summarize the flight phases.
Get time-series analytics for flight ID 12345.
Search for field IDs related to engine temperature.

Frequently Asked Questions

What are the key features of EMS MCP Server?

Provides LLM access to the Event Monitoring System (EMS) API. Enables querying of flight records with custom filters and sorting. Retrieves time-series analytics for specific flight data. Allows navigation of database and field hierarchies. Supports discovery of aircraft assets, fleets, and airport locations.

What can I use EMS MCP Server for?

Automating the retrieval of flight performance data for maintenance reports.. Quickly querying specific flight records to investigate operational anomalies.. Exploring complex database hierarchies to identify relevant telemetry fields.. Generating summaries of flight phases and analytics for aviation analysts..

How do I install EMS MCP Server?

Install EMS MCP Server by running: git clone https://github.com/mattsq/ems-mcp && cd ems-mcp && uv venv && source .venv/bin/activate && uv pip install -e .

What MCP clients work with EMS MCP Server?

EMS MCP Server 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 EMS MCP Server docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Open Conare