Skip to main content
Glama
JaxonDigital

Optimizely DXP MCP Server

by JaxonDigital

verify_access

Check API credentials and environment permissions before deployment. Verifies access to Integration, Preproduction, and Production environments with detailed read/write/deploy levels.

Instructions

🔑 Verify API credentials and environment permissions. REAL-TIME: 2-5s. Checks which environments (Integration, Preproduction, Production) are accessible with current credentials. Returns detailed permission levels (read/write/deploy) for each environment. Use before deployment operations to confirm access. Optional: project. Returns environment access matrix.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectIdNo
projectNameNo
apiKeyNo
apiSecretNo
forceRefreshNoForce re-check even if cached

Implementation Reference

  • The core handler function for the 'verify_access' tool. It verifies API credentials against Optimizely DXP environments (Integration, Preproduction, Production) using REST API calls, handles self-hosted projects with special messaging, determines accessible environments, and formats a user-friendly permission report.
    static async verifyAccess(args: any): Promise<any> {
        try {
            // Get project configuration
            const projectConfig = await this.getProjectConfig(args.projectName, args);
    
            // Check if this is a self-hosted project
            if (projectConfig.isSelfHosted || projectConfig.connectionString) {
                return ResponseBuilder.success(
                    `🏢 **Self-Hosted Project Detected**\n\n` +
                    `Project: ${projectConfig.name}\n` +
                    `Type: Self-hosted Azure Storage\n\n` +
                    `Self-hosted projects don't have Optimizely DXP environment permissions.\n` +
                    `They have direct access to Azure Storage containers.\n\n` +
                    `**Available Operations:**\n` +
                    `• List and download from storage containers\n` +
                    `• Download Application Insights logs\n` +
                    `• Access existing database backups\n` +
                    `• Download blobs and media files\n\n` +
                    `Use \`test_connection\` to verify Azure Storage access.`
                );
            }
    
            // Test all environments using direct REST API
            const accessible: string[] = [];
            const inaccessible: string[] = [];
    
            for (const environment of this.ENVIRONMENTS) {
                try {
                    const hasAccess = await this.testEnvironmentAccessDirect(
                        projectConfig.projectId || projectConfig.id || '',
                        projectConfig.apiKey || '',
                        projectConfig.apiSecret || '',
                        environment,
                        { timeout: 5000 }  // 5 second timeout per environment (3 envs = ~15s total)
                    );
    
                    if (hasAccess) {
                        accessible.push(environment);
                    } else {
                        inaccessible.push(environment);
                    }
                } catch (error) {
                    inaccessible.push(environment);
                }
            }
    
            // Determine highest environment access
            let highestEnvironment: string | null = null;
            if (accessible.includes('Production')) {
                highestEnvironment = 'Production';
            } else if (accessible.includes('Preproduction')) {
                highestEnvironment = 'Preproduction';
            } else if (accessible.includes('Integration')) {
                highestEnvironment = 'Integration';
            }
    
            // Format the response
            const permissions: Partial<PermissionResult> = {
                projectName: projectConfig.name,
                accessible,
                inaccessible,
                highestEnvironment,
                hasProductionAccess: accessible.includes('Production'),
                environments: {}
            };
    
            // Add detailed environment info
            this.ENVIRONMENTS.forEach(env => {
                permissions.environments![env] = {
                    hasAccess: accessible.includes(env),
                    testedAt: new Date().toISOString()
                } as any;
            });
    
            return ResponseBuilder.success(this.formatPermissionsMessage(permissions as PermissionResult, false));
    
        } catch (error: any) {
            OutputLogger.error(`Permission check failed: ${error}`);
            return ResponseBuilder.error(`Permission check failed: ${error.message}`);
        }
    }
  • Tool availability configuration entry for 'verify_access', defining it as available across all hosting types in the 'Support' category.
    'verify_access': {
        hostingTypes: ['dxp-paas', 'dxp-saas', 'self-hosted', 'unknown'],
        category: 'Support',
        description: 'Verify access and permissions'
    },
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: real-time performance (2-5s), what it checks (accessible environments), what it returns (detailed permission levels, environment access matrix), and optional caching behavior ('Force re-check even if cached' mentioned in schema). It doesn't cover error conditions or authentication failure responses.

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

Conciseness5/5

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

Front-loaded with purpose, followed by timing, functionality, usage guidance, and return format. Every sentence adds value with no redundancy. The emoji adds visual distinction without compromising clarity.

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

Completeness4/5

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

For a 5-parameter tool with no annotations and no output schema, the description does well covering purpose, behavior, and usage. It explains what the tool returns (environment access matrix with permission levels) despite no output schema. Missing details include parameter relationships and error handling, but overall provides good context.

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

Parameters4/5

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

Schema description coverage is only 20% (1 of 5 parameters has a description), so the description must compensate. It mentions 'Optional: project' which helps explain the projectId/projectName parameters, and the overall context clarifies that apiKey/apiSecret are for credential verification. However, it doesn't fully explain all 5 parameters or their relationships.

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 the tool's purpose with specific verbs ('verify', 'checks') and resources ('API credentials and environment permissions', 'environments'). It distinguishes from siblings by focusing on credential verification rather than deployment, logging, or project management operations.

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

Usage Guidelines5/5

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

Explicitly states when to use the tool ('Use before deployment operations to confirm access') and provides context about timing ('REAL-TIME: 2-5s'). This gives clear guidance on when this verification tool should be invoked versus proceeding directly with deployment operations.

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/JaxonDigital/optimizely-dxp-mcp'

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