NASA MCP Server

Um servidor MCP para interagir com várias APIs e fontes de dados da NASA. Requer uma chave de API da NASA.

Documentação

NPM Version

NASA MCP Server

Um servidor Model Context Protocol (MCP) para APIs da NASA, fornecendo uma interface padronizada para modelos de IA interagirem com a vasta gama de fontes de dados da NASA. Este servidor implementa a especificação oficial do Model Context Protocol.

Muito obrigado à comunidade MCP pelo apoio e orientação!

Recursos

  • Acesso a mais de 20 fontes de dados da NASA através de uma única interface consistente
  • Formatos de dados padronizados otimizados para consumo por IA
  • Validação automática de parâmetros e tratamento de erros
  • Gerenciamento de limites de taxa para chaves de API da NASA
  • Documentação abrangente e exemplos
  • Suporte a vários formatos de imagens da NASA
  • Conversão e formatação de dados para compatibilidade com LLMs
  • Suporte multiplataforma (Windows, macOS, Linux)

Aviso Legal

Este projeto não é afiliado, endossado ou relacionado à NASA (National Aeronautics and Space Administration) ou a qualquer uma de suas subsidiárias ou afiliadas. É uma implementação independente que acessa as APIs publicamente disponíveis da NASA. Todos os dados da NASA usados são publicamente disponíveis e sujeitos às políticas de uso de dados da NASA.

Instalação

Executando com npx

env NASA_API_KEY=YOUR_API_KEY npx -y @programcomputer/nasa-mcp-server@latest

Você também pode passar a chave da API como argumento de linha de comando:

npx -y @programcomputer/nasa-mcp-server@latest --nasa-api-key=YOUR_API_KEY

Instalação Manual

# Clone the repository
git clone https://github.com/ProgramComputer/NASA-MCP-server.git

# Install dependencies
cd NASA-MCP-server
npm install

# Run with your API key
NASA_API_KEY=YOUR_API_KEY npm start

Substitua YOUR_API_KEY pela sua chave de API da NASA obtida em https://api.nasa.gov/.

Variáveis de Ambiente

O servidor pode ser configurado com as seguintes variáveis de ambiente:

VariávelDescrição
NASA_API_KEYSua chave de API da NASA (obtenha em api.nasa.gov)
MCP_TRANSPORTModo de transporte: stdio (padrão) ou http para HTTP Streamable
MCP_HTTP_HOSTHost para o modo HTTP Streamable (padrão: 127.0.0.1)
MCP_HTTP_PORTPorta para o modo HTTP Streamable (padrão: 3000)
MCP_HTTP_PATHCaminho do endpoint MCP para o modo HTTP Streamable (padrão: /mcp)

Modos de Transporte

Por padrão, o servidor executa via stdio para clientes MCP locais, como Cursor e Claude Desktop.

Para executar o transporte HTTP Streamable opcional:

MCP_TRANSPORT=http MCP_HTTP_PORT=3000 NASA_API_KEY=YOUR_API_KEY npm start

O endpoint HTTP Streamable estará disponível em:

http://127.0.0.1:3000/mcp

APIs da NASA Incluídas

Este servidor MCP integra as seguintes APIs da NASA:

  1. NASA Open API (api.nasa.gov):

    • APOD (Astronomy Picture of the Day)
    • EPIC (Earth Polychromatic Imaging Camera)
    • DONKI (Space Weather Database Of Notifications, Knowledge, Information)
    • Insight (Mars Weather Service)
    • Mars Rover Photos
    • NEO (Near Earth Object Web Service)
    • EONET (Earth Observatory Natural Event Tracker)
    • TLE (Two-Line Element)
    • NASA Image and Video Library
    • Exoplanet Archive
    • NASA Sounds API (Beta)
    • POWER (Prediction Of Worldwide Energy Resources)
  2. JPL Solar System Dynamics API (ssd-api.jpl.nasa.gov):

    • SBDB (Small-Body DataBase)
    • SBDB Close-Approach Data
    • Fireball Data
    • Scout API
  3. Earth Data APIs:

    • GIBS (Global Imagery Browse Services)
    • CMR (Common Metadata Repository) - Aprimorado com recursos avançados de busca
    • EPIC (Earth Polychromatic Imaging Camera)
    • FIRMS (Fire Information for Resource Management System)

Métodos da API

Cada API da NASA é exposta através de métodos MCP padronizados:

APOD (Astronomy Picture of the Day)

{
  "method": "nasa/apod",
  "params": {
    "date": "2023-01-01", // Optional: YYYY-MM-DD format
    "count": 5, // Optional: Return a specified number of random images
    "thumbs": true // Optional: Return URL of video thumbnail
  }
}

Mars Rover Photos

{
  "method": "nasa/mars-rover",
  "params": {
    "rover": "curiosity", // Required: "curiosity", "opportunity", or "spirit"
    "sol": 1000, // Either sol or earth_date is required
    "earth_date": "2023-01-01", // YYYY-MM-DD format
    "camera": "FHAZ" // Optional: Filter by camera type
  }
}

Near Earth Objects

{
  "method": "nasa/neo",
  "params": {
    "start_date": "2023-01-01", // Required: YYYY-MM-DD format
    "end_date": "2023-01-07" // Required: YYYY-MM-DD format (max 7 days from start)
  }
}

GIBS (Global Imagery Browse Services)

{
  "method": "nasa/gibs",
  "params": {
    "layer": "MODIS_Terra_CorrectedReflectance_TrueColor", // Required: Layer ID
    "date": "2023-01-01", // Required: YYYY-MM-DD format
    "format": "png" // Optional: "png" or "jpg"
  }
}

POWER (Prediction Of Worldwide Energy Resources)

{
  "method": "nasa/power",
  "params": {
    "parameters": "T2M,PRECTOTCORR,WS10M", // Required: Comma-separated list
    "community": "re", // Required: Community identifier
    "latitude": 40.7128, // Required: Latitude
    "longitude": -74.0060, // Required: Longitude
    "start": "20220101", // Required: Start date (YYYYMMDD)
    "end": "20220107" // Required: End date (YYYYMMDD)
  }
}

Para documentação completa de todos os métodos e parâmetros disponíveis, consulte a referência da API no diretório /docs.

Sistema de Logging

O servidor inclui logging abrangente:

  • Status e progresso das operações
  • Métricas de desempenho
  • Rastreamento de limites de taxa
  • Condições de erro
  • Validação de requisições

Exemplo de mensagens de log:

[INFO] NASA MCP Server initialized successfully
[INFO] Processing APOD request for date: 2023-01-01
[INFO] Fetching Mars Rover data for Curiosity, sol 1000
[WARNING] Rate limit threshold reached (80%)
[ERROR] Invalid parameter: 'date' must be in YYYY-MM-DD format

Considerações de Segurança

Este servidor MCP implementa as melhores práticas de segurança seguindo as especificações do Model Context Protocol:

  • Validação e sanitização de entrada usando esquemas Zod
  • Nenhuma execução de código arbitrário
  • Proteção contra injeção de comandos
  • Tratamento adequado de erros para evitar vazamento de informações
  • Limitação de taxa e controles de timeout para requisições de API
  • Nenhum estado persistente que possa ser explorado entre sessões

Desenvolvimento

# Clone the repository
git clone https://github.com/ProgramComputer/NASA-MCP-server.git

# Install dependencies
npm install

# Copy the example environment file and update with your API keys
cp .env.example .env

# Build the TypeScript code
npm run build

# Start the development server
npm run dev

# Run tests
npm test

Testando com o MCP Inspector

O NASA MCP Server inclui um script para ajudá-lo a testar as APIs usando o MCP Inspector:

# Run the provided test script
./scripts/test-with-inspector.sh

Isso irá:

  1. Compilar o projeto para garantir que as alterações mais recentes sejam incluídas
  2. Iniciar o MCP Inspector com o servidor NASA MCP em execução
  3. Permitir que você teste interativamente todas as APIs da NASA

Exemplos de Requisições de Teste

O repositório inclui exemplos de requisições de teste para cada API que você pode copiar e colar no MCP Inspector:

# View the example test requests
cat docs/inspector-test-examples.md

Para exemplos detalhados, consulte o documento Inspector Test Examples.

Uso com Clientes MCP

Este servidor segue o Model Context Protocol oficial. Para clientes locais, use a configuração padrão de stdio mostrada acima. Para o modo HTTP Streamable, inicie o servidor com MCP_TRANSPORT=http e depois conecte-se com o SDK MCP:

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js";

const transport = new StreamableHTTPClientTransport(
  new URL("http://127.0.0.1:3000/mcp")
);

const client = new Client({
  name: "mcp-client",
  version: "1.0.0",
});

await client.connect(transport);

// Example: Get today's Astronomy Picture of the Day
const apodResult = await client.request({
  method: "tools/call",
  params: {
    name: "nasa/apod",
    arguments: {}
  }
}, CallToolResultSchema);

// Example: Get Mars Rover photos
const marsRoverResult = await client.request({
  method: "tools/call",
  params: {
    name: "nasa/mars-rover",
    arguments: { rover: "curiosity", sol: 1000 }
  }
}, CallToolResultSchema);

// Example: Search for Near Earth Objects
const neoResults = await client.request({
  method: "tools/call",
  params: {
    name: "nasa/neo",
    arguments: {
      start_date: "2023-01-01",
      end_date: "2023-01-07"
    }
  }
}, CallToolResultSchema);

// Example: Get satellite imagery from GIBS
const satelliteImage = await client.request({
  method: "tools/call",
  params: {
    name: "nasa/gibs",
    arguments: {
      layer: "MODIS_Terra_CorrectedReflectance_TrueColor",
      date: "2023-01-01"
    }
  }
}, CallToolResultSchema);

// Example: Use the new POWER API
const powerData = await client.request({
  method: "tools/call",
  params: {
    name: "nasa/power",
    arguments: {
      parameters: "T2M,PRECTOTCORR,WS10M",
      community: "re",
      latitude: 40.7128,
      longitude: -74.0060,
      start: "20220101",
      end: "20220107"
    }
  }
}, CallToolResultSchema);

Contribuindo

  1. Faça um fork do repositório
  2. Crie sua branch de funcionalidade
  3. Execute os testes: npm test
  4. Envie um pull request

Licença

Licença ISC - consulte o arquivo LICENSE para detalhes