Birth charts, synastry and birth-place search from an ephemeris. Free, read-only, nothing stored.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Compare two people's charts (synastry) from their birth data. Returns the overall tone (flowing, mixed or charged), whether the Sun elements match, the classic pairings (Venus-Mars, Sun-Moon, Moon-Moon, Venus-Venus), the tightest Moon, Venus, Mars and Sun contacts between the two charts, and a link to the free full comparison on lunonis.com. Counted aspects only: there is no compatibility score. Nothing is stored.
First person
Second person
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http astrology https://lunonis.com/mcp
Compare two people's charts (synastry) from their birth data. Returns the overall tone (flowing, mixed or charged), whether the Sun elements match, the classic pairings (Venus-Mars, Sun-Moon, Moon-Moon, Venus-Venus), the tightest Moon, Venus, Mars and Sun contacts between the two charts, and a link to the free full comparison on lunonis.com. Counted aspects only: there is no compatibility score. Nothing is stored.
| Argument | Type | Description |
|---|---|---|
| personA* | object | First person |
| personB* | object | Second person |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"personA",
"personB"
],
"properties": {
"personA": {
"type": "object",
"required": [
"date",
"place"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Birth date, YYYY-MM-DD (1900-2100)"
},
"time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Birth time, 24-hour HH:MM local time. Omit if unknown: the rising sign and houses are then left out, never guessed."
},
"place": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Birth city name (e.g. \"Lviv\" or \"Lviv, Ukraine\"), or a place id from search_places. A name shared by several cities returns candidates to choose from."
}
},
"description": "First person"
},
"personB": {
"type": "object",
"required": [
"date",
"place"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Birth date, YYYY-MM-DD (1900-2100)"
},
"time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Birth time, 24-hour HH:MM local time. Omit if unknown: the rising sign and houses are then left out, never guessed."
},
"place": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Birth city name (e.g. \"Lviv\" or \"Lviv, Ukraine\"), or a place id from search_places. A name shared by several cities returns candidates to choose from."
}
},
"description": "Second person"
}
}
}Calculate a real natal (birth) chart from a birth date, optional birth time and a city. Returns the Sun, Moon and rising signs, every planet with sign, degree and house, the five tightest aspects, an element and modality summary, and a link to the free full chart with the wheel on lunonis.com. Calculated in-house with an ephemeris (tropical zodiac, Placidus houses); nothing is stored. If the city name matches several places it returns status "ambiguous_place" with candidates: ask the user which one, then call again with that id as place.
| Argument | Type | Description |
|---|---|---|
| date* | string | Birth date, YYYY-MM-DD (1900-2100) |
| lang | string | Language of the returned links (site language code). Default en. |
| time | string | Birth time, 24-hour HH:MM local time. Omit if unknown: the rising sign and houses are then left out, never guessed. |
| place* | string | Birth city name (e.g. "Lviv" or "Lviv, Ukraine"), or a place id from search_places. A name shared by several cities returns candidates to choose from. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"date",
"place"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Birth date, YYYY-MM-DD (1900-2100)"
},
"lang": {
"enum": [
"en",
"es",
"pt",
"fr",
"de",
"it",
"pl",
"tr",
"ja",
"zh",
"uk"
],
"type": "string",
"description": "Language of the returned links (site language code). Default en."
},
"time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Birth time, 24-hour HH:MM local time. Omit if unknown: the rising sign and houses are then left out, never guessed."
},
"place": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Birth city name (e.g. \"Lviv\" or \"Lviv, Ukraine\"), or a place id from search_places. A name shared by several cities returns candidates to choose from."
}
}
}Find birth cities by name. Returns up to 6 candidates { id, name, region, country }, the biggest first. Use it to disambiguate a city, then pass the chosen id as the place of natal_chart or compatibility.
| Argument | Type | Description |
|---|---|---|
| query* | string | City name, at least 2 characters (e.g. "Paris") |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "City name, at least 2 characters (e.g. \"Paris\")"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 1, 2026.