create_site_rule
Add a site-level rule to Fastly's Next-Gen WAF for request filtering, signal handling, or rate limiting based on configurable conditions and actions.
Instructions
Create a site-level rule
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| corpName | No | Corporation name (uses context default if not provided) | |
| siteName | No | Site name (uses context default if not provided) | |
| type | Yes | Rule type | |
| enabled | No | Whether rule is enabled | |
| groupOperator | Yes | Condition group operator | |
| conditions | Yes | Rule conditions | |
| actions | Yes | Rule actions | |
| reason | No | Description of the rule | |
| signal | No | Signal ID for exclusion/rate limit rules | |
| thresholdCount | No | Threshold count for rate limit rules | |
| thresholdInterval | No | Threshold interval for rate limit rules | |
| blockDurationSeconds | No | Block duration for rate limit rules |
Implementation Reference
- server.js:974-992 (handler)Primary handler for the 'create_site_rule' tool. Resolves corp/site context, validates siteName, constructs ruleData from input arguments, and delegates to the FastlyNGWAFClient's createSiteRule method.case 'create_site_rule': const { corpName: corpForSiteRule, siteName: siteForRule } = resolveContext(typedArgs); if (!siteForRule) { throw new Error('Site name is required. Please set context or provide siteName parameter.'); } const siteRuleData = { type: typedArgs.type, enabled: typedArgs.enabled, groupOperator: typedArgs.groupOperator, conditions: typedArgs.conditions, actions: typedArgs.actions, reason: typedArgs.reason, signal: typedArgs.signal, thresholdCount: typedArgs.thresholdCount, thresholdInterval: typedArgs.thresholdInterval, blockDurationSeconds: typedArgs.blockDurationSeconds, }; result = await client.createSiteRule(corpForSiteRule, siteForRule, siteRuleData); break;
- server.js:585-602 (schema)Input schema defining parameters and validation for the create_site_rule tool.inputSchema: { type: 'object', properties: { corpName: { type: 'string', description: 'Corporation name (uses context default if not provided)' }, siteName: { type: 'string', description: 'Site name (uses context default if not provided)' }, type: { type: 'string', enum: ['request', 'signal', 'rateLimit'], description: 'Rule type' }, enabled: { type: 'boolean', description: 'Whether rule is enabled' }, groupOperator: { type: 'string', enum: ['all', 'any'], description: 'Condition group operator' }, conditions: { type: 'array', description: 'Rule conditions' }, actions: { type: 'array', description: 'Rule actions' }, reason: { type: 'string', description: 'Description of the rule' }, signal: { type: 'string', description: 'Signal ID for exclusion/rate limit rules' }, thresholdCount: { type: 'number', description: 'Threshold count for rate limit rules' }, thresholdInterval: { type: 'number', description: 'Threshold interval for rate limit rules' }, blockDurationSeconds: { type: 'number', description: 'Block duration for rate limit rules' }, }, required: ['type', 'groupOperator', 'conditions', 'actions'], },
- server.js:122-124 (helper)Helper method in FastlyNGWAFClient class that performs the actual API call to create a site rule via POST to /corps/{corp}/sites/{site}/rules.async createSiteRule(corpName, siteName, ruleData) { const response = await this.api.post(`/corps/${corpName}/sites/${siteName}/rules`, ruleData); return response.data;
- server.js:814-816 (registration)Registration of all tools, including create_site_rule, via the ListToolsRequestSchema handler that returns the complete tools array.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools }; });
- server.js:387-394 (helper)Helper function used by create_site_rule handler (and others) to resolve corpName and siteName from arguments or 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 }; }