---
name: utah-churches
description: A directory of evangelical churches Use when asked to find, look up, list or map churches in Utah, their addresses, websites, phone numbers, gathering times or denominational affiliations, or to check how recently a church listing was verified.
license: CC0-1.0
---

# Utah Churches directory

Utah Churches is a community-maintained directory of evangelical churches across every county in
Utah. Each record carries an address, contact details, gathering times, affiliations and the
date a contributor last verified it. Public data starts at https://utahchurches.com/.

## When to use this skill

Use it for questions like "which churches are in Davis County", "what is the phone number for
X church", "where is the nearest church with a Sunday service", or "list every church in the
Church of Christ network". Every answer should come from a record below rather than from memory:
this is a local directory and a model's recollection of a church is not evidence about it.

## Choose how to fetch

Pick the smallest document that answers the question. In rough order of size:

1. **One church.** https://utahchurches.com/churches/<church-slug>.json returns a single record as JSON
   with its gathering times and affiliations. This is the right call whenever a church is named.
2. **One county.** https://utahchurches.com/llms.txt lists every county shard as https://utahchurches.com/llms/<county-slug>.txt. A county shard is a few kilobytes of markdown, one
   section per church, and the right call for "churches near X" or "how many churches in Y".
3. **The whole directory as JSON.** https://utahchurches.com/churches.json is every public
   record in one file, with `license`, `total` and `churches`. Use it for counting, sorting and
   bulk analysis, not for a single lookup.
4. **Points on a map.** https://utahchurches.com/churches.geojson is a GeoJSON FeatureCollection
   of the churches that have coordinates. Use it for anything spatial: distance sorting, bounding
   boxes, or feeding a map library.
5. **Markdown, for reading rather than parsing.** https://utahchurches.com/llms-full.txt is the
   entire directory as markdown. Prefer a county shard over this unless the question genuinely
   spans the state.
6. **MCP, for a tool-using agent.** https://utahchurches.com/mcp is a read-only Model Context
   Protocol endpoint (JSON-RPC over HTTP) exposing `churches_list`, `churches_get`,
   `counties_list`, `counties_get`, `networks_list` and `networks_get`. No authentication is
   needed for reads. `churches_get` and the county and network getters accept a `path`, so an
   agent never has to know an id. Discovery: https://utahchurches.com/.well-known/mcp/server-card.json.

Also available: https://utahchurches.com/churches.yaml and
https://utahchurches.com/churches.csv (the same records, smaller to fetch one at a time and
spreadsheet-friendly), https://utahchurches.com/changes.atom (an Atom feed of the 50
most recently updated churches, for a cheap freshness check), and
https://utahchurches.com/sitemap.xml (every page with its last-modified date). The
https://utahchurches.com/.well-known/api-catalog lists them all as an RFC 9727 linkset.

## Validate what you fetch

https://utahchurches.com/schema/church.json is the JSON Schema for a church record, with
https://utahchurches.com/schema/county.json and https://utahchurches.com/schema/network.json beside it,
and https://utahchurches.com/.well-known/openapi.json describes every endpoint above with the
schema each one returns. Read the schema rather than inferring field names: it is where the
awkward ones are written down, and it is a small document.

## Search strategy

- **Start from the field you have.** A county slug plus `/llms/<slug>.txt` is the cheapest path.
  Slugs are the URL segments: a church is `/churches/<slug>`, a county `/counties/<slug>`, a
  network `/networks/<slug>`. Do not slugify a church name yourself and assume it matches.
- **A church by name.** Take the name, search `/churches.json` (or a county shard) for a
  `name` match, then fetch the record for the matched `path`. A church can be renamed, and the
  old slug is a permanent redirect, so a URL from a search result stays valid.
- **By location, with coordinates.** https://utahchurches.com/churches.geojson carries
  `latitude`/`longitude` per feature, so nearest-neighbour work is arithmetic rather than
  address parsing. Not every church has coordinates; treat a missing `geometry` as unknown
  location, never as (0, 0).
- **By affiliation.** Church networks are denominational bodies, not congregations. Filter on
  `affiliations` (or the MCP `networks_list` result) rather than matching the name in a
  church's own name field.
- **Respect the two public statuses.** `Listed` and `Unlisted` are the records the site
  publishes. `Heretical`, `Closed` and deleted records are excluded from every export above.

## Reading a record

The authoritative list is the schema. The fields you will meet:

- `name`, `path` (URL slug, the public key), `status`
- `county` (county name in the exports, county slug in `data/`), `countyPath` (the slug, in the
  per-church document), `affiliations` (list of `{ "name", "website", "notes" }`; the source
  records under `data/` call the same list `networks` and store slugs there)
- `gatheringAddress`, `mailingAddress`, `latitude`, `longitude`
- `phone`, `email`, `website`, `language`
- `facebook`, `instagram`, `youtube`, `spotify`
- `gatherings`: a list of `{ "time", "notes" }`
- `notes` (the church's public notes; there is no private-notes field anywhere), `statementOfFaith`
- `lastUpdated`: ISO 8601 instant, UTC, of the date a contributor verified the record. The
  source records store the same value as epoch seconds; every JSON export normalises it

## Freshness, and what not to claim

- `lastUpdated` is the date a person verified the record, not a guarantee it is still correct.
  It can be months old. Say "verified on <date>" rather than "current", and never present a
  gathering time as confirmed.
- `gatherings[].time` is free text such as "10 AM Sunday" or "1st & 3rd Sun 6 PM". It is not
  ISO 8601 and not a schedule. Parse it only if the user asks for a time, and keep the original
  string alongside anything you derive. A church with no recorded gathering is unknown, not closed.
  The church page's JSON-LD publishes `openingHoursSpecification` for the subset that is exactly
  a time and a weekday, and every other time stays free text on an `Event` node with no
  start date. Nothing here is a confirmed schedule.
- The site does not verify that a church still exists or endorses any church. Do not infer
  denominations, beliefs or locations from a name. `statementOfFaith` is the church's own text.
- Check for updates cheaply with https://utahchurches.com/changes.atom before repeating a
  claim you have seen elsewhere, and re-fetch https://utahchurches.com/churches.json if a
  record looks out of date.

## Terms

The records in every endpoint above are dedicated to the public domain under
CC0-1.0 (CC0 1.0 Universal): https://creativecommons.org/publicdomain/zero/1.0/. Reuse them freely, including
commercially, with no attribution required. Crediting Utah Churches and linking the church page
you used is welcome but not required. The site source code is a separate work under
MIT (https://opensource.org/license/mit) and does keep its copyright notice; the dedication above
does not extend to it.
