In my previous work translating the Surya Siddhanta (an ancient Indian astronomical text), I spent months doing something I eventually realized was a mistake. I was manually calculating planetary positions to verify Sanskrit verses against modern ephemerides. It was a tedious, repetitive process of building bespoke simulations for a single cultural context.
When I moved on to my Final Year Project focusing on Mayan and Chinese astronomy, I almost fell into the same trap. I started coding a new simulation for the Mayan calendar. Then, I planned to write another one for the Han Dynasty.
I realized I was rebuilding the "telescope" every time I wanted to look at a different star.
That’s when I pivoted to build Sky Culture MCP: a computational microservice that abstracts the orbital mechanics, allowing AI agents to focus on cultural interpretation.
The Lens.....
The core philosophy of this project is simple: Change the lens, not the telescope.
In this architecture, the "Telescope" is the physics engine—the complex math required to calculate where a planet was 2,000 years ago. The "Lens" is the specific cultural context (names, dates, and significance).
I built this using the Model Context Protocol (MCP) to serve as a bridge between high-precision astronomical data and Large Language Models (LLMs) like Claude.
The Tech Stack
- Protocol: Model Context Protocol (MCP)
- Ephemeris: NASA JPL DE421 (High precision from 1900 BC to 2050 AD)
- Physics Engine: Skyfield (Vector astrometry)
- Time Standard: Barycentric Dynamical Time (TDB)
How it Works
Instead of asking an LLM to "hallucinate" where Mars was during a specific Mayan Long Count date, the Agent queries my MCP server. The server handles the vector math and returns precise J2000 coordinates.
Here is the primary function signature exposed to the AI:
convert_culture_to_coordinates(culture_id, object_name, date_str)
It takes a cultural input and returns a scientific output. For example:
-
Input: Culture:
mayan, Object:chak_ek, Date:M:9,16,4,10,8 - Output: Julian Day Number + Right Ascension & Declination
The Data Structure
The "Lenses" are defined in a JSON library. Here is a snippet of how I map native names to modern identifiers:
{
"chinese_han": {
"name": "Chinese (Han)",
"objects": {
"yinghuo": {
"name": "Yinghuo (Fire Star)",
"modern_id": "mars"
}
}
},
"mayan": {
"name": "Mayan",
"objects": {
"chak_ek": {
"name": "Chak Ek (Great Star)",
"modern_id": "venus"
}
}
}
}
Integration with Claude Desktop
One of the coolest parts of this project was integrating it directly into my daily workflow. By running the engine as a Docker container, I can add it to my claude_desktop_config.json.
{
"mcpServers": {
"sky-culture-lite": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"yourname/sky-culture-lite"
]
}
}
}
Now, when I'm chatting with Claude about a historical text, it has a tool it can call to get ground-truth astronomical data without me needing to open a separate simulation software.
Why This Matters
This project represents a shift in how we use AI for history and science. We shouldn't rely on LLMs to do math (they are bad at it). We should rely on them for interpretation.
By offloading the physics to a deterministic engine (Skyfield) and using the MCP to bridge the gap, I've created a system where the AI can "put on a Mayan lens" or a "Han Dynasty lens" to see the sky exactly as they did—leaving the Agent free to focus on the poetry, the history, and the meaning behind the stars.
Thanks for reading! If you're interested in Archaeoastronomy or MCP, drop a comment below.
Top comments (0)