SkyDemon MCP Server
This MCP server integrates with SkyDemon (unofficial) to provide read-only flight planning, airfield information, and weather via local MCP tools, plus optional OAuth-guarded remote access.
Session & auth:
skydemon_login,skydemon_session_status,skydemon_logout, andskydemon_api_infomanage/manage the in-memory SkyDemon session.Local flightplans: list and read saved
.flightplan/.gpxfiles from disk (offline, no login required).Airfield search/info: search offline charts by ICAO/name (
skydemon_search_airfields) and get full records for one or many airfields, including runways, frequencies, fuel, circuits, contacts, and online pilot notes/feedback.Cloud flightplans: list and download cloud-stored flightplans, optionally saving a local copy.
Weather: fetch current METAR and/or TAF for an airfield.
Remote/OAuth: supports stdio, Streamable HTTP, and SSE transports; includes an OAuth 2.0 provider and bearer-token middleware for remote/Gemini access.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SkyDemon MCP Server search for EGLL and show its pilot notes and live feedback"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SkyDeamonMcp
MCP wrapper for SkyDemon (Windows). Reverse-engineered login interop, read-only flightplan access, offline airfield search + pilot notes / live feedback, and METAR/TAF weather. No SkyDemon code is shipped — only wire/file formats are reimplemented from scratch for interop.
Works locally over stdio (Claude Desktop) or Streamable HTTP (localhost), and remotely behind a tunnel with a built-in OAuth 2.0 provider for Gemini.
Setup
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements-dev.txt
# or: .\.venv\Scripts\python.exe -m pip install -e . pytestRequires mcp<2 (v1 FastMCP API).
Related MCP server: Flighty MCP
Credentials
Copy .env.example to .env (git-ignored, never commit it):
Copy-Item .env.example .envVariable | Needed for | Notes |
| Everything online | Server logs in once at startup, holds session in memory. Real env wins over |
| Remote (tunnel) access | Bearer/master credentials for the built-in OAuth provider. Not needed for localhost use. |
| Gemini connect flow | Your Gemini redirect URI (comma-separated list also ok via |
| Local plans | Override for |
| Airfield index | Override for chart lookup. |
| Airfield index | Override for SkyDemon install dir. |
| Tunnel/proxy | Extra |
Device identity is auto-detected per machine like the app does
(MachineGuid → fastest MAC → fallback hash; WMI manufacturer/model),
so moving machines just works — no const IDs.
Run the MCP server
# stdio (Claude Desktop)
.\.venv\Scripts\python.exe -m skydeamon.server
# or: .\.venv\Scripts\skydeamon-mcp.exe
# HTTP on localhost (no OAuth needed)
.\.venv\Scripts\skydeamon-mcp --transport streamable-http --port 8000
# flags: --transport stdio|streamable-http|sse (default stdio), --host, --portServes the same tools at http://127.0.0.1:8000/mcp (verified: initialize →
tools/list → tools/call). Keep localhost use on localhost — the endpoint
has no auth of its own; only expose it via the OAuth-guarded setup below.
Claude Desktop config (stdio):
{
"mcpServers": {
"skydemon": {
"command": "C:\\Git\\SkyDeamonMcp\\.venv\\Scripts\\skydeamon-mcp.exe",
"env": { "SKYDEMON_LOGIN": "...", "SKYDEMON_PASSWORD": "..." }
}
}
}Remote access + OAuth 2.0 (Gemini)
When the server sits behind a tunnel/proxy (e.g. Cloudflare Tunnel →
https://flights.segal.to), the MCP endpoint is guarded by a small built-in
OAuth 2.0 provider (skydeamon/auth.py) plus bearer-checking middleware.
Localhost traffic is unaffected.
Endpoints
Route | Spec | Public? |
| RFC 8414 authorization server metadata | Yes |
| OIDC discovery (same document) | Yes |
| RFC 9728 protected-resource metadata | Yes |
| RFC 7591 dynamic client registration | Yes |
| RFC 6749 authorize, renders an Approve/Deny page | Yes |
| Grants: | Yes |
| Bearer-guarded MCP | No — needs |
Unauthenticated MCP calls get 401 with a
WWW-Authenticate: Bearer resource_metadata=".../.well-known/oauth-protected-resource"
header so clients can discover auth automatically.
How it works
Gemini discovers
/.well-known/oauth-protected-resource→ authorization server metadata.It registers (or uses the configured client id) and opens
/oauth/authorize.You click Approve & Connect → 302 redirect back with a one-time
code(10-min TTL, PKCE-verified).Gemini exchanges the code at
/oauth/tokenfor a Beareraccess_token(30 days) +refresh_token(60 days). Tokens live only in server memory.Every
/mcpcall must carryAuthorization: Bearer <token>. The masterMCP_OAUTH_CLIENT_SECRETis also accepted directly as a Bearer token (handy for testing with curl).
Google's redirect URI must be allow-listed: set MCP_OAUTH_REDIRECT_URI in
.env (see .env.example). Google user-bound redirects
(https://oauth-redirect.googleusercontent.com/...), gemini.google.com,
and localhost are accepted by default; anything else is rejected with 400.
Test the API (live login, redacted output)
.\.venv\Scripts\python.exe tmp\live_check.py
.\.venv\Scripts\python.exe -m pytest tests -qlive_check.py loads .env in-process and prints only the license summary
(name, type, expiry, token tail) — never the password or full token.
Tools
All read-only (no permission prompts) except skydemon_download_cloud_flightplan
with save:true, plus login/logout which only touch the in-memory session.
Tool | What it does |
| Rarely needed (auto-login on startup). Switch user / force refresh / validate creds. Returns token tail only. |
| Cached session state (token tail only). Check before online tools. |
| Drop the in-memory session. Next online call re-logs in transparently. |
| Diagnostics: API base + client identity. |
| List local |
| Summarize one local plan (routes, legs, aircraft). |
| Entry point for airfields: ICAO/name over offline charts (no login). Always start here. |
| Full record for ONE field: runways, frequencies, fuel, circuits, contacts + pilot notes & live feedback (online, needs login). |
| Full records for 2–20 fields in one throttled, offline-cached batch call. Prefer over N single calls. |
| List flightplans in cloud storage (online, needs login). |
| Download + summarize one cloud plan ( |
| Current METAR + TAF for an airfield ( |
Layout
skydeamon/config.py— server URLs, GUIDs (from ILSpy decompile)skydeamon/api.py—Login/LoginDeviceclient +DeviceLoginparserskydeamon/session.py— in-memory session cacheskydeamon/auth.py— OAuth 2.0 provider + bearer middleware (Gemini remote access)skydeamon/flightplans.py— read-only disk parsingskydeamon/airfields.py— offline chart index (search) + pilot notes / feedbackskydeamon/weather.py— METAR/TAF via Bulletin/Refresh (5-min cache)skydeamon/cloud.py— cloud list/download (no upload/delete)skydeamon/server.py— MCP server (stdio +--transport streamable-http)skydeamon/logging_config.py— request/tool-call loggingtmp/— local-only scratch (ignored, never committed)
Disclaimer
Unofficial project, not affiliated with or endorsed by SkyDemon (Divelements Limited). Built by reverse-engineering the SkyDemon app's wire/file formats for interop — no vendor code is shipped, but formats may change with any app update and break this wrapper.
Use at your own risk: you are responsible for keeping your SkyDemon credentials safe, complying with SkyDemon's terms of service, and complying with applicable law in your jurisdiction. The authors accept no liability for account actions, data loss, or breakage resulting from use of this software.
Available Tools
10 toolsskydemon_airfield_infoA
Full airfield info: offline record (runways, frequencies, fuel, circuits, contacts) + online pilot notes & live feedback text.
Online extras need a login session; without one only offline data is returned (online_error set).
Inputs: icao_or_name (required), include_online.
skydemon_api_infoB
Show SkyDemon API base + client identity used by this wrapper.
Inputs: no named parameters.
skydemon_download_cloud_flightplanA
Download one cloud flightplan and summarize it (no edits by default).
Args: name: exact cloud file name from skydemon_list_cloud_flightplans. save: also save a copy into the local Routes dir. overwrite: allow replacing an existing local file when saving.
Inputs: name (required), save, overwrite.
skydemon_list_cloud_flightplansA
List flightplans in SkyDemon cloud storage (User root, read-only).
Args: pattern: server-side filter, e.g. '.flightplan' or '.gpx'.
Inputs: pattern.
skydemon_list_flightplansA
List saved flightplans on disk (read-only). Default: ~/Documents/SkyDemon/Routes.
Inputs: no named parameters.
skydemon_loginA
Log in once; session is held in memory and reused (no repeated logins).
Args: login: username ('user' or 'user/slot'); defaults to SKYDEMON_LOGIN. password: password; defaults to SKYDEMON_PASSWORD env. force: true to force a fresh login even if a valid session exists.
Inputs: force, login, password.
skydemon_logoutA
Drop the in-memory session (does not touch SkyDemon's own files).
Inputs: no named parameters.
skydemon_read_flightplanA
Read one flightplan from disk (read-only, no edits).
Args: name: file name (e.g. 'EGKK-EGCC.flightplan') or absolute path.
Inputs: name (required).
skydemon_search_airfieldsA
General airfield search over installed charts (offline, read-only).
Matches ICAO exactly / by prefix, then name substring. Biggest airfields rank first.
Inputs: query (required), limit.
skydemon_session_statusA
Show cached login state (token tail only, never the full secret).
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Tools mostly have distinct purposes: local vs cloud flightplan listing/downloading are clearly separated, and search_airfields vs airfield_info differ by search-vs-detail. The only mild overlap is among the session/diagnostic tools (session_status, api_info, login, logout), but each is still distinguishable.
All tools share a consistent 'skydemon_' prefix and predominantly use a verb_noun pattern (list_flightplans, read_flightplan, search_airfields, download_cloud_flightplan). Minor deviations are noun-style names (session_status, api_info, airfield_info), but overall the convention is predictable.
10 tools is well-scoped for a SkyDemon wrapper, covering session management, local flightplans, cloud flightplans, and airfield lookups without bloat or redundancy.
The surface is deliberately read-only: no create/update/delete of local flightplans and no cloud upload operation, which are natural lifecycle gaps for the domain. Reading, searching, downloading, and auth are covered, so agents can accomplish inspection tasks but hit dead ends for any editing workflow.
Maintenance
Related MCP Connectors
Read-only flight-training records for CFIs, students and schools: syllabus, schedule, FAR/AIM.
Offline global aviation reference: airports, runways, navaids, frequencies from OurAirports.
OAuth account tools, image/video generation (Pro), Studio handoffs. No local vault access.
Offline, keyless lookup of the US civil aircraft registry — decode N-numbers, search records.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables access to SimBrief flight planning data through Claude Desktop with secure Google OAuth authentication. Provides tools to retrieve flight plans, dispatch briefings, NOTAMs, weather data, and other aviation planning information.2MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to access and manage your Flighty flight data directly from the local macOS app database, supporting flight lists, status, searches, additions, and more.23MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to read live drone status, telemetry, and parameters, and to control drone operations with scoped permissions, confirmation steps, and audit trails.MIT
- AlicenseAqualityDmaintenanceEnables pilots to assemble a preflight briefing per 14 CFR §91.103 by fetching weather, airport info, aircraft performance, fuel estimates, alternates, and NOTAMs.632 npm1AGPL 3.0