@fruition/fcp-mcp-server 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +216 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -329,6 +329,44 @@ class FCPClient {
329
329
  body: JSON.stringify(options || {}),
330
330
  });
331
331
  }
332
+ // Shield Domain Management
333
+ async shieldListDomains(filters) {
334
+ const params = new URLSearchParams();
335
+ if (filters?.status)
336
+ params.append('status', filters.status);
337
+ if (filters?.account_id)
338
+ params.append('account_id', String(filters.account_id));
339
+ const qs = params.toString();
340
+ return this.fetch(`/api/shield/domains${qs ? `?${qs}` : ''}`);
341
+ }
342
+ async shieldAddDomain(input) {
343
+ return this.fetch('/api/shield/domains', {
344
+ method: 'POST',
345
+ body: JSON.stringify(input),
346
+ });
347
+ }
348
+ async shieldGetDomain(domainId) {
349
+ return this.fetch(`/api/shield/domains/${domainId}`);
350
+ }
351
+ async shieldUpdateDomain(domainId, updates) {
352
+ return this.fetch(`/api/shield/domains/${domainId}`, {
353
+ method: 'PUT',
354
+ body: JSON.stringify(updates),
355
+ });
356
+ }
357
+ async shieldRemoveDomain(domainId) {
358
+ return this.fetch(`/api/shield/domains/${domainId}`, {
359
+ method: 'DELETE',
360
+ });
361
+ }
362
+ async shieldGetMetrics() {
363
+ return this.fetch('/api/shield/metrics?include_health=true');
364
+ }
365
+ async shieldVerifyDomain(domainId) {
366
+ return this.fetch(`/api/shield/domains/${domainId}/verify`, {
367
+ method: 'POST',
368
+ });
369
+ }
332
370
  }
333
371
  // Unroo API Client
334
372
  // Supports two modes:
@@ -754,7 +792,7 @@ const TOOLS = [
754
792
  },
755
793
  category: {
756
794
  type: 'string',
757
- description: 'Optional: filter by category (pre_launch, content, technical, seo, testing, dns, monitoring, post_launch)',
795
+ description: 'Optional: filter by category (infrastructure, security, pre_launch_webops, pre_launch_devops, pre_launch_dev, launch_day_devops, launch_day_seo, post_launch_day1, post_launch_week1, post_launch_day30)',
758
796
  },
759
797
  status: {
760
798
  type: 'string',
@@ -780,7 +818,7 @@ const TOOLS = [
780
818
  },
781
819
  category: {
782
820
  type: 'string',
783
- enum: ['pre_launch', 'content', 'technical', 'seo', 'testing', 'dns', 'monitoring', 'post_launch'],
821
+ enum: ['infrastructure', 'security', 'pre_launch_webops', 'pre_launch_devops', 'pre_launch_dev', 'launch_day_devops', 'launch_day_seo', 'post_launch_day1', 'post_launch_week1', 'post_launch_day30'],
784
822
  description: 'Category for the checklist item',
785
823
  },
786
824
  description: {
@@ -860,7 +898,7 @@ const TOOLS = [
860
898
  },
861
899
  category: {
862
900
  type: 'string',
863
- enum: ['pre_launch', 'content', 'technical', 'seo', 'testing', 'dns', 'monitoring', 'post_launch'],
901
+ enum: ['infrastructure', 'security', 'pre_launch_webops', 'pre_launch_devops', 'pre_launch_dev', 'launch_day_devops', 'launch_day_seo', 'post_launch_day1', 'post_launch_week1', 'post_launch_day30'],
864
902
  description: 'Updated category',
865
903
  },
866
904
  role: {
@@ -1061,6 +1099,14 @@ const TOOLS = [
1061
1099
  type: 'number',
1062
1100
  description: 'The ID of the launch to update (required)',
1063
1101
  },
1102
+ website_id: {
1103
+ type: 'number',
1104
+ description: 'Associated website ID (null to unlink)',
1105
+ },
1106
+ account_id: {
1107
+ type: 'number',
1108
+ description: 'Associated account/client ID (null to unlink)',
1109
+ },
1064
1110
  name: {
1065
1111
  type: 'string',
1066
1112
  description: 'Updated launch name',
@@ -1935,6 +1981,129 @@ const TOOLS = [
1935
1981
  required: ['website_id'],
1936
1982
  },
1937
1983
  },
1984
+ // Fruition Shield - Shared WAF Gateway
1985
+ {
1986
+ name: 'fcp_shield_list_domains',
1987
+ description: 'List all domains protected by Fruition Shield WAF. Filter by status (pending_dns, pending_cert, active, suspended) or account_id.',
1988
+ inputSchema: {
1989
+ type: 'object',
1990
+ properties: {
1991
+ status: {
1992
+ type: 'string',
1993
+ description: 'Filter by status: pending_dns, pending_cert, cert_validating, active, suspended, removed',
1994
+ },
1995
+ account_id: {
1996
+ type: 'number',
1997
+ description: 'Filter by account/client ID',
1998
+ },
1999
+ },
2000
+ },
2001
+ },
2002
+ {
2003
+ name: 'fcp_shield_add_domain',
2004
+ description: 'Add a domain to Fruition Shield WAF protection. Returns DNS records (traffic CNAME + cert validation CNAME) that must be added at the registrar.',
2005
+ inputSchema: {
2006
+ type: 'object',
2007
+ properties: {
2008
+ domain: {
2009
+ type: 'string',
2010
+ description: 'Domain to protect (e.g., www.butterflies.org)',
2011
+ },
2012
+ origin_host: {
2013
+ type: 'string',
2014
+ description: 'Origin server IP or hostname (e.g., 146.190.2.169 for K8s prod)',
2015
+ },
2016
+ origin_port: {
2017
+ type: 'number',
2018
+ description: 'Origin port (default: 443)',
2019
+ },
2020
+ origin_protocol: {
2021
+ type: 'string',
2022
+ description: 'Origin protocol: http or https (default: https)',
2023
+ },
2024
+ website_id: {
2025
+ type: 'number',
2026
+ description: 'Link to existing FCP website ID',
2027
+ },
2028
+ account_id: {
2029
+ type: 'number',
2030
+ description: 'Associated account/client ID',
2031
+ },
2032
+ cache_profile: {
2033
+ type: 'string',
2034
+ description: 'Cache profile: standard, aggressive, minimal, none (default: standard)',
2035
+ },
2036
+ notes: {
2037
+ type: 'string',
2038
+ description: 'Notes about this domain',
2039
+ },
2040
+ },
2041
+ required: ['domain', 'origin_host'],
2042
+ },
2043
+ },
2044
+ {
2045
+ name: 'fcp_shield_get_domain',
2046
+ description: 'Get Shield domain details including onboarding status, DNS records needed, and WAF configuration.',
2047
+ inputSchema: {
2048
+ type: 'object',
2049
+ properties: {
2050
+ domain_id: {
2051
+ type: 'number',
2052
+ description: 'The Shield domain ID',
2053
+ },
2054
+ },
2055
+ required: ['domain_id'],
2056
+ },
2057
+ },
2058
+ {
2059
+ name: 'fcp_shield_update_domain',
2060
+ description: 'Update Shield domain configuration (origin, cache profile, WAF rules, geo-blocking, rate limiting).',
2061
+ inputSchema: {
2062
+ type: 'object',
2063
+ properties: {
2064
+ domain_id: {
2065
+ type: 'number',
2066
+ description: 'The Shield domain ID',
2067
+ },
2068
+ origin_host: { type: 'string', description: 'Updated origin host' },
2069
+ origin_port: { type: 'number', description: 'Updated origin port' },
2070
+ cache_profile: { type: 'string', description: 'Cache profile: standard, aggressive, minimal, none' },
2071
+ waf_profile: { type: 'string', description: 'WAF profile: standard, premium, custom' },
2072
+ geo_block_countries: {
2073
+ type: 'array',
2074
+ items: { type: 'string' },
2075
+ description: 'Country codes to block (e.g., ["CN","RU","KP","IR","BY"])',
2076
+ },
2077
+ rate_limit_tier: { type: 'string', description: 'Rate limit: standard, strict, relaxed' },
2078
+ bot_control_enabled: { type: 'boolean', description: 'Enable AWS Bot Control (+$10/mo)' },
2079
+ enabled: { type: 'boolean', description: 'Enable/disable domain' },
2080
+ notes: { type: 'string', description: 'Updated notes' },
2081
+ },
2082
+ required: ['domain_id'],
2083
+ },
2084
+ },
2085
+ {
2086
+ name: 'fcp_shield_remove_domain',
2087
+ description: 'Remove a domain from Fruition Shield protection. Removes from CloudFront, DynamoDB, and deletes ACM certificate.',
2088
+ inputSchema: {
2089
+ type: 'object',
2090
+ properties: {
2091
+ domain_id: {
2092
+ type: 'number',
2093
+ description: 'The Shield domain ID to remove',
2094
+ },
2095
+ },
2096
+ required: ['domain_id'],
2097
+ },
2098
+ },
2099
+ {
2100
+ name: 'fcp_shield_get_metrics',
2101
+ description: 'Get aggregate Fruition Shield WAF metrics: total domains, requests, blocks, block rate, and infrastructure health.',
2102
+ inputSchema: {
2103
+ type: 'object',
2104
+ properties: {},
2105
+ },
2106
+ },
1938
2107
  ];
1939
2108
  // Register tool handlers
1940
2109
  server.setRequestHandler(ListToolsRequestSchema, async () => {
@@ -2776,6 +2945,50 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
2776
2945
  ],
2777
2946
  };
2778
2947
  }
2948
+ // Fruition Shield Handlers
2949
+ case 'fcp_shield_list_domains': {
2950
+ const { status, account_id } = args;
2951
+ const result = await client.shieldListDomains({ status, account_id });
2952
+ return {
2953
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
2954
+ };
2955
+ }
2956
+ case 'fcp_shield_add_domain': {
2957
+ const { domain, origin_host, origin_port, origin_protocol, website_id, account_id, cache_profile, notes } = args;
2958
+ const result = await client.shieldAddDomain({
2959
+ domain, origin_host, origin_port, origin_protocol, website_id, account_id, cache_profile, notes,
2960
+ });
2961
+ return {
2962
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
2963
+ };
2964
+ }
2965
+ case 'fcp_shield_get_domain': {
2966
+ const { domain_id } = args;
2967
+ const result = await client.shieldGetDomain(domain_id);
2968
+ return {
2969
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
2970
+ };
2971
+ }
2972
+ case 'fcp_shield_update_domain': {
2973
+ const { domain_id, ...updates } = args;
2974
+ const result = await client.shieldUpdateDomain(domain_id, updates);
2975
+ return {
2976
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
2977
+ };
2978
+ }
2979
+ case 'fcp_shield_remove_domain': {
2980
+ const { domain_id } = args;
2981
+ const result = await client.shieldRemoveDomain(domain_id);
2982
+ return {
2983
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
2984
+ };
2985
+ }
2986
+ case 'fcp_shield_get_metrics': {
2987
+ const result = await client.shieldGetMetrics();
2988
+ return {
2989
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
2990
+ };
2991
+ }
2779
2992
  default:
2780
2993
  throw new Error(`Unknown tool: ${name}`);
2781
2994
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fruition/fcp-mcp-server",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "description": "MCP Server for FCP Launch Coordination System - enables Claude Code to interact with FCP launches and track development time",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",