Samenvatting
Using an MCP server that integrates with FlashBlade allows you to query system data and even take direct actions, unlocking a new frontier in agentic storage management.
Het beheren van on-premise opslag is van oudsher een vervelend, handmatig proces geweest – het doorzoeken van systeemmetrieken, het monitoren van prestaties en het uitvoeren van acties vereist vaak complexe scripts of gespecialiseerde tools. Maar wat als u gewoon om de informatie die u nodig hebt in gewoon Engels zou kunnen vragen en onmiddellijke, bruikbare inzichten zou krijgen?
Daar komt het Model Context Protocol (MCP) om de hoek kijken. MCP is een open protocol waarmee large language models (LLM’s) intelligent kunnen communiceren met applicaties, waardoor natuurlijke taalmogelijkheden worden toegevoegd aan opslagbeheer. In deze blog laten we u zien hoe u een MCP-server kunt bouwen die integreert met Pure Storage® FLASHBLADE®, zodat u systeemgegevens kunt opvragen en zelfs directe acties kunt ondernemen – allemaal via een intuïtieve, AI-aangedreven interface.
Door onze aanpak te modulariseren, ontsluiten we een nieuwe grens op het gebied van agentisch opslagbeheer, waarbij automatisering niet alleen efficiënt is, maar ook converserend en adaptief. Laten we eens kijken.
Ons doel voor deze acties is een Pure Storage-array, met name een FLASHBLADE-systeem, maar de principes zijn ook van toepassing op FlashArray™-systemen. Met behulp van de Claude-desktopapp gebruiken onze query’s de tools die door de MCP-server worden geleverd om te communiceren met de aangewezen Pure Storage-array volgens deze screenshot:
Een MCP-server maken
De eerste stap is het installeren van de uv Python-pakketbeheerder. Raadpleeg de officiële handleiding voor installatie-instructies.
Vervolgens moeten we de MCP-serverstructuur creëren. Hiervoor maken we gebruik van de geleverde tools binnen het uv-pakket:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
% uvx create–mcp–server Creating a new MCP server project using uv. This will set up a Python project with MCP dependency. Let‘s begin! Project name (required): pure–mcp–server Project description [A MCP server project]: A MCP server to retrieve realtime information from a Pure Storage FlashBlade Project version [0.1.0]: Project will be created at: /Users/jthomas/mcp/pure–mcp–server Is this correct? [Y/n]: Y .... Claude.app detected. Would you like to install the server into Claude.app now? [Y/n]: Y ✅ Added pure–mcp–server to Claude.app configuration Settings file location: /Users/jthomas/Library/Application Support/Claude/claude_desktop_config.json ✅ Created project pure–mcp–server in pure–mcp–server ℹ️ To install dependencies run: cd pure–mcp–server uv sync —dev —all–extras |
Ga verder met de laatste aangegeven stappen om de afhankelijkheden te installeren en onze skelet MCP-server is klaar. De broncode die we moeten wijzigen, bevindt zich onder pure-mcp-server/src/pure-mcp-server. Op dit punt is de code voor een template add-notes tool. We zullen dat aanpassen om te communiceren met een Pure Storage FLASHBLADE-array op locatie.
Vanuit de projectmap gaan we de virtuele Python-omgeving binnen die automatisch door uv is gecreëerd en installeren we de Pure Storage Python SDK, omdat we dit zullen gebruiken om te communiceren met de FLASHBLADE REST API.
1 2 |
% source .venv/bin/activate (pure–mcp–server) % uv pip install py–pure–client |
Vervolgens voegen we de relevante code toe om twee MCP-tools te maken om query’s uit te voeren tegen de eindpunten van een bepaalde FLASHBLADE-array:
- get_arrays
- get_arrays en get_arrays_performance
De MCP-server werd tijdens de initialisatiefase automatisch toegevoegd aan de Claude-desktop. Om te verifiëren, opent u het volgende bestand en controleert u of de invoer correct is:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
cat /Users/jthomas/Library/Application\ Support/Claude/claude_desktop_config.json { “mcpServers”: { “pure-mcp-server”: { “command”: “uv”, “args”: [ “–directory”, “/path/to/folder/pure-mcp-server”, “run”, “pure-mcp-server” ] } } } |
Naast de MCP-inspecteur hebben we het volgende script gebruikt om te valideren:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import asyncio from mcp.client.session import ClientSession from mcp.client.stdio import StdioServerParameters, stdio_client async def main(): async with stdio_client( StdioServerParameters(command=“uv”, args=[“–directory”, “/Users/jthomas/mcp/pure-mcp-server”, “run”, “pure-mcp-server”]) ) as (read, write): async with ClientSession(read, write) as session: await session.initialize() # List available tools tools = await session.list_tools() print(tools) # Call the fetch tool result = await session.call_tool(“get-array”, {“host”: “1.2.3.4”, “api_token”: “T-da03****1a98”}) print(result) asyncio.run(main()) |
Deze code vermeldt mijn MCP-servertools correct. Het maakt ook verbinding met de externe array, voert de noodzakelijke API-oproep uit en retourneert de relevante JSON-string.
Via de Claude-desktopapp kunnen we nu query’s uitvoeren met behulp van de MCP-servertools tegen een bepaalde Pure Storage FLASHBLADE:
En met de tool voor volledige arrays kunt u vragen naar opslagruimte:
Merk op dat dit een vrij inactieve labarray is, maar er kunnen vervolgvragen worden gesteld, zoals:
“Maak een grafiek om de prestaties van de afgelopen 7 dagen te tonen op basis van de tijdwaarde per metrische epoch. Converteer epoch- en groepsprestatieresultaten per dag.”
Een modulaire MCP-tool draaien
De code tot nu toe biedt basisintegratie voor hardcoded calls volgens de definitie van de MCP-servertool, maar we willen misschien acties indienen en informatie ophalen. Het hebben van één MCP-tool per verzoek is geen wenselijke aanpak – we moeten overschakelen van een hardgecodeerde REST API-oproep zoals get_arrays naar een modulaire benadering waarbij elke eindpuntoproep als parameter wordt geaccepteerd via één enkele pure-fb-tool om voor elk eindpunt te gebruiken.
De volledige code is te vinden in deze GitHub-repository.
Gebruik
Met onze nieuwe MCP-server kunnen we informatieve query’s uitvoeren, zoals:
“Gebruik pure-fb op host: 1.2.3.4 met api-token: T-7c7a*****f23e om de opdracht: get_file_systems en vervolgens de opdracht: get_buckets. Sorteer de items op gebruikte grootte en geef voor elk item aan of het een bucket is door het item te taggen als ‘s3’ of een bestandssysteem door het item te taggen als ‘fs’. Zorg ervoor dat u correct sorteert op aflopende volgorde op basis van gebruikte grootte en vermeld de top 5 op gebruikte ruimte.”
Dit resulteert in de volgende output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
I‘ll help you retrieve and analyze the file systems and buckets information from your FlashBlade. View result from pure–fb from pureflashblade (local){} View result from pure–fb from pureflashblade (local){} Here are the top 5 storage items (combining both file systems and buckets) sorted by used space in descending order: lbo–outscale–perfs [fs]: 7,240,575,042,227 bytes (7.24 TB) lbo–vertica [fs]: 3,311,892,804,361 bytes (3.31 TB) dm [fs]: 2,213,617,471,583 bytes (2.21 TB) lbo–hdf5 [fs]: 1,643,315,388,928 bytes (1.64 TB) eg–px–share01 [fs]: 869,598,847,641 bytes (869.6 GB) As we can see, the top 5 spots are all occupied by file systems, with the largest being lbo–outscale–perfs at 7.24 TB. For reference, the largest bucket (cvlt–uklab–object–lock at 265.1 GB) would rank much lower in this combined list. |
Met deze modulaire aanpak kunnen we elk eindpunt opvragen (arrays, buckets, bestandssystemen, enz.) om informatie op te halen en acties op de array te ondernemen. We voeren bijvoorbeeld een eenvoudige creatie-bucketopdracht uit met behulp van de volgende query:
“Gebruik pure-fb op host: 1.2.3.4 met api-token: T-7c7a*****f23e en het commando post_buckets met de parameters: names=[“jbtmcptest”], bucket=BucketPost(account=Reference(name=’jbt’)) ”
Op de Pure Storage FLASHBLADE-array zien we dat de relevante bucket nu aanwezig is:
En met deze vraag creëren we een bestandssysteem. Merk op dat we in dit voorbeeld het specifieke eindpunt niet geven. We laten dit over aan de LLM om erachter te komen:
“Maak een bestandssysteem met de volgende parameters: names=[“jbt-myfs”], file_system=FileSystemPost(provisioned=5000, hard_limit_enabled=True, nfs=Nfs(v4_1_enabled=True), smb=Smb(enabled=True), multi_protocol=MultiProtocolPost(access_control_style=”nfs”))”
We kunnen zien dat ClaudeAI de juiste opdracht heeft kunnen geven om dit verzoek uit post_file_system te voeren.
De prompt instellen om als agent op te treden
We zullen nu wat context toevoegen aan de chat en het gedrag en de mogelijkheden definiëren van een storage agent die twee arrays moet beheren:
“U bent een slimme storage management agent die via de pure-fb tool de volgende twee arrays kan beheren:
array01 bij host: 1.2.3.4 met api-token: T-7c7a*****f23e
array02 bij host: 1.2.3.5 met api-token: T-f2e0*****3b8d”
Met deze opslagagent gedefinieerd, kunnen we query’s uitvoeren tegen beide arrays, zoals:
“Verzamel alle buckets van beide arrays, extraheer naam, ruwe total_used ruimte en bronarray in één lijst. Sorteer strikt op basis van de ruwe total_used waarden zonder conversies. Geef de top 15 van de lijst en zet gebruikte ruimte om in geschikte eenheden voor weergave.”
Onze agent begint met het verzamelen van de relevante data met behulp van get_buckets en get_file_systems tegen de twee arrays:
De agent gaat verder met het sorteren van de buckets op gebruikte ruimte zoals gevraagd. Merk op dat het verschillende pogingen kostte om de prompt te krijgen dat de sortering correct was.
Van CLI-gedreven naar AI-ondersteund opslagbeheer
Met een MCP-server hebben we on-premise opslagbeheer getransformeerd van een star, command-line-gedreven proces in een AI-ondersteunde, natuurlijke taalervaring. Door LLM’s te overbruggen met enterprise storage, halen we niet langer alleen data op – we leiden onze infrastructuur dynamisch, verminderen de complexiteit en openen de deur naar slimmere, efficiëntere workflows.
Maar dit is nog maar het begin. Agentische automatisering verandert de bedrijfstechnologie en opslag is daarop geen uitzondering. Naarmate deze mogelijkheden evolueren, gaan we op weg naar een toekomst waarin AI-gestuurd opslagbeheer niet alleen een gemak is, maar ook een concurrentievoordeel. De vraag is niet of dit de nieuwe norm zal worden – het is hoe snel.
Bent u klaar om de volgende stap te zetten?
Free Test Drive
Explore FlashBlade in our virtual lab.