pypi-query-mcp/pypi_query_mcp/prompts/package_analysis.py
longhao e481711053 feat: add MCP prompt templates for PyPI package analysis and decision-making
- Add comprehensive prompt templates for package analysis, dependency management, and migration planning
- Implement 8 prompt templates covering quality analysis, package comparison, alternatives suggestion, dependency conflicts, version upgrades, security audits, and migration planning
- Add detailed documentation in PROMPT_TEMPLATES.md with usage examples
- Include demo script and test coverage for prompt template functionality
- Update README.md to highlight new prompt template features
- Templates provide structured guidance for common PyPI package scenarios

Signed-off-by: longhao <hal.long@outlook.com>
2025-05-29 18:47:15 +08:00

204 lines
6.1 KiB
Python

"""Package analysis prompt templates for PyPI MCP server."""
from typing import Annotated, Literal
from fastmcp import Context
from pydantic import Field
class Message:
"""Simple message class for prompt templates."""
def __init__(self, text: str, role: str = "user"):
self.text = text
self.role = role
async def analyze_package_quality(
package_name: Annotated[str, Field(description="Name of the PyPI package to analyze")],
version: Annotated[str | None, Field(description="Specific version to analyze")] = None,
ctx: Context | None = None,
) -> list[Message]:
"""Generate a comprehensive package quality analysis prompt.
This prompt template helps analyze a Python package's quality, maintenance status,
security, performance, and overall suitability for use in projects.
"""
version_text = f" version {version}" if version else ""
return [
Message(
f"""Please provide a comprehensive quality analysis of the Python package '{package_name}'{version_text}.
Analyze the following aspects:
## 📊 Package Overview
- Package purpose and functionality
- Current version and release history
- Maintenance status and activity
## 🔧 Technical Quality
- Code quality indicators
- Test coverage and CI/CD setup
- Documentation quality
- API design and usability
## 🛡️ Security & Reliability
- Known security vulnerabilities
- Dependency security assessment
- Stability and backward compatibility
## 📈 Community & Ecosystem
- Download statistics and popularity
- Community support and contributors
- Issue resolution and responsiveness
## 🎯 Recommendations
- Suitability for production use
- Alternative packages to consider
- Best practices for integration
Please provide specific examples and actionable insights where possible."""
)
]
async def compare_packages(
packages: Annotated[
list[str],
Field(description="List of package names to compare", min_length=2, max_length=5)
],
use_case: Annotated[
str,
Field(description="Specific use case or project context for comparison")
],
criteria: Annotated[
list[str] | None,
Field(description="Specific criteria to focus on (e.g., performance, security, ease of use)")
] = None,
ctx: Context | None = None,
) -> list[Message]:
"""Generate a detailed package comparison prompt.
This prompt template helps compare multiple Python packages to determine
the best choice for a specific use case.
"""
packages_text = ", ".join(f"'{pkg}'" for pkg in packages)
criteria_text = ""
if criteria:
criteria_text = f"\n\nFocus particularly on these criteria: {', '.join(criteria)}"
return [
Message(
f"""Please provide a detailed comparison of these Python packages: {packages_text}
## 🎯 Use Case Context
{use_case}{criteria_text}
## 📋 Comparison Framework
For each package, analyze:
### Core Functionality
- Feature completeness for the use case
- API design and ease of use
- Performance characteristics
### Ecosystem & Support
- Documentation quality
- Community size and activity
- Learning resources availability
### Technical Considerations
- Dependencies and compatibility
- Installation and setup complexity
- Integration with other tools
### Maintenance & Reliability
- Release frequency and versioning
- Bug fix responsiveness
- Long-term viability
## 🏆 Final Recommendation
Provide a clear recommendation with:
- Best overall choice and why
- Specific scenarios where each package excels
- Migration considerations if switching between them
Please include specific examples and quantitative data where available."""
)
]
async def suggest_alternatives(
package_name: Annotated[str, Field(description="Name of the package to find alternatives for")],
reason: Annotated[
Literal["deprecated", "security", "performance", "licensing", "maintenance", "features"],
Field(description="Reason for seeking alternatives")
],
requirements: Annotated[
str | None,
Field(description="Specific requirements or constraints for alternatives")
] = None,
ctx: Context | None = None,
) -> list[Message]:
"""Generate a prompt for finding package alternatives.
This prompt template helps find suitable alternatives to a Python package
based on specific concerns or requirements.
"""
reason_context = {
"deprecated": "the package is deprecated or no longer maintained",
"security": "security vulnerabilities or concerns",
"performance": "performance issues or requirements",
"licensing": "licensing conflicts or restrictions",
"maintenance": "poor maintenance or lack of updates",
"features": "missing features or functionality gaps"
}
reason_text = reason_context.get(reason, reason)
requirements_text = f"\n\nSpecific requirements: {requirements}" if requirements else ""
return [
Message(
f"""I need to find alternatives to the Python package '{package_name}' because of {reason_text}.{requirements_text}
Please help me identify suitable alternatives by analyzing:
## 🔍 Alternative Discovery
- Popular packages with similar functionality
- Emerging or newer solutions
- Enterprise or commercial alternatives if relevant
## 📊 Alternative Analysis
For each suggested alternative:
### Functional Compatibility
- Feature parity with '{package_name}'
- API similarity and migration effort
- Unique advantages or improvements
### Quality Assessment
- Maintenance status and community health
- Documentation and learning curve
- Performance comparisons
### Migration Considerations
- Breaking changes from '{package_name}'
- Migration tools or guides available
- Estimated effort and timeline
## 🎯 Recommendations
Provide:
- Top 3 recommended alternatives ranked by suitability
- Quick migration path for the best option
- Pros and cons summary for each alternative
- Any hybrid approaches or gradual migration strategies
Please include specific examples of how to replace key functionality from '{package_name}'."""
)
]