Skip to main content
Glama
varun257

mcp-nasa

by varun257
README.md
# NASA APOD FastAPI + MCP Demo

Production-style mini project with three parts:
1. FastAPI backend that proxies NASA APOD.
2. MCP stdio server exposing `nasa_apod_get`.
3. Minimal responsive UI served by FastAPI.

## Project Structure

```text
app/
  api/
  models/
  services/
  static/
mcp_server/
tests/
```

## Prerequisites

- Python 3.11+

## Install

```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt
cp .env.example .env
```

Set `NASA_API_KEY` in `.env` for production. `DEMO_KEY` is fallback for local development only.

## Run API

```bash
make run-api
# or
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
```

Health check:

```bash
curl http://127.0.0.1:8000/health
```

APOD:

```bash
curl "http://127.0.0.1:8000/api/nasa/apod?date=2026-03-25"
```

UI:
- Open `http://127.0.0.1:8000/`

## Run MCP Server (stdio)

```bash
make run-mcp
# or
python -m mcp_server.server
```

## Connect MCP in OpenCode

Use this snippet in OpenCode MCP config:

```json
{
  "mcpServers": {
    "nasa-apod": {
      "command": "python",
      "args": ["-m", "mcp_server.server"],
      "cwd": "/absolute/path/to/nasa-mcp-demo",
      "env": {
        "NASA_API_KEY": "DEMO_KEY"
      }
    }
  }
}
```

Then invoke tool:

```text
nasa_apod_get(date="2026-03-25")
```

Expected output format:

```json
{
  "date": "2026-03-25",
  "title": "...",
  "explanation": "...",
  "url": "...",
  "hdurl": "...",
  "media_type": "image",
  "copyright": "..."
}
```

## Testing

```bash
make test
# or
pytest -q
```

Includes:
- Unit tests for date validation, normalization, and error mapping.
- API integration tests for health and APOD success/failure paths.
- MCP tests for tool registration and call behavior.

## Optional Live NASA Test

Current tests use `httpx.MockTransport` for stability. Add live tests guarded by env flag if needed.

## Troubleshooting

- `ModuleNotFoundError`: ensure virtual environment is active and dependencies installed.
- `502` from `/api/nasa/apod`: verify `NASA_API_KEY`, network, and NASA API status.
- `504` from `/api/nasa/apod`: upstream timeout; retry later or increase `NASA_TIMEOUT_SECONDS`.
- MCP tool not discoverable: confirm command runs in project root and MCP config `cwd` is correct.
# mcp-nasa
# mcp-nasa
# mcp-nasa