Advanced Configuration
Advanced configuration options for performance optimization, cache strategies, and production deployments of the Augments MCP Server.
TTL Strategy Configuration
The server uses intelligent TTL strategies based on content stability and source characteristics.
Setting | Values | Description | Performance Impact |
---|---|---|---|
stable | 24 hours | Stable releases and production documentation | Low |
beta | 6 hours | Beta versions and pre-release documentation | Medium |
dev | 1 hour | Development branches and canary releases | High |
default | 3 hours | Fallback TTL for unclassified content | Medium |
Environment-Specific Cache Settings
Development Environment
Optimized for rapid iteration with short TTL values and local cache storage.
export AUGMENTS_CACHE_DIR="/tmp/augments-cache-dev"
export AUGMENTS_CACHE_TTL="60" # 1 minute for rapid testing
export GITHUB_TOKEN="ghp_dev_token"
# Optional: Development-specific overrides
export AUGMENTS_DEV_MODE="true"
export AUGMENTS_LOG_LEVEL="DEBUG"
Cache Storage Optimization
Memory Management
# Cache implementation details
class DocumentationCache:
def __init__(self, cache_dir: Optional[str] = None):
self.memory_cache: Dict[str, CacheEntry] = {}
self.cache_dir = Path(cache_dir or "~/.cache/augments-mcp-server").expanduser()
# Memory cache limits
self.max_memory_entries = 100
self.max_entry_size = 5 * 1024 * 1024 # 5MB per entry
Disk Storage Strategy
• Hierarchical storage: memory → disk → source
• Automatic cleanup of expired entries
• Compression for large documentation files
• Atomic writes to prevent corruption
Connection Pool Configuration
class GitHubClient:
def __init__(self, token: Optional[str] = None):
self.client = httpx.AsyncClient(
headers=self._get_headers(token),
timeout=30.0,
limits=httpx.Limits(
max_keepalive_connections=5,
max_connections=10,
keepalive_expiry=30.0
)
)
class WebsiteProvider:
def __init__(self):
self.client = httpx.AsyncClient(
headers={"User-Agent": "Augments-MCP-Server/1.0"},
timeout=30.0,
follow_redirects=True
)
Rate Limiting & Throttling
GitHub API Rate Limiting
# Rate limit tracking and management
async def _check_rate_limit(self) -> None:
if self.rate_limit_remaining <= 1:
if datetime.now() < self.rate_limit_reset:
wait_time = (self.rate_limit_reset - datetime.now()).total_seconds()
logger.warning("Rate limit exceeded, waiting", wait_seconds=wait_time)
await asyncio.sleep(wait_time)
# Minimum delay between requests (100ms)
time_since_last = (datetime.now() - self.last_request_time).total_seconds()
if time_since_last < 0.1:
await asyncio.sleep(0.1 - time_since_last)
Request Batching
• Popular frameworks are auto-cached on server startup
• Background tasks prevent blocking user requests
• Intelligent prefetching based on usage patterns
• Concurrent processing with asyncio task management
Auto-Caching Configuration
# Server startup auto-caching
async def _auto_cache_popular_frameworks():
popular_frameworks = [
"nextjs", "react", "tailwindcss",
"typescript", "shadcn-ui"
]
tasks = []
for framework_name in popular_frameworks:
config = await registry.get_framework_config(framework_name)
if config:
task = asyncio.create_task(
_cache_framework_documentation(config)
)
tasks.append(task)
# Execute all caching tasks concurrently
await asyncio.gather(*tasks, return_exceptions=True)
Timeout Configuration
Setting | Values | Description | Performance Impact |
---|---|---|---|
HTTP Timeout | 30 seconds | Maximum time for HTTP requests | High |
Connection Timeout | 5 seconds | Time to establish connections | Medium |
Keep-Alive Expiry | 30 seconds | Connection reuse duration | Low |
Read Timeout | 30 seconds | Time to read response data | Medium |
Failover & Retry Logic
Source Fallback Strategy
async def fetch_documentation(self, config: FrameworkConfig) -> str:
documentation_parts = []
# Try GitHub source first
if doc_source.github:
try:
github_content = await github_provider.fetch_documentation(...)
if github_content:
documentation_parts.append(github_content)
except Exception as e:
logger.warning("GitHub source failed, trying fallback", error=str(e))
# Fallback to website source
if doc_source.website and not documentation_parts:
try:
website_content = await website_provider.fetch_content(...)
if website_content:
documentation_parts.append(website_content)
except Exception as e:
logger.error("All sources failed", error=str(e))
return "\n\n".join(documentation_parts)
Exponential Backoff
• Initial retry delay: 1 second
• Maximum retries: 3 attempts
• Backoff multiplier: 2x per retry
• Circuit breaker for repeated failures
GitHub Token Management
Token Configuration
# Environment variable setup
export GITHUB_TOKEN="ghp_xxxxxxxxxxxxxxxxxxxx"
# Token permissions required:
# - public_repo (for public repository access)
# - metadata (for repository metadata)
# Rate limits with token:
# - 5000 requests per hour (vs 60 without token)
# - Higher concurrent connection limits
Token Rotation Strategy
• Use different tokens for different environments
• Implement token rotation for long-running deployments
• Monitor token usage and expiration dates
• Fallback to anonymous access if token is invalid
Request Headers & User Agents
class GitHubClient:
def _get_headers(self, token: Optional[str]) -> Dict[str, str]:
headers = {
"User-Agent": "Augments-MCP-Server/1.0",
"Accept": "application/vnd.github+json",
"X-GitHub-Api-Version": "2022-11-28"
}
if token:
headers["Authorization"] = f"Bearer {token}"
return headers
class WebsiteProvider:
def __init__(self):
self.headers = {
"User-Agent": "Augments-MCP-Server/1.0 (Documentation Fetcher)",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}
Structured Logging
import structlog
structlog.configure(
processors=[
structlog.dev.ConsoleRenderer()
],
wrapper_class=structlog.make_filtering_bound_logger(20), # INFO level
logger_factory=structlog.PrintLoggerFactory(),
cache_logger_on_first_use=True,
)
logger = structlog.get_logger(__name__)
# Usage examples
logger.info("Framework loaded", framework=framework_name, priority=config.priority)
logger.warning("Rate limit exceeded", remaining=rate_limit_remaining, reset_time=rate_limit_reset)
logger.error("Failed to fetch documentation", framework=framework_name, error=str(e))
Performance Metrics
Cache Statistics
def get_stats(self) -> Dict[str, Any]:
return {
"memory_entries": len(self.memory_cache),
"disk_entries": self._count_disk_entries(),
"disk_volume_bytes": self._calculate_disk_usage(),
"cache_directory": str(self.cache_dir),
"ttl_strategies": self.cache_ttl,
"hit_rate": self._calculate_hit_rate(),
"avg_response_time": self._get_avg_response_time()
}
Registry Statistics
def get_registry_stats(self) -> Dict[str, Any]:
return {
"total_frameworks": len(self.frameworks),
"frameworks_by_category": self._count_by_category(),
"average_priority": self._calculate_avg_priority(),
"source_distribution": self._analyze_sources(),
"last_reload_time": self.last_reload_time.isoformat(),
"failed_validations": len(self.validation_errors)
}
Health Check Endpoints
• Framework registry health and loaded framework count
• Cache system status and storage usage
• GitHub API connectivity and rate limit status
• Response time metrics and error rates
• Memory usage and connection pool status