flight-planner-mcp 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flight_planner_mcp-0.2.0/PKG-INFO +67 -0
- flight_planner_mcp-0.2.0/README.md +51 -0
- flight_planner_mcp-0.2.0/pyproject.toml +22 -0
- flight_planner_mcp-0.2.0/setup.cfg +4 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp/data/airports.json +1 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp/data/fares-VINTAGE.txt +1 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp/data/fares-us-rolling.json +1 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp/data/routes.json +1 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp/server.py +421 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp/telemetry.py +126 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp.egg-info/PKG-INFO +67 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp.egg-info/SOURCES.txt +15 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp.egg-info/dependency_links.txt +1 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp.egg-info/entry_points.txt +2 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp.egg-info/requires.txt +5 -0
- flight_planner_mcp-0.2.0/src/flight_planner_mcp.egg-info/top_level.txt +1 -0
- flight_planner_mcp-0.2.0/tests/test_e2e_contract.py +104 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: flight-planner-mcp
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Flight planner for AI agents: airport lookup, nearby search, route check, distance, rolling BTS fare baseline, date hints, trip skeletons, ranked 1-stop/2-stop pairs. No booking.
|
|
5
|
+
Author-email: Surendran B <reachsuren@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Keywords: mcp,flights,flight-planner,airports,ourairports,static,agents
|
|
8
|
+
Classifier: Development Status :: 3 - Alpha
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
Requires-Dist: mcp<3,>=2.0.0
|
|
13
|
+
Provides-Extra: test
|
|
14
|
+
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
15
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
|
|
16
|
+
|
|
17
|
+
# flight-planner-mcp (package: `flight-planner-mcp`)
|
|
18
|
+
|
|
19
|
+
Static flight planner v0.2. 10 tools (airport_lookup, airport_nearby, route_check, distance_calc, fare_baseline latest-available-snapshot BTS median (DB1C Market 2026-06), cheap_date_hint low-confidence, trip_skeleton with METAR/TAF + FAA best-effort, flight_pairs 1-stop + 2-stop ranked, skills_list, skill_read), OurAirports 4,568 airports + 34,824 directed pairs, great-circle stdlib. No booking, no DB, zero paid API, zero secrets in repo.
|
|
20
|
+
|
|
21
|
+
## Fare baseline (latest-available snapshot, BTS DB1C Market — DB1C Market 2026-06)
|
|
22
|
+
|
|
23
|
+
`data/fares-us-rolling.json` holds passenger-weighted median/p25/p75 per directional US O&D from DB1C Market 2026-06 (latest available at build time; 40% ticket sample, public domain), built by `scripts/build_fares.py` from BTS DB1C bulk archives (Parquet/CSV). Zero-fare artifacts dropped; routes with n<50 sampled tickets are suppressed (tool returns `[TOO_THIN]`, never a guess). `data/fares-VINTAGE.txt` stamps the covered period. Raw files live outside the repo and are never committed — only the ~3.1MB aggregate ships.
|
|
24
|
+
|
|
25
|
+
## Refresh (monthly cron, snapshot replaced each build)
|
|
26
|
+
|
|
27
|
+
DB1C publishes monthly. Each update cycle, download the newest monthly archive and rebuild; the snapshot is replaced whole, no archive kept.
|
|
28
|
+
|
|
29
|
+
```cron
|
|
30
|
+
# monthly, 06:00 UTC on the 20th
|
|
31
|
+
0 6 20 * * cd ~/Projects/flight-planner-mcp && uv run --with duckdb python scripts/build_fares.py /tmp/DB1C.MARKET.*.parquet && python3 tests/test_e2e_contract.py
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Manual fallback: download the newest DB1C Market archive from BTS Azure Blob storage and run `build_fares.py`. Never fake data: ship what exists and stamp the vintage honestly.
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
### Option A — Claude Code plugin (one click)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
claude plugin marketplace add surendranb/flight-planner-mcp
|
|
42
|
+
claude plugin install flight-planner-mcp
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Ships `.claude-plugin/plugin.json` (name `flight-planner-mcp`, version pinned to pyproject) + `.mcp.json`; skills resolve from `./skills/`.
|
|
46
|
+
|
|
47
|
+
### Option B — any MCP harness (incl. Antigravity, zero cloning)
|
|
48
|
+
|
|
49
|
+
Paste this block into the harness MCP config; the tester gets all 10 tools + `skills_list`/`skill_read` with no repo checkout:
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcpServers": {
|
|
54
|
+
"flight-planner-mcp": {
|
|
55
|
+
"command": "uvx",
|
|
56
|
+
"args": ["--from", "flight-planner-mcp", "flight-planner-mcp"],
|
|
57
|
+
"env": {}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Same snippet lives in `mcp-config.json` at repo root. Opt out of telemetry with `"env": {"MCP_TELEMETRY_OPT_OUT": "1"}`. Requires `uvx` on PATH and network on first run.
|
|
64
|
+
|
|
65
|
+
## Refresh (plugin version pinning)
|
|
66
|
+
|
|
67
|
+
`skill_read` live-fetches `https://raw.githubusercontent.com/surendranb/flight-planner-mcp/main/skills/<name>.md` (local file is fallback only). Skill text edits therefore reach every installed copy at next call with no version bump. Bump `plugin.json` + `marketplace.json` versions only when tools, schemas, or data files change; keep them equal to the pyproject version.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# flight-planner-mcp (package: `flight-planner-mcp`)
|
|
2
|
+
|
|
3
|
+
Static flight planner v0.2. 10 tools (airport_lookup, airport_nearby, route_check, distance_calc, fare_baseline latest-available-snapshot BTS median (DB1C Market 2026-06), cheap_date_hint low-confidence, trip_skeleton with METAR/TAF + FAA best-effort, flight_pairs 1-stop + 2-stop ranked, skills_list, skill_read), OurAirports 4,568 airports + 34,824 directed pairs, great-circle stdlib. No booking, no DB, zero paid API, zero secrets in repo.
|
|
4
|
+
|
|
5
|
+
## Fare baseline (latest-available snapshot, BTS DB1C Market — DB1C Market 2026-06)
|
|
6
|
+
|
|
7
|
+
`data/fares-us-rolling.json` holds passenger-weighted median/p25/p75 per directional US O&D from DB1C Market 2026-06 (latest available at build time; 40% ticket sample, public domain), built by `scripts/build_fares.py` from BTS DB1C bulk archives (Parquet/CSV). Zero-fare artifacts dropped; routes with n<50 sampled tickets are suppressed (tool returns `[TOO_THIN]`, never a guess). `data/fares-VINTAGE.txt` stamps the covered period. Raw files live outside the repo and are never committed — only the ~3.1MB aggregate ships.
|
|
8
|
+
|
|
9
|
+
## Refresh (monthly cron, snapshot replaced each build)
|
|
10
|
+
|
|
11
|
+
DB1C publishes monthly. Each update cycle, download the newest monthly archive and rebuild; the snapshot is replaced whole, no archive kept.
|
|
12
|
+
|
|
13
|
+
```cron
|
|
14
|
+
# monthly, 06:00 UTC on the 20th
|
|
15
|
+
0 6 20 * * cd ~/Projects/flight-planner-mcp && uv run --with duckdb python scripts/build_fares.py /tmp/DB1C.MARKET.*.parquet && python3 tests/test_e2e_contract.py
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Manual fallback: download the newest DB1C Market archive from BTS Azure Blob storage and run `build_fares.py`. Never fake data: ship what exists and stamp the vintage honestly.
|
|
19
|
+
|
|
20
|
+
## Install
|
|
21
|
+
|
|
22
|
+
### Option A — Claude Code plugin (one click)
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
claude plugin marketplace add surendranb/flight-planner-mcp
|
|
26
|
+
claude plugin install flight-planner-mcp
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Ships `.claude-plugin/plugin.json` (name `flight-planner-mcp`, version pinned to pyproject) + `.mcp.json`; skills resolve from `./skills/`.
|
|
30
|
+
|
|
31
|
+
### Option B — any MCP harness (incl. Antigravity, zero cloning)
|
|
32
|
+
|
|
33
|
+
Paste this block into the harness MCP config; the tester gets all 10 tools + `skills_list`/`skill_read` with no repo checkout:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"mcpServers": {
|
|
38
|
+
"flight-planner-mcp": {
|
|
39
|
+
"command": "uvx",
|
|
40
|
+
"args": ["--from", "flight-planner-mcp", "flight-planner-mcp"],
|
|
41
|
+
"env": {}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Same snippet lives in `mcp-config.json` at repo root. Opt out of telemetry with `"env": {"MCP_TELEMETRY_OPT_OUT": "1"}`. Requires `uvx` on PATH and network on first run.
|
|
48
|
+
|
|
49
|
+
## Refresh (plugin version pinning)
|
|
50
|
+
|
|
51
|
+
`skill_read` live-fetches `https://raw.githubusercontent.com/surendranb/flight-planner-mcp/main/skills/<name>.md` (local file is fallback only). Skill text edits therefore reach every installed copy at next call with no version bump. Bump `plugin.json` + `marketplace.json` versions only when tools, schemas, or data files change; keep them equal to the pyproject version.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "flight-planner-mcp"
|
|
3
|
+
version = "0.2.0"
|
|
4
|
+
description = "Flight planner for AI agents: airport lookup, nearby search, route check, distance, rolling BTS fare baseline, date hints, trip skeletons, ranked 1-stop/2-stop pairs. No booking."
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.10"
|
|
7
|
+
license = "MIT"
|
|
8
|
+
authors = [{ name = "Surendran B", email = "reachsuren@gmail.com" }]
|
|
9
|
+
keywords = ["mcp", "flights", "flight-planner", "airports", "ourairports", "static", "agents"]
|
|
10
|
+
classifiers = ["Development Status :: 3 - Alpha", "Programming Language :: Python :: 3"]
|
|
11
|
+
dependencies = ["mcp>=2.0.0,<3"]
|
|
12
|
+
[project.optional-dependencies]
|
|
13
|
+
test = ["pytest>=8.0.0", "pytest-asyncio>=0.23.0"]
|
|
14
|
+
[project.scripts]
|
|
15
|
+
flight-planner-mcp = "flight_planner_mcp.server:main"
|
|
16
|
+
[build-system]
|
|
17
|
+
requires = ["setuptools>=68", "wheel"]
|
|
18
|
+
build-backend = "setuptools.build_meta"
|
|
19
|
+
[tool.setuptools.packages.find]
|
|
20
|
+
where = ["src"]
|
|
21
|
+
[tool.setuptools.package-data]
|
|
22
|
+
flight_planner_mcp = ["data/*"]
|