mcpField
N
NASA MCP Server

NASA MCP Server

ローカル
github.com/ProgramComputer科学・教育943 週間前に更新

NASA MCP Server について

NASA MCP Server は、NASA の公開 API に AI モデルから統一的にアクセスするための MCP サーバーです。天文画像、宇宙天気、地球近傍天体、地球観測データなどをアシスタント経由で調べたいユーザーに向いています。本プロジェクトは独立した実装で、NASA とは提携していません。

主な機能

  1. 0120 種類以上の NASA データソースへの統一インターフェース
  2. 02LLM での利用を想定した出力形式
  3. 03パラメーターの自動検証とエラー処理
  4. 04NASA API キーのレート制限管理
  5. 05stdio と Streamable HTTP の転送方式に対応

活用シーン

  1. 01今日の天文画像(APOD)の取得と解説
  2. 02地球近傍小惑星や太陽嵐などの宇宙イベントの追跡
  3. 03NASA の衛星画像、地球観測、気象データの検索

MCP 対応

本プロジェクトは MCP サーバーであり、APOD、NEO、GIBS、POWER、CMR、JPL の小天体データなどを、MCP クライアントに向けてツールとして公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"NASA-MCP-server": {
"command": "npx",
"args": [
"-y",
"@programcomputer/nasa-mcp-server"
]
}
}
}
起動コマンドnpx -y @programcomputer/nasa-mcp-server

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@programcomputer/nasa-mcp-server

ツール

32

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
datestringいいえ写真の日付(YYYY-MM-DD、1995-06-16 以降)。デフォルトは最新公開の写真です。start_date/end_date と併用できません。
start_datestringいいえ日付範囲の開始日(YYYY-MM-DD)。
end_datestringいいえ日付範囲の終了日(YYYY-MM-DD)。start_date が必要です。start_date を指定した場合、デフォルトは今日(UTC)です。
max_imagesintegerいいえ画像コンテンツとして埋め込む画像の数(0-5)。残りの項目は URL で一覧表示されます。

詳細

NPM Version

NASA MCP サーバー

NASA API 向けの Model Context Protocol(MCP)サーバーです。AI モデルがNASAの幅広いデータソースとやり取りするための標準化されたインターフェースを提供します。このサーバーは、公式の Model Context Protocol 仕様を実装しています。

MCP コミュニティの支援とガイダンスに心から感謝します!

機能

  • 20以上のNASAデータソースに、単一の一貫したインターフェースからアクセス
  • AIでの利用に最適化された標準化データ形式
  • パラメーターの自動検証とエラー処理
  • NASA APIキーのレート制限管理
  • 包括的なドキュメントとサンプル
  • さまざまなNASA画像形式に対応
  • LLMとの互換性を考慮したデータ変換とフォーマット
  • クロスプラットフォーム対応(Windows、macOS、Linux)

プロンプトの例

MCP クライアントに次のような質問をしてみましょう。

  • 「今日の Astronomy Picture of the Day を表示して、何が写っているか説明してください。」
  • 「2026年9月に、強い太陽フレア、地球に向かうCME、地磁気嵐などの太陽嵐はありましたか?」
  • 「今日、地球のそばを通過する小惑星はどれですか?最も接近するのはどれですか?」
  • 「今後90日以内に、月より地球に近い距離を通過する小惑星はありますか?」
  • 「JPL Sentryによると、Bennuが地球に衝突する確率はどのくらいですか?」
  • 「1969年に撮影されたApollo 11の月着陸船のNASA写真を探してください。」
  • 「現在活動中の熱帯低気圧やハリケーンはどれですか?」
  • 「2025-07-15のナイルデルタとシナイ半島の詳細な衛星画像を表示してください。」
  • 「NASA Earthdataで、クラウド上にホストされている海氷濃度データセットを探してください。」
  • 「2025年7月第1週のデンバーの日ごとの最高気温、最低気温、太陽エネルギー量を教えてください。」
  • 「2020年以降に発見された、地球におおむね近いサイズで温暖な系外惑星のうち、最も近いものを一覧表示してください。」
  • 「2026-09-29の00:00から00:10 UTCまでの間、ISSは地球上空のどこにありましたか?」
  • 「ISSの最新の二行軌道要素を取得してください。」
  • 「Olympus MonsのMars Trek地図タイルを表示してください。」
  • 「火星で最後に報告された週の間、NASAのInSight着陸機周辺の天気はどうでしたか?」
  • 「2030年に打ち上げるミッションで、必要なデルタVが最も少ない地球近傍小惑星はどれですか?」
  • 「どのNASA技術プロジェクトがソーラーセイルに取り組んできましたか?」
  • 「企業がライセンス取得できる、ソーラーパネルに関するNASAの特許を探してください。」
  • 「Pi Mensaeを観測したTESSのセクターはどれですか?また、その2分間隔の光度曲線はどこからダウンロードできますか?」
  • 「JWSTはTRAPPIST-1を観測しましたか?どの装置を使いましたか?」

免責事項

このプロジェクトは、NASA(米国航空宇宙局)またはその子会社や関連会社とは提携、承認、関係のいずれもありません。 NASAが公開しているAPIにアクセスする独立した実装です。使用しているNASAのデータはすべて公開されており、NASAのデータ利用ポリシーの対象です。

インストール

MCP サーバーを自分で起動する必要はありません。AIアプリ(Claude、Cursor、VS Code、Codexなど)がバックグラウンドで起動するため、インストールするには、そのアプリのMCP設定にエントリーを追加します。前提条件はNode.js 22以降のみです。アプリが初めて起動するときに、npxがサーバーをダウンロードします。

ほとんどのツールではAPIキーは不要です。NASA_API_KEY(https://api.nasa.gov/で無料取得可能。軽い利用ならDEMO_KEYも使用できます)はnasa_neo、nasa_insight_weather、nasa_mars_roverでのみ使用し、FIRMS_MAP_KEYはnasa_firmsでのみ使用します。これらが不要な場合は、envブロックを省略してください。

AIコーディングエージェント(Claude Code、Codex、Cursor、VS Codeのエージェントモード)を使用していますか? 次の内容を貼り付けてください。

Install the NASA MCP server from https://github.com/ProgramComputer/NASA-MCP-server
for the app you're running in. Follow that app's section under Installation in the
README, add it for all projects, and don't add an API key. Tell me exactly what you
changed and whether I need to restart.
標準設定

ほとんどのクライアントでは、次の JSON 形式を使用します。

{
  "mcpServers": {
    "nasa": {
      "command": "npx",
      "args": ["-y", "@programcomputer/nasa-mcp-server@latest"],
      "env": {
        "NASA_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

ファイルにすでに mcpServers オブジェクトがある場合は、2つ目の mcpServers を貼り付けるのではなく、その中に "nasa" エントリを追加してください。

Claude Desktop

設定 → 開発者 → 設定を編集を開きます。claude_desktop_config.json が開きます。

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json

標準設定を貼り付けて保存し、Claude Desktop を完全に終了してから、再度開いてください。

Claude Code
claude mcp add --env NASA_API_KEY=YOUR_API_KEY --scope user nasa -- npx -y @programcomputer/nasa-mcp-server@latest

--scope user を指定すると、すべてのプロジェクトでサーバーを利用できます。省略すると、現在のプロジェクトのみに追加されます。ネイティブの Windows では、npx を cmd /c npx に置き換えてください。

Cursor

Cursor にインストール

ボタンを使うと、API キーなしでサーバーがインストールされます。手動でインストールする場合やキーを追加する場合は、標準設定を ~/.cursor/mcp.json(すべてのプロジェクト)または .cursor/mcp.json(1つのプロジェクト)に貼り付けてください。

VS Code(GitHub Copilot)

VS Code にインストール VS Code Insiders にインストール

ボタンを使うと、API キーなしでサーバーがインストールされます。VS Code では mcpServers ではなく、トップレベルの servers キーを使用します。手動でインストールするには、ワークスペース内の .vscode/mcp.json に追加するか、すべてのワークスペースに設定する場合は、コマンドパレットから MCP: ユーザー設定を開くを実行してください。サーバーの初回起動時に VS Code がキーの入力を求め、安全に保存します。キーを使わない場合は空欄のままにしてください。

{
  "inputs": [
    {
      "type": "promptString",
      "id": "nasa-api-key",
      "description": "NASA API key (optional)",
      "password": true
    }
  ],
  "servers": {
    "nasa": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@programcomputer/nasa-mcp-server@latest"],
      "env": {
        "NASA_API_KEY": "${input:nasa-api-key}"
      }
    }
  }
}
Codex
codex mcp add nasa --env NASA_API_KEY=YOUR_API_KEY -- npx -y @programcomputer/nasa-mcp-server@latest

次の内容が ~/.codex/config.toml に書き込まれます。このファイルは Codex CLI、IDE 拡張機能、デスクトップアプリで共有されます。手動で追加することもできます。

[mcp_servers.nasa]
command = "npx"
args = ["-y", "@programcomputer/nasa-mcp-server@latest"]

[mcp_servers.nasa.env]
NASA_API_KEY = "YOUR_API_KEY"
Gemini CLI

標準設定を ~/.gemini/settings.json(すべてのプロジェクト)または .gemini/settings.json(1つのプロジェクト)に貼り付けてください。

その他のクライアント

ほとんどのその他の MCP クライアントでも、標準設定を使用できます。コマンドと引数を別々に入力するよう求められた場合、コマンドは npx、引数は -y @programcomputer/nasa-mcp-server@latest です。

npm パッケージの代わりにローカルのクローンを実行する場合(手動インストールを参照)、"command": "node" を指定し、"args": ["/absolute/path/to/NASA-MCP-server/dist/index.js"] を使用してください。

### 動作確認

クライアントを再起動または再読み込みし、MCP またはツールの一覧に nasa という名前のサーバーが表示されることを確認します。次に、「今日の Astronomy Picture of the Day は何ですか?」のように質問します。

サーバーが表示されない場合:

  • node --version を実行し、v22 以降が表示されることを確認します。
  • 設定ファイルに、末尾のカンマや mcpServers オブジェクトの重複など、JSON の誤りがないか確認します。
  • 以下の手順でターミナルからサーバーを実行し、エラーがないか確認します。何も表示されず待機状態になれば、正常に動作しています。Ctrl+C を押して停止します。
  • Windows でクライアントから npx が見つからないと報告された場合は、"command": "cmd" と "args": ["/c", "npx", "-y", "@programcomputer/nasa-mcp-server@latest"] を使用します。
ターミナルからの実行

これはテストにのみ必要です。MCP クライアントがサーバーを起動します。

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

API キーをコマンドライン引数として渡すこともできます。

npx -y @programcomputer/nasa-mcp-server@latest --nasa-api-key=YOUR_API_KEY
手動インストール
# Clone the repository
git clone https://github.com/ProgramComputer/NASA-MCP-server.git

# Install dependencies
cd NASA-MCP-server
npm install

# Build
npm run build

# Run with your API key
NASA_API_KEY=YOUR_API_KEY npm start

YOUR_API_KEY を https://api.nasa.gov/ で取得した NASA API キーに置き換えてください。Node.js 22 以降が必要です。

環境変数

サーバーは次の環境変数で設定できます。

変数説明
NASA_API_KEYNASA API キー(api.nasa.gov で取得)。NEO と InSight の気象データで使用します
FIRMS_MAP_KEY火災データ用の FIRMS MAP_KEY(firms.modaps.eosdis.nasa.gov/api/map_key で取得)。NASA_API_KEY とは別のキーです
NASA_MCP_CMR_URLCMR 検索 URL(省略可。デフォルト:https://cmr.earthdata.nasa.gov/search)
MCP_TRANSPORTトランスポートモード:stdio(デフォルト)または Streamable HTTP 用の http
MCP_HTTP_HOSTStreamable HTTP モードのホスト(デフォルト:127.0.0.1)
MCP_HTTP_PORTStreamable HTTP モードのポート(デフォルト:3000)
MCP_HTTP_PATHStreamable HTTP モードの MCP エンドポイントパス(デフォルト:/mcp)

トランスポートモード

デフォルトでは、Cursor などのローカル MCP クライアント向けに、サーバーは stdio で実行されます。

オプションの Streamable HTTP トランスポートを実行するには:

MCP_TRANSPORT=http MCP_HTTP_PORT=3000 NASA_API_KEY=YOUR_API_KEY npm start

Streamable HTTP エンドポイントは次の場所で利用できます。

http://127.0.0.1:3000/mcp

含まれる NASA API

この MCP サーバーは、次の NASA API と連携します。

  1. NASA Open API(api.nasa.gov、NASA_API_KEY が必要):

    • NEO(Near Earth Object Web Service)
    • InSight Mars Weather Service(過去のデータ:フィードの更新は 2020 年 10 月に停止しました)
  2. その他の NASA API(キー不要):

    • APOD(Astronomy Picture of the Day):NASA Science APOD API(science.nasa.gov)から取得
    • DONKI(Space Weather Database Of Notifications, Knowledge, Information):NASA CCMC(ccmc.gsfc.nasa.gov)から取得
    • EONET(Earth Observatory Natural Event Tracker)
    • TLE(CelesTrak の Two-Line Element sets、tle.ivanstanojevic.me 経由)
    • Satellite Situation Center(宇宙機の位置)
    • TechPort(NASA の技術プロジェクト)
    • Technology Transfer(特許、ソフトウェア、スピンオフ)
    • Mars, Moon and Vesta Trek(WMTS のマップレイヤーとタイル)
    • NASA Image and Video Library
    • Exoplanet Archive
    • MAST(Mikulski Archive for Space Telescopes):TESS、Hubble、JWST、Kepler/K2 などの観測データとそのデータプロダクト、および TESS のフルフレーム画像の切り抜き(TESSCut)。ツールは FITS ファイルそのものではなくダウンロードリンクを返すため、クライアントはデータを見つけることはできますが、分析はできません。
    • Open Science Data Repository(OSDR)のファイル
    • POWER(Prediction Of Worldwide Energy Resources)
  3. JPL Solar System Dynamics API(ssd-api.jpl.nasa.gov):

    • SBDB(Small-Body DataBase)
    • SBDB Close-Approach Data
    • Fireball Data
    • Sentry(衝突リスク)
    • Scout(NEO Confirmation Page の軌道)
    • NHATS(人が到達可能な NEO)
    • Small-Body Mission Design
    • Horizons エフェメリス
    • Periodic Orbits
    • ユリウス日変換ツール
  4. Earth Data API:

    • GIBS(Global Imagery Browse Services)
    • CMR(Common Metadata Repository)—高度な検索機能で強化されています
    • EPIC(Earth Polychromatic Imaging Camera)
    • FIRMS(Fire Information for Resource Management System)

API メソッド

各 NASA API は、標準化された MCP メソッドとして公開されています。

APOD(Astronomy Picture of the Day)
{
  "method": "nasa/apod",
  "params": {
    "date": "2023-01-01", // Optional: YYYY-MM-DD (1995-06-16 or later); defaults to the latest picture
    "max_images": 1 // Optional: how many pictures to embed (0-5)
  }
}

期間を指定する場合は、date の代わりに start_date と end_date(最大 100 日)を送信してください。APOD は現在 NASA Science APOD API から取得されます。この API ではキーは不要で、ランダムな count や thumbs オプションもありません。

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)
  }
}
CMR(Common Metadata Repository)
{
  "method": "nasa/cmr",
  "params": {
    "keyword": "sea surface temperature", // Optional: Collections only
    "search_type": "collections", // Optional: "collections" (default) or "granules"
    "bounding_box": "-100,10,-60,40", // Optional: west,south,east,north ("bbox" also works)
    "temporal": "2024-06-01T00:00:00Z,2024-09-30T23:59:59Z", // Optional: start,end
    "limit": 5 // Optional: 1-100, default 10
  }
}

デフォルトでは、結果は簡潔な形式で返されます("response_mode": "raw" を指定すると CMR 独自のメタデータが返され、fields で返すフィールドを選択できます)。次のページを取得するには、レスポンスから next_cursor のみを送り返してください。

{
  "method": "nasa/cmr",
  "params": {
    "cursor": "cmr1..." // Required: next_cursor from the previous response
  }
}
FIRMS(Fire Information for Resource Management System)
{
  "method": "nasa/firms",
  "params": {
    "bbox": "-125,32,-114,42", // Required: west,south,east,north (or latitude, longitude and radius_km)
    "days": 1, // Optional: 1-5
    "source": "VIIRS_SNPP_NRT" // Optional: FIRMS data source
  }
}

利用可能なすべてのメソッドとパラメーターの詳細については、/docs ディレクトリの API リファレンスを参照してください。

ログシステム

サーバーには、包括的なログ機能が備わっています。

  • 操作のステータスと進行状況
  • パフォーマンス指標
  • レート制限の追跡
  • エラー状況
  • リクエストの検証

ログメッセージの例:

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

セキュリティに関する考慮事項

この MCP サーバーは、Model Context Protocol の仕様に従ったセキュリティのベストプラクティスを実装しています。

  • Zod スキーマを使用した入力の検証とサニタイズ
  • 任意のコードを実行しない
  • コマンドインジェクションへの対策
  • 情報漏えいを防ぐ適切なエラー処理
  • API リクエストのレート制限とタイムアウト制御
  • セッションをまたいで悪用される可能性のある永続状態を持たない

開発

# 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 server
npm start

# Run tests
npm test

MCP Inspector でのテスト

ツールを対話的にテストするには、プロジェクトをビルドし、サーバーとともに公式の MCP Inspector を起動してください。

npm run build
npx @modelcontextprotocol/inspector node dist/index.js

サーバーは、作業ディレクトリ内の .env ファイルから NASA_API_KEY と FIRMS_MAP_KEY を読み込みます(上記の「開発」を参照)。Inspector にローカル URL が表示されるので、開いてツールの一覧表示や呼び出しを行ってください。

テストリクエストの例

リポジトリには、各 API のテストリクエストの例が含まれています。これらを MCP Inspector にコピーして貼り付けてください。

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

詳しい例については、Inspector のテスト例ドキュメントを参照してください。

MCP クライアントの使用方法

このサーバーは、公式の Model Context Protocol に準拠しています。ローカルクライアントの場合は、インストールの stdio 設定を使用してください。Streamable HTTP モードの場合は、MCP_TRANSPORT=http を指定してサーバーを起動し、MCP SDK で接続してください。

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: 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);

コントリビューション

  1. リポジトリをフォークします
  2. フィーチャーブランチを作成します
  3. テストを実行します:npm test
  4. プルリクエストを送信します

ライセンス

ISC ライセンスです。詳細は LICENSE ファイルを参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。