geoprimsBLOCK
Free, exact, cited calculators for pilots, drone operators, surveyors, and GIS developers: a static website (geoprims.com) and a local MCP server. Runs on your device.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Exact, cited math for maps, flight, drones, and surveying. It runs on your device.
Density altitude before a flight. Ground sample distance for a drone survey. A traverse closure, a UTM conversion, an H3 cell, sunrise at a field site. geoprims answers questions like these in a plain sentence, then shows how it got there.
- For people: a fast, free website. The answer comes first, with a map or diagram and a "How we got this" panel showing the formula with your numbers and its sources.
- For AI agents: a local MCP server that runs the same calculators and returns the same results, byte for byte. It has no dependencies and stays offline unless optional verified asset downloads are explicitly enabled. See mcp/README.md.
Why trust it
- Accurate. Reference methods (Karney geodesics, not haversine), tested against GeographicLib, PROJ, H3, S2, and published worked examples, each held to a per-domain tolerance (1 mm in geodesy, for example) unless the source itself prints coarser.
- Cited. Every result names its source, edition, and section. The build fails if a source goes out of date. Every citation link is checked monthly, and a dead or moved one opens an issue.
- Honest. Assumptions like datum, true vs. magnetic north, and rules of thumb show up as warnings, not fine print.
- Private. No ads, accounts, tracking, or server-side math. Your inputs never leave your device.
- Auditable. The CycloneDX software bill of materials lists every locked Cargo and npm dependency and its license. The build fails when either lockfile and the inventory disagree.
What it covers
Geodesy, navigation, geometry, aviation, drones, surveying, spatial indexing, raster and terrain, time, and units.
The 8 launch journeys are published as end-to-end workflows with prefilled, linked calculator steps, and the concept library exceeds its initial 25-explainer launch target. The build runs every workflow thr
f02be4f10852OBSERVED · 2026-10-13Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add geoprims -- npx -y geoprims
{
"mcpServers": {
"geoprims": {
"command": "npx",
"args": [
"-y",
"geoprims"
]
}
}
}Exposed tools (12)
9 read · 3 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
catalog | read | Every tool id with title, summary, domain, and stability. |
coordinate-conversion-audit | read | Parses a coordinate in any common notation, converts it to UTM, and converts back to show the round-trip error. |
geoprims_convert_units | read | Convert a value between units with exact definitions, e.g. {value: 100, from: |
geoprims_describe | read | Get manifests for up to 20 tool or workflow ids. A workflow id (workflow.<slug>) gives its inputs, its steps, and the values it fixes. detail |
geoprims_pipeline | write | Run up to 20 tools in order without round trips. Each step is {id, args, bind}; bind maps an input JSON Pointer to |
geoprims_run | write | Run one tool or workflow by id. For a workflow (workflow.<slug>), args are the workflow\ |
geoprims_search | read | Find geoprims calculators (geodesy, navigation, aviation, drone, survey, indexing, time, units) by plain words, abbreviations, or tool id. Returns ranked ids with summaries. Numbers in the query fill inputs: prefill on the top result holds args for geoprims_run ( |
h3-resolution-choice | read | Picks the H3 resolution whose average cell area is closest to a target, then shows the cell at a location and its real area there. |
photogrammetry-mission | write | Flight height for a target ground sample distance, then trigger interval and line spacing at the chosen overlaps, and the longest exposure that keeps motion blur under half a pixel. |
preflight-performance | read | Pressure altitude, density altitude, and runway wind components for a departure, with the crosswind checked against a limit. |
tool | read | Full manifest with accuracy, references, worked example, and golden vectors. |
traverse-closure | read | Closes a traverse from its courses and reports misclosure, its bearing, and precision ratio. |
Trust audit
BLOCKgrade F · trust 40/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | FAIL |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (6 observation(s))
- Network
- declared (10 observation(s))
- Shell
- declared (3 observation(s))
- Dependencies
- pinned
- Secrets in source
- found
Findings (25)
drone.power.max-payload.jsonl
drone.power.payload-impact.jsonl
fn eval(e: &Expr, s: &dyn Scope) -> Option<Val> {Expr::Abs(x) => eval(x, s).map(|v| Val {let (a, b) = (eval(a, s)?, eval(b, s)?);
as62_nad83_1993_as.grid
gu63_nad83_1993_guamcnmi.grid
nad27_nad83_1986_alaska.grid
nad27_nad83_1986_conus.grid
pr40_nad83_1986_prvi.grid
title: "Missed approach to the ZHZ beacon, holding on the inbound track of 234°",
source: "TC AIM RAC 10.2 example 2: proceed directly to the beacon, make a right turn and hold on an inbound track of 234°",
when: "Use this for a radio or clock frequency that has to move between prefixes -- a 2.4 GHz link in MHz, an emergency frequency of 121.5 MHz in kHz, a 433 MHz beacon in Hz -- or for an oscillator dr
if (port) resolveOrigin(`http://127.0.0.1:${port}`);const re = /\s*(?:(\d+(?:\.\d+)?(?:e[-−]?\d+)?)|([A-Za-zΑ-Ωα-ω][A-Za-z0-9Α-Ωα-ω′']*[0-4ij+−nk0-9]*)|(\S))/gy;
"1⁄2ρV2 = 0.7·p·M2",
model: "ΔH = (−ΔT_std ÷ L0) · ln(1 + L0·H ÷ (T0 + L0·H_aerodrome)), with L0 = −0.0019812 K/ft, T0 = 288.15 K, ΔT_std the airport temperature minus ISA at its elevation, and H the height above the airp
"ΔT = temperature − (15 − 0.0019812 × elevation)",
"ΔH = (−ΔT ÷ L0) · ln(1 + L0·H ÷ (T0 + L0·H_aerodrome))",
token: 'fine-grained-test-token',
.openspec.yaml
.openspec.yaml
.openspec.yaml
.openspec.yaml
.openspec.yaml
Gates applied: no_behavioural_pass.
f02be4f10852full audit observations/trust-audit/mcp-server/clay-good__geoprims.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-13 | f02be4f10852 | BLOCK | F | 40 | first audit |
Questions
What is the geoprims MCP server?
Free, exact, cited calculators for pilots, drone operators, surveyors, and GIS developers: a static website (geoprims.com) and a local MCP server. Runs on your device.
What tools does geoprims expose?
12 in total: 9 read-only, 3 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is geoprims safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (40/100) and found 5 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does geoprims need?
No credential environment variables were found in its source, so it appears to need none.
How current is this page?
The grade is for one exact copy of the source (f02be4f10852), read on 2026-10-13. The repository is watched and re-audited when it changes.