MCP server for the MassTimes.org Catholic worship-times API (Mass Times Trust)
Three well-named tools with strong descriptions (194 - 250 chars, above baseline 194). All parameters have types and descriptions. Input schemas are complete with proper constraints (lat/long bounds, limit 1 - 30). Tool names follow verb_noun pattern (find_*, get_*). Descriptions include actionable guidance (e.g., 'always tell the user which address this resolved to'). However, output schemas are not formally documented, responses are inferred from code. Error handling returns structured objects but lacks recovery guidance (e.g., 'try a more complete address' is present but not consistently actionable). No tool annotations (readOnlyHint, etc.) despite all being read-only. Composition is clean: three distinct tools with clear responsibilities.
Find Catholic churches near a coordinate, with their Mass, Confession, and Adoration times. Searches a roughly 100-mile radius and returns up to 30 churches ordered by distance. Takes coordinates only: use find_churches_near_address if you have an address instead. Each church includes normalized `worship_times`. A worship time with `incomplete: true` means MassTimes has no usable day/time on file. Say so rather than inventing a schedule. Data provided by the Mass Times Trust (masstimes.org). Attribute it.
Find Catholic churches near a street address, city, or place name. Convenience wrapper: geocodes the address, then runs the same ~100-mile, 30-result nearby search as find_churches_near. IMPORTANT: always tell the user which address this resolved to (returned as `resolved.matched_address`). A geocoder that picks the wrong Springfield will return real churches 800 miles from where the user actually is, and nothing downstream will look wrong. Surfacing the resolved address is the only way the user can catch that.
Get full detail for one church by its MassTimes id, including all worship times. Only `id`, `name`, and `country` are guaranteed by MassTimes to be populated. Everything else may legitimately be blank. Data provided by the Mass Times Trust (masstimes.org). Attribute it.
Output schemas not formally documented. Responses are inferred from code (Dict[str, Any] return types). LLMs cannot plan downstream calls without knowing what fields to expect.
Tool annotations missing. All three tools are read-only (no side effects), but readOnlyHint is not set. Agents cannot distinguish safe tools from destructive ones without explicit hints.
Error responses lack structured recovery guidance. find_churches_near returns {error, status_code, churches} but does not suggest next steps. Error classification (retryable vs user-fixable) is absent.
Parameter 'limit' is optional but has no default. Agents must reason about pagination limits; a sensible default (e.g., 10 or 20) would simplify common invocations.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | <=2025-11-25 | v2 |
Church IDs are documented as volatile and session-scoped, but no mechanism enforces this. If an agent persists an ID across sessions, silent failures will occur. Consider adding a session token or timestamp to IDs.