Space-themed MCP server providing real-time space data tools (ISS location, SpaceX launches, Mars weather, NASA data) integrated with LangChain/Gemini 2.5 Flash AI agent for space exploration queries
The server has 16 tools (with significant duplication: tools 1-8 appear again as 9-16). Tool definitions exist with descriptions and input schemas, but quality is inconsistent. Naming follows verb_noun convention (get_*, search_*) which is good. However, descriptions lack LLM-optimization guidance, parameter descriptions are generic, output schemas are not documented, and error handling is minimal. The duplicate tool registrations (appearing in both langchain_agent.py and fastmcp_server.py) suggest inconsistent tool lifecycle management. Most tools return string representations of JSON rather than structured responses, forcing LLMs to parse unstructured output. No tool annotations (readOnlyHint, destructiveHint) despite all being read-only. Response pagination is absent, tools like get_spacex_launches return unbounded results. No guidance on error recovery. This is typical community-server quality: tools exist and are callable, but lack production polish.
Get the current location of the International Space Station. Returns: JSON string with ISS coordinates (latitude, longitude) and timestamp
Get current International Space Station location with latitude, longitude, and timestamp.
Get current Mars weather data from NASA InSight lander.
Get Mars weather data from NASA InSight mission. Returns: JSON string with Mars weather information including temperature and atmospheric data
Get Near Earth Objects (asteroids) data from NASA. Args: start_date: Start date in YYYY-MM-DD format (optional) end_date: End date in YYYY-MM-DD format (optional) Returns: JSON string with near Earth objects data including size, velocity, and approach dates
Get list of asteroids approaching Earth with size, velocity, and closest approach information from NASA database.
Duplicate tool registrations: 8 tools appear twice (in both langchain_agent.py and fastmcp_server.py), with inconsistent descriptions. The duplicates in the langchain_agent.py set have detailed descriptions (194-250 chars avg); the same tools in fastmcp_server.py have truncated descriptions (40-60 chars). This creates ambiguity about which registration is canonical and exposes tools twice to agents, wasting tool inventory.
Output schemas are not documented. Tools return string representations of JSON (e.g., return str(result)) rather than structured responses. No schema documentation tells LLMs what fields to expect in the response. For example, get_spacex_launches response structure (launches array with mission names, dates, rocket types, status) is inferred from code but not declared in the tool definition. This forces LLMs to parse unstructured output, increasing errors.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | D | 57 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 22 | - | v1 |
Get a list of people currently in space. Returns: JSON string with names and spacecraft of people currently in space
Get list of people currently in space, including their names and spacecraft.
Get recent and upcoming SpaceX launch data from Launch Library 2 API. This provides current, accurate SpaceX launch information including recent missions and upcoming launches with real-time status updates. Args: limit: Maximum number of launches to retrieve (default: 10) Returns: JSON string with current SpaceX launch information including: - Mission names and descriptions - Launch dates (in UTC) - Rocket types (Falcon 9, Falcon Heavy, Starship) - Launch locations - Mission status (Success, Failure, Go, TBD) - Payload details
Get recent and upcoming SpaceX launches with current, accurate data from Launch Library 2 API. Includes mission details, launch dates, rocket types, success status, and payload information.
Get the next upcoming SpaceX launch from Launch Library 2 API. This provides the most current information about the next scheduled SpaceX mission, including real-time updates on launch status and any delays. Returns: JSON string with next SpaceX launch details including: - Mission name (e.g., "Falcon 9 Block 5 | Starlink Group 17-5") - Launch date and time (UTC) - Rocket type and configuration - Launch location and pad - Mission description and payload details - Current launch status (Go, TBD, Hold, etc.) - Launch window information
Get next scheduled SpaceX launch with current, accurate mission details from Launch Library 2 API. Includes real-time status updates, countdown information, and mission specifics.
Get upcoming SpaceX launches from Launch Library 2 API. This provides information about future SpaceX missions that are scheduled but haven't launched yet. Perfect for answering questions about what's coming up. Args: limit: Maximum number of upcoming launches to retrieve (default: 5) Returns: JSON string with upcoming SpaceX launches including: - Mission names and timeline - Launch dates and countdown information - Mission descriptions and objectives - Launch status (Go, TBD, Hold) - Rocket types and configurations - Launch locations
Search for photos taken by Mars Curiosity or Perseverance rovers by Martian day (sol) and camera type.
Search for Mars rover photos. Args: sol: Martian day (sol) to search for photos (default: 1000) camera: Camera to search photos from (default: "fhaz") Returns: Formatted string with Mars photos display including image URLs and metadata
Perform a web search using DuckDuckGo for space and astronomy topics.
Result limit enforcement is missing for most tools. get_spacex_launches, get_spacex_next_launch, and others accept a 'limit' parameter but do not validate it or document upper bounds. An LLM could pass limit=10000 and receive thousands of items, exhausting context windows. No tool description documents default limits or pagination strategy.
Error handling returns string error messages (e.g., 'Error fetching ISS location: {str(e)}') with no recovery guidance. LLMs cannot determine whether to retry, ask the user, or abandon the task. Exceptions from external APIs (NASA, SpaceX Launch Library) are caught and wrapped as generic strings, losing actionable details.
Tool annotations are completely absent. All 8 unique tools are read-only (per Risk field) but none declare readOnlyHint=true in their schema annotations. Without annotations, agents cannot reason about tool safety or plan rollback strategies for failed sequences.
Parameter descriptions are generic and lack validation constraints. E.g., 'limit' is described as 'Maximum number of launches to retrieve' but does not specify minimum (1), maximum (1000?), or default behavior when omitted. 'sol' in search_mars_photos is described as 'Martian day (sol) to search for photos' but does not state valid range (0-5000?). LLMs cannot validate inputs without explicit constraints.
Shortened descriptions in duplicate registrations (tools 9-16) are non-actionable. E.g., tool 9 (get_iss_location) has description 'Get current International Space Station location with latitude, longitude, and timestamp.' (9 words, ~60 chars), compared to tool 1's description which is longer and includes context about return format. Shorter descriptions lack sufficient detail for LLM selection.
No pagination metadata in responses. Tools like get_spacex_launches return unbounded results (limited only by API-side defaults). Responses do not include total_count, next_cursor, or has_more flags. LLMs cannot know if they received a complete dataset or if iteration is required, risking incomplete answers to user queries.