About
UIUC Airfoil Coordinates Database — fleet #3352.
Remote endpoints: streamable-http: https://gateway.pipeworx.io/uiuc-airfoils/mcp
Security Report
The visible code is a set of HTTP error-handling and bounded-JSON-parsing helpers with no evident exfiltration, shell execution, or hardcoded secrets, and the server is keyless. The score is held to moderate because the main tool implementations and the bin/cli.js entry point were truncated or absent, so they could not be audited, and the README indicates that tool calls are routed through a third-party hosted gateway that also exposes shared meta-tools beyond the server's stated scope. Supply chain analysis found 1 known vulnerability in dependencies (0 critical, 1 high severity).
3 files analyzed · 6 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Permissions Required
This plugin requests these system permissions. Most are normal for its category.
How to Install & Connect
Available as Local & Remote
This plugin can run on your machine or connect to a hosted endpoint. during install.
Documentation
View on GitHubFrom the project's GitHub README.
@pipeworx/uiuc-airfoils
Airfoil shape coordinates for roughly 1,600 airfoils (NACA, Eppler, Selig, Wortmann, Goettingen, Drela AG, Clark Y, Wright Brothers and many designer-named one-offs), searchable by name or family, with max thickness/camber computed live from the raw coordinates.
Part of Pipeworx — an MCP gateway connecting AI agents to 1851+ live data sources. This is an independent, unofficial integration — not affiliated with, endorsed by, or published by the upstream provider.
Tools
uiuc_airfoil_search(query?, family?, limit?)— search by name, keyword, or exact family (e.g."naca","eppler","goe","2412",family: "Wortmann"). With no filters, returns the total catalog size and the known family list. Always returns the total match count first; a no-match response names the filters tried.uiuc_airfoil_geometry(name, include_coordinates?)— fetches one airfoil's coordinate file live and returns its point count, coordinate format, max thickness and max camber (each as a fraction of chord, with the chordwise station they occur at), and the method used to compute them. Passinclude_coordinates: trueto also get the raw upper/lower surface point arrays.
Auth
Keyless.
Data sources
- University of Illinois Urbana-Champaign, Applied Aerodynamics Group,
UIUC Airfoil Coordinates Database — airfoil shape coordinates and their
one-line descriptions. Never a route or filename here — see
src/index.tsandscripts/bake-index.mjsfor the routes, which stay out of published copy per CLAUDE.md step 9b.
Licence — checked before building, flagged rather than assumed
Before writing a line of code, I checked the database's listing page, its
parent page, and the site's robots.txt (a 404 — no restriction stated
there either) for a stated licence or redistribution policy. There is none.
The only copyright-adjacent text anywhere on the site is a generic,
site-wide footer ("© 1994 - 2026 UIUC Applied Aerodynamics Group") with no
accompanying grant or prohibition for the coordinate data itself.
Per the standing rule (proxying a public, keyless upstream per request needs no explicit grant; baking a dataset is redistribution and needs one; when terms are silent, build and flag rather than hold):
- The actual coordinate values are never baked.
uiuc_airfoil_geometryfetches each airfoil's.datfile live, per call, every time — a straight per-request proxy of one file. uiuc_airfoil_searchdoes read a small baked table of names, one-line descriptions and a coarse family classification (src/uiuc-index-data.ts, ~1,587 rows, regenerated byscripts/bake-index.mjs) — never the coordinates. This is the part resting on the "silent terms, build and flag" branch of the rule rather than an explicit grant.- Flag for whoever reviews this next: if UIUC ever publishes an explicit redistribution term for the coordinate data, re-check whether even this name/description/family index still fits it.
Coordinate formats and the thickness/camber method
UIUC's .dat files come in two layouts, both handled by the parser in
src/index.ts:
- Selig format — one continuous point loop: starts at the trailing edge on the upper surface, runs forward to the leading edge, then back along the lower surface to the trailing edge. No header counts; the parser splits the loop at its minimum-x point (the leading edge).
- Lednicer format — a header line giving
(upperCount, lowerCount), then the upper surface from leading edge to trailing edge, a blank line, then the lower surface from leading edge to trailing edge.
Format is detected per file (a Lednicer header is two small integer-looking
values on the first data line; anything else is treated as Selig). Once
split into upper(x) and lower(x) surfaces, both are linearly interpolated
onto a shared 101-station cosine-spaced grid over chord (x in 0..1 —
UIUC's coordinates are already chord-normalized). From that grid:
thickness(x) = upper(x) - lower(x)camber(x) = (upper(x) + lower(x)) / 2
Max thickness and max (signed) camber are the largest values over that
grid, reported as a fraction of chord along with the x station they occur
at — the same convention NACA's own 4-digit naming encodes. Verified against
NACA 2412 itself: the tool returns 12.0% max thickness at 30% chord and 2.0%
max camber at ~40% chord, which is exactly what "2-4-12" means (2% camber at
40% chord, 12% thickness) and exactly where the NACA 4-digit series places
max thickness (30% chord) by construction — a strong correctness check,
not a coincidence.
Known gaps
- Family classification is a coarse heuristic over filenames/descriptions
(keyword rules in
scripts/bake-index.mjs), not an authoritative taxonomy UIUC itself publishes — airfoils that don't match a known designer/series keyword land in"Other"(currently ~1/3 of the catalog), which is expected, not a bug. - A handful of
.datfiles on the site use nonstandard spacing or trailing annotations the parser can't make sense of;uiuc_airfoil_geometrythen returnsgeometry_errorwith the raw parse failure rather than a fabricated number. - The baked name index refreshes only when
scripts/bake-index.mjsis re-run by hand (UIUC adds a handful of airfoils every year or two via its own "Update Directory" section) — there is no automatic refresh path yet.
Quick Start
Add to your MCP client (Claude Desktop, Cursor, Windsurf, etc.):
{
"mcpServers": {
"uiuc-airfoils": {
"url": "https://gateway.pipeworx.io/uiuc-airfoils/mcp"
}
}
}
What this endpoint actually serves
tools/list at https://gateway.pipeworx.io/uiuc-airfoils/mcp returns the tools in the table
above plus the shared Pipeworx meta-tools — ask_pipeworx,
discover_tools, search_within, remember/recall and the rest of the
gateway-wide set. So the tool count you see is larger than this table: a
single-pack endpoint currently lists roughly 30 shared tools alongside the
pack's own. The connection's initialize response states its exact scope, and
is the authoritative answer for a given day.
This is deliberate, not multiplexing by accident. The meta-tools are what let a
scoped connection answer a question this pack does not cover — via
ask_pipeworx, which routes across the whole catalog — without you adding a
second MCP server. There is currently no way to mount a pack endpoint without
them; if the extra schemas cost you more context than the routing is worth,
connect to the full gateway once rather than to several pack endpoints.
Or connect to the full Pipeworx gateway to get every pack's tools listed directly, instead of just this one's:
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
Both URLs reach the same gateway and the same 1851+ data sources. The
only difference is which pack's tools are listed directly; ask_pipeworx
reaches all of them from either one.
No MCP client? Call it over HTTP
curl -X POST https://gateway.pipeworx.io/v1/tools/uiuc_airfoil_search \
-H 'Content-Type: application/json' \
-d '{"query":"naca24"}'
No account needed for the first calls. Inspect any tool: GET https://gateway.pipeworx.io/v1/tools/uiuc_airfoil_search. Find one: POST https://gateway.pipeworx.io/v1/tools/search_packs with {"query":"..."}.
Standalone (no gateway account)
This package also runs as a local stdio MCP server — no Pipeworx account, no gateway round-trip:
{
"mcpServers": {
"uiuc-airfoils": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-uiuc-airfoils"]
}
}
}
Or run it directly to confirm it starts:
npx -y @pipeworx/mcp-uiuc-airfoils
It speaks MCP over stdin/stdout and answers initialize/tools/list/tools/call
for only this pack's tools — none of the shared meta-tools the gateway
connection above adds. Same source, same tools, no ask_pipeworx routing.
Using with ask_pipeworx
Instead of calling tools directly, you can ask questions in plain English — this works on the pack endpoint above as well as on the full gateway:
ask_pipeworx({ question: "your question about Uiuc Airfoils data" })
The gateway picks the right tool and fills the arguments automatically.
More
License
MIT
Reviews
No reviews yet
Be the first to review this server!
More Developer Tools MCP Servers
Rea
Freeby Morluto · Developer Tools
Reverse engineer anything from your terminal or agent with one CLI and MCP server.
Paperclip
Freeby Paperclipai · Developer Tools
Trending hip-hop artist momentum scores across four cultural dimensions.
Git
Freeby Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
Fetch
Freeby Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
Toleno
Freeby Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
MCP Marketplace
Freeby mcp-marketplace · Developer Tools
Search and install MCP servers from inside your AI client.
