Skip to main content
Glama
snapyharry-potter

iztro OpenAI MCP for Railway

README.md
# iztro OpenAI MCP for Railway

Remote MCP server for Zi Wei Dou Shu / Tu Vi Dau So tools, prepared for Railway and OpenAI ChatGPT developer mode.

## What I found

- As of 2026-04-24, `@feida/iztro-mcp-server` is not returned by npm registry.
- The active public package is `@xzkcz/iztro-mcp-server@2.2.1`.
- npm publish timeline for `@xzkcz/iztro-mcp-server`:
  - `1.0.3` on 2025-07-26
  - `1.0.4` on 2025-10-03
  - `2.2.1` on 2025-12-03
- The package metadata still points to `https://github.com/xzkcz/iztro-mcp-server.git`, but that GitHub repository returned `404` during verification on 2026-04-24.
- The published package itself is small and lightweight, but its entrypoint starts with `transportType: "stdio"`, so it is not directly usable as a public remote MCP endpoint for OpenAI without a wrapper.

## Why this wrapper exists

- OpenAI remote MCP works over Streamable HTTP or HTTP/SSE.
- The upstream npm package is `stdio` only.
- This project recreates the useful read-only astrology tools and exposes them at:
  - `GET /`
  - `GET /health`
  - `POST /mcp` and related Streamable HTTP traffic
  - `GET /sse`

## Included tools

- `get_astrolabe`
- `get_horoscope_decades`
- `get_horoscope_ages`
- `get_horoscope_years`
- `get_horoscope_months`
- `get_mutaged_places`

`gen_astrolabe` was intentionally left out because it writes files to disk and is not useful for a public read-only MCP deployment.

## Surface Pro 4 fit check

- Resource-wise, this workload is light enough for a Surface Pro 4 with Core m3, 4 GB RAM, and 128 GB storage.
- Published package sizes checked from npm:
  - `@xzkcz/iztro-mcp-server`: 67,010 bytes unpacked
  - `iztro`: 2,138,358 bytes unpacked
  - `fastmcp`: 1,332,900 bytes unpacked
  - `lunar-typescript`: 1,360,545 bytes unpacked
- Practical issue: to let ChatGPT call it, you need a public HTTPS endpoint. Because this machine did not already have Node installed and local hosting would still need tunnel or public ingress, Railway is the cleaner deployment target.

## Deploy to Railway

1. Put this folder in a Git repository.
2. Push it to GitHub.
3. In Railway, create a new project from that repo.
4. Railway should auto-detect Node and run `npm start`.
5. After deploy, your MCP endpoint will be:

```text
https://YOUR-APP.up.railway.app/mcp
```

Health check:

```text
https://YOUR-APP.up.railway.app/health
```

Landing page:

```text
https://YOUR-APP.up.railway.app/
```

## Connect from ChatGPT

As verified from OpenAI docs on 2026-04-24:

- ChatGPT Developer mode supports remote MCP over `SSE` and `streaming HTTP`.
- Supported auth modes there are `OAuth`, `No Authentication`, and `Mixed Authentication`.

Recommended setup:

1. Open ChatGPT on web.
2. Go to `Settings -> Apps -> Advanced settings -> Developer mode`.
3. Turn Developer mode on.
4. Click `Create app`.
5. Use:
   - Server URL: `https://YOUR-APP.up.railway.app/mcp`
   - Authentication: `No Authentication`

## OpenAI Responses API example

```json
{
  "model": "gpt-5.4",
  "input": "Lap la so cho ngay 2000-08-16 luc 2 gio sang, nam, locale zh-CN",
  "tools": [
    {
      "type": "mcp",
      "server_label": "iztro",
      "server_url": "https://YOUR-APP.up.railway.app/mcp",
      "require_approval": "never"
    }
  ]
}
```

Because every exposed tool here is read-only, `require_approval: "never"` is a reasonable default.

## Run locally later if you want

```bash
npm install
npm start
```

Local endpoints:

- `http://localhost:3000/mcp`
- `http://localhost:3000/sse`
- `http://localhost:3000/health`

If you want ChatGPT on the public Internet to call a local machine, you still need a public HTTPS tunnel such as Cloudflare Tunnel or another ingress layer.

## Windows one-click local hosting

This repo now includes helper scripts for Windows:

```powershell
powershell -ExecutionPolicy Bypass -File .\start-local-public.ps1
```

That command:

- starts the MCP server on local port `3000`
- tries a public HTTPS tunnel with Cloudflare Quick Tunnel first
- falls back to `localhost.run` if Cloudflare is unavailable
- prints the public MCP URL you can paste into ChatGPT

When using the local public tunnel, connect ChatGPT to the `/mcp` URL, not `/sse`.
This project is intended to be used over Streamable HTTP for OpenAI MCP clients.

To stop everything:

```powershell
powershell -ExecutionPolicy Bypass -File .\stop-local-public.ps1
```

The currently active public MCP URL is also written to:

```text
.\.runtime\public-url.txt
```

If the startup window does not show the URL clearly, you can recover it with:

```powershell
powershell -ExecutionPolicy Bypass -File .\get-public-url.ps1
```

## Create a clean Railway zip

To generate a clean deployment bundle without `node_modules` or runtime logs:

```powershell
powershell -ExecutionPolicy Bypass -File .\pack-railway.ps1
```

That creates:

```text
..\iztro-openai-mcp-railway-ready.zip
```