mcp-stargazing
mcp-stargazing
计算地球上任何位置的天体(太阳、月球、行星、恒星和深空天体)的高度、升起和落下时间,并提供可选的光污染分析功能。
功能特性
高度/方位角计算:获取任何天体的仰角和罗盘方位。
升起/落下时间:确定天体何时出现在地平线上方或消失在地平线下方。
光污染分析:加载并分析光污染地图(GeoTIFF 格式)。
代码执行就绪:
可序列化返回:所有工具均返回 JSON 可序列化数据(日期使用 ISO 字符串),便于 LLM 直接使用。
分页支持:
analysis_area支持分页(page、page_size),以高效处理大型数据集。标准化响应:统一的响应格式
{ "data": ..., "_meta": ... },以实现更好的可观测性和错误处理。
性能:
异步执行:非阻塞式天体计算。
缓存:针对 Simbad 查询和区域分析的智能缓存。
代理支持:原生支持 HTTP/HTTPS 代理(适用于下载天文数据)。
时区感知:支持本地时间或 UTC 时间。
数据驱动:内置 10,000 多个深空天体(梅西耶和 NGC 天体)数据库,用于智能推荐。
Related MCP server: Satellite MCP Server
安装
本项目使用 uv 进行依赖管理。
本地安装
安装
uv:pip install uv同步依赖:
uv sync这将在
.venv中创建一个虚拟环境并安装pyproject.toml中定义的所有依赖项。激活环境:
source .venv/bin/activate初始化数据(夜间规划器必需): 这将下载最新的梅西耶和 NGC 星表数据到
src/data/objects.json。python scripts/download_data.py注意:如果您位于防火墙后,请确保在运行此脚本前设置了
HTTP_PROXY环境变量。
Docker 安装
您也可以使用 Docker 运行服务器,它会自动处理所有依赖项和数据初始化。
构建镜像:
docker build -t mcp-stargazing .注意:如果您位于代理服务器后,请在构建时传入代理 URL:
docker build --build-arg HTTP_PROXY=http://127.0.0.1:7890 -t mcp-stargazing .运行容器:
# Basic run (SHTTP mode on port 3001) docker run -p 3001:3001 mcp-stargazing # With Environment Variables docker run -p 3001:3001 \ -e QWEATHER_API_KEY=your_key \ -e STARGAZING_DB_CONFIG=your_db_config \ mcp-stargazing
MCP 服务器使用
启动 MCP 服务器,向 AI 智能体或其他客户端公开工具。
1. 环境设置
创建 .env 文件或导出变量:
# 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. 启动服务器
流式 HTTP (SHTTP) 模式(推荐大多数智能体使用):
# 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 模式:
python -m src.main --mode sse --port 3001 --path /sse3. 响应格式
所有工具均以标准化的 JSON 格式返回数据:
{
"data": {
// Tool-specific return data
"altitude": 45.5,
"azimuth": 180.0
},
"_meta": {
"version": "1.0.0",
"status": "success"
}
}4. 可用工具
get_celestial_pos:计算高度/方位角。get_celestial_rise_set:计算升起/落下时间(返回 ISO 字符串)。get_moon_info:详细的月相、光照度和月龄信息。get_visible_planets:列出当前在地平线上方的所有行星及其位置。get_constellation:查找星座中心的位置(高度/方位角)。get_nightly_forecast:智能规划器,返回今晚最佳观测天体列表(行星 + 深空天体)。get_weather_by_name/get_weather_by_position:获取当前天气。get_local_datetime_info:获取当前本地时间信息。analysis_area:查找区域内最佳观星点。输入:
top_left(左上角)、bottom_right(右下角)、time、page、page_size。返回:包含观测条件的地点列表,以及分页元数据(
total、resource_id)。
示例
夜间规划器:
python examples/nightly_forecast_demo.py显示今晚可见的行星和深空天体精选列表,并考虑了月光影响。
可见行星:
python examples/visible_planets_demo.py列出当前可见的行星。
月球信息:
python examples/moon_phase_demo.py打印 30 天的月相日历。
编排:
python examples/code_execution_orchestration.py演示完整工作流:获取时间 -> 获取天体位置 -> 检查天气 -> 查找地点。
展示如何以编程方式处理标准化响应格式。
分页:
python examples/pagination_demo.py演示如何使用
resource_id分页获取大量结果集。
项目结构
项目采用模块化设计,以实现更好的可维护性和代码执行支持:
.
├── src/
│ ├── functions/ # Tool implementations grouped by domain
│ │ ├── celestial/ # Celestial calculations (pos, rise/set)
│ │ ├── weather/ # Weather API integration
│ │ ├── places/ # Location and area analysis
│ │ └── time/ # Time utilities
│ ├── 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 # Grid analysis logic
│ └── qweather_interaction.py # Weather API client
├── tests/ # Unified test suite
│ ├── test_celestial.py
│ ├── test_weather.py
│ ├── test_serialization.py # Validates JSON return formats
│ └── test_integration.py # End-to-end flow tests
├── examples/ # Usage examples
├── docs/ # Documentation and improvement plans
└── pyproject.toml # Project configuration and dependencies测试
运行统一测试套件:
pytest tests/关键测试包括:
test_serialization.py:确保所有工具返回具有正确模式的有效 JSON。test_integration.py:模拟外部 API 以验证整个工具链。
贡献
遵循 Code Execution with MCP 的最佳实践。
确保所有新工具使用
src.response.format_response返回标准 JSON 响应。为任何新功能在
tests/中添加测试。
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.7.0- Added
get_shooting_plan - Added
get_telescope_targets
1 tool update
v1.0.1- Changed
get_moon_info2 fields changed- added
Input schema / properties / latAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / lonAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null +}
1 tool update
v0.4.0- Added
get_best_stargazing_plan
2 tool updates
v0.3.2- Changed
get_weather_by_name1 field changed- added
Input schema / properties / providerAdded value: +{ + "default": "all", + "type": "string" +}
- Changed
get_weather_by_position1 field changed- added
Input schema / properties / providerAdded value: +{ + "default": "all", + "type": "string" +}
3 tool updates
v0.3.0- Added
get_tool_catalog - Removed
get_visible_planets - Added
list_visible_planets
11 tool updates
v1.0.0- First observed
analysis_area - First observed
get_celestial_pos - First observed
get_celestial_rise_set - First observed
get_constellation - First observed
get_local_datetime_info - First observed
get_moon_info - First observed
get_nightly_forecast - First observed
get_visible_planets - First observed
get_weather_by_name - First observed
get_weather_by_position - First observed
light_pollution_map
TDQS
Scored across 15 tools
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
Related MCP Connectors
Elevation-corrected sun, moon, twilight, solar and tide data for any point on Earth
Offline observational astronomy: positions, rise/set, moon phases, eclipses, and seasons.
Read-only astronomy calculations: sun, moon, planets, eclipses, twilight and star positions.
Swiss Ephemeris for AI agents: exact natal charts, transits, synastry and birth-place resolution
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).-
- AlicenseAqualityFmaintenanceProvides 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.410-