search_package
Search for packages across PyPI, npm, crates.io, and Terraform Registry. Specify the index and query to retrieve results efficiently, with optional limits for precise filtering.
Instructions
Search for packages in package indices (PyPI, npm, crates.io, Terraform Registry)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Package index to search (pypi, npm, crates, terraform) | |
| limit | No | Maximum number of results to return | |
| query | Yes | Package name or search query |
Implementation Reference
- src/mcp_server_pacman/server.py:231-273 (handler)The main handler logic for the 'search_package' tool within the @server.call_tool() function. It validates input using PackageSearch model, dispatches to provider-specific search functions based on 'index', formats results as JSON text, and returns them.if name == "search_package": try: args = PackageSearch(**arguments) logger.debug(f"Validated search package args: {args}") except ValueError as e: logger.error(f"Invalid search package parameters: {str(e)}") raise McpError(ErrorData(code=INVALID_PARAMS, message=str(e))) if args.index == "pypi": logger.info(f"Searching PyPI for '{args.query}' (limit={args.limit})") results = await search_pypi(args.query, args.limit) elif args.index == "npm": logger.info(f"Searching npm for '{args.query}' (limit={args.limit})") results = await search_npm(args.query, args.limit) elif args.index == "crates": logger.info( f"Searching crates.io for '{args.query}' (limit={args.limit})" ) results = await search_crates(args.query, args.limit) elif args.index == "terraform": logger.info( f"Searching Terraform Registry for '{args.query}' (limit={args.limit})" ) results = await search_terraform_modules(args.query, args.limit) else: logger.error(f"Unsupported package index: {args.index}") raise McpError( ErrorData( code=INVALID_PARAMS, message=f"Unsupported package index: {args.index}", ) ) logger.info( f"Found {len(results)} results for '{args.query}' on {args.index}" ) return [ TextContent( type="text", text=f"Search results for '{args.query}' on {args.index}:\n{json.dumps(results, indent=2)}", ) ]
- Pydantic model defining the input schema for the 'search_package' tool: index (one of pypi/npm/crates/terraform), required query string, and optional limit (1-49, default 5).class PackageSearch(BaseModel): """Parameters for searching a package index.""" index: Annotated[ Literal["pypi", "npm", "crates", "terraform"], Field(description="Package index to search (pypi, npm, crates, terraform)"), ] query: Annotated[str, Field(description="Package name or search query")] limit: Annotated[ int, Field( default=5, description="Maximum number of results to return", gt=0, lt=50, ), ]
- src/mcp_server_pacman/server.py:70-74 (registration)Tool registration in the @server.list_tools() function, defining the name, description, and input schema reference.Tool( name="search_package", description="Search for packages in package indices (PyPI, npm, crates.io, Terraform Registry)", inputSchema=PackageSearch.model_json_schema(), ),