fare-data MCP server

fare-data MCP server

Enables querying, summarizing, comparing ATPCO fare CSV snapshots and shopping live fares via engine-wrapper-service, all through MCP clients like Claude.

Category
Visit Server

README

fare-data MCP server

New here? Follow the step-by-step SETUP.md to get running.

Exposes ATPCO fare CSV snapshots (the ~119-column fare feed layout: CXR, ORIG, DEST, Fare Class, Fare AMT, Tax AMT, Total Price AMT, Cabin, restrictions, …) from a local folder to Claude via the Model Context Protocol, plus a live fare-shopping tool backed by engine-wrapper-service.

Data directory

Drop your fare CSVs into the data folder. Resolution order:

  1. FARE_DATA_DIR environment variable, if set
  2. ../fare-data (a folder named fare-data next to this repo), if it exists
  3. ./data inside this repo

Any *.csv with the fare-feed header layout is picked up automatically; no restart needed when you add or replace files (each tool call re-reads the directory).

Tools

Tool What it does
list_fare_files List available CSVs with fare counts, markets, carriers
get_schema Column names + a sample row for one file
query_fares Filter fares (exact-match on any column, price range), sorted, compact column projection
fare_summary Count/min/avg/max of Fare AMT and Total Price AMT grouped by any column (default Cabin)
compare_files Diff two snapshots of a market: added / removed / repriced fares
shop_fares Live fare shop via engine-wrapper-service — POST to frmwithtotalpricewrapperstream

shop_fares notes

  • Requires the internal engine-wrapper endpoint (corporate network/VPN). Configure it via ENGINE_WRAPPER_URL — copy .env.example to .env and fill in the URL (ask your team; it is deliberately not committed) — or pass endpoint_url per call (e.g. to hit the historical wrapper).
  • origin, destination, carrier are required; everything else defaults to the standard request: dates (travelDate, asOfDateTime, ticketDate) default to the current date/time in engine format (e.g. 02AUG26T1119), hostCarrier defaults to carrier, userId defaults to ATP1XXX, trip type OW, daysStay 7.
  • Any other request field can be set through the overrides dict, which is merged last and wins (e.g. {"taxes": false, "validateCategories": "15"}). An override set to null removes that field from the request entirely.
  • Responses whose parsed JSON exceeds max_response_chars (default 200000) return a preview only, to protect the LLM context window. Programmatic callers should pass max_response_chars: 0 for complete data.

Setup

cd fare-mcp-server
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
cp .env.example .env   # then fill in ENGINE_WRAPPER_URL

Running without Claude

Claude is just one MCP client — the server runs standalone and anything that speaks MCP (or plain Python) can drive it.

Raw stdio mode (what any MCP client spawns):

.venv/bin/python server.py

It waits silently for JSON-RPC on stdin — normal for a stdio server. Ctrl+C to exit.

MCP Inspector — interactive web UI to browse and call the tools (best for development, debugging, and demos; requires Node):

npx @modelcontextprotocol/inspector .venv/bin/python server.py

From a Python script — the MCP client library is already installed in the server's venv:

import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def main():
    params = StdioServerParameters(command=".venv/bin/python", args=["server.py"])
    async with stdio_client(params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            result = await session.call_tool("list_fare_files", {})
            print(result.content[0].text)

asyncio.run(main())

No MCP at all — the tools are plain Python functions:

.venv/bin/python -c "import server, json; print(json.dumps(server.list_fare_files(), indent=2))"

Register with Claude Code

From the directory where you cloned this repo:

claude mcp add --scope user fare-data \
  --env FARE_DATA_DIR="$(pwd)/../fare-data" \
  -- "$(pwd)/.venv/bin/python" "$(pwd)/server.py"

(--env FARE_DATA_DIR=... is optional — see the resolution order above.)

Register with Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json, replacing <repo> with your clone's absolute path:

{
  "mcpServers": {
    "fare-data": {
      "command": "<repo>/.venv/bin/python",
      "args": ["<repo>/server.py"]
    }
  }
}

Then restart Claude Desktop.

Use from FarePulse-Agent

FarePulse-Agent can route its wrapper snapshot calls and competitor probes through this server: clone the two repos side by side and set FARE_MCP_ENABLED=1 in FarePulse-Agent's .env (see the "fare-data MCP server" section of its README).

Example prompts once connected

  • "What fare files are available?"
  • "Show me the cheapest business-class fares in MEX_LAX_28Jul.csv"
  • "Summarize fares by cabin in the 28Jul file"
  • "What changed between the 10Jul and 28Jul MEX-LAX snapshots?"
  • "Shop live fares for ADL-LAX on FJ, one way"

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured