DEV Community

Nishanth Abimanyu
Nishanth Abimanyu

Posted on

I Stopped Rebuilding the Telescope and Built a Lens Instead.....

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)

Enter fullscreen mode Exit fullscreen mode

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"
      }
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

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"
      ]
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

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)