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
| Name | Required | Description | Default |
|---|---|---|---|
| corpName | No | Corporation name (uses context default if not provided) | |
| siteName | No | Site name (optional for corp-level lists, uses context default if not provided) | |
| action | Yes | Action to perform | |
| listId | No | List ID (for update/delete actions) | |
| name | No | List name (for create action) | |
| type | No | List type | |
| description | No | List description | |
| entries | No | List entries | |
| additions | No | Entries to add (for update) | |
| deletions | No | Entries to remove (for update) |
Implementation Reference
- server.js:1064-1099 (handler)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;
- server.js:718-737 (schema)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 }; });
- server.js:142-173 (helper)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 };
- server.js:387-394 (helper)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 }; }