ourpr.
What this MCP does
Provides measured running courses, route and terrain data, activity metrics, training history, workout detection, and planned training blocks.
Tools
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['activity_id'], 'properties': {'activity_id': {'type': 'string', 'description': 'Run id from ourpr_list_runs.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['detection'], 'properties': {'detection': {'type': 'object', 'additionalProperties': {}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': "The course's slug, exactly as ourpr_list_courses returns it. Example: 'boston-marathon'."}, 'response_format': {'enum': ['markdown', 'json'], 'type': 'string', 'default': 'markdown', 'description': "Output format. 'markdown' reads well in a chat answer. 'json' carries every field for further computation."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'name', 'place', 'alternate_names', 'kind', 'course_type', 'distance_mi', 'one_way_mi', 'next_race_date', 'days_out', 'climb_ft', 'descent_ft', 'min_ft', 'max_ft', 'steepest_pct', 'measured_mi', 'provenance', 'sources', 'recorded_on', 'main_ways', 'through', 'photo_count', 'counts', 'page_url', 'gpx_url'], 'properties': {'kind': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'place': {'type': ['string', 'null']}, 'counts': {'type': 'object', 'required': ['named_climbs_and_descents', 'amenities', 'mile_markers', 'profile_points'], 'properties': {'amenities': {'type': 'number'}, 'mile_markers': {'type': 'number'}, 'profile_points': {'type': 'number'}, 'named_climbs_and_descents': {'type': 'number'}}, 'additionalProperties': False}, 'max_ft': {'type': ['number', 'null']}, 'min_ft': {'type': ['number', 'null']}, 'gpx_url': {'type': 'string'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'value'], 'properties': {'label': {'type': 'string'}, 'value': {'type': 'string'}}, 'additionalProperties': False}}, 'through': {'type': 'array', 'items': {'type': 'string'}}, 'climb_ft': {'type': ['number', 'null']}, 'days_out': {'type': ['number', 'null']}, 'page_url': {'type': 'string'}, 'main_ways': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'mi', 'share_pct'], 'properties': {'mi': {'type': 'number'}, 'name': {'type': 'string'}, 'share_pct': {'type': 'number'}}, 'additionalProperties': False}}, 'descent_ft': {'type': ['number', 'null']}, 'one_way_mi': {'type': ['number', 'null']}, 'provenance': {'type': ['string', 'null']}, 'course_type': {'type': 'string'}, 'distance_mi': {'type': 'number'}, 'measured_mi': {'type': ['number', 'null']}, 'photo_count': {'type': 'number'}, 'recorded_on': {'type': ['string', 'null']}, 'steepest_pct': {'type': ['number', 'null']}, 'next_race_date': {'type': ['string', 'null']}, 'alternate_names': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': "The course's slug."}, 'response_format': {'enum': ['markdown', 'json'], 'type': 'string', 'default': 'markdown', 'description': "Output format. 'markdown' reads well in a chat answer. 'json' carries every field for further computation."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'name', 'distance_mi', 'source', 'is_race_aid_station_list', 'water_count', 'toilet_count', 'longest_gap_without_water_mi', 'longest_gap_from_mi', 'longest_gap_to_mi', 'amenities', 'page_url'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'source': {'type': 'string'}, 'page_url': {'type': 'string'}, 'amenities': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'mi', 'lat', 'lng'], 'properties': {'mi': {'type': 'number'}, 'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'kind': {'type': 'string'}}, 'additionalProperties': False}}, 'distance_mi': {'type': 'number'}, 'water_count': {'type': 'number'}, 'toilet_count': {'type': 'number'}, 'longest_gap_to_mi': {'type': ['number', 'null']}, 'longest_gap_from_mi': {'type': ['number', 'null']}, 'is_race_aid_station_list': {'type': 'boolean', 'description': 'Always false. These are public amenities, not race aid stations.'}, 'longest_gap_without_water_mi': {'type': ['number', 'null']}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': "The course's slug."}, 'response_format': {'enum': ['markdown', 'json'], 'type': 'string', 'default': 'markdown', 'description': "Output format. 'markdown' reads well in a chat answer. 'json' carries every field for further computation."}, 'include_polyline': {'type': 'boolean', 'default': False, 'description': 'Add the encoded centerline. It runs to about 9,800 characters and only helps if you will decode it. Leave it off and hand over `gpx_url` instead.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'name', 'course_type', 'distance_mi', 'start', 'finish', 'bbox', 'mile_markers', 'streets_in_order', 'polyline', 'gpx_url', 'page_url'], 'properties': {'bbox': {'anyOf': [{'type': 'object', 'required': ['min_lat', 'min_lng', 'max_lat', 'max_lng'], 'properties': {'max_lat': {'type': 'number'}, 'max_lng': {'type': 'number'}, 'min_lat': {'type': 'number'}, 'min_lng': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'start': {'anyOf': [{'type': 'object', 'required': ['lat', 'lng'], 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'finish': {'anyOf': [{'type': 'object', 'required': ['lat', 'lng'], 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'gpx_url': {'type': 'string'}, 'page_url': {'type': 'string'}, 'polyline': {'type': ['string', 'null']}, 'course_type': {'type': 'string'}, 'distance_mi': {'type': 'number'}, 'mile_markers': {'type': 'array', 'items': {'type': 'object', 'required': ['mile', 'lat', 'lng'], 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'mile': {'type': 'number'}}, 'additionalProperties': False}}, 'streets_in_order': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'from_mi', 'to_mi'], 'properties': {'name': {'type': 'string'}, 'to_mi': {'type': 'number'}, 'from_mi': {'type': 'number'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': "The course's slug."}, 'points': {'type': 'integer', 'default': 40, 'maximum': 200, 'minimum': 2, 'description': 'How many elevation samples to return. The stored profile holds up to 4,873 points, which no agent should read whole. 40 describes the shape; 200 is close to the source.'}, 'response_format': {'enum': ['markdown', 'json'], 'type': 'string', 'default': 'markdown', 'description': "Output format. 'markdown' reads well in a chat answer. 'json' carries every field for further computation."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'name', 'distance_mi', 'climb_ft', 'descent_ft', 'min_ft', 'max_ft', 'steepest_pct', 'climb_ft_per_mi', 'elevation_source', 'profile_points_stored', 'profile', 'named_sections', 'page_url'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'max_ft': {'type': ['number', 'null']}, 'min_ft': {'type': ['number', 'null']}, 'profile': {'type': 'array', 'items': {'type': 'object', 'required': ['mi', 'ft'], 'properties': {'ft': {'type': 'number'}, 'mi': {'type': 'number'}}, 'additionalProperties': False}, 'description': 'Sampled elevation. The highest and lowest points are kept.'}, 'climb_ft': {'type': ['number', 'null']}, 'page_url': {'type': 'string'}, 'descent_ft': {'type': ['number', 'null']}, 'distance_mi': {'type': 'number'}, 'steepest_pct': {'type': ['number', 'null']}, 'named_sections': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'name', 'from_mi', 'to_mi', 'net_ft', 'grade_pct'], 'properties': {'kind': {'type': 'string'}, 'name': {'type': 'string'}, 'to_mi': {'type': 'number'}, 'net_ft': {'type': 'number'}, 'from_mi': {'type': 'number'}, 'grade_pct': {'type': 'number'}}, 'additionalProperties': False}}, 'climb_ft_per_mi': {'type': ['number', 'null']}, 'elevation_source': {'type': 'string'}, 'profile_points_stored': {'type': 'number'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['activity_id'], 'properties': {'activity_id': {'type': 'string', 'description': 'Run id from ourpr_list_runs.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['run', 'splits'], 'properties': {'run': {'type': 'object', 'additionalProperties': {}}, 'splits': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': "The trail system's slug. Example: 'trinity-trails'."}, 'response_format': {'enum': ['markdown', 'json'], 'type': 'string', 'default': 'markdown', 'description': "Output format. 'markdown' reads well in a chat answer. 'json' carries every field for further computation."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'name', 'region', 'total_mi', 'mapped_ways', 'source', 'bbox', 'page_url'], 'properties': {'bbox': {'anyOf': [{'type': 'object', 'required': ['min_lat', 'min_lng', 'max_lat', 'max_lng'], 'properties': {'max_lat': {'type': 'number'}, 'max_lng': {'type': 'number'}, 'min_lat': {'type': 'number'}, 'min_lng': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'region': {'type': ['string', 'null']}, 'source': {'type': ['string', 'null']}, 'page_url': {'type': 'string'}, 'total_mi': {'type': 'number'}, 'mapped_ways': {'type': ['number', 'null']}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'kind': {'enum': ['race', 'trail', 'route'], 'type': 'string', 'description': "Keep only this kind. 'race' is a published event course, 'trail' is a trail segment, 'route' is an everyday loop."}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1, 'description': 'The most courses to return.'}, 'query': {'type': 'string', 'maxLength': 120, 'description': "Match against the course name and its place. Case-insensitive, partial. Example: 'boston', 'fort worth', 'half'."}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': 'How many courses to skip. Use it with `next_offset`.'}, 'course_type': {'enum': ['loop', 'out-and-back', 'point-to-point'], 'type': 'string', 'description': 'Keep only this shape of course.'}, 'upcoming_only': {'type': 'boolean', 'default': False, 'description': 'Keep only courses whose next race date is today or later. A course with no date is dropped by this filter.'}, 'max_distance_mi': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Keep only courses no longer than this, in miles.'}, 'min_distance_mi': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Keep only courses at least this long, in miles.'}, 'response_format': {'enum': ['markdown', 'json'], 'type': 'string', 'default': 'markdown', 'description': "Output format. 'markdown' reads well in a chat answer. 'json' carries every field for further computation."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['total', 'count', 'offset', 'has_more', 'published_total', 'courses'], 'properties': {'count': {'type': 'number', 'description': 'Courses in this answer.'}, 'total': {'type': 'number', 'description': 'Courses that matched the filters.'}, 'offset': {'type': 'number'}, 'courses': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'place', 'kind', 'course_type', 'distance_mi', 'climb_ft', 'steepest_pct', 'next_race_date', 'days_out', 'page_url'], 'properties': {'kind': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'place': {'type': ['string', 'null']}, 'climb_ft': {'type': ['number', 'null']}, 'days_out': {'type': ['number', 'null']}, 'page_url': {'type': 'string'}, 'course_type': {'type': 'string'}, 'distance_mi': {'type': 'number'}, 'steepest_pct': {'type': ['number', 'null']}, 'next_race_date': {'type': ['string', 'null']}}, 'additionalProperties': False}}, 'has_more': {'type': 'boolean'}, 'next_offset': {'type': 'number'}, 'published_total': {'type': 'number', 'description': 'Every published course, before any filter.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'end_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Last day, YYYY-MM-DD. Default 13 days after the first.'}, 'start_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'First day, YYYY-MM-DD. Default yesterday, so today is in the window in every time zone.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['plans', 'start_date', 'end_date', 'truncated'], 'properties': {'plans': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}, 'end_date': {'type': 'string'}, 'truncated': {'type': 'boolean'}, 'start_date': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'default': 50, 'maximum': 500, 'minimum': 1, 'description': 'Most rows to return.'}, 'distance': {'enum': ['5K', '10K', 'Half Marathon', 'Marathon', 'Ultra'], 'type': 'string', 'description': 'Only races at this distance.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['races', 'fastest', 'returned', 'total'], 'properties': {'races': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}, 'total': {'type': 'number'}, 'fastest': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}, 'returned': {'type': 'number'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['start_date', 'end_date'], 'properties': {'limit': {'type': 'integer', 'default': 100, 'maximum': 500, 'minimum': 1, 'description': 'Most rows to return. The answer says what it left out.'}, 'end_date': {'type': 'string', 'description': 'Last day to include, YYYY-MM-DD. Example: 2026-06-30'}, 'start_date': {'type': 'string', 'description': 'First day to include, YYYY-MM-DD. Example: 2026-01-01'}, 'include_non_runs': {'type': 'boolean', 'default': False, 'description': 'Include rides, gym and other types. Runs only by default.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['runs', 'returned', 'total_in_window', 'truncated'], 'properties': {'runs': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}, 'returned': {'type': 'number'}, 'truncated': {'type': 'boolean'}, 'total_in_window': {'type': 'number'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'response_format': {'enum': ['markdown', 'json'], 'type': 'string', 'default': 'markdown', 'description': "Output format. 'markdown' reads well in a chat answer. 'json' carries every field for further computation."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['count', 'trail_systems'], 'properties': {'count': {'type': 'number'}, 'trail_systems': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'region', 'total_mi', 'page_url'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'region': {'type': ['string', 'null']}, 'page_url': {'type': 'string'}, 'total_mi': {'type': 'number'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['plans'], 'properties': {'plans': {'type': 'array', 'items': {'type': 'object', 'required': ['date'], 'properties': {'tag': {'enum': ['easy', 'workout', 'race'], 'type': 'string', 'description': 'How hard: easy, workout or race.'}, 'date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'YYYY-MM-DD, after today.'}, 'name': {'type': 'string', 'maxLength': 120, 'description': 'A short name for the run.'}, 'note': {'type': 'string', 'maxLength': 500, 'description': 'A line the runner will read.'}, 'miles': {'type': 'number', 'maximum': 200, 'minimum': 0.1, 'description': 'Planned distance.'}, 'is_long': {'type': 'boolean', 'description': "The week's long run."}, 'minutes': {'type': 'number', 'maximum': 1440, 'minimum': 1, 'description': 'Planned time.'}}, 'additionalProperties': False}, 'maxItems': 14, 'minItems': 1, 'description': 'One run, or up to fourteen.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['written'], 'properties': {'written': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'default': 200, 'maximum': 1000, 'minimum': 10, 'description': 'How many recent activities to read.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['workouts', 'scanned'], 'properties': {'scanned': {'type': 'number'}, 'workouts': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['activity_id'], 'properties': {'activity_id': {'type': 'string', 'description': 'Run id from ourpr_list_runs.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['laps'], 'properties': {'laps': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['activity_id'], 'properties': {'activity_id': {'type': 'string', 'description': 'Run id from ourpr_list_runs.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['grid_m', 'total_miles', 'samples', 'channels'], 'properties': {'grid_m': {'type': 'number'}, 'samples': {'type': 'number'}, 'channels': {'type': 'object', 'additionalProperties': {}}, 'total_miles': {'type': 'number'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['miles', 'gain_ft'], 'properties': {'limit': {'type': 'integer', 'default': 8, 'maximum': 25, 'minimum': 1, 'description': 'How many to return.'}, 'miles': {'type': 'number', 'maximum': 200, 'minimum': 0.1, 'description': 'Target distance in miles.'}, 'gain_ft': {'type': 'number', 'maximum': 30000, 'minimum': 0, 'description': 'Target climb in feet.'}, 'tolerance_ft': {'type': 'number', 'default': 15, 'maximum': 200, 'minimum': 1, 'description': 'Climb tolerance, feet.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['matches', 'scanned'], 'properties': {'matches': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}, 'scanned': {'type': 'number'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'past': {'type': 'integer', 'default': 3, 'maximum': 30, 'minimum': 0, 'description': 'How many past Blocks to include, newest first.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['goal', 'past', 'total_races'], 'properties': {'goal': {'anyOf': [{'type': 'object', 'additionalProperties': {}}, {'type': 'null'}]}, 'past': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}, 'total_races': {'type': 'number'}}, 'additionalProperties': False}
Recent tool changes
Similar MCP servers
SupplyGraph.AI Data
Provides China-focused location, surrounding-area, company, industry-chain, property, population, retail, and regional business i…
Microburbs Australian Property Data
Provides Australian property, suburb, valuation, sales, rental, zoning, school, risk, geospatial, and census statistics.
AIOProductOS MCP
Combines customer records, support conversations, feedback, product analytics, roadmaps, tasks, experiments, releases, and retent…
Wakatime
Provides WakaTime coding-activity data, including durations, projects, commits, goals, heartbeats, editor usage, leaders, and use…
Timeapi Io
Provides timezone and date utilities, along with routed access to structured research and data sources.
UK Environmental Intelligence MCP Server from MCPBundles
Provides UK environmental intelligence covering flood warnings, river and groundwater readings, bathing water quality, ecology ob…
roadflow
Creates and shares roadmap graphs, and manages structured model registers containing parameters, observations, formulas, dictiona…
Ca Dmv
Provides California DMV data on vehicle and EV registrations, driver licenses, DMV offices, forms, and insurer NAIC codes.