NASA MCP Server
Fetches NASA's Astronomy Picture of the Day (APOD) images and explanations for any date.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@NASA MCP ServerGet today's NASA picture of the day"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
NASA MCP Server
A Model Context Protocol (MCP) server that provides access to NASA's Astronomy Picture of the Day (APOD) API. This server exposes tools that can be used by AI assistants like Cursor to fetch NASA's daily space images.
Features
NASA Picture of the Day: Fetch today's or any historical NASA Astronomy Picture of the Day
Current Date: Get the current date in ISO format
Easy Integration: Simple setup for Cursor and other MCP-compatible clients
Related MCP server: space-mcp-server
Prerequisites
Node.js (v18 or higher)
npm or yarn
A NASA API key (free at api.nasa.gov)
Installation
Clone or navigate to this repository:
cd ts_mcpInstall dependencies:
npm installCreate a
.envfile in the root directory:
NASA_API_KEY=your_nasa_api_key_hereYou can get a free NASA API key by visiting api.nasa.gov and generating one.
Building
Build the TypeScript project:
npm run buildOr use the MCP-specific build command:
npm run build:mcpFor development with watch mode:
npm run devRunning the Server
Start the MCP server:
npm startThe server runs using stdio (standard input/output) communication, which is required for MCP protocol.
Integrating with Cursor
To use this MCP server with Cursor, you need to add it to your Cursor settings:
Open Cursor Settings:
Press
Ctrl+,(Windows/Linux) orCmd+,(Mac)Or go to
File > Preferences > Settings
Search for "MCP" or navigate to the MCP settings section
Add a new MCP server configuration. The configuration should look like this:
{
"mcpServers": {
"nasa-mcp-server": {
"command": "node",
"args": [
"C:\\code\\MCP\\ts_mcp\\dist\\index.js"
],
"env": {
"NASA_API_KEY": "your_nasa_api_key_here"
}
}
}
}Important Notes:
Replace
C:\\code\\MCP\\ts_mcp\\dist\\index.jswith the absolute path to your builtindex.jsfileMake sure you've built the project first (
npm run build)Replace
your_nasa_api_key_herewith your actual NASA API keyOn Windows, use double backslashes (
\\) or forward slashes (/) in the pathOn Mac/Linux, use forward slashes in the path
Alternative: Using npm script
You can also configure Cursor to run the server via npm:
{
"mcpServers": {
"nasa-mcp-server": {
"command": "npm",
"args": [
"start"
],
"cwd": "C:\\code\\MCP\\ts_mcp",
"env": {
"NASA_API_KEY": "your_nasa_api_key_here"
}
}
}
}Usage
Once integrated with Cursor, you can use the MCP tools in your conversations:
Get Today's NASA Picture
Get today's NASA picture of the dayGet a Specific Date's Picture
Get the NASA picture from 2026-01-31Example Result:
Title: Artemis I: Flight Day 13
URL: https://apod.nasa.gov/apod/image/2601/art001e000672-orig1024c.jpg

Get Current Date
What's today's date?Available Tools
nasaPicOfDayTool
Fetches the NASA Astronomy Picture of the Day for a specific date or today.
Parameters:
date(optional): Date in YYYY-MM-DD format. If not provided, defaults to today.
Returns:
title: The title of the imagedate: The date of the imageurl: URL to the imageexplanation: Explanation of the image
getCurrentDate
Gets the current date in ISO format.
Returns:
Current date as an ISO string
Project Structure
ts_mcp/
├── src/
│ ├── index.ts # Main MCP server entry point
│ └── tools/
│ ├── nasaPicOfTheDay.ts # NASA APOD tool implementation
│ └── getCurrentDate.ts # Current date tool implementation
├── dist/ # Compiled JavaScript output
├── package.json
├── tsconfig.json
└── .env # Environment variables (not in git)Development
Scripts
npm run build- Compile TypeScript to JavaScriptnpm run build:mcp- Build with tsup for MCP distributionnpm run dev- Watch mode for developmentnpm start- Run the compiled server
Dependencies
@mastra/mcp- MCP server framework@mastra/core- Core tooling utilitiesaxios- HTTP client for API requestszod- Schema validationdotenv- Environment variable management
Troubleshooting
Server won't start
Make sure you've built the project:
npm run buildVerify your
.envfile exists and containsNASA_API_KEYCheck that Node.js is installed and in your PATH
Cursor can't find the server
Verify the path in Cursor settings is correct and absolute
Ensure the
dist/index.jsfile exists after buildingRestart Cursor after changing MCP settings
Check Cursor's developer console for error messages
API errors
Verify your NASA API key is valid
Check your internet connection
Ensure the date format is YYYY-MM-DD if providing a date
License
ISC
Resources
Available Tools
2 toolsgetCurrentDateC
Get todays date
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Get todays date' and does not disclose whether the date is local or UTC, whether it includes time, or what format is returned. For a read-only tool this is minimally transparent but lacks important behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler. It is front-loaded and easy to read. However, the typo 'todays' and the lack of any elaboration prevent a perfect score for structure, though brevity is a plus.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is extremely simple, so the description is minimally adequate, but without an output schema, the agent does not know what return shape to expect. Key contextual details like date format and timezone are missing, making it insufficient for full autonomous invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and per the baseline, 0 params gets a score of 4. The description does not need to explain parameters that do not exist, and the schema already confirms an empty object. No additional parameter information is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets today's date using a specific verb and resource. It distinguishes from the sibling tool (nasaPicOfDayTool) since that is obviously about NASA pictures, not dates. However, it is vague about what format or timezone the date is in, which keeps it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when this tool should be used over alternatives. There is no mention of alternatives or exclusionary conditions. The sibling tool is unrelated but no explicit comparison is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nasaPicOfDayToolC
get the NASA picture of the day
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | the date to fetch picture should be YYYY-MM-DD format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the purpose and gives no details about the return format (e.g., URL, image bytes, metadata), potential side effects, or error behavior. This is minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler words, effectively front-loaded. It is concise, though perhaps too terse to convey necessary details, which slightly reduces its value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a single parameter, the description should at least mention what the result looks like or that the date is optional. It does neither, leaving the tool under-specified for an agent that needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% description coverage for the 'date' parameter with format guidance. The description itself adds no extra parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'get the NASA picture of the day' clearly states a specific action and resource, distinguishing it from the sibling tool getCurrentDate. However, it does not mention the optional date parameter, slightly narrowing the scope implied by the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool vs the sibling getCurrentDate. The intended context is implied by the name, but there are no explicit alternatives or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.0.0- First observed
getCurrentDate - First observed
nasaPicOfDayTool
TDQS
Scored across 2 tools
The two tools have completely distinct purposes: one retrieves a NASA picture of the day, the other retrieves the current date. There is no overlap or ambiguity between them.
Both names are in camelCase, but their stylistic patterns differ: 'nasaPicOfDayTool' is a noun phrase with a 'Tool' suffix, while 'getCurrentDate' follows a verb_noun imperative. This inconsistency in naming convention across the small set makes it less coherent.
With only two tools, the server feels thin for a domain as broad as NASA data. The count is borderline, hinting at an incomplete or minimal implementation rather than a well-scoped set.
The tool surface is severely incomplete for a NASA MCP server. Many obvious capabilities such as Mars rover photos, near-earth object tracking, or astronomy data are missing, leaving the server with only a trivial utility and a date function.
Maintenance
Related MCP Connectors
MCP server for aerospace calculations: orbital mechanics, ephemeris, DSN operations, ...
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
NASA MCP — wraps NASA Open APIs (api.nasa.gov)
A Model Context Protocol (MCP) server for Selise Blocks Cloud integration
Related MCP Servers
- AlicenseBqualityBmaintenanceA Model Context Protocol server that provides a standardized interface for AI models to interact with NASA's vast array of data sources including APOD, Mars Rover photos, satellite imagery, and space weather data.2353 npm92ISC
- AlicenseAqualityCmaintenanceMCP server providing AI agents with access to NASA and space/astronomy data including APOD, Mars rover photos, near-Earth asteroids, exoplanets, Earth imagery, natural events, and space weather.11MIT
- FlicenseAqualityCmaintenanceAn extensible Model Context Protocol server framework with a plugin architecture, enabling easy addition of API services like the bundled NASA APOD tools for astronomy content.88-
- FlicenseNot gradedqualityDmaintenanceMCP server that fetches NASA's Astronomy Picture of the Day (APOD) for a given date, returning title, explanation, and image URLs.-