mcp-stargazing
mcp-stargazing is an astronomy MCP server for celestial calculations, sky planning, weather, light pollution analysis, and optimal stargazing location finding.
Celestial Position (
get_celestial_pos): Calculate altitude/azimuth of any celestial object (Sun, Moon, planets, stars, deep-sky objects) for a given location and time.Rise & Set Times (
get_celestial_rise_set): Get rise and set times for any celestial object.Moon Info (
get_moon_info): Retrieve phase name, illumination percentage, and age in days.Visible Planets (
get_visible_planets): List all planets currently above the horizon with their positions.Constellation Position (
get_constellation): Find the altitude/azimuth of the center of any named constellation.Nightly Forecast (
get_nightly_forecast): Curated planner of the best planets and deep-sky objects (Messier/NGC) to observe tonight, accounting for moon phase.Weather (
get_weather_by_name/get_weather_by_position): Fetch current weather by place name or lat/lon coordinates.Light Pollution Map (
light_pollution_map): Retrieve a grid of light pollution data (brightness, Bortle class, SQM) for a geographic bounding box.Area Analysis (
analysis_area): Find and rank the best dark, accessible stargazing spots within a region, with pagination (page/page_size) and result caching (resource_id).Local Datetime Info (
get_local_datetime_info): Retrieve the current local date, time, and timezone.
Utilizes NumPy for numerical calculations involved in celestial positioning and astronomical computations.
Implements testing framework for validating celestial calculations and time/location utilities.
Click on "Install 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., "@mcp-stargazingwhat's visible in the night sky from New York tonight?"
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.
mcp-stargazing
Calculate the altitude, rise, and set times of celestial objects (Sun, Moon, planets, stars, and deep-space objects) for any location on Earth, with optional light pollution analysis.
Features
Altitude/Azimuth Calculation: Get elevation and compass direction for any celestial object.
Rise/Set Times: Determine when objects appear/disappear above the horizon.
Light Pollution Analysis: Load and analyze light pollution maps (GeoTIFF format).
Composite Planning: Build a ranked observing plan that combines place quality, weather, moonlight, and top targets.
Tool Discovery: Inspect registered MCP tools programmatically through
get_tool_catalog.Code Execution Ready:
Serializable Returns: All tools return JSON-serializable data (ISO strings for dates), making them directly usable by LLMs.
Pagination:
analysis_areasupports paging (page,page_size) to handle large datasets efficiently.Stable Result Handles:
analysis_area.resource_ididentifies the cached non-pagination query so agents can fetch multiple pages safely.Standardized Responses: Successful calls return
{ "data": ..., "_meta": ... }; business validation failures return{ "error": ..., "_meta": ... }.
Performance:
Async Execution: Non-blocking celestial calculations.
Caching: Intelligent caching for Simbad queries and regional analysis.
Proxy Support: Native support for HTTP/HTTPS proxies (useful for downloading astronomical data).
Time Zone Aware: Works with local or UTC times.
Data Driven: Integrated database of 10,000+ deep-sky objects (Messier & NGC) for smart recommendations.
Related MCP server: Satellite MCP Server
Installation
This project uses uv for dependency management.
Local Installation
Install
uv:pip install uvSync dependencies:
uv syncThis will create a virtual environment in
.venvand install all dependencies defined inpyproject.toml.Activate the environment:
source .venv/bin/activateInitialize Data (Required for Nightly Planner): This downloads the latest Messier and NGC catalog data to
src/data/objects.json.python scripts/download_data.pyNote: If you are behind a firewall, ensure
HTTP_PROXYenv var is set before running this script.
Docker Installation
You can also run the server using Docker, which handles all dependencies and data initialization automatically.
Build the image:
docker build -t mcp-stargazing .Note: If you are behind a proxy, pass the proxy URL during build:
docker build --build-arg HTTP_PROXY=http://127.0.0.1:7890 -t mcp-stargazing .Run the container:
# Basic run (MCP on :3001 + SPF web UI on :5001) docker run -p 3001:3001 -p 5001:5001 mcp-stargazing # With Environment Variables docker run -p 3001:3001 -p 5001:5001 \ -e QWEATHER_API_KEY=your_key \ -e STARGAZING_DB_CONFIG=your_db_config \ mcp-stargazingAccess:
MCP server →
http://localhost:3001/shttp(for AI agent / MCP client)SPF web UI →
http://localhost:5001/(stargazing place finder frontend)
Docker Architecture
The container runs two services managed by supervisord, both sharing the same Python
virtual environment via uv run:
Container
├── supervisord
│ ├── program:mcp → uv run mcp-stargazing --mode shttp --port 3001
│ └── program:spf-web → uv run uvicorn server.main:app --port 5001
│
Dependency resolution (single venv, no duplication):
stargazing-core>=0.1.0 ← resolved once from PyPI
stargazing-place-finder>=0.8.0
fastapi, uvicorn, ... ← SPF's transitive depsMCP Server Usage
Start the MCP server to expose tools to AI agents or other clients.
1. Environment Setup
Create a .env file or export variables:
# Weather tools
# 推荐:使用你账号专属的 API Host(公共域名将从 2026 年起逐步停止服务)
export QWEATHER_API_HOST="abc1234xyz.def.qweatherapi.com"
# 鉴权(二选一)
# 1) API KEY(兼容旧用法)
export QWEATHER_API_KEY="your_api_key"
# 2) JWT(推荐,更安全)
# export QWEATHER_JWT_TOKEN="your_jwt_token"
# 如需临时兼容旧公共域名(不推荐),显式开启:
# export QWEATHER_ALLOW_PUBLIC_HOST=1
# Optional: Proxy for downloading astronomical data (Simbad/IERS)
# Highly recommended if you are in a restricted network environment
export HTTP_PROXY="http://127.0.0.1:7890"
export HTTPS_PROXY="http://127.0.0.1:7890"2. Start Server
Streamable HTTP (SHTTP) mode (Recommended for most agents):
# Basic start
python -m src.main --mode shttp --port 3001 --path /shttp
# With proxy explicitly passed (overrides env vars)
python -m src.main --mode shttp --port 3001 --path /shttp --proxy http://127.0.0.1:7890SSE mode:
python -m src.main --mode sse --port 3001 --path /ssedev mode is no longer supported because current FastMCP versions no longer provide run_dev(). Use local, shttp, or sse.
3. Response Format
Successful business responses return data in a standardized JSON format:
{
"data": {
// Tool-specific return data
"altitude": 45.5,
"azimuth": 180.0
},
"_meta": {
"version": "1.0.0",
"status": "success"
}
}Business validation failures use the same envelope style:
{
"error": {
"code": "INVALID_TIME_FORMAT",
"message": "Invalid time format: invalid-time-format",
"details": {
"time_string": "invalid-time-format"
}
},
"_meta": {
"version": "1.0.0",
"status": "error"
}
}At the MCP protocol layer, tools/list and get_tool_catalog are kept aligned, and JSON-RPC request ids are preserved in both SHTTP and SSE transport tests.
4. Available Tools
get_celestial_pos: Calculate altitude/azimuth.get_celestial_rise_set: Calculate rise/set times (Returns ISO strings).get_moon_info: Detailed moon phase, illumination, and age.list_visible_planets: List of all planets currently above the horizon with positions.get_constellation: Find the position (Alt/Az) of a constellation center.get_nightly_forecast: Smart planner returning curated list of best objects to view tonight (Planets + Deep Sky).get_weather_by_name/get_weather_by_position: Fetch current weather with automatic retry on network failures.get_local_datetime_info: Get current local time information.get_tool_catalog: Discover available MCP tool metadata and parameters.get_best_stargazing_plan: Build a ranked regional observing plan with candidate places, weather summaries, best observation windows, and top targets.Inputs:
south,west,north,east,time,time_zone,candidate_limit,target_limit,weather_provider,max_locations,min_height_diff,road_radius_km,network_type,avoid_popular_spots,prefer_quiet_at_night,popularity_radius_km,db_config_path.Returns:
query,summary, andcandidates, wherequery.analysis_resource_idlinks the plan back to the underlyinganalysis_areasearch when available.Degradation: Weather or forecast sub-queries may degrade into
summary.warningsand per-candidatenotes, while the overall planning response remains successful.
get_telescope_targets: Match deep-sky objects against telescope optics — find what's best visible with your equipment.Inputs:
telescope(preset name or custom config),ra/decortarget_name,time,time_zone.Returns: Ranked list of observable targets with visibility scores, altitude/azimuth, and telescope-specific framing.
get_shooting_plan: Generate an optimized imaging schedule for a target, maximizing time above altitude threshold.Inputs:
target_nameorra/dec,telescope,time,time_zone,duration_hours,min_altitude_deg.Returns: Time-ordered sequence of exposures with meridian flip warnings and moon separation data.
light_pollution_map: Query light pollution data for a bounding box area.Inputs:
south,west,north,east,zoom(default 10).Returns: A grid of data points with Bortle class, brightness, and SQM values.
analysis_area: Find best stargazing spots in a region.Inputs:
south,west,north,east,max_locations,min_height_diff,road_radius_km,network_type,avoid_popular_spots,prefer_quiet_at_night,popularity_radius_km,db_config_path,page,page_size.Returns: List of spots with pagination metadata (
total,page,page_size,total_pages) and aresource_idthat identifies the cached non-pagination query parameters. Each item may also include popularity heuristic fields such asstatic_popularity_risk_score,night_quiet_likelihood_score, andpopularity_notes.Validation:
page >= 1,page_size >= 1, andpopularity_radius_km > 0; invalid arguments returnCONFIGURATION_ERROR.
5. Error Handling
All tools return JSON-serializable data and use structured error handling:
Standard Error Codes:
INVALID_COORDINATES,INVALID_TIMEZONE,INVALID_TIME_FORMAT,MISSING_API_KEY,API_AUTH_FAILURE,API_TIMEOUT,API_RATE_LIMIT,EXTERNAL_API_ERROR,NETWORK_ERROR,CONFIGURATION_ERRORWeather Tools: Include automatic retry logic for network failures (up to 3 attempts with exponential backoff)
Business Error Responses: Structured MCPError-derived payloads with actionable messages for calling agents
Protocol Tests:
tools/list,get_tool_catalog, and SSE request-id behavior are covered by protocol-level testsValidation: Input parameters are validated before processing with clear error messages
Examples
Nightly Planner:
python examples/nightly_forecast_demo.pyShows a curated list of planets and deep-sky objects visible tonight, accounting for moonlight.
Visible Planets:
python examples/visible_planets_demo.pyLists which planets are currently up.
Moon Info:
python examples/moon_phase_demo.pyPrints a 30-day moon phase calendar.
Orchestration:
python examples/code_execution_orchestration.pyDemonstrates a full workflow: Get time -> Get Celestial Pos -> Check Weather -> Find Spots.
Shows how to handle the standardized response format programmatically.
Pagination:
python examples/pagination_demo.pyDemonstrates fetching large result sets page by page using the
resource_id.
Project Structure
.
├── src/
│ ├── functions/ # Tool implementations grouped by domain
│ │ ├── celestial/ # Celestial calculations (pos, rise/set)
│ │ ├── metadata/ # Tool discovery surface (`get_tool_catalog`)
│ │ ├── planning/ # Composite planning tools (`get_best_stargazing_plan`)
│ │ ├── telescope/ # Telescope target matching + shooting plan
│ │ ├── weather/ # Weather API integration
│ │ ├── places/ # Location and area analysis
│ │ └── time/ # Time utilities
│ ├── schemas/ # Pydantic v2 data models
│ ├── cache.py # Caching logic for analysis results
│ ├── response.py # Standardized response formatting
│ ├── server_instance.py # FastMCP server instance (avoids circular imports)
│ ├── main.py # Entry point and tool registration
│ ├── celestial.py # Core astronomy logic (Astropy wrappers)
│ ├── placefinder.py # Place-finder bridge logic
│ └── qweather_interaction.py # Thin QWeather URL wrappers
├── tests/ # Unified test suite (25+ test files)
├── examples/ # Usage examples (14 scripts)
├── docs/ # Design docs and roadmap
├── Dockerfile # Multi-stage Docker build
├── supervisord.conf # Dual-service process manager config
└── pyproject.toml # Project configuration and dependenciesTesting
Run the unified test suite:
uv run pytest -v tests/Key tests include:
test_serialization.py: Ensures all tools return valid JSON with the correct schema.test_integration.py: Mocks external APIs to verify the entire toolchain.test_mcp_client.py: Verifiestools/list,tools/call, and SSE request-id protocol behavior.test_structured_errors.py: Verifies business validation failures stay in the structured response envelope.
Contributing
Follow the Code Execution with MCP best practices.
Ensure all new tools return standard JSON responses using
src.response.format_response.Add tests in
tests/for any new functionality.Follow the repository agent conventions in
AGENTS.mdfor all MCP tool and agent-facing changes.Refer to
docs/ROADMAP.mdfor the planned agent and harness feature roadmap.
Available Tools
15 toolsanalysis_areaA
Analyze a geographic area for suitable stargazing locations.
This tool searches for dark, accessible locations with good viewing conditions. Results are cached based on search parameters.
Fast mode: Set road_radius_km=0 to skip road connectivity checks.
This avoids OSMnx network downloads from Overpass API and is much faster —
use it when you only need candidate locations with light pollution and
elevation data, without road distance analysis.
Args: south, west, north, east: Bounding box coordinates. max_locations: Maximum number of candidate locations to find (before pagination). min_height_diff: Minimum elevation difference for prominence. road_radius_km: Search radius for road access. Set to 0 to skip road checks. network_type: Type of road network ('drive', 'walk', etc.). db_config_path: Optional path to database config. page: Page number (1-based). page_size: Number of results per page.
Returns: Dict with keys "data", "_meta". "data" contains: - items: List of location results for the current page. - total: Total number of locations found. - page: Current page number. - page_size: Current page size. - resource_id: Cache key for the non-pagination search parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| east | Yes | ||
| page | No | ||
| west | Yes | ||
| north | Yes | ||
| south | Yes | ||
| page_size | No | ||
| network_type | No | drive | |
| max_locations | No | ||
| db_config_path | No | ||
| road_radius_km | No | ||
| min_height_diff | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses caching behavior, the effect of fast mode (skipping OSMnx downloads), and the return structure. It could mention database interactions or rate limits, but the provided information is sufficient for safe usage.
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 well-structured with sections (main description, caching note, fast mode, Args, Returns). It is front-loaded with the main purpose. However, the fast mode paragraph contains some repetition (e.g., 'skip road connectivity checks' appears twice), making it slightly less concise.
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?
Given 11 parameters, no schema descriptions, and no annotations, the description provides comprehensive coverage: parameter semantics, return format (including keys), caching behavior, and a performance optimization tip. It is fully adequate for an agent to use the tool 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?
Schema description coverage is 0%, so the description must fully compensate. The Args section provides clear, detailed explanations for all 11 parameters, including purpose, defaults, and special values (e.g., road_radius_km=0 to skip). This adds significant value beyond the schema's type/default entries.
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's purpose: 'Analyze a geographic area for suitable stargazing locations.' It specifies the verb (analyze), resource (geographic area), and domain (stargazing), which distinguishes it from sibling tools that handle celestial data, weather, or planning.
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?
The description includes specific guidance on when to use 'fast mode' (road_radius_km=0) for scenarios without road connectivity needs. However, it lacks explicit comparison to sibling tools or conditions when not to use this tool, though the fast mode advice provides clear context for a common alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_best_stargazing_planA
Create a composite stargazing plan for a region and time.
This planning tool combines:
candidate place search from
analysis_areaweather summaries from
get_weather_by_positionastronomy targets from
get_nightly_forecast
Args:
south, west, north, east: Bounding box coordinates.
time: Observation time string in ISO format or YYYY-MM-DD HH:MM:SS.
time_zone: IANA timezone string.
candidate_limit: Maximum number of candidate places to evaluate.
target_limit: Maximum number of recommended targets per place.
weather_provider: Weather provider mode passed to weather tools.
max_locations: Maximum number of area-analysis candidates to search.
min_height_diff: Minimum elevation difference for prominence.
road_radius_km: Search radius for road access.
network_type: Type of road network to analyze.
db_config_path: Optional path to database config.
Returns:
Dict with keys data and _meta. data contains the normalized
query, a plan summary, and ranked candidate recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| east | Yes | ||
| time | Yes | ||
| west | Yes | ||
| north | Yes | ||
| south | Yes | ||
| time_zone | Yes | ||
| network_type | No | drive | |
| target_limit | No | ||
| max_locations | No | ||
| db_config_path | No | ||
| road_radius_km | No | ||
| candidate_limit | No | ||
| min_height_diff | No | ||
| weather_provider | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions combining three tools and returns a dict with 'data' and '_meta', but does not disclose potential side effects, required permissions, or failure modes. It adds behavioral context but lacks completeness.
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 well-structured with a summary, list of combined tools, and parameter breakdown. It front-loads the core purpose. Though lengthy, it is appropriately sized for a complex tool with 14 parameters.
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?
Given the complexity (14 parameters, no annotations) and presence of an output schema, the description adequately explains the tool's function, inputs, and return structure. It lacks examples or edge cases but is sufficiently complete for an AI agent.
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?
Schema description coverage is 0%, yet the description includes an 'Args:' section with brief explanations for all 14 parameters (e.g., 'Bounding box coordinates', 'IANA timezone string'). This adds meaning beyond the schema, but descriptions are minimal and do not elaborate on defaults or dependencies.
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's purpose: 'Create a composite stargazing plan for a region and time.' It specifies the combination of three sub-tools, making it distinct from sibling tools like get_weather_by_position or get_nightly_forecast. The verb 'create' and resource 'composite stargazing plan' are precise.
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?
The description implies usage through its composite nature, but does not explicitly state when to use this tool versus alternatives like analysis_area or get_nightly_forecast individually. It provides context by listing what it combines, offering implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_celestial_posA
Calculate the altitude and azimuth angles of a celestial object.
Args: celestial_object: Name of object (e.g. "sun", "moon", "andromeda") lon: Observer longitude in degrees lat: Observer latitude in degrees time: Observation time string "YYYY-MM-DD HH:MM:SS" time_zone: IANA timezone string
Returns: Dict with keys "data", "_meta". "data" contains "altitude" and "azimuth" (degrees).
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| time | Yes | ||
| time_zone | Yes | ||
| celestial_object | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what the tool does, not behavioral traits. It doesn't disclose whether calculations are approximate vs precise, what coordinate system is used, error handling, or performance characteristics. For a calculation tool with 5 parameters, this leaves significant behavioral gaps.
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?
Perfectly structured with purpose statement, parameter explanations, and return format - all in minimal sentences. Every element earns its place with no redundancy. The Args/Returns sections are appropriately formatted.
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?
Given the calculation complexity and 5 parameters with no annotations, the description does well with parameter semantics and output explanation. However, it lacks context about calculation methods, precision, or limitations. The presence of an output schema (implied by Returns section) helps but doesn't fully compensate for missing behavioral context.
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?
With 0% schema description coverage, the description fully compensates by providing clear semantics for all 5 parameters: object name examples, coordinate units (degrees), time format, and timezone standard. This adds substantial value beyond the bare schema.
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 specific verb 'calculate' and the exact resource 'altitude and azimuth angles of a celestial object'. It distinguishes from siblings like 'get_celestial_rise_set' (rise/set times) and 'get_constellation' (constellation identification) by focusing on positional calculations.
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?
The description implies usage when altitude/azimuth calculations are needed, but provides no explicit guidance on when to choose this tool versus alternatives like 'get_visible_planets' or 'get_celestial_rise_set'. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_celestial_rise_setB
Calculate the rise and set times of a celestial object.
Args: celestial_object: Name of object (e.g. "sun", "moon", "andromeda") lon: Observer longitude in degrees lat: Observer latitude in degrees time: Date string "YYYY-MM-DD HH:MM:SS" time_zone: IANA timezone string
Returns: Dict with keys "data", "_meta". "data" contains "rise_time" and "set_time".
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| time | Yes | ||
| time_zone | Yes | ||
| celestial_object | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 of behavioral disclosure. It states what the tool does but lacks critical behavioral details: it doesn't specify error handling (e.g., invalid object names), computational limits (e.g., date ranges), or authentication requirements. For a calculation tool with 5 required parameters, this leaves significant gaps in understanding how it behaves in edge cases.
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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by structured sections for Args and Returns. Every sentence earns its place by providing essential information, though the Returns section could be slightly more concise by omitting obvious keys like '_meta' if not critical.
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?
Given the complexity (5 required parameters, no annotations, but with an output schema), the description is moderately complete. The output schema reduces the need to explain return values in detail, but the description lacks context on prerequisites (e.g., valid object names), error cases, or performance considerations, which are important for a calculation tool with multiple inputs.
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?
Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics by explaining each parameter: 'celestial_object' with examples ('sun', 'moon', 'andromeda'), 'lon'/'lat' as observer coordinates in degrees, 'time' as a date string with format, and 'time_zone' as IANA string. This clarifies usage beyond the bare schema, though it could benefit from more detail on valid object names or coordinate ranges.
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's purpose with a specific verb ('Calculate') and resource ('rise and set times of a celestial object'). It distinguishes from siblings like 'get_celestial_pos' (position) and 'get_moon_info' (moon-specific details) by focusing on temporal events rather than positional or informational data.
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?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_moon_info' (which might include rise/set times for the moon) or 'get_visible_planets' (which might list visible objects), leaving the agent to infer usage context without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_constellationA
Get the position (altitude/azimuth) of the center of a constellation.
Args: constellation_name: Name of constellation (e.g. "Orion", "Ursa Major") lon: Observer longitude in degrees lat: Observer latitude in degrees time: Observation time string "YYYY-MM-DD HH:MM:SS" time_zone: IANA timezone string
Returns: Dict with keys "data", "_meta". "data" contains name, altitude, azimuth.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| time | Yes | ||
| time_zone | Yes | ||
| constellation_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully bears the responsibility. It discloses the tool is a read operation returning altitude, azimuth, and metadata. It does not mention edge cases or error handling, but the return structure is clearly stated and aligns with typical query tools.
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 concise with a clear Purpose line, followed by structured Args and Returns sections. Every sentence adds value without redundancy, and it is well front-loaded.
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?
Given the tool's moderate complexity (5 params, no annotations, output schema exists), the description covers inputs and output adequately. It lacks guidance on default values or error scenarios, but the output schema presumably fills in return details. Sibling differentiation is missing.
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?
Schema description coverage is 0%, yet the description defines all 5 parameters with examples (e.g., 'Orion', degrees format, ISO time, IANA timezone). This adds significant meaning beyond the bare schema types.
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 retrieves the position (altitude/azimuth) of a constellation center. It specifies the verb 'Get' and the resource 'position', distinguishing it from siblings like get_celestial_pos or list_visible_planets which target different celestial objects or properties.
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?
The description explains inputs and output but does not explicitly guide when to use this tool versus alternatives like get_celestial_pos or get_celestial_rise_set. Usage is implied by the constellation-specific focus, but no conditions or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_local_datetime_infoA
Retrieve the current datetime and timezone.
Returns: Dict with keys "data", "_meta". "data" contains "current_time" (ISO string).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool returns (a dict with specific keys) but doesn't mention whether this is a read-only operation, if it requires authentication, or if there are rate limits. It provides basic output structure but lacks deeper behavioral context.
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 perfectly concise and well-structured: a clear purpose statement followed by return format details. Every sentence earns its place with no wasted words, and the information is front-loaded appropriately for quick understanding.
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?
Given the tool's simplicity (zero parameters, has output schema), the description is reasonably complete. It explains what the tool does and what it returns, though it could benefit from more behavioral context (like whether it's read-only or has any limitations). The output schema existence reduces the need for detailed return value explanation.
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 (schema coverage 100%), so the description doesn't need to explain any inputs. The baseline for zero parameters is 4, as there's no parameter information to add beyond what the schema already indicates (no properties).
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's purpose with specific verbs ('retrieve') and resources ('current datetime and timezone'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_celestial_pos' or 'get_weather_by_position' that also provide time-related data, which prevents 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?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_celestial_pos' that might include timezone data, there's no indication of when this specific datetime retrieval is preferred or what its limitations are, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_moon_infoA
Get detailed information about the Moon's phase and position.
When lat and lon are provided, also returns the Moon's local
altitude and azimuth relative to the observer.
Args: time: Date string "YYYY-MM-DD HH:MM:SS" time_zone: IANA timezone string lat: Observer latitude in degrees (optional, for local position) lon: Observer longitude in degrees (optional, for local position)
Returns: Dict with keys "data", "_meta". "data" contains illumination, phase_name, age_days, elongation, earth_distance, and optionally altitude/azimuth.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lon | No | ||
| time | Yes | ||
| time_zone | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that providing lat/lon enhances output with local altitude/azimuth, and specifies return dict structure. Without annotations, this provides adequate behavioral context, though no mention of error conditions or rate limits.
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?
Well-structured with separate sections for intro, parameter explanations, and return info. Slightly verbose in places but overall efficient and front-loaded with purpose.
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?
Covers all key aspects: purpose, parameters, optional behavior, and return structure. With output schema present, the description is sufficiently complete for a tool with moderate complexity.
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?
With 0% schema coverage, description fully compensates by providing format (YYYY-MM-DD HH:MM:SS), type (IANA timezone), purpose (observer lat/lon for local position), and optionality. Adds meaning well beyond schema.
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?
Clearly states verb 'Get' and resource 'detailed information about the Moon's phase and position', distinguishing it from sibling tools like get_celestial_pos which cover other celestial bodies.
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?
Implies use when moon data is needed, but does not explicitly contrast with alternatives (e.g., get_celestial_rise_set for rise/set times, list_visible_planets for planets). No 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nightly_forecastA
Get a curated list of best objects to view for the night.
Args: lon: Observer longitude in degrees lat: Observer latitude in degrees time: Date string "YYYY-MM-DD HH:MM:SS" (Time of observation, or just date) time_zone: IANA timezone string limit: Max number of deep-sky objects to return (default 20)
Returns: Dict with keys: - moon_phase: Moon details - planets: List of visible planets - deep_sky: Sorted list of deep sky objects (Messier/NGC)
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| time | Yes | ||
| limit | No | ||
| time_zone | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 discloses that the tool returns a dict with moon_phase, planets, and deep_sky, and that deep_sky is sorted. However, it doesn't mention data freshness or any constraints beyond parameters.
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 concise and well-structured: a one-line purpose, bullet points for parameters, and clear return format. Every sentence adds value without redundancy.
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?
Given the output schema exists and the description explains the return keys, the tool is completely specified. It covers the necessary context for an agent to decide and invoke 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 description adds detailed meaning for all 5 parameters, including latitude/longitude, date format, timezone string, and limit default. This far exceeds the input schema which only provides types and default, so it fully compensates for the 0% schema coverage.
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 it returns a curated list of best objects to view for the night, which distinguishes it from siblings like get_moon_info or list_visible_planets. The verb 'Get' and resource 'curated list' are specific.
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?
The description implies usage for nightly viewing recommendations by listing relevant parameters (lon, lat, time, time_zone). It doesn't explicitly state when not to use or mention alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shooting_planC
Generate a single-night astrophotography shooting plan.
Runs match_telescope_targets then generate_shooting_schedule, returning targets + moon + timed shooting slots in one response.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| time | Yes | ||
| limit | No | ||
| time_zone | No | UTC | |
| mount_type | No | equatorial | |
| aperture_mm | No | ||
| filter_type | No | ||
| min_altitude | No | ||
| barlow_factor | No | ||
| reducer_factor | No | ||
| focal_length_mm | Yes | ||
| sensor_width_mm | No | ||
| sensor_height_mm | No | ||
| sensor_pixel_size_um | No | ||
| central_obstruction_pct | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It mentions running two internal functions but does not state whether the tool is read-only, has side effects, or requires specific permissions. Insufficient for a mutation-aware agent.
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?
Two sentences that are front-loaded with the core purpose and a brief internal workflow description. No wasted words.
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 16 parameters and no schema descriptions, the description is too sparse to fully inform an agent. Even though an output schema exists, the input parameters remain undocumented, which is a significant gap for a complex astrophotography tool.
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?
Schema description coverage is 0%, and the description does not elaborate on any parameter beyond implicit context (location, time, focal length). Agent has no guidance on parameter meanings or constraints.
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?
Clearly states it generates a single-night astrophotography shooting plan and specifies the returned elements (targets, moon, timed shooting slots). Implicitly differentiates from sibling tools like get_telescope_targets by mentioning it runs two internal processes.
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 explicit guidance on when to use this tool or alternatives. Does not mention prerequisites or exclusions, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_telescope_targetsA
Recommend astrophotography targets for a telescope setup.
Given a telescope/camera configuration and observing location+time, returns a ranked list of deep-sky objects best suited for imaging.
Args: focal_length_mm: Telescope focal length in mm (e.g. 250 for RedCat51) lon: Observer longitude in degrees lat: Observer latitude in degrees time: Observation time string "YYYY-MM-DD HH:MM:SS" time_zone: IANA timezone string (e.g. "Asia/Shanghai", "UTC") aperture_mm: Telescope aperture in mm (optional, for limiting magnitude) sensor_width_mm: Camera sensor width in mm (optional) sensor_height_mm: Camera sensor height in mm (optional) sensor_pixel_size_um: Camera pixel size in microns (optional) central_obstruction_pct: Central obstruction percentage (0-50) reducer_factor: Focal reducer factor (default 1.0) barlow_factor: Barlow/extender factor (default 1.0) mount_type: "equatorial" or "altaz" (default "equatorial") filter_type: Filter type — "Hα", "OIII", "SII", or None for LRGB limit: Maximum number of targets to return (default 20)
Returns: Dict with "data" containing a sorted list of telescope targets. Each target includes suitability_score, fov_fit_score, surface_brightness, filter_match_score, and mosaic_recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| time | Yes | ||
| limit | No | ||
| time_zone | Yes | ||
| mount_type | No | equatorial | |
| aperture_mm | No | ||
| filter_type | No | ||
| barlow_factor | No | ||
| reducer_factor | No | ||
| focal_length_mm | Yes | ||
| sensor_width_mm | No | ||
| sensor_height_mm | No | ||
| sensor_pixel_size_um | No | ||
| central_obstruction_pct | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 discloses that the tool returns a ranked list with suitability scores and describes the output structure. However, it does not mention any side effects, authentication needs, rate limits, or limitations (e.g., dependency on input accuracy). The behavioral transparency is good but not exhaustive.
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 well-structured with a clear purpose, then 'Args' and 'Returns' sections. It is somewhat lengthy due to the detailed parameter list, but every sentence adds value. The front-loading of the purpose sentence is good. Minor redundancy could be trimmed, but overall it is appropriately sized for a complex tool.
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?
Given the tool's complexity (15 parameters, no schema descriptions, no annotations, but with an output schema), the description is remarkably complete. It explains all parameters, the return value structure with key fields (suitability_score, fov_fit_score, etc.), and assumes the output schema covers additional details. It lacks error handling guidance but meets the bar for a recommendation tool.
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 input schema has 0% description coverage, but the description provides detailed, clear explanations for every parameter, including examples (e.g., 'focal_length_mm: Telescope focal length in mm (e.g. 250 for RedCat51)') and context. This adds significant meaning beyond the schema's type/default information, fully compensating for the lack of schema descriptions.
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's purpose: 'Recommend astrophotography targets for a telescope setup.' It uses a specific verb ('Recommend') and specifies the resource ('astrophotography targets for a telescope setup'). Among sibling tools like 'get_best_stargazing_plan' and 'get_shooting_plan', this tool's focus on telescope-specific recommendations distinguishes it well.
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?
The description implies usage context (when you have a telescope setup and want target recommendations) but does not provide explicit guidance on when to use this tool versus siblings like 'get_best_stargazing_plan' or 'get_shooting_plan'. No exclusions or alternatives are mentioned, which leaves some ambiguity for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tool_catalogA
Get metadata for all registered MCP tools.
Returns: Dict with keys "data", "_meta". "data" contains a list of tool metadata objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the return structure (dict with 'data' and '_meta' keys), which adds transparency. However, it does not mention potential limitations or safety aspects.
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 extremely concise: two sentences, front-loaded with the primary purpose, and no wasted words. Every sentence adds 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?
Given it is a parameterless tool with an output schema, the description is sufficient. It explains what the tool returns, and the schema covers the rest. No missing details for its simplicity.
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?
There are no parameters (0 params), so baseline 4 applies. The description does not need to add parameter information as the schema is empty.
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 verb 'Get' and the resource 'metadata for all registered MCP tools'. It distinguishes itself from sibling tools that are weather/astronomy related, indicating a separate purpose.
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 explicit guidance on when to use or alternatives is provided. The usage is implied as a catalog lookup, but lacks exclusions or context compared to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weather_by_nameA
通过地点名称获取综合天气(当前 + 小时预报 + 日预报)。
Geocoding uses Amap Geocoding API (CJK) → Photon → Nominatim cascade. Weather data is aggregated from multiple providers with graceful fallback — open-meteo is always available without an API key.
中文地名提示:建议使用完整行政区划名称,如 "浙江安吉"、"杭州西湖区"。
高德地理编码 API 会正确解析到对应的行政区(如安吉县),而非 POI 商铺。
需要精确定位时优先使用 get_weather_by_position(lat, lon)。
Args: place_name: 地点名称。中文请使用完整行政区划(如 "浙江省安吉县"),避免仅用2-3字短名。 provider: provider 模式,可选 all/qweather/open-meteo/wttr。
Returns: Dict,包含 keys: "data", "_meta"(成功时)或 "error", "_meta"(失败时)。
| Name | Required | Description | Default |
|---|---|---|---|
| provider | No | all | |
| place_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses geocoding cascade (Amap → Photon → Nominatim) and weather data aggregation with fallback to open-meteo without API key. Good transparency, but lacks details on rate limits or real-time behavior.
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?
Well-structured: starts with purpose, then geocoding details, Chinese tips, and parameter descriptions. Somewhat lengthy but each sentence adds value. Minor redundancy in Chinese text could be trimmed.
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?
Covers key aspects: purpose, geocoding, provider options, and return keys. However, return values are only listed as keys without types or examples; no output schema. Could explain what 'all' provider includes and the structure of _meta. Given complexity, slight gaps.
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?
Schema has 0% coverage; description adds full meaning: explains place_name should use full administrative divisions for Chinese, and provider lists valid options (all, qweather, open-meteo, wttr). Adds significant value beyond schema.
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?
Description explicitly states the tool gets comprehensive weather by place name (current + hourly + daily). Distinct from sibling get_weather_by_position by advising use of that tool for precise location. Clear and specific.
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?
Provides clear context on when to use this tool vs get_weather_by_position, and gives tips for Chinese place names (use full administrative divisions). No explicit when-not to use, but alternative is mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weather_by_positionA
通过经纬度获取综合天气(当前 + 小时预报 + 日预报)。
Weather data is aggregated from multiple providers with graceful fallback — open-meteo is always available without an API key.
Args: lat: 纬度 lon: 经度 provider: provider 模式,可选 all/qweather/open-meteo/wttr。
Returns: Dict,包含 keys: "data", "_meta"(成功时)或 "error", "_meta"(失败时)。
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| provider | No | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the aggregation and fallback behavior, and the return structure with success and error keys. With no annotations, this provides useful transparency, though it lacks details on data freshness, units, or rate limits.
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 moderately concise with a clear summary line and structured Args/Returns sections. It avoids verbosity, though the mix of languages and detailed sections adds some length.
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?
Given no output schema, the description covers return values and error structure. It explains key behavioral aspects and parameters. Minor gaps remain (coordinate range, units), but overall adequate for a weather tool.
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 input schema has 0% description coverage, but the description explains each parameter: lat/lon as coordinates and provider with possible values (all/qweather/open-meteo/wttr), fully compensating for the schema's lack of descriptions.
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 verb 'get' and the resource 'weather by position', and specifies the scope (current, hourly, daily) and aggregation with fallback. It distinguishes from siblings like get_weather_by_name which is for city names.
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?
The description implies usage for coordinate-based queries and notes that open-meteo requires no API key, but it does not explicitly state when to use this tool over alternatives or provide exclusions. Sibling tool get_weather_by_name exists but no comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
light_pollution_mapA
Get light pollution data for a specific area.
Returns a grid of light pollution data points including brightness, Bortle class, and SQM.
Args: south, west, north, east: Bounding box coordinates. zoom: Grid resolution zoom level (default: 10). Higher = more detailed.
| Name | Required | Description | Default |
|---|---|---|---|
| east | Yes | ||
| west | Yes | ||
| zoom | No | ||
| north | Yes | ||
| south | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions the return type (grid of data points) but does not disclose other behavioral aspects like rate limits, required permissions, or read-only nature. Since no annotations exist, the description should provide more context.
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 succinct, with a clear purpose sentence followed by parameter explanations. No superfluous content.
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 description covers all parameters and indicates the output data types. With an output schema present, it does not need to detail return structure further. Minor omission: coordinate system not specified.
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 description explains the bounding box parameters and the zoom default, compensating for the 0% schema description coverage. It adds meaning beyond the schema by stating 'Bounding box coordinates' and the effect of higher zoom.
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 light pollution data for an area and lists the data points (brightness, Bortle class, SQM). It is distinct from sibling tools which focus on celestial positions, weather, etc.
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?
The description does not provide explicit guidance on when to use this tool versus alternatives. It only states what it does, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_visible_planetsA
Get a list of solar system planets currently visible (above horizon).
Args: lon: Observer longitude in degrees lat: Observer latitude in degrees time: Observation time string "YYYY-MM-DD HH:MM:SS" time_zone: IANA timezone string
Returns: Dict with keys "data", "_meta". "data" is a list of planet dicts (name, altitude, azimuth).
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| time | Yes | ||
| time_zone | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. The description includes the return format (dict with 'data' and '_meta' keys, data is a list of planet dicts with name, altitude, azimuth) which adds transparency. However, it does not disclose potential side effects, error handling, or limits (e.g., rate limiting, data freshness).
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 concise and well-structured, with a clear one-line purpose followed by a bulleted list for Args and Returns. No redundant words or sentences.
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?
Given the existence of an output schema, the description does not need to explain return values in full detail but still provides a helpful overview. The tool has 4 required parameters with clear descriptions. Minor improvement: could mention that only planets are included, or what altitude/azimuth mean, but overall adequate.
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 description provides meaningful parameter explanations beyond the input schema, including units for lon/lat (degrees), time format (YYYY-MM-DD HH:MM:SS), and timezone type (IANA). This compensates for the 0% schema description coverage. Each parameter is clearly described in the Args section.
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 a list of solar system planets currently visible above horizon, using a specific verb 'get' and resource 'list of solar system planets'. This distinguishes it from sibling tools like get_celestial_pos which likely retrieves positions of arbitrary celestial objects.
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 usage guidelines are provided. The description does not mention when to use this tool vs alternatives, nor any prerequisites or conditions. For example, it does not clarify that this tool only returns planets (not stars or other objects) or that it requires valid observer coordinates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct aspect of stargazing: celestial positions, moon/planet info, weather, light pollution, area analysis, and planning. Overlaps are minimal and descriptions clearly differentiate them.
Tool names follow a consistent verb_noun pattern (get_*, list_*) with snake_case. The few exceptions like 'analysis_area' and 'light_pollution_map' still adhere to the pattern and are descriptive.
15 tools is well-scoped for a stargazing server, covering essential functions without being too many or too few. Each tool serves a clear purpose.
The server covers the full stargazing workflow: location analysis, weather, light pollution, celestial positions, visibility, moon/planet info, nightly forecasts, and planning for both casual and astrophotography use.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Astronomy: sun, moon, planet, eclipse, twilight and star position calculations.
Offline observational astronomy: positions, rise/set, moon phases, eclipses, and seasons.
Western, Vedic, and Chinese astrology calculations, charts, forecasts, and geocoding.
Moon phases, moon signs, full/new moon dates 1900-2100, moonrise/moonset for any coordinates.
Related MCP Servers
- FlicenseAqualityDmaintenanceProvides altitude-azimuth coordinates for celestial objects including planets, over 117,000 stars, and 14,000 deep sky objects based on system time and configurable location.31
- FlicenseNot gradedqualityDmaintenanceEnables satellite orbital mechanics calculations including visibility predictions, access window analysis, and TLE generation from natural language descriptions. Supports 200+ world cities and multiple orbit types (LEO, MEO, GEO, SSO, Molniya, Polar).
- AlicenseAqualityAmaintenanceProvides authoritative astronomical data including moon phases, solar eclipses, and sun/moon rise and set times using the US Navy API or offline Skyfield calculations. It enables users to query Earth's seasons and celestial events for any location and date.81Apache 2.0
- FlicenseAqualityDmaintenanceProvides astronomical calculations using the Swiss Ephemeris library, including planetary positions, houses, chart points, and asteroids for any date and location.48
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/StarGazer1995/mcp-stargazing'
If you have feedback or need assistance with the MCP directory API, please join our Discord server