Skip to main content

Architecture: ADR: MCP ArgoCD Pagination Implementation

Date: 2025-11-05

Changes Made​

1. Applications (api_v1_applications.py)​

Function: list_applications()

New Parameters:

  • page (int, default=1): Page number (1-indexed)
  • page_size (int, default=20, max=100): Items per page

Response Structure:

{
"items": [...], // Only 20 items instead of 819
"pagination": {
"page": 1,
"page_size": 20,
"total_items": 819,
"total_pages": 41,
"has_next": true,
"has_prev": false,
"showing_from": 1,
"showing_to": 20
},
"summary_only": true
}

2. Projects (api_v1_projects.py)​

Function: project_list()

New Parameters:

  • page (int, default=1)
  • page_size (int, default=20, max=100)
  • Removed old limit parameter

Same pagination structure as applications

3. Application Sets (api_v1_applicationsets.py)​

Function: applicationset_list()

New Parameters:

  • page (int, default=1)
  • page_size (int, default=20, max=100)

Same pagination structure as applications

4. Clusters (api_v1_clusters.py)​

Function: cluster_service__list()

New Parameters:

  • summary_only (bool, default=True): New addition for clusters
  • page (int, default=1)
  • page_size (int, default=20, max=100)

Same pagination structure as applications

Key Features​

Pagination Logic​

  1. Page bounds checking: Returns error if page > total_pages
  2. Page size limits: Enforces max 100 items per page
  3. Metadata included: Every response includes pagination info
  4. Zero-based safe: Handles empty results gracefully

Benefits​

  1. Memory control: Returns max 100 items instead of 800+
  2. Consistent API: All list operations use same pagination structure
  3. Client-friendly: Provides has_next/has_prev for UI navigation
  4. Backward compatible: Default values maintain similar behavior

Example Usage​

# Get first page (default)
result = await list_applications()
# Returns items 1-20 of 819

# Get second page
result = await list_applications(page=2)
# Returns items 21-40 of 819

# Get more items per page
result = await list_applications(page=1, page_size=50)
# Returns items 1-50 of 819

# Navigate using metadata
if result["pagination"]["has_next"]:
next_page = result["pagination"]["page"] + 1
next_result = await list_applications(page=next_page)

Next Steps​

  1. ✅ Pagination implemented for all list operations
  2. ⏳ TODO: Implement unified search tool for keyword-based filtering
  3. ⏳ TODO: Update ArgoCD agent system prompt to use pagination
  4. ⏳ TODO: Test all endpoints with updated pagination
  5. ⏳ TODO: Verify OOM is resolved with real workload

Files Modified​

  1. ai_platform_engineering/agents/argocd/mcp/mcp_argocd/tools/api_v1_applications.py
  2. ai_platform_engineering/agents/argocd/mcp/mcp_argocd/tools/api_v1_projects.py
  3. ai_platform_engineering/agents/argocd/mcp/mcp_argocd/tools/api_v1_applicationsets.py
  4. ai_platform_engineering/agents/argocd/mcp/mcp_argocd/tools/api_v1_clusters.py