Skip to main content
Glama
purpleax

Fastly NGWAF MCP Server

by purpleax

manage_lists

Create, update, delete, or view custom security lists (IP, country, string) for Fastly's Next-Gen WAF to control web application access and protection.

Instructions

Manage custom lists (IP, country, string, etc.)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
corpNameNoCorporation name (uses context default if not provided)
siteNameNoSite name (optional for corp-level lists, uses context default if not provided)
actionYesAction to perform
listIdNoList ID (for update/delete actions)
nameNoList name (for create action)
typeNoList type
descriptionNoList description
entriesNoList entries
additionsNoEntries to add (for update)
deletionsNoEntries to remove (for update)

Implementation Reference

  • The main execution handler for the 'manage_lists' tool within the CallToolRequestSchema handler. It resolves context, then based on the 'action' parameter (list, create, update, delete), calls the appropriate FastlyNGWAFClient methods for corporation or site-level lists.
    case 'manage_lists': const { corpName: corpForLists, siteName: siteForLists } = resolveContext(typedArgs); if (typedArgs.action === 'list') { result = siteForLists ? await client.listSiteLists(corpForLists, siteForLists) : await client.listCorpLists(corpForLists); } else if (typedArgs.action === 'create') { const listData = { name: typedArgs.name, type: typedArgs.type, description: typedArgs.description, entries: typedArgs.entries, }; result = siteForLists ? await client.createSiteList(corpForLists, siteForLists, listData) : await client.createCorpList(corpForLists, listData); } else if (typedArgs.action === 'update') { const updateData = { description: typedArgs.description, entries: { additions: typedArgs.additions, deletions: typedArgs.deletions, }, }; result = siteForLists ? await client.updateSiteList(corpForLists, siteForLists, typedArgs.listId, updateData) : await client.updateCorpList(corpForLists, typedArgs.listId, updateData); } else if (typedArgs.action === 'delete') { result = siteForLists ? await client.deleteSiteList(corpForLists, siteForLists, typedArgs.listId) : await client.deleteCorpList(corpForLists, typedArgs.listId); } break;
  • The tool definition including name, description, and inputSchema for 'manage_lists', which defines the parameters and validation for tool calls.
    { name: 'manage_lists', description: 'Manage custom lists (IP, country, string, etc.)', inputSchema: { type: 'object', properties: { corpName: { type: 'string', description: 'Corporation name (uses context default if not provided)' }, siteName: { type: 'string', description: 'Site name (optional for corp-level lists, uses context default if not provided)' }, action: { type: 'string', enum: ['list', 'create', 'update', 'delete'], description: 'Action to perform' }, listId: { type: 'string', description: 'List ID (for update/delete actions)' }, name: { type: 'string', description: 'List name (for create action)' }, type: { type: 'string', enum: ['ip', 'country', 'string', 'wildcard', 'signal'], description: 'List type' }, description: { type: 'string', description: 'List description' }, entries: { type: 'array', items: { type: 'string' }, description: 'List entries' }, additions: { type: 'array', items: { type: 'string' }, description: 'Entries to add (for update)' }, deletions: { type: 'array', items: { type: 'string' }, description: 'Entries to remove (for update)' }, }, required: ['action'], }, },
  • server.js:814-816 (registration)
    The ListToolsRequestSchema handler that returns the static 'tools' array containing the 'manage_lists' tool registration.
    server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools }; });
  • FastlyNGWAFClient class methods for list management operations (list, create, update, delete for both corp and site levels), which are called by the tool handler.
    // Lists Management async listCorpLists(corpName) { const response = await this.api.get(`/corps/${corpName}/lists`); return response.data; } async listSiteLists(corpName, siteName) { const response = await this.api.get(`/corps/${corpName}/sites/${siteName}/lists`); return response.data; } async createCorpList(corpName, listData) { const response = await this.api.post(`/corps/${corpName}/lists`, listData); return response.data; } async createSiteList(corpName, siteName, listData) { const response = await this.api.post(`/corps/${corpName}/sites/${siteName}/lists`, listData); return response.data; } async updateCorpList(corpName, listId, updateData) { const response = await this.api.patch(`/corps/${corpName}/lists/${listId}`, updateData); return response.data; } async updateSiteList(corpName, siteName, listId, updateData) { const response = await this.api.patch(`/corps/${corpName}/sites/${siteName}/lists/${listId}`, updateData); return response.data; } async deleteCorpList(corpName, listId) { await this.api.delete(`/corps/${corpName}/lists/${listId}`); return { success: true }; } async deleteSiteList(corpName, siteName, listId) { await this.api.delete(`/corps/${corpName}/sites/${siteName}/lists/${listId}`); return { success: true };
  • Helper function used by the handler to resolve corporation and site names from tool arguments or global context.
    function resolveContext(args) { const corpName = args.corpName || context.defaultCorpName; const siteName = args.siteName || context.defaultSiteName; if (!corpName) { throw new Error('Corporation name is required. Please set context or provide corpName parameter.'); } return { corpName, siteName }; }

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/purpleax/FastlyMCP'

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