Skip to main content
Glama
cloudcwfranck

@cloudcraftwithfranck/govcloud-mcp

azure_service_selector

Evaluates government workload requirements to recommend the best Azure service with compliance rationale, GCC High availability confirmation, and alternatives analysis.

Instructions

Select the right Azure service for a government workload requirement with compliance rationale, GCC High availability confirmation, and alternatives analysis.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
requirementYesDescribe what you need to accomplish
impactLevelYes
constraintsNoe.g. ["no-public-endpoint","fips-140-2-required","cac-piv-auth"]
existingServicesNoAzure services already in the environment

Implementation Reference

  • The handler function 'handleServiceSelect' that executes the tool logic. It validates args via Zod schema, then calls Anthropic Claude with the ARCHITECTURE_SYSTEM prompt to recommend Azure services for government workloads.
    export async function handleServiceSelect(args: unknown): Promise<string> {
      return runTool('azure_service_selector', args, Schema, async ({ requirement, impactLevel, constraints, existingServices }) => {
        const response = await anthropic.messages.create({
          model: MODEL,
          max_tokens: getTokenBudget('azure_service_selector'),
          system: ARCHITECTURE_SYSTEM,
          messages: [
            {
              role: 'user',
              content: `Select the right Azure service(s) for this government workload requirement.
    
    **Requirement:** ${requirement}
    **Impact Level:** ${impactLevel}
    **Constraints:** ${(constraints ?? []).length > 0 ? (constraints ?? []).join(', ') : 'None specified'}
    **Existing Services:** ${(existingServices ?? []).length > 0 ? (existingServices ?? []).join(', ') : 'None specified'}
    
    For each recommendation provide:
    - Service name and exact SKU/tier recommendation
    - Why it's the right choice for ${impactLevel}
    - GCC High availability (Yes / No / Limited — be specific about limitations)
    - FedRAMP authorization status
    - Key compliance configurations required out of the box
    - What NOT to use and why (common mistakes at this impact level)
    - Cost implication: $ / $$ / $$$
    - Integration notes with existing services
    
    If multiple services are viable, rank them and explain the trade-offs.`,
            },
          ],
        });
    
        return response.content[0].type === 'text' ? response.content[0].text : '';
      });
    }
  • The tool schema definition 'serviceSelectTool' — defines name 'azure_service_selector', description, and inputSchema with requirement (string), impactLevel (enum: fedramp-moderate/high/il4/il5), constraints (string array), and existingServices (string array).
    export const serviceSelectTool = {
      name: 'azure_service_selector',
      description:
        'Select the right Azure service for a government workload requirement with compliance rationale, GCC High availability confirmation, and alternatives analysis.',
      inputSchema: {
        type: 'object' as const,
        properties: {
          requirement: { type: 'string', description: 'Describe what you need to accomplish' },
          impactLevel: {
            type: 'string',
            enum: ['fedramp-moderate', 'fedramp-high', 'il4', 'il5'],
          },
          constraints: {
            type: 'array',
            items: { type: 'string' },
            description: 'e.g. ["no-public-endpoint","fips-140-2-required","cac-piv-auth"]',
          },
          existingServices: {
            type: 'array',
            items: { type: 'string' },
            description: 'Azure services already in the environment',
          },
        },
        required: ['requirement', 'impactLevel'],
      },
    };
  • Zod validation schema for runtime input validation: requirement max 500 chars, impactLevel enum, constraints max 20 items each 500 chars, existingServices max 20 items each 500 chars.
    const Schema = z.object({
      requirement: z.string().max(500),
      impactLevel: z.enum(['fedramp-moderate', 'fedramp-high', 'il4', 'il5']),
      constraints: z.array(z.string().max(500)).max(20).default([]),
      existingServices: z.array(z.string().max(500)).max(20).default([]),
    });
  • Import of serviceSelectTool and handleServiceSelect from azure-service-selector module.
    import { serviceSelectTool, handleServiceSelect } from './architecture/azure-service-selector.js';
    import { gccHighTool, handleGccHigh } from './architecture/gcc-high-guidance.js';
    import { privateEndpointTool, handlePrivateEndpoint } from './architecture/private-endpoint-map.js';
    
    import { bigbangValidateTool, handleBigbangValidate } from './platform-one/bigbang-validate.js';
    import { bigbangHardenTool, handleBigbangHarden } from './platform-one/bigbang-harden.js';
    import { ironbankLookupTool, handleIronbankLookup } from './platform-one/ironbank-lookup.js';
    import { addonConfiguratorTool, handleAddonConfigurator } from './platform-one/addon-configurator.js';
    
    import { pipelineAuditTool, handlePipelineAudit } from './pipeline/pipeline-audit.js';
    import { signingConfigTool, handleSigningConfig } from './pipeline/signing-config.js';
    import { devsecopsScoreCardTool, handleDevsecopsScorecard } from './pipeline/devsecops-scorecard.js';
    
    import { sspSectionTool, handleSspSection } from './documents/ssp-section.js';
    import { contingencyPlanTool, handleContingencyPlan } from './documents/contingency-plan.js';
    
    import { govcloudQuickstartTool, handleGovcloudQuickstart } from './govcloud-quickstart.js';
    
    export const allTools = [
      // Compliance
      bicepAnalyzeTool,
      bicepRemediateTool,
      controlLookupTool,
      controlNarrativeTool,
      poamGenerateTool,
      atoReadinessTool,
      oscalFragmentTool,
      // Architecture
      landingZoneTool,
      landingZoneReferenceTool,
      serviceSelectTool,
      gccHighTool,
      privateEndpointTool,
      // Platform One
      bigbangValidateTool,
      bigbangHardenTool,
      ironbankLookupTool,
      addonConfiguratorTool,
      // Pipeline
      pipelineAuditTool,
      signingConfigTool,
      devsecopsScoreCardTool,
      // Documents
      sspSectionTool,
      contingencyPlanTool,
      // Meta
      govcloudQuickstartTool,
    ];
    
    export async function handleToolCall(name: string, args: unknown): Promise<string> {
      switch (name) {
        case 'bicep_analyze':         return handleBicepAnalyze(args);
        case 'bicep_remediate':       return handleBicepRemediate(args);
        case 'control_lookup':        return handleControlLookup(args);
        case 'control_narrative':     return handleControlNarrative(args);
        case 'poam_generate':         return handlePoamGenerate(args);
        case 'ato_readiness':         return handleAtoReadiness(args);
        case 'oscal_fragment':        return handleOscalFragment(args);
        case 'landing_zone_design':   return handleLandingZone(args);
        case 'landing_zone_reference': return handleLandingZoneReference(args);
        case 'azure_service_selector': return handleServiceSelect(args);
        case 'gcc_high_guidance':     return handleGccHigh(args);
        case 'private_endpoint_map':  return handlePrivateEndpoint(args);
        case 'bigbang_validate':      return handleBigbangValidate(args);
        case 'bigbang_harden':        return handleBigbangHarden(args);
        case 'ironbank_lookup':       return handleIronbankLookup(args);
        case 'addon_configurator':    return handleAddonConfigurator(args);
        case 'pipeline_audit':        return handlePipelineAudit(args);
        case 'signing_config':        return handleSigningConfig(args);
        case 'devsecops_scorecard':   return handleDevsecopsScorecard(args);
        case 'ssp_section':           return handleSspSection(args);
        case 'contingency_plan':      return handleContingencyPlan(args);
        case 'govcloud_quickstart':   return handleGovcloudQuickstart(args);
        default:
          throw new Error(`Unknown tool: ${name}`);
      }
    }
  • Registration in the tool dispatch switch statement: case 'azure_service_selector' maps to handleServiceSelect(args).
        case 'azure_service_selector': return handleServiceSelect(args);
        case 'gcc_high_guidance':     return handleGccHigh(args);
        case 'private_endpoint_map':  return handlePrivateEndpoint(args);
        case 'bigbang_validate':      return handleBigbangValidate(args);
        case 'bigbang_harden':        return handleBigbangHarden(args);
        case 'ironbank_lookup':       return handleIronbankLookup(args);
        case 'addon_configurator':    return handleAddonConfigurator(args);
        case 'pipeline_audit':        return handlePipelineAudit(args);
        case 'signing_config':        return handleSigningConfig(args);
        case 'devsecops_scorecard':   return handleDevsecopsScorecard(args);
        case 'ssp_section':           return handleSspSection(args);
        case 'contingency_plan':      return handleContingencyPlan(args);
        case 'govcloud_quickstart':   return handleGovcloudQuickstart(args);
        default:
          throw new Error(`Unknown tool: ${name}`);
      }
    }
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description mentions outputs (compliance rationale, alternatives) but lacks side effects, permissions, or that it only recommends services without provisioning. Adequate but not fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence conveying purpose, outputs, and constraints. Efficient, but slightly dense; could be split for clarity. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no description of return format. For a service selector with rationale and alternatives, the description lacks details on how results are presented, limiting completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%. Description adds context about compliance and alternatives but does not elaborate on parameters beyond what schema provides. Baseline 3 for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it selects Azure services for government workloads, with compliance rationale, GCC High availability, and alternatives analysis. It distinguishes from siblings like 'gcc_high_guidance' (specific guidance) and 'landing_zone_design' (design focus).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for government workload service selection, especially with compliance. Does not explicitly state when not to use or mention alternatives, but the context of siblings and 'selector' makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/cloudcwfranck/govcloud-mcp'

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