Location and Timezone MCP Server by RoxyAPI
Server Details
City geocoding and timezone resolution for birth data, for AI agents, one API key.
- Status
- Healthy
- Uptime
- 99.9% over 81 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 3 tools
The country list and the place search are clearly distinct, but get_location_countries_iso2 sounds like a filtered variant of get_location_countries rather than a completely different operation (listing cities within a country). It also partially overlaps with get_location_search, since both return city names plus coordinates and timezone.
All three tools are snake_case with a shared get_location_ prefix, which reads predictably. The suffix-style name get_location_countries_iso2 and the noun-ending get_location_search are minor deviations from a clean verb_noun pattern, and the iso2 name actively misdescribes what the tool returns.
Three tools is thin for a server badged as both location and timezone. There is no dedicated timezone tool at all, so the surface feels under-scoped despite each individual tool being substantial.
Country enumeration, city-by-country listing, and free-text place resolution cover the core place-to-coordinates workflow. However, there is no reverse geocoding (coords to timezone), no timezone list, and no way to request a DST-aware offset for a specific date, which is a real gap for the stated birth-chart/astrology use case.
Available Tools
3 toolsget_location_countriesList all countries - ISO codes and city coverageARead-onlyInspect
Returns every country with ISO 3166-1 alpha-2 and alpha-3 codes, plus the number of searchable cities per country. Use this endpoint to build country dropdown menus, regional filters, or to check city coverage before querying a birth location. Countries are sorted alphabetically by name. Covers Europe, Americas, Asia, Middle East, Africa, and Oceania.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum items to return per page. Range: 1-250, default 50. | |
| offset | No | Number of items to skip for pagination. Default 0. | |
| compact | No | Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | |
| total | Yes | |
| offset | Yes | |
| countries | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only safety profile is covered. The description usefully adds that results are sorted alphabetically, the geographic scope, and the city-count field. However, the claim 'Returns every country' is not tempered by the pagination parameters (limit/offset default 50), leaving how the full list is retrieved unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences front-load the purpose, state concrete use cases, and add sorting and coverage without filler. Every sentence contributes information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich output schema, annotations, and a 100%-described parameter schema, the description does not need to restate return fields. It covers purpose, use cases, and ordering; a minor gap is not signaling how pagination interacts with the 'every country' claim.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: limit, offset, and compact each have clear descriptions. The tool description adds no parameter-level semantics beyond implying whole-list retrieval, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource: 'Returns every country with ISO 3166-1 alpha-2 and alpha-3 codes, plus the number of searchable cities per country.' This clearly identifies the output. It does not explicitly name or contrast the sibling endpoints (get_location_countries_iso2, get_location_search), so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Positive use cases are explicit: 'build country dropdown menus, regional filters, or to check city coverage before querying a birth location.' No when-not-to-use or alternative routing to siblings is provided, so it lacks the exclusionary guidance required for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_location_countries_iso2Get cities in a country - Geocoding directory sorted by populationARead-onlyInspect
Returns all cities for a specific country, identified by ISO 3166-1 alpha-2 code (e.g. DE for Germany, FR for France, GB for United Kingdom, US for United States). Each city includes geographic coordinates, IANA timezone, and DST-aware UTC offset for direct use in astrology birth chart, horoscope, transit, and panchang calculations. Cities sorted by population with the largest metropolitan areas first.
| Name | Required | Description | Default |
|---|---|---|---|
| iso2 | Yes | ISO 3166-1 alpha-2 country code, case-insensitive. Common codes: DE (Germany), FR (France), GB (United Kingdom), US (United States), ES (Spain), IT (Italy), NL (Netherlands), IN (India), BR (Brazil), JP (Japan). | |
| limit | No | Maximum items to return per page. Range: 1-100, default 20. | |
| offset | No | Number of items to skip for pagination. Default 0. | |
| compact | No | Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | |
| total | Yes | |
| cities | Yes | |
| offset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false already in annotations, the description adds valuable context: it details the data included (coordinates, timezone, offsets) and the population-based sorting. This goes beyond the safety annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and includes practical examples and context. The mention of specific use cases (astrology, horoscope) is slightly extraneous but does not bloat the content significantly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description is complete enough: it explains what the data is, how it is sorted, and why it might be used. Pagination details are left to the schema, which is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents iso2, limit, offset, and compact. The description adds no parameter-specific meaning beyond what the schema already provides, which meets the baseline for high-coverage schemas but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Returns all cities') and resource ('for a specific country, identified by ISO 3166-1 alpha-2 code'), which distinguishes it from sibling tools like get_location_countries (presumably country list) and get_location_search (general search). The inclusion of example codes further disambiguates the exact input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies the context (cities by country for astrology calculations) and the sorting behavior, which implies when to use it. However, it does not explicitly mention alternative tools or exclusion conditions, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_location_searchSearch cities worldwide - Geocoding autocomplete with coordinates and timezoneARead-onlyInspect
Turn a place name into coordinates, an IANA timezone and a DST-aware UTC offset, across 5,180,000+ cities, towns and villages in 240+ countries. Coverage reaches every village on record, whatever its population, so a birthplace outside a major metro resolves as reliably as a capital. Matching is case-insensitive, accent-insensitive and partial, so ber matches Berlin, Bern and Bergen, native scripts are transliterated, and historic names resolve to the current place, so bombay returns Mumbai and peking returns Beijing. A full name typed ranks above its smaller namesakes, a few letters reach the best-known city first, and a state, province or country in the query picks the right one of many places with the same name. A town name that matches nothing returns no match, never the largest town in the region it names. Built for birth chart location pickers, horoscope apps, event scheduling, and any feature that needs place-to-coordinates resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Place to search for, written the way a person would. Accepts a bare city (berlin), a city plus country (berlin germany), a comma-qualified place (richfield, utah), a fully qualified place (richfield, utah, united states), or a historic name (bombay, peking, constantinople). Commas are optional, and a qualifier the dataset spells differently, such as USA for United States, still resolves. Matched against city name, alternate names, state or province, and country. Add the state or country whenever the name is common, since that is what separates the six Springfields, and Richfield, Utah from Richfield, Minnesota. | |
| limit | No | Maximum items to return per page. Range: 1-50, default 10. | |
| offset | No | Number of items to skip for pagination. Default 0. | |
| compact | No | Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | |
| total | Yes | |
| cities | Yes | |
| offset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only confirm this is a safe read (readOnlyHint/destructiveHint), and the description adds substantial undisclosed behavior: case/accent-insensitive partial matching, native-script transliteration, historic-name aliasing (bombay→Mumbai), name ranking (full name beats namesakes), and critically the no-match contract ("returns no match, never the largest town in the region it names"). That no-match rule is exactly the kind of failure-mode detail an agent could not infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded in the first sentence, and most sentences carry distinct matching-behavior facts. A few clauses lean promotional ("Coverage reaches every village on record, whatever its population") and repeat the ranking point, costing some density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-shape explanation is unnecessary, and the description covers what remains: query syntax expectations, matching/ranking rules, and the empty-result contract. Pagination and compaction are handled by the fully documented parameter schema, so an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline would be 3; the description still contributes semantics the schema does not state, namely that matching is partial/accent-insensitive and that complete names outrank smaller namesakes. It does not add anything to limit/offset/compact beyond the schema, which already covers them well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a concrete transformation (place name → coordinates, IANA timezone, DST-aware offset) plus scope (5.18M places, 240+ countries). This is clearly a single-place geocoding lookup, which distinguishes it from the sibling country-listing tools without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is stated explicitly ("Built for birth chart location pickers, horoscope apps, event scheduling") and the description tells the agent how to get good results ("Add the state or country whenever the name is common, since that is what separates the six Springfields"). It stops short of naming the sibling country tools or declaring when not to use this one, so no exclusions or alternatives are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
get_location_countries2 fields changed- added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / minimumAdded value: +0
- Changed
get_location_countries_iso22 fields changed- added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / minimumAdded value: +0
- Changed
get_location_search2 fields changed- added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / minimumAdded value: +0
3 tool updates
- Changed
get_location_countries3 fields changed- removed
Input schema / properties / offset / defaultRemoved value: -0 - removed
Input schema / properties / offset / minimumRemoved value: -0 - changed
Input schema / properties / offset / typePrevious value: -[ - "integer", - "null" -]New value: +"integer"
- Changed
get_location_countries_iso23 fields changed- removed
Input schema / properties / offset / defaultRemoved value: -0 - removed
Input schema / properties / offset / minimumRemoved value: -0 - changed
Input schema / properties / offset / typePrevious value: -[ - "integer", - "null" -]New value: +"integer"
- Changed
get_location_search3 fields changed- removed
Input schema / properties / offset / defaultRemoved value: -0 - removed
Input schema / properties / offset / minimumRemoved value: -0 - changed
Input schema / properties / offset / typePrevious value: -[ - "integer", - "null" -]New value: +"integer"
3 tool updates
- Changed
get_location_countries1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "countries": { + "items": { + "properties": { + "cityCount": { + "type": "number" + }, + "iso2": { + "type": "string" + }, + "iso3": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "iso2", + "iso3", + "cityCount" + ], + "type": "object" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "offset": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "limit", + "offset", + "countries" + ], + "type": "object" +}
- Changed
get_location_countries_iso21 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "cities": { + "items": { + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "iso2": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "population": { + "type": "number" + }, + "province": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "utcOffset": { + "type": "number" + } + }, + "required": [ + "city", + "province", + "country", + "iso2", + "latitude", + "longitude", + "timezone", + "utcOffset", + "population" + ], + "type": "object" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "offset": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "limit", + "offset", + "cities" + ], + "type": "object" +}
- Changed
get_location_search1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "cities": { + "items": { + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "iso2": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "population": { + "type": "number" + }, + "province": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "utcOffset": { + "type": "number" + } + }, + "required": [ + "city", + "province", + "country", + "iso2", + "latitude", + "longitude", + "timezone", + "utcOffset", + "population" + ], + "type": "object" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "offset": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "limit", + "offset", + "cities" + ], + "type": "object" +}
3 tool updates
- Changed
get_location_countries2 fields changed- added
Input schema / examplesAdded value: +[ + {} +] - changed
Input schema / properties / compact / descriptionPrevious value: -"Set true to receive the exact same data in a token-optimized shape that is cheaper for you to read: whitespace is stripped and every array of same-shaped objects is encoded columnar as {\"__cols\":[field names],\"__rows\":[[values]]}, so each field name is sent once instead of once per row. Fully lossless (no field or value is dropped or changed) and typically 40 to 52 percent fewer tokens on large results. Prefer true whenever token or inference cost matters. Default false returns standard indented JSON."New value: +"Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {\"__cols\":[names],\"__rows\":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens."
- Changed
get_location_countries_iso22 fields changed- added
Input schema / examplesAdded value: +[ + { + "iso2": "DE" + } +] - changed
Input schema / properties / compact / descriptionPrevious value: -"Set true to receive the exact same data in a token-optimized shape that is cheaper for you to read: whitespace is stripped and every array of same-shaped objects is encoded columnar as {\"__cols\":[field names],\"__rows\":[[values]]}, so each field name is sent once instead of once per row. Fully lossless (no field or value is dropped or changed) and typically 40 to 52 percent fewer tokens on large results. Prefer true whenever token or inference cost matters. Default false returns standard indented JSON."New value: +"Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {\"__cols\":[names],\"__rows\":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens."
- Changed
get_location_search2 fields changed- added
Input schema / examplesAdded value: +[ + { + "q": "berlin" + } +] - changed
Input schema / properties / compact / descriptionPrevious value: -"Set true to receive the exact same data in a token-optimized shape that is cheaper for you to read: whitespace is stripped and every array of same-shaped objects is encoded columnar as {\"__cols\":[field names],\"__rows\":[[values]]}, so each field name is sent once instead of once per row. Fully lossless (no field or value is dropped or changed) and typically 40 to 52 percent fewer tokens on large results. Prefer true whenever token or inference cost matters. Default false returns standard indented JSON."New value: +"Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {\"__cols\":[names],\"__rows\":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens."
1 tool update
- Changed
get_location_search1 field changed- changed
Input schema / properties / q / descriptionPrevious value: -"City name to search for. Accepts bare city (\"berlin\"), city plus country (\"berlin germany\"), or comma-qualified (\"berlin, germany\", \"springfield, illinois\") for disambiguation. Matches against city name, province/state, or combined \"city country\" queries. Case-insensitive with partial matching (e.g. \"ber\" matches Berlin, Bern, Bergen)."New value: +"Place to search for, written the way a person would. Accepts a bare city (berlin), a city plus country (berlin germany), a comma-qualified place (richfield, utah), a fully qualified place (richfield, utah, united states), or a historic name (bombay, peking, constantinople). Commas are optional, and a qualifier the dataset spells differently, such as USA for United States, still resolves. Matched against city name, alternate names, state or province, and country. Add the state or country whenever the name is common, since that is what separates the six Springfields, and Richfield, Utah from Richfield, Minnesota."
3 tool updates
- Changed
get_location_countries1 field changed- changed
Input schema / properties / offset / typePrevious value: -"integer"New value: +[ + "integer", + "null" +]
- Changed
get_location_countries_iso21 field changed- changed
Input schema / properties / offset / typePrevious value: -"integer"New value: +[ + "integer", + "null" +]
- Changed
get_location_search1 field changed- changed
Input schema / properties / offset / typePrevious value: -"integer"New value: +[ + "integer", + "null" +]
3 tool updates
- Changed
get_location_countries1 field changed- changed
Input schema / properties / compact / descriptionPrevious value: -"Return the same data in a token-optimized compact shape (minified, with same-shaped arrays encoded columnar) to reduce LLM token cost. Lossless: no fields are dropped. Default false."New value: +"Set true to receive the exact same data in a token-optimized shape that is cheaper for you to read: whitespace is stripped and every array of same-shaped objects is encoded columnar as {\"__cols\":[field names],\"__rows\":[[values]]}, so each field name is sent once instead of once per row. Fully lossless (no field or value is dropped or changed) and typically 40 to 52 percent fewer tokens on large results. Prefer true whenever token or inference cost matters. Default false returns standard indented JSON."
- Changed
get_location_countries_iso21 field changed- changed
Input schema / properties / compact / descriptionPrevious value: -"Return the same data in a token-optimized compact shape (minified, with same-shaped arrays encoded columnar) to reduce LLM token cost. Lossless: no fields are dropped. Default false."New value: +"Set true to receive the exact same data in a token-optimized shape that is cheaper for you to read: whitespace is stripped and every array of same-shaped objects is encoded columnar as {\"__cols\":[field names],\"__rows\":[[values]]}, so each field name is sent once instead of once per row. Fully lossless (no field or value is dropped or changed) and typically 40 to 52 percent fewer tokens on large results. Prefer true whenever token or inference cost matters. Default false returns standard indented JSON."
- Changed
get_location_search1 field changed- changed
Input schema / properties / compact / descriptionPrevious value: -"Return the same data in a token-optimized compact shape (minified, with same-shaped arrays encoded columnar) to reduce LLM token cost. Lossless: no fields are dropped. Default false."New value: +"Set true to receive the exact same data in a token-optimized shape that is cheaper for you to read: whitespace is stripped and every array of same-shaped objects is encoded columnar as {\"__cols\":[field names],\"__rows\":[[values]]}, so each field name is sent once instead of once per row. Fully lossless (no field or value is dropped or changed) and typically 40 to 52 percent fewer tokens on large results. Prefer true whenever token or inference cost matters. Default false returns standard indented JSON."
3 tool updates
- Changed
get_location_countries1 field changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "Return the same data in a token-optimized compact shape (minified, with same-shaped arrays encoded columnar) to reduce LLM token cost. Lossless: no fields are dropped. Default false.", + "type": "boolean" +}
- Changed
get_location_countries_iso21 field changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "Return the same data in a token-optimized compact shape (minified, with same-shaped arrays encoded columnar) to reduce LLM token cost. Lossless: no fields are dropped. Default false.", + "type": "boolean" +}
- Changed
get_location_search1 field changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "Return the same data in a token-optimized compact shape (minified, with same-shaped arrays encoded columnar) to reduce LLM token cost. Lossless: no fields are dropped. Default false.", + "type": "boolean" +}
3 tool updates
- First observed
get_location_countries - First observed
get_location_countries_iso2 - First observed
get_location_search
Related MCP Connectors
Swiss Ephemeris for AI agents: exact natal charts, transits, synastry and birth-place resolution
Vedic kundli, panchang, dashas, nakshatras and KP charts for AI agents, one API key.
Maps, geocoding and time zones for AI coding agents, on OpenStreetMap, with hard prepaid spend caps.
Western, Vedic, and Chinese astrology calculations, charts, forecasts, and geocoding.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to compute deterministic astrological data with Swiss Ephemeris, including natal charts, transits, synastry, and birth-place resolution, so they never invent planetary positions.458 npmMIT

fatenava-mcpofficial
AlicenseAqualityCmaintenanceEnables AI agents to cast deterministic BaZi, Zi Wei Dou Shu, and Western astrology natal charts from birth details, with no setup or API key.168 npmMIT- AlicenseAqualityDmaintenanceGeospatial API tools for AI agents — geocoding, reverse geocoding, routing, isochrone, distance matrix, static maps, H3 hexagons, elevation, GPS map-matching, point-in-polygon, address normalisation, timezone lookup, and batch geocoding. Built on OpenStreetMap infrastructure. Cost-effective alternative to Google Maps API.1839 npmMIT
- AlicenseNot gradedqualityBmaintenanceHigh-precision astrology tools for LLM agents, including natal charts, transits, progressions, synastry, and more, backed by Swiss Ephemeris.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.