Plugin check: Run
node "${CLAUDE_PLUGIN_ROOT}/scripts/check-version.js"— if it outputs a message, show it to the user before proceeding.
Add Server Logic
Create and manage one or more Power Pages Server Logic files — server-side JavaScript that runs securely on the Power Pages runtime, hidden from the browser and protected by web roles and table permissions. Server Logic enables secure external API integrations, Dataverse operations, and custom business logic without exposing sensitive code or credentials to the client.
Core Principles
- Microsoft Learn is the source of truth: Always fetch the latest documentation before writing code. The Server Logic feature is in preview and the SDK may change — never rely on cached knowledge alone.
- No browser APIs, no dependencies: Server Logic runs in a sandboxed server environment with ECMAScript 2023 support. There is no
fetch,XMLHttpRequest,setTimeout, or any DOM API. No npm packages are available. - Five functions only: A server logic file can only export these top-level functions:
get,post,put,patch,del. The namedeleteis a reserved word in JavaScript and cannot be used. - Always return a string: Every function must return a string. Use
JSON.stringify()when returning objects or arrays. - Use TaskCreate/TaskUpdate: Track all progress throughout all phases — create the todo list upfront with all phases before starting any work.
Prerequisites:
- An existing Power Pages code site created
- The site must be deployed at least once (
.powerpages-sitefolder must exist) — server logic files live inside.powerpages-site/server-logic/, so deployment is required before any server logic can be created
Initial request: $ARGUMENTS
Workflow
- Verify Site Exists — Locate the Power Pages project, explore existing patterns, and verify prerequisites
- Understand Requirements — Determine the user intent and whether the solution needs one or more server logic files
- Fetch Latest Documentation — Query Microsoft Learn for the most current Server Logic SDK reference
- Review Implementation Plan — Present the plan to the user and confirm before writing code
- Implement Server Logic — Create the approved
.jsand.serverlogic.ymlfiles in.powerpages-site/server-logic/<name>/ - Configure Table Permissions — (Conditional: only if Server.Connector.Dataverse is used) Set up table permissions for Dataverse tables accessed by the server logic
- Manage Secrets & Environment Variables — (Conditional: only if the server logic requires secrets) Store sensitive values securely using Azure Key Vault (recommended) or direct environment variables in Dataverse
- Configure Site Settings — Set up ServerLogic site settings if needed
- Client-Side Integration — Help wire the server logic into the site's frontend code
- Verify & Test Guidance — Validate the code and provide testing instructions
- Review & Deploy — Present summary and offer deployment
Phase 1: Verify Site Exists
Goal: Locate the Power Pages project root and confirm prerequisites
Actions:
- Create todo list with all 11 phases (see Progress Tracking table)
1.1 Locate Project
Look for powerpages.config.json in the current directory or immediate subdirectories
If not found: Tell the user to create a site first with /create-site.
1.2 Read Existing Config
Read powerpages.config.json to get the site name and configuration:
1.3 Detect Framework
Read package.json to determine the frontend framework (React, Vue, Angular, or Astro). This is needed for Phase 8 (client-side integration guidance). See ${CLAUDE_PLUGIN_ROOT}/references/framework-conventions.md for the full framework detection mapping.
1.4 Explore Existing Server Logic and Frontend Code
Use the Explore agent (via Task tool with agent_type: "explore") to analyze the site for existing server logic patterns and frontend code that may call or need to call server logic endpoints.
Prompt for the Explore agent:
"Analyze this Power Pages code site for server logic context. Check:
- Does
.powerpages-site/server-logic/exist? If yes, list all subdirectories and their .js files. Summarize what each server logic does (which functions it implements, what SDK features it uses). Also read the corresponding .serverlogic.yml files to check web role assignments.- Search the frontend source code (
src/**/*.{ts,tsx,js,jsx,vue,astro}) for any existing calls to/_api/serverlogics/— these indicate server logic endpoints already being consumed.- Look for CSRF token handling patterns (
__RequestVerificationToken,_layout/tokenhtml) — these show how the site currently makes authenticated API calls.- Check for any TODO/FIXME comments mentioning server logic, backend, or server-side processing.
- Look for hardcoded API URLs, mock data, or placeholder fetch calls that might need to be replaced with server logic calls.
- Check for any existing service layer or API utility files in
src/shared/,src/services/, or similar directories that could be reused for server logic integration.- Read
.powerpages-site/web-roles/*.webrole.ymlfiles to list available web roles and their GUIDs — these are needed when creating the server logic metadata YAML.- For each existing server logic, assess whether it can be reused or safely extended for the requested capability instead of creating a brand-new server logic file. Call out any strong reuse candidates and explain why. Report all findings so we can avoid duplicating work and match existing patterns."
From the Explore agent's findings, note:
- Existing server logic files — what's already implemented, and which ones are candidates for reuse or extension
- Frontend calling patterns — how the site makes API calls (match this pattern in Phase 9)
- Existing service/utility files — reuse these when adding client-side integration
- Gaps — frontend code that references server logic endpoints that don't exist yet
1.5 Check Deployment Status (Mandatory)
Look for the .powerpages-site folder:
If not found: The site must be deployed before server logic can be created — server logic files live inside .powerpages-site/server-logic/. Tell the user:
"The
.powerpages-sitefolder was not found. Server logic files are stored inside this folder, so the site must be deployed at least once before creating server logic. Would you like to deploy now?"
Use AskUserQuestion:
| Question | Options |
|---|---|
The .powerpages-site folder is required for server logic. Would you like to deploy the site now? | Yes, deploy now (Required), Cancel |
If "Yes, deploy now": Invoke /deploy-site first, then continue to Phase 2.
If "Cancel": Stop the workflow — server logic cannot be created without .powerpages-site.
Output: Confirmed project root, .powerpages-site exists, existing server logic (if any), available web roles
Phase 2: Understand Requirements
Goal: Determine the user intent, identify whether one or more server logic files are needed, and capture the required HTTP methods for each item
Actions:
2.1 Analyze User Request
From the user's request, determine:
- Intent shape: Does the request map to a single server logic or multiple server logic?
- Reuse opportunities: Can an existing server logic satisfy or be safely extended for part of the request?
- Server logic inventory: For each required server logic, capture the purpose, suggested endpoint name, and whether it should be reused, extended, or created new
- HTTP methods needed: Which of the 5 functions should be implemented for each server logic (
get,post,put,patch,del)
Prefer reuse or safe extension of an existing server logic when it already matches the domain, sec