Skip to main content
Glama
moimran

EVE-NG MCP Server

by moimran

start_all_nodes

Start all nodes in an EVE-NG lab simultaneously according to configured delay settings to initialize network topologies for testing.

Instructions

Start all nodes in a lab.

This tool starts all nodes in the specified lab. Nodes will be started according to their configured delay settings.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
argumentsYes

Implementation Reference

  • MCP tool handler that starts all nodes in the specified lab using the EVENG client API.
    @mcp.tool()
    async def start_all_nodes(arguments: BulkNodeControlArgs) -> list[TextContent]:
        """
        Start all nodes in a lab.
    
        This tool starts all nodes in the specified lab. Nodes will be started
        according to their configured delay settings.
        """
        try:
            logger.info(f"Starting all nodes in {arguments.lab_path}")
    
            if not eveng_client.is_connected:
                return [TextContent(
                    type="text",
                    text="Not connected to EVE-NG server. Use connect_eveng_server tool first."
                )]
    
            # Start all nodes
            result = await eveng_client.start_all_nodes(arguments.lab_path)
    
            if result.get('status') == 'success':
                return [TextContent(
                    type="text",
                    text=f"Successfully started all nodes in {arguments.lab_path}\n\n"
                         f"All nodes are now booting up. They may take a few moments to become fully operational."
                )]
            else:
                return [TextContent(
                    type="text",
                    text=f"Failed to start all nodes: {result.get('message', 'Unknown error')}"
                )]
    
        except Exception as e:
            logger.error(f"Failed to start all nodes: {e}")
            return [TextContent(
                type="text",
                text=f"Failed to start all nodes: {str(e)}"
            )]
  • Pydantic model defining the input schema for the start_all_nodes tool (and similar bulk operations).
    class BulkNodeControlArgs(BaseModel):
        """Arguments for bulk node operations."""
        lab_path: str = Field(description="Full path to the lab (e.g., /lab_name.unl)")
  • Registration call for node management tools, which includes start_all_nodes.
    # Node management tools
    register_node_tools(mcp, eveng_client)
  • Main server registration that triggers all tools registration including node_management tools.
    # Register tools
    register_tools(self.mcp, self.eveng_client)
  • Underlying EVENGClientWrapper method that calls the EVE-NG API to start all nodes.
    async def start_all_nodes(self, lab_path: str) -> Dict[str, Any]:
        """Start all nodes in a lab."""
        await self.ensure_connected()
    
        try:
            result = await asyncio.to_thread(self.api.start_all_nodes, lab_path)
            self.logger.info("Started all nodes", lab_path=lab_path)
            return result
        except Exception as e:
            self.logger.error("Failed to start all nodes", **log_error(e, {"lab_path": lab_path}))
            raise EVENGAPIError(f"Failed to start all nodes: {str(e)}")
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions that 'nodes will be started according to their configured delay settings', which adds useful behavioral context beyond just 'start'. However, it fails to disclose critical aspects: whether this is a destructive/mutative operation (likely yes), what permissions are needed, what happens if nodes are already running, error conditions, or what the output looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise and well-structured: two sentences that directly address what the tool does and a key behavioral detail. Every word earns its place with zero redundancy or fluff. It's front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, 0% schema coverage, no output schema, and this being a mutative operation (starting nodes), the description is incomplete. It lacks critical context: error handling, side effects, permissions, output format, and detailed parameter guidance. For a tool that likely changes system state, this leaves significant gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions 'specified lab' but provides no details about the 'lab_path' parameter—no format examples, constraints, or what constitutes a valid lab. The description adds no parameter semantics beyond what's implied by the tool name, leaving the single required parameter poorly documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('start') and resource ('all nodes in a lab'), making the purpose immediately understandable. It distinguishes from sibling tools like 'start_node' (which starts individual nodes) by specifying 'all nodes'. However, it doesn't explicitly contrast with 'stop_all_nodes' or 'wipe_all_nodes', which would have made it a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context ('in a lab') but provides no explicit guidance on when to use this versus alternatives like 'start_node' for individual nodes or 'stop_all_nodes' for stopping. There's no mention of prerequisites (e.g., lab must exist, nodes must be stopped) or exclusions (e.g., cannot start if already running).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/moimran/eveng-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server