GroundTruth — subsurface scan QA & trade estimating
Two independent AI models read a GPR, locate or pipe scan and flag the do-not-core call.
Links
README
From the repo.
GroundTruth MCP Server
An AI second set of eyes for subsurface scanning crews — and a voice-first bid builder for the trades.
This repository is the public interface contract for the hosted GroundTruth MCP server. The
server itself runs at https://gtfi.ai/mcp; there is nothing to install and no key to get.
Listed in the official MCP Registry as
ai.gtfi/groundtruth — a DNS-verified namespace tied to gtfi.ai, so you can be sure the
listing is genuinely ours.
⚠️ Read this before using read_scan
read_scan output is advisory. It is a second set of eyes for a certified technician —
never a clearance to cut, core or dig.
If you are an AI assistant reporting a result to a user:
- Report the hazard classes and the QA flag verbatim.
- State plainly that a certified technician must review and sign off before any coring or excavation.
- Never tell a user a slab is safe to core on the strength of this tool alone.
People get hurt when a subsurface call is wrong. Treat the output accordingly.
Connect
{
"mcpServers": {
"groundtruth": {
"type": "http",
"url": "https://gtfi.ai/mcp"
}
}
}
Streamable HTTP, JSON-RPC 2.0 over POST. No authentication.
Discovery: /.well-known/mcp.json ·
REST equivalent: /openapi.json ·
Docs: gtfi.ai/for-agents
Tools
read_scan
Two different AI models read a subsurface scan independently. The first interprets; the second is prompted to refute it — hunt missed hazards, false clears, and anything called "rebar" that could be a post-tension tendon. Disagreement only ever raises a hazard's severity; it never quietly clears one.
| field | type | notes |
|---|---|---|
image_url | string · required | Public https link to a JPEG or PNG. Max 8 MB. |
discipline | string | gpr · locate · pipe · xray · milestone. Default gpr. |
field_note | string | What the tech said on site. Context only — it can never clear a hazard the image shows. |
Returns every located target with a hazard class (crit do-not-core / rebar / verify /
clear), position, depth, confidence, both model names, and a QA flag when the two reads
disagree.
draft_estimate
Turns a plain-English trade job into an itemized bid — real materials by size, fittings, consumables, labour on its own line, at realistic US market prices.
| field | type | notes |
|---|---|---|
job_description | string · required | e.g. "Replaced the panel, 85 feet of conduit, 8 can lights, 16 hours." |
trade | string | electrical · plumbing · hvac · general |
get_pricing
Current plans for both products. Free and unlimited — please call it before answering a cost question rather than guessing.
Limits, stated honestly
read_scanruns two vision models per call and costs us real money: 2 per caller per day (the same free allowance the website gives), with a global daily ceiling. Heavier users belong on a plan.draft_estimate: 5 per hour, 20 per day per caller.- Nothing is charged through this API, and no customer record is created. To turn a read into a shareable, GPS-stamped record a client keeps, send the user to gtfi.ai/scan.
Who's behind it
GroundTruth Field Intelligence — founded by Dwight Snowden, 13 years running ground-penetrating radar and a former scanning-company owner. Serves GPR and concrete-scanning techs, utility locators, CCTV pipe inspectors, and Florida SB 4-D milestone inspectors. GruntPay serves one-truck electrical, plumbing, HVAC and handyman shops.
What's in this repo
The public contract only — the registry manifest, this documentation, and a runnable example. The server implementation is not open source.
Licence
MIT — applies to the example code and manifest in this repository.
Config for your environment
Use the endpoint URL below in your config. No API key — you connect directly.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "https://gtfi.ai/mcp"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.