Skip to content
Lumindocs
UseBuildChangelog
Open Lumin

Guide

Test locally

Lumin is a hosted service, so there is nothing to install. Local testing means iterating your client on a laptop while it calls the public Lumin endpoint.

The endpoint to point at

Everything runs against https://mcp.lumin.guru/mcp. For routine development, send an API key. Switch to OAuth on the same URL when you want per-user attribution. Either way, credentials go on every call.

  • API key: Authorization: Bearer mcp_..., metered against the key's monthly allowance.
  • OAuth 2.1: Authorization: Bearer plus the user's access token, metered against their account's monthly allowance.

Use MCP Inspector for interactive debugging

The official @modelcontextprotocol/inspector CLI gives you a UI to call any tool with structured inputs and inspect the full response. Best way to learn the tool surface.

bash
npx @modelcontextprotocol/inspector https://mcp.lumin.guru/mcp

Set the Authorization header to your API key in the Inspector before you call anything.

curl recipes for scripted runs

List tools to confirm the connection works:

bash
curl -X POST https://mcp.lumin.guru/mcp \
  -H "Authorization: Bearer mcp_yourkey..." \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
  | jq '.result.tools | length'

Call a single tool with realistic birth data:

bash
curl -X POST https://mcp.lumin.guru/mcp \
  -H "Authorization: Bearer mcp_yourkey..." \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "get_full_chart",
      "arguments": {
        "birth_datetime": "1992-08-14T04:32:00",
        "latitude": 6.927,
        "longitude": 79.861,
        "utc_offset_minutes": 330,
        "ayanamsa": "kp"
      }
    }
  }' | jq '.result'

Pin canonical test profiles

Hard-code two or three birth profiles in your test fixtures and reuse them across runs. The KP results are deterministic, so the same input always returns the same output. That makes regressions in your client easy to spot.

typescript
// fixtures/profiles.ts
export const PROFILE_A = {
  birth_datetime: "1992-08-14T04:32:00",
  latitude: 6.927,
  longitude: 79.861,
  utc_offset_minutes: 330,
  ayanamsa: "kp" as const,
};

export const PROFILE_B = {
  birth_datetime: "1985-01-23T09:15:00",
  latitude: 28.6139,
  longitude: 77.2090,
  utc_offset_minutes: 330,
  ayanamsa: "kp" as const,
};

Watch out for time-dependent tools

A small group of tools take the current moment as input and therefore produce different output on every call. Do not use these in snapshot tests:

For these, either pass an explicit query_datetime / scan_start argument so the result is reproducible, or accept that the response varies and assert only on shape.

Avoid burning the monthly allowance during dev

  • Cache responses in memory or disk while iterating on prompt logic. Birth-data tools are pure functions of their inputs.
  • A complete reading uses 25-40 calls; 300 a month covers seven to twelve complete readings. Plan for a call pack before you script bulk runs.
  • Failed calls (4xx, 5xx) do not count, so retries during debugging are free.
  • The allowance refreshes on the 1st of each month, UTC.

Get an API key

Sign in at app.lumin.guru/developer with your email address and the six digit code we send you, then generate a key. Add it as a Bearer header on every call:

http
Authorization: Bearer mcp_yourkey...

Self-hosting

Lumin runs as a hosted service. There is no on-prem option today. If your compliance requirements need self-hosting, email contact@lumin.guru to discuss an enterprise arrangement.