Windsock › MCP server
Windsock MCP server Beta
Windsock exposes its aircraft intelligence — valuations, registry lookups, cost of ownership, market metrics, verified value reports, pre-buy diligence checklists, logbooks and more — as a remote Model Context Protocol server. Any MCP-capable assistant or agent runtime can call the same 59 tools the Windsock app uses, and every call is tied to your account. Signed-in users can also use the in-app version of this page at /app/docs/mcp; the REST equivalent is the Enterprise API v3 reference.
Endpoint
| Property | Value |
|---|---|
| Server URL | https://windsock.ai/mcp |
| Transport | Streamable HTTP (JSON-RPC 2.0 over POST). A GET without Accept: text/html returns 405; this page is what browsers and crawlers get. |
| Protocol version | 2025-06-18 |
| Discovery | /.well-known/oauth-protected-resource, /.well-known/oauth-authorization-server |
| Scopes | windsock.read, windsock.write |
| Machine-readable | llms.txt |
Authentication
Chat assistants use OAuth so you approve access in a browser. Server-side agents cannot open a browser, so they send your account API key as a header instead. Both resolve to the same account, plan and tool catalog.
| OAuth 2.1 (chat assistants) | API key (agents & SDKs) | |
|---|---|---|
| Use it from | ChatGPT, Claude, Grok, Copilot and any client with a custom-connector setting. | OpenAI Agents API, Anthropic Messages API MCP connector, Claude Code, LangChain, cURL, your own code. |
| How | Paste the server URL into the client. It discovers the authorization server, registers itself (dynamic client registration, PKCE) and sends you to a Windsock consent screen. Walkthroughs are on the Integrations page. | Send Authorization: Bearer wsk_… or X-API-Key: wsk_… on every request. Get the key from Integrations → Agents & SDKs. |
| Token lifetime | Access tokens last 24 hours and refresh automatically for 90 days. Revoke a connection any time from Integrations. | The key does not expire. Enterprise API accounts can rotate it from the API dashboard. |
| Keep in mind | Some assistants require a paid workspace to add custom connectors. | Treat the key like a password: store it in a vault or secret store, never in client-side code. |
Quickstart
Replace wsk_YOUR_API_KEY with your key. The Agents & SDKs panel produces these snippets with your key filled in.
OpenAI Agents API
import OpenAI from "openai";
const client = new OpenAI();
const session = await client.beta.agents.sessions.create({
agent: {
model: "gpt-6-astra",
tools: [
{
type: "mcp",
server_label: "windsock",
transport: { type: "http", server_url: "https://windsock.ai/mcp" },
authorization: "wsk_YOUR_API_KEY",
},
],
},
input: "What is N12345 worth today, and what should I check before buying it?",
});
Anthropic Messages API (MCP connector)
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const response = await client.beta.messages.create({
model: "claude-opus-5",
max_tokens: 16000,
betas: ["mcp-client-2025-11-20"],
mcp_servers: [
{ type: "url", name: "windsock", url: "https://windsock.ai/mcp", authorization_token: "wsk_YOUR_API_KEY" },
],
tools: [{ type: "mcp_toolset", mcp_server_name: "windsock" }],
messages: [{ role: "user", content: "What is N12345 worth today?" }],
});
Claude Code
claude mcp add --transport http windsock https://windsock.ai/mcp \
--header "Authorization: Bearer wsk_YOUR_API_KEY"
cURL
curl -sS https://windsock.ai/mcp \
-H "Authorization: Bearer wsk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
A typical first workflow: lookup_aircraft with a registration to get the make_model_id and avionics_ids, then value_aircraft, estimate_cost_of_ownership and find_similar_aircraft with those ids.
Install in one click
For editors and desktop clients that take a server URL, these add Windsock and sign you in with OAuth on first use:
Install in VS Code · Install in Cursor
Claude Code
claude mcp add --transport http windsock https://windsock.ai/mcp
Or install the plugin, which adds the server plus an aircraft pre-buy workflow skill:
/plugin marketplace add team-windsock/windsock-mcp
/plugin install windsock@windsock
Clients that only speak stdio
npx -y windsock-mcp # npm bridge — OAuth, or set WINDSOCK_API_KEY
pip install windsock-mcp # Python client + bridge (API key)
Source, examples and the packages: https://github.com/team-windsock/windsock-mcp.
Tools
59 tools. 21 are available to every signed-in account within the monthly call limit; the rest need a paid plan. Full input and output schemas come back from tools/list. Every tool carries readOnlyHint / destructiveHint annotations.
| Tool | What it does | Access | Plan |
|---|---|---|---|
lookup_aircraftLook up aircraft by tail number | Canonical registry + distilled aircraft profile for a registration. Accepts a US N-number OR an international mark (C-GKUH, VH-ABC, PH-XYZ, 9V-BLL — 17 registers). Returns structured aircraft data plus make_model_id and avionics_ids — the IDs needed downstream for valuation and reference lookups. The first step in any "value this tail" workflow. For a non-US aircraft the response carries a registration_authority block naming the state of registry, and the faa_ads / faa_stcs lists carry a jurisdiction note: those documents are FAA-issued and apply to the TYPE, not to that registration — the aircraft's own authority issues its directives. | read-only | Free |
value_aircraftValue an aircraft at a point in time | Machine-generated aircraft market value at a single point in time, from today back to 1960. Provide a tail number OR a full spec (make_model_id + aircraft_info). Optional as_of_date selects the contemporary model (>= 2020-01-01 or omitted) or the deep-history longitudinal model (before 2020). Set include=["explanation"] or ["uncertainty"] for richer output. The flagship valuation tool. | write | Free |
impute_aircraft_specsImpute missing aircraft specs | ML fill-in for missing airframe, engine, and condition fields (SMOH, AFTT, interior/exterior quality, etc.) before a valuation. Identify the aircraft by registration or make_model_id; any fields you supply (including known hours) are preserved and used to estimate the rest. field_sources says which values were provided, taken from the tail's registry/listing data, or imputed. Quality scores use a 1–10 scale on input (a literal 1 reads as like-new, not the worst grade — send 0.1 for the worst) and are RETURNED on the 0–1 scale, where 0.7 means grade 7. Pass the returned values straight to value_aircraft, which accepts either scale. | write | Free |
infer_aircraft_specsInfer aircraft specs from page content | Extract aircraft specs — AFTT, SMOH (engine 1, and engine 2 for twins), prop time, year, and interior/exterior quality (1–10), plus avionics mentioned — from observable page content: visible text and/or image URLs (a listing's own photos, or data: URLs). Uses the vision/LLM "autopilot inference" behind on-site valuation pre-fill. Anchor with registration or make_model_id to pull make/model + year from the FAA registry; set impute=true to fill gaps with the imputation model. Returns specs, per-field sources, and a ready-to-POST report_input for create_valuation_report. Requires Windsock PRO or Enterprise. | write | Paid |
find_similar_aircraftFind comparable aircraft | Canonically similar aircraft (same make/model cohort and equipment profile) to a given tail — for comp tables, substitute inventory, and "aircraft like this" lists. Comps stay on the ANCHOR'S OWN REGISTER by default: a US tail gets US comps, a Canadian tail Canadian ones. That matters because this registry spans 17 international registers — before scoping, a US Robinson R44 drew 14 of its 100 comps from foreign registers, which are different markets under different airworthiness authorities and not substitutes a US buyer can act on. Pass registry_scope="all" only when the caller genuinely wants the global fleet. | read-only | Free |
search_aircraftSearch the aircraft registry | Registry-wide aircraft search — the fleet / market-research search surface. Returns individual registered tails matching an AND-combined filter set (make/model, US state, city, year, tail number, current registrant name, or geographic radius), with pagination and sorting. Resolve each model name to a make_model_id with search_make_models first; to cover several models in one search pass them as a list with condition "in". For population totals (e.g. "how many R182s in Oregon") prefer count_aircraft, which avoids paging. Each filter is {field_name, condition, value}. | read-only | Free |
count_aircraftCount registered aircraft (facets by state & year) | Aggregate registry census for a filter set: the total number of matching aircraft plus breakdowns by US state and by build year — in one call, without paging individual tails. Directly answers "how many Cessna R182s are registered in Oregon" (filter make_model_id + state, then read total_count / state_counts). Uses the same filter grammar as search_aircraft. Counts are computed over up to fleet_cap aircraft. | read-only | Free |
suggest_aircraft_searchSearch aircraft by description | Describe the aircraft (and owners) you want in plain words, e.g. "Cirrus SR22s in Texas bought in the last two years" or "twin pistons near Denver with an autopilot that haven't flown in a year", and get back search filters (make/model, type, place, year, avionics, flying, ownership, accidents, market balance and more) with a one-line reading of the request and anything that couldn't be expressed. Set execute=true to also get the matching aircraft. To page or re-run, send the returned filters back without a prompt (no new model call). The filters use a wider vocabulary than search_aircraft, so run them here. One call per second. PRO FILTERS (marked pro: true; need Windsock Pro or a paid API plan to run): avionics (avionics_categories, standardized_avionic_ids), owner profile (pilot_type, pilot_level, med_class, end_of_career_pilot), ownership timing (current_owner_start_date, num_unique_faa_registrants, avg_owner_hold_years: average years each owner on record has kept it), registration status (registration_pending, up_for_renewal_soon, expiration_date), flying activity (last_airborne_at, flight_hours_last_year, adsb_signal_strength, and last_seen_state / last_seen_near: where ADS-B last saw it, as opposed to state / location_point, where it lives), market_balance, and the score levels sale_likelihood (how likely to sell in the next few months) and dealflow (how quickly it would sell at its value) — each `is` high, medium or low, thirds of US aircraft — and estimated_value (Windsock's weekly preliminary value in US dollars; gt, gte, lt or lte). Without Pro, the answer still shows them but lists them under `locked` with an upgrade link and does not run the search: tell the user which filters need Pro, or drop them and re-run with the rest. | read-only | Free |
estimate_cost_of_ownershipEstimate cost of ownership | Annual/monthly operating-cost breakdown for a specific tail, combining registry data, recent flight patterns, and optional override assumptions (fuel, insurance, hangar, annual hours, etc.). Great for pre-buy disclosures and TCO comparisons. | read-only | Free |
assess_flight_activity_riskAssess low flight-activity risk | Forward-looking probability that an aircraft will fly little over the next ~180 days, as of a given date. Used to flag stagnant inventory, prioritize inspections, and risk-score collateral. | write | Paid |
analyze_flight_usageAnalyze flight usage vs cohort | How an aircraft is flown across seven flight categories (training, business, pleasure, etc.) relative to a comparable cohort. Useful for appraisal narratives, insurance underwriting, and validating seller claims about usage. | write | Paid |
search_make_modelsSearch FAA make/models | Text search over FAA make/model names, returning make_model_id values needed by value_aircraft, impute_aircraft_specs, and reference lookups. Use to resolve "2015 Cirrus SR22" to a canonical id when no tail number is available. | read-only | Free |
search_avionicsSearch avionics equipment | Search avionics equipment names/types, returning avionics_ids that affect equipment-adjusted valuations. Use to map panel/upgrade text to canonical ids. | read-only | Free |
search_airworthiness_directivesSearch Airworthiness Directives (ADs) | Search FAA Airworthiness Directive records, optionally filtered by make_model_id and compliance status. For pre-buy AD review, maintenance planning, and appraisal compliance sections. | read-only | Free |
search_stcsSearch Supplemental Type Certificates (STCs) | Search STC records, optionally filtered by make_model_id — certificate numbers, descriptions, applicability. For pre-buy due diligence and documenting mods that affect value. STC applicability lists can run to hundreds of models, making a single row ~90K+ characters; pass slim=true to drop the large applicability strings (model_series, tc_number, tc_holder) in favor of an applicability_summary with counts, so the endpoint stays usable at realistic limits. | read-only | Free |
list_market_metricsList market metrics | Catalog of macro GA market metrics Windsock tracks (stable identifiers, labels, units, and whether each supports forecasting). Discover valid metric names before calling get_market_metric. | read-only | Free |
list_market_categoriesList market categories | Aircraft segment keys (e.g. single_engine_piston) used to scope market metrics. Pass a key as the `category` argument to get_market_metric. | read-only | Free |
get_market_metricGet market metric time series + forecast | Historical actuals and optional forward forecast (with 75/95/99% confidence bands) for a named market metric, optionally scoped to an aircraft segment. Provides market context to complement individual valuations. | read-only | Free |
search_reportsSearch valuation reports | Paginated search over appraisal/valuation reports your account can access. Filter by registration, year, make_model_id, price bounds, and whether logbooks are attached. | read-only | Free |
create_valuation_reportCreate a verified valuation report | Generate a full Windsock verified value report (contemporary model only) from the same inputs as the windsock.ai valuation wizard. Creates a durable report owned by your account and queues PDF generation. Send the tail AND everything you know about the aircraft: any aircraft_info field you omit is filled with the make/model cohort MEDIAN, so a report built from a year alone prices like an average example — the response's inputs.stats_imputed / inputs.year_imputed list what was filled. Requires Windsock PRO or Enterprise. | write | Paid |
get_reportGet a report (with optional sections) | Fetch one report by id. Use `include` to inline sub-blocks in a single response, e.g. ["pricing","aircraft","components","inspection","appraiser","client","contents"]. Use only ["print_preflight"] for an owner/admin-only read-only eligibility check returning booleans and an opaque reference, with no report data or token/render/write action. | read-only | Free |
get_report_sectionGet a rich report section | Fetch one of a report's structured sub-resources: comparable-sold, market-strength, interpretability, price-timeline, flight-review, flight-history, comparable-aircraft-stats, report-summary, pricing, aircraft, or logbooks. Mirrors the sections of the PDF report. | read-only | Free |
get_report_download_linkGet a temporary download link for a report PDF | Mint a short-lived (15 minute) direct download URL for the generated PDF of a report your account can access. Fetch the returned `url` with a plain GET — it carries its own authority and needs no credentials. Only works once the report has finished generating; poll get_report until report_status is "complete". Before then it returns a 409 whose error carries retry_after_seconds (wait that long before polling again) and, when rendering was rescheduled because every renderer was busy, generation_deferred_until. A 409 with code generation_failed means no PDF will be produced. | read-only | Paid |
get_avionics_pricesAvionics price map | The avionics id to price map behind equipment-adjusted valuations: average catalogue price per unit plus the wholesale factor. Use it to value a specific aircraft's panel from its avionics ids — wholesale = sum(average_price over the aircraft's ids) * wholesale_factor. Pair with search_avionics to resolve panel text to ids. | read-only | Paid |
get_diligence_checklistGet a report's diligence checklist | Fetch the pre-buy diligence checklist header for a report: generation status, progress counters, and knowledge score. Returns an `exists:false` shape if no checklist has been generated yet (call generate_diligence_checklist to create one). | read-only | Paid |
list_diligence_itemsList diligence checklist items | List the pre-buy diligence checklist items for a report. Each item carries its category, title, guidance, critical flag, current state (pending/pass/flag/fail/na), source (ad/stc/logbook/rag/user), dollar value-impact band, AD/STC ref ids, and any evidence (notes, cited logbook page ids, photos). | read-only | Paid |
get_diligence_progressGet diligence checklist progress | Fetch the gamified progress payload for a report's diligence checklist: percent complete, knowledge score, counters by state, critical-items-verified, and how many items were auto-verified from logbook records. | read-only | Paid |
get_diligence_suggestionsSuggested diligence items | Suggest additional pre-buy checklist items for a report's diligence checklist: real Airworthiness Directives / STCs for the make/model that are not yet on the checklist, plus anonymized items other buyers have added for similar aircraft. Add one with add_diligence_item (source: "rag"). | read-only | Paid |
generate_diligence_checklistGenerate a make/model diligence checklist | Generate the make/model-specific pre-buy diligence checklist for a report (frontier-model research grounded in real ADs/STCs). Idempotent: an already-generated checklist is returned as-is. Generation runs in the background; poll get_diligence_checklist / get_diligence_progress for status. | write | Paid |
add_diligence_itemAdd a diligence checklist item | Add a custom (or accepted-suggestion) item to a report's diligence checklist. Requires a title; optional category, guidance, critical flag, and value_impact { min, max }. Creates the checklist on first use. | write | Paid |
update_diligence_itemUpdate a diligence checklist item | Update one diligence item: set its state (pending/pass/flag/fail/na), add notes or photo keys, set the value_impact band, or edit a user item's fields. Use this to tick items off as you verify them. | write | Paid |
delete_diligence_itemDelete a diligence checklist item | Remove one item from a report's diligence checklist (soft delete). Progress counters are recomputed automatically. | write | Paid |
add_diligence_commentComment on a diligence item | Post a comment to a diligence checklist item's thread (e.g. rationale for a pass/fail, a question, or a finding). Comments are attributed to the caller and appear in the item's living thread. | write | Paid |
add_diligence_citationCite evidence on a diligence item | Attach a citation to a diligence item substantiating its status — a report section, a digitized logbook page, an external link, or free text. kind ∈ report_section | logbook_page | link | text; reference is the section id / page id / URL / text. | write | Paid |
search_logbooksSearch digitized logbooks | Semantic/hybrid search over digitized aircraft logbook entries across reports you can access. Each hit includes date, summary, OCR text, extracted fields, and page ids for citation. Scope to a report with report_id. | write | Paid |
track_aircraftTrack an aircraft (watchlist) | Add a tail to your portfolio watchlist for recurring valuation snapshots and change monitoring. Requires make_model_id and aircraft_info.year; registration identifies the tail. | write | Paid |
list_tracked_aircraftList tracked aircraft | List the tails on your watchlist with their latest tracking state. | read-only | Paid |
get_tracked_aircraft_snapshotsGet tracked aircraft valuation history | Historical valuation snapshots for a watchlisted tail (dated value points). Use for value trends, portfolio appreciation/depreciation, and collateral monitoring over time. | read-only | Paid |
list_portfoliosList your Pro Portfolios | Your Pro Portfolios (your own and your team's), with fleet value, aircraft count and when each was last revalued. Start here: every other portfolio tool takes a portfolio_id from this list — never guess one. | read-only | Paid |
get_portfolio_overviewGet a portfolio overview | One portfolio's fleet value and KPIs, its value history (monthly, same-aircraft index), the split by segment and by state, the value forecast, and the newest events. Pass inflation_base (YYYY-MM) for inflation-adjusted dollars. | read-only | Paid |
get_portfolio_attributionGet why a portfolio's value moved | Why one portfolio's value moved, in dollars by driver (market, airframe hours and age, engine time, condition, aircraft record, other inputs), with the aircraft that moved most; and where today's value sits against typical examples of the same aircraft, by the same drivers. Pass window (1d, 7d or 30d; default 1d) for the period the move covers. restated is what a change of valuation model did to earlier values: it is reported beside the move, not in it. Aircraft the period cannot be explained for are counted, never estimated. available is false until a daily valuation has stored explanations. | read-only | Paid |
get_portfolio_attribution_by_monthGet a portfolio's value by driver, month by month | One portfolio's value by driver (market, airframe hours and age, engine time, condition, aircraft record, other inputs) at every month start of its history, oldest first. Every list has one entry per entry of months. change is why the same aircraft moved since the month before: each driver's amounts are that month's dollars, so add a driver's amounts from one month to another for its effect over that period; change.amount is their sum. level is where the value sits against typical examples of the same make, model and year that month: level.typical plus each driver's amount is level.fleet. The aircraft lists beside them say how many aircraft each figure covers; the rest are counted, never estimated. change.restated is what a restated earlier value did, reported beside the move, not in it. pending_aircraft are left out of level and change while their explanations catch up with new values (normally 0): when it is a large share of the portfolio, say the breakdown is being updated instead of quoting it. Nominal dollars. Use get_portfolio_attribution for the last day, week or month with the aircraft behind it. available is false until a month has been explained. | read-only | Paid |
list_portfolio_aircraftList the aircraft in a portfolio | The aircraft in one portfolio: tail, make/model/year, latest value and change, tracking status (last seen, flight activity, listing, registration) and the estimated loan balance. Each row's line_id addresses that aircraft in the other portfolio tools. A row's imputed_fields names the facts Windsock filled in (estimated, or from the FAA registry) rather than the holder provided, and unknown_fields the ones the holder cleared or gave unreadably; every other fact is the holder's own. Paginate with next_cursor (default 50 per page). | read-only | Paid |
get_portfolio_aircraftGet one aircraft in a portfolio | One portfolio aircraft in full: latest value, its 60-month value series, key facts, tracking status, estimated loan balance and LTV, and share of the fleet's value. holding.imputed_fields names the facts Windsock filled in (estimated, or from the FAA registry) rather than the holder provided, and holding.unknown_fields the ones the holder cleared; every other fact is the holder's own. Also answers for an aircraft that has left the portfolio (a line_id from list_portfolio_archived_aircraft): then archived is true and you get when and why it left, at what price, the facts it was valued on, and its value history up to that day. | read-only | Paid |
get_portfolio_eventsGet a portfolio's event feed | What happened to the portfolio's aircraft, newest first: value moves, flight activity (dormant, resumed, pattern changes), registration changes and expiries, listings, accidents/incidents, web mentions, and estimated-LTV crossings. Filter with kinds (comma-separated; a prefix ends in '.', e.g. "flight.,listing.") or line_id for one aircraft. Records from before an aircraft was acquired are left out unless include_history is true. Paginate with next_cursor. | read-only | Paid |
get_aircraft_web_findingsGet web findings for a portfolio aircraft | Web pages found about one portfolio aircraft (for-sale posts, rental/charter use, accident reports, …), grouped into episodes by the question they answer and ranked alert / warn / info / history, each with its sources. Also lists the aircraft's records from before its acquisition. | read-only | Paid |
get_aircraft_flight_profileGet a portfolio aircraft's flight profile | How one portfolio aircraft is being flown: weekly flying days against its seasonal expectation, local/pattern vs. cross-country mix, and detected changes in utilisation or use. available is false when no profile exists yet. | read-only | Paid |
get_portfolio_lender_viewGet a portfolio's lender view | Estimated loan balances and estimated LTV per aircraft, the book summary and the watchlist. These are ESTIMATES from each aircraft's purchase price and date under the portfolio's lending assumptions, except where an aircraft has its own loan terms on file (`estimate.terms_basis`, `estimate.line_terms`, `loan_terms`) — those terms win field by field. | read-only | Paid |
list_portfolio_reportsList a portfolio's locked reports | The portfolio's locked point-in-time reports, newest first: name, kind, as-of date, status and aircraft counts. | read-only | Paid |
list_portfolio_scenariosList a portfolio's saved stress scenarios | Saved Stress Lab scenarios for the portfolio (market shocks and their inputs), newest first. | read-only | Paid |
get_portfolio_positionsGet where a portfolio's aircraft are | The last-known position of each aircraft in the portfolio — live when airborne, else the last ADS-B fix, else its base — with the source of each position. | read-only | Paid |
list_portfolio_archived_aircraftList aircraft that have left a portfolio | The aircraft that have left one portfolio (sold, paid off, listing ended…), newest exit first, with totals: when each came in and at what price, when and why it left and at what price, and Windsock's last value before it left. On a portfolio of aircraft for sale the entry price is the first asking price and the exit price the last. Each row's line_id addresses that aircraft in get_portfolio_aircraft (its full history) and update_portfolio_aircraft. | read-only | Paid |
update_portfolio_aircraftCorrect the facts on a portfolio aircraft | Change what is on file about one aircraft in a portfolio you own, whether it is still in the portfolio or has left it. Send only what changes. On an aircraft still in the portfolio, facts the valuation depends on (tail, year, hours, engine times, condition, location, the date it came in) re-price its history, which takes a minute or two (repricing is true in the reply). On one that has left, every change is recorded, and one that would have moved its value history (those facts, or an exit moved later) has that history priced again in place, up to the day it left: the reply says repricing and value_history_stale, and list_portfolio_archived_aircraft shows value_history_stale false once the new values are in (a minute or two). The entry price, asking price, notes and the exit facts (why it left, when, for how much) never affect values. Exit facts apply only to an aircraft that has left. This does not change an aircraft's make and model, and does not add, archive, restore or delete aircraft. Confirm the change with the user before calling. | write | Paid |
enrich_aircraft_for_underwritingEnrich one aircraft for underwriting | Everything an aviation underwriter checks about one aircraft, in one call: the value with calibrated ranges (likely = 68%, outer = 90%) and the model release that produced it; an optional hull-value check of an insured value against those ranges; the registration record (status, expiry, state, owner tenure, registrant changes — never owner names or addresses); airworthiness context (the type's ADs and STC count, accident, NTSB and service-difficulty record counts); and recent ADS-B activity with the 180-day low-activity probability. Provide a tail number OR make_model_id plus aircraft_info.year. Returns an enrichment_id that get_underwriting_enrichment re-serves exactly later. Fleet Command and Enterprise API tiers only. | write | Paid |
enrich_hull_scheduleEnrich a hull schedule (up to 100 aircraft) | Run enrich_aircraft_for_underwriting over a carrier's hull schedule of up to 100 aircraft and list the insured values outside the calibrated ranges: summary.outside_range holds the aircraft insured above the central range (direction over) or below it (direction under). Each item takes the same fields as enrich_aircraft_for_underwriting (registration or make_model_id + aircraft_info.year, insured_value, reference, ...). Set book_total to true to also get the schedule's expected dollar total and a 90% range for that total, tested on held-out books (it ran wide for large mixed books and narrow for books concentrated in one segment); values without calibrated ranges (for example reference-based values) are left out and listed in book_total.excluded. Fleet Command and Enterprise API tiers only; metered per aircraft. | write | Paid |
get_underwriting_enrichmentRe-serve a stored underwriting enrichment | Return a stored underwriting enrichment exactly as it was first served, by its enrichment_id — the value, ranges and hull-value check as they stood then, even after a later model release. Visible to the key that created it and to its enterprise workspace. | read-only | Paid |
get_airport_weatherGet airport weather (METAR + TAF) | Combined current weather (METAR) and forecast (TAF) for an airport by ICAO/ident — for trip planning context. | read-only | Free |
forecast_fuel_priceForecast fuel price at an airport | Forward avgas/jet fuel price projection for an airport over 1–15 day horizons, with uncertainty bands. For trip budgeting and FBO economics. | write | Free |
get_account_usageGet API account usage & quotas | The authenticated account's tier, included quotas, current-month usage, and estimated cost. Use to check entitlements before firing paid tools. | read-only | Free |
Plans & limits
| Plan | Tools | Limit |
|---|---|---|
| Free | 21 of 59 tools (marked above) | 100 tool calls per calendar month (UTC). The count resets on the 1st. |
| Pro (individual or team) | Full catalog | Reports, logbook search and tracking consume the same allowances as in the app. |
| Enterprise API | Full catalog | Tool calls are metered like the equivalent /api/v3 requests on your tier. |
get_account_usage returns your tier, quotas and current-month usage so an agent can check before it spends an allowance. Every call is audit-logged to your account with the client that made it.
Errors
| Situation | What you get |
|---|---|
| No credentials | 401 with WWW-Authenticate: Bearer realm="mcp", resource_metadata=… pointing at the discovery document. OAuth clients start the consent flow from here. |
| Unknown or revoked token / key | 401 with error="invalid_token" in the challenge. Headless clients should surface this rather than retry. |
| Unknown tool name | JSON-RPC error -32602 (Unknown tool: …). |
| Tool not on your plan | A tools/call result with isError: true and the text "This MCP tool requires Windsock PRO, Enterprise, or a paid API plan." |
| Monthly limit reached | A tools/call result with isError: true and the text "Free MCP monthly limit reached (100 tool calls). Resets at … UTC." |
| Tool-level failure | The tool result carries the same error envelope as the matching /api/v3 endpoint. |
Directories
Windsock is listed on Smithery and published in the official MCP Registry as ai.windsock/windsock. It is also available as the Windsock app for ChatGPT.