MCP Ambari API Service Lifecycle Operations: Start, Stop, and Restart Guide
The MCP Ambari API provides six distinct service lifecycle operations—start_service, stop_service, restart_service, start_all_services, stop_all_services, and restart_all_services—all implemented in src/mcp_ambari_api/mcp_main.py and exposed via FastMCP tool decorators.
The call518/mcp-ambari-api repository implements a Model Context Protocol (MCP) server that wraps Apache Ambari's REST API, enabling programmatic control over Hadoop cluster services. Understanding these service lifecycle operations is essential for automating cluster maintenance, rolling upgrades, and operational workflows through LLM clients or other MCP-compatible tools.
Available Service Lifecycle Operations
All lifecycle tools are registered in src/mcp_ambari_api/mcp_main.py using the @mcp.tool() decorator and follow a consistent validation and execution pattern.
Single Service Operations
Target individual services by name (e.g., HDFS, YARN, HBASE):
-
start_service(service_name: str)– Transitions a service fromINSTALLEDtoSTARTEDstate. Defined at lines 935–960. -
stop_service(service_name: str)– Transitions a service fromSTARTEDtoINSTALLEDstate. Defined at lines 1025–1052. -
restart_service(service_name: str)– Executes sequential stop and start operations, generating two separate request IDs. Defined at lines 1189–1240.
Bulk Cluster Operations
Execute operations across all services simultaneously:
-
start_all_services()– Initiates parallel start requests for the entire cluster. Defined at lines 754–795. -
stop_all_services()– Gracefully stops all cluster services. Defined at lines 838–878. -
restart_all_services()– Performs coordinated bulk restart with dependency-aware sequencing. Defined at lines 1686–1735.
Implementation Architecture
Each service lifecycle operation follows a four-phase execution pattern implemented in mcp_main.py:
-
Validation – Verifies service or cluster existence via
make_ambari_requestbefore attempting state changes. -
State Inspection – Checks current service state (
STARTED,INSTALLED, etc.) to prevent redundant operations and ensure valid transitions. -
Request Issuance – Submits a
PUTrequest to the Ambari REST endpoint with a JSON payload settingServiceInfo.stateto"STARTED"or"INSTALLED"as appropriate. Bulk operations target/clusters/{cluster_name}/serviceswith optional fallback endpoints. -
Response Formatting – Returns structured output containing the request ID, status (ACCEPTED/COMPLETED), monitoring URL, and instructions to poll
get_request_status(request_id)for asynchronous progress tracking.
Usage Examples
The following Python snippets demonstrate how MCP clients invoke these tools:
Start a Single Service
result = await client.call_tool("start_service", service_name="HDFS")
print(result)
Typical output:
START SERVICE: HDFS
Cluster: my_cluster
Service: HDFS
Previous State: INSTALLED
Request ID: 12345
Status: ACCEPTED
Monitor URL: http://ambari-host:8080/api/v1/clusters/my_cluster/requests/12345
Use get_request_status(request_id) to track progress.
Restart a Single Service
result = await client.call_tool("restart_service", service_name="HBASE")
print(result)
Output showing sequential operations:
RESTART SERVICE: HBASE
Stop Request ID: 12347
Start Request ID: 12348
Cluster: my_cluster
Service: HBASE
Initial State: STARTED
Stop Status: COMPLETED
Start Status: ACCEPTED
Start Monitor URL: http://ambari-host:8080/api/v1/clusters/my_cluster/requests/12348
Next: get_request_status(12348) for updates.
Bulk Stop All Services
result = await client.call_tool("stop_all_services")
print(result)
Output format:
STOP ALL SERVICES INITIATED
Cluster: my_cluster
Request ID: 12401
Status: ACCEPTED
Monitor URL: http://ambari-host:8080/api/v1/clusters/my_cluster/requests/12401
Note: This operation may take several minutes to complete.
Use get_request_status(12401) to track progress.
Key Source Files
| File | Purpose | Location |
|---|---|---|
src/mcp_ambari_api/mcp_main.py |
Contains all six service lifecycle tool definitions (start_service, stop_service, restart_service, and bulk variants) with FastMCP registration. |
View source |
src/mcp_ambari_api/functions.py |
Implements low-level HTTP client make_ambari_request, request status checking, and check_service_active_requests for concurrency safety. |
View source |
src/mcp_ambari_api/__init__.py |
Registers the FastMCP instance and enables tool discovery for MCP clients. | View source |
Summary
- Six operations cover all service lifecycle needs: three single-service (
start_service,stop_service,restart_service) and three bulk cluster operations (start_all_services,stop_all_services,restart_all_services). - Consistent API design across all tools with automatic request ID generation and status tracking URLs.
- Defensive programming includes pre-flight state validation and active request checking to prevent conflicting operations.
- Full async support via FastMCP framework, enabling non-blocking cluster orchestration from LLM agents or automation scripts.
Frequently Asked Questions
How does the restart operation handle failures between stop and start phases?
The restart_service function in mcp_main.py (lines 1189–1240) executes stop and start as discrete, sequential operations. If the stop phase fails or times out, the function returns immediately with the failure details and does not proceed to the start phase, ensuring services remain in a known state rather than partially restarted.
Can I track the progress of bulk operations after initiating them?
Yes. All service lifecycle operations return a request ID and a monitoring URL. According to the implementation in mcp_main.py, you should call get_request_status(request_id) with the returned ID to poll for completion status, percentage progress, and detailed task-level outputs from Ambari's backend.
What authentication does the MCP server use when calling Ambari endpoints?
The make_ambari_request helper in src/mcp_ambari_api/functions.py handles HTTP Basic Authentication using credentials configured via environment variables (AMBARI_USERNAME and AMBARI_PASSWORD). All lifecycle operations inherit this authentication automatically when communicating with the Ambari REST API.
Is there a way to restart only specific services rather than all services?
Yes. Use the restart_service tool for individual services by specifying the exact service name (case-sensitive). The bulk restart_all_services operation should only be used when you intend to restart the entire cluster, as it submits requests for every registered service simultaneously without filtering.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →