A Model Context Protocol server providing tools to query package indices like PyPI, npm, and crates.io
The server provides 5 well-intentioned tools for package and container discovery across PyPI, npm, crates.io, Terraform Registry, and Docker Hub. Tool names follow the verb_noun pattern correctly (search_*, package_info, docker_image_info, terraform_module_latest_version). Schemas are present and properly structured using Pydantic models with type declarations and enums where appropriate. However, descriptions are generic and lack context about when to use each tool vs. alternatives. Parameter descriptions exist but are minimal (10-40 chars typical). Output schemas are not documented in the tool registrations, users cannot see what fields to expect in responses. Error handling is basic with no recovery guidance. The server lacks tool annotations (readOnlyHint, destructiveHint, idempotentHint) which would clarify intent for LLMs. Prompts are defined but are minimal and don't add coaching value.
Get detailed information about a specific Docker image
Get detailed information about a specific package
Search for Docker images in Docker Hub
Search for packages in package indices (PyPI, npm, crates.io, Terraform Registry)
Get the latest version of a Terraform module
Output schemas not documented. Tool registrations show input schemas (Pydantic models) but do NOT document what fields the response contains. LLMs cannot plan downstream tool calls or extract the correct data without knowing response structure.
Tool descriptions are under 50 characters and generic. Examples: 'Search for packages in package indices' (50 chars), 'Get detailed information about a specific package' (48 chars). No context on WHEN to use each tool, what distinguishes search_package from package_info, or common mistakes. Baseline for A-quality is 50-200 chars with actionable guidance.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | D | 56 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 56 | - | v1 |
Parameter descriptions are minimal (10-40 chars). Examples: 'Package index to search' (23 chars), 'Package name or search query' (27 chars). Missing context: should the query be a partial name match? Does it support regex? What is the actual API behavior for each index (PyPI vs npm vs crates have different search semantics)?
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All 5 tools are read-only discovery tools, marking them with readOnlyHint=true would signal to LLMs that they are safe to call speculatively and can be retried without side effects.
Error handling is not documented. No guidance on retryable vs. fatal errors, no user-fixable recovery hints. For example, if search_package('invalid-index') fails, the error response should say 'Invalid index. Must be one of: pypi, npm, crates, terraform' so the LLM can self-correct. Currently there is no evidence of this.
Result limiting not clearly communicated. search_package and search_docker_image accept a 'limit' parameter (default 5, max 49), but this is not emphasized in the description. LLMs may not understand why they cannot request 1000 results, and the max cap should be explained as a best practice for token efficiency.
terraform_module_latest_version has a different parameter name structure ('name' instead of 'module_name' or 'module'). This inconsistency with package_info and other lookups (which use 'name' but accept different formats) may confuse LLMs about what format is expected.