search_ip_addresses
Search and retrieve IP addresses and related details from the MCP Nautobot Server using customizable query strings. Specify search criteria and limit results for efficient network data management.
Instructions
Search IP addresses using a general query string
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 50, max: 500) | |
| query | Yes | Search query (can match IP address, description, etc.) |
Implementation Reference
- MCP tool handler for 'search_ip_addresses': extracts query and limit args, calls NautobotClient.search_ip_addresses(), formats and returns JSON results.elif name == "search_ip_addresses": query = args.get("query") if not query: raise ValueError("query is required") limit = min(args.get("limit", 50), 500) # Cap at 500 for search logger.info(f"Searching IP addresses with query: {query}") # Search IP addresses ip_addresses = await client.search_ip_addresses(query, limit) # Format results result = { "query": query, "count": len(ip_addresses), "results": [ip.model_dump() for ip in ip_addresses] } return [ types.TextContent( type="text", text=f"Found {len(ip_addresses)} IP addresses matching '{query}':\n\n" f"```json\n{result}\n```" ) ]
- src/mcp_nautobot_server/server.py:497-517 (registration)Registers the 'search_ip_addresses' tool with MCP server in list_tools(), including name, description, and input schema.name="search_ip_addresses", description="Search IP addresses using a general query string", inputSchema={ "type": "object", "properties": { "query": { "type": "string", "description": "Search query (can match IP address, description, etc.)" }, "limit": { "type": "integer", "description": "Maximum number of results to return (default: 50, max: 500)", "default": 50, "minimum": 1, "maximum": 500 } }, "required": ["query"], "additionalProperties": False }, ),
- Input schema definition for the tool: requires 'query' string, optional 'limit' integer (1-500, default 50).inputSchema={ "type": "object", "properties": { "query": { "type": "string", "description": "Search query (can match IP address, description, etc.)" }, "limit": { "type": "integer", "description": "Maximum number of results to return (default: 50, max: 500)", "default": 50, "minimum": 1, "maximum": 500 } }, "required": ["query"], "additionalProperties": False },
- Core implementation: performs GET request to Nautobot /ipam/ip-addresses/ with q=query and limit params, parses results into IPAddress models.async def search_ip_addresses( self, query: str, limit: int = 50 ) -> List[IPAddress]: """ Search IP addresses using a general query. Args: query: Search query (can be IP, description, etc.) limit: Maximum number of results Returns: List of matching IPAddress objects """ params: Dict[str, Any] = { "q": query, "limit": limit, } try: response = await self._make_request("GET", "/ipam/ip-addresses/", params) ip_addresses = [] for item in response.get("results", []): try: ip_addresses.append(IPAddress(**item)) except Exception as e: logger.warning(f"Failed to parse IP address data: {e}") continue logger.info(f"Found {len(ip_addresses)} IP addresses matching '{query}'") return ip_addresses except Exception as e: logger.error(f"Failed to search IP addresses: {e}") raise