Getting Started

May 27, 2026 ยท View on GitHub

EN | JA

Getting Started

Step-by-step instructions for setting up spec-driven-presentation-maker, from local usage to AWS deployment.

๐Ÿค– You don't need to read this page manually. This repo ships with AGENTS.md and CLAUDE.md. Just tell your coding agent (Claude Code, Codex CLI, Cursor, Kiro, GitHub Copilot in VS Code, etc.) what you want โ€” for example, "Set up this repo," "Deploy it to AWS," or "Wire it up so I can use it from Claude Desktop as Layer 2." The agent will read AGENTS.md, pick the right layer, and run the right commands for you.

๐Ÿš€ Deploying to AWS only? Use the One-Click Deploy โ€” just sign in to the AWS Console, click the Launch Stack button, and fill in the parameters. For advanced customization (external IdP, WAF, config.yaml), you can also use CloudShell deploy. This page covers Layer 1โ€“2 local usage and direct-CDK workflows for development and debugging.

Which Layer Do I Need?

  • Layer 1 โ€” Use from a SKILL.md-compatible coding agent (Claude Code, Codex CLI, Cursor, Kiro, GitHub Copilot in VS Code, etc.). Python only, no MCP or AWS.
  • Layer 2 โ€” Use from a local MCP client (Claude Desktop, Claude Cowork, etc.). Local stdio MCP, no AWS.
  • Layer 3 โ€” Use from a remote-only MCP client (Claude.ai web, etc. โ€” clients that cannot spawn local processes). AWS deployment required.
  • Layer 4 โ€” Use the included browser Web UI. AWS full-stack deployment.

Prerequisites

Common to all layers:

  • Python 3.10+
  • uv package manager

Additional requirements for deploying Layer 3โ€“4 with local CDK directly (not needed when using the CloudShell deploy path):

  • AWS Account (CDK bootstrapped: cdk bootstrap aws://ACCOUNT_ID/REGION)
  • Node.js 18+
  • Docker or Finch (for container builds)
  • AWS CLI with appropriate credentials configured

Layer 1: Kiro CLI Skill

The simplest way to use spec-driven-presentation-maker. Copy the skill/ directory to your Kiro CLI skills directory.

# Install dependencies
cd skill
uv sync

# Download icons (optional, recommended)
uv run python3 scripts/download_aws_icons.py
uv run python3 scripts/download_material_icons.py

# Verify
uv run python3 scripts/pptx_builder.py examples

The engine, references (design patterns, workflows, guides), sample templates (dark/light), and SKILL.md are all included.


Layer 2: Local MCP Server

Connect spec-driven-presentation-maker to any MCP-compatible client. No AWS account required.

Start the Server

cd mcp-local
uv sync
uv run python server.py

Configure Your MCP Client

Add to your client's MCP configuration file (claude_desktop_config.json, .vscode/mcp.json, etc.):

{
  "mcpServers": {
    "spec-driven-presentation-maker": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/mcp-local", "python", "server.py"]
    }
  }
}

Verify

Ask your agent to "create a presentation." The following workflow runs automatically:

  1. Reads workflow files via MCP Server Instructions
  2. Interviews you about topic, audience, and purpose
  3. Designs briefing โ†’ outline โ†’ art direction, persisted to specs/
  4. Builds slides one by one
  5. Generates PPTX and shows a preview

For the full tool list, see Architecture โ€” MCP Tool Reference.


Layer 3: Remote MCP Server (AWS)

Deploy spec-driven-presentation-maker as a remote MCP server on Amazon Bedrock AgentCore Runtime.

๐Ÿ’ก The Recommended Deploy Guide is the recommended path for AWS deployments. scripts/deploy.sh runs from CloudShell and from any local Linux/macOS environment, and builds via CodeBuild โ€” so you don't need CDK or Docker installed locally. The instructions below cover the direct local CDK workflow, mainly used for development and debugging.

Configuration

cd infra
npm ci
cp config.example.yaml config.yaml

Edit config.yaml to select which stacks to deploy.

Layer 3 โ€” MCP Server Only (Minimum)

stacks:
  data: true           # Required โ€” DynamoDB + S3
  runtime: true        # Required โ€” AgentCore Runtime MCP Server
  agent: false
  webUi: false

features:
  enableInvocationLogging: false  # Bedrock Model Invocation Logging (optional)

Deploy

# With Docker Desktop
npx cdk deploy --all

# With Finch (no Docker Desktop)
CDK_DOCKER=finch npx cdk deploy --all

# Non-interactive (CI/CD)
CDK_DOCKER=finch npx cdk deploy --all --require-approval never

Deployment takes approximately 15โ€“30 minutes.

Changing the Model ID

The default model is global.anthropic.claude-sonnet-4-6. To use a different model, edit infra/config.yaml:

model:
  modelId: "global.anthropic.claude-opus-4-6-v1"

Or override at deploy time:

npx cdk deploy --all --context modelId=global.anthropic.claude-opus-4-6-v1

Deployed Stacks (Layer 3)

StackResources
SdpmDataAmazon DynamoDB table, S3 buckets (pptx + resources), reference files deployed to S3
SdpmRuntimeAmazon Bedrock AgentCore Runtime endpoint, ECR repository + Docker image, Amazon Cognito M2M auth

Template Registration

CDK deploys template files to S3, but Amazon DynamoDB registration is required for list_templates to work. See Custom Templates โ€” Registering Templates (Layer 3) for details.

Verify Deployment

Get an OAuth Token

TOKEN=$(curl -s -X POST \
  "https://<CognitoDomain>.auth.<region>.amazoncognito.com/oauth2/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -u "<M2MClientId>:<M2MClientSecret>" \
  -d "grant_type=client_credentials&scope=sdpm/invoke" \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")

Find CognitoDomain, M2MClientId, and M2MClientSecret in the CDK outputs.

Call tools/list

ENCODED_ARN=$(python3 -c "import urllib.parse; print(urllib.parse.quote('<RuntimeArn>', safe=''))")

curl -X POST \
  "https://bedrock-agentcore.<region>.amazonaws.com/runtimes/${ENCODED_ARN}/invocations?qualifier=DEFAULT" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":1}'

A tool list in the response confirms success.


Layer 4: Full Stack (AWS)

๐Ÿ’ก Recommended path: Deploy Layer 4 via the Recommended Deploy Guide (works from CloudShell and any local Linux/macOS). Just run ./scripts/deploy.sh --region us-east-1 โ€” no local CDK/Docker needed.

Enable agent and webUi in config.yaml to add:

  • Strands Agent on Amazon Bedrock AgentCore Runtime
  • React Web UI (chat interface + deck preview)
  • JWT Bearer authentication (Amazon Cognito default, any OIDC IdP supported)

Configuration

stacks:
  data: true
  runtime: true
  agent: true          # Strands Agent on AgentCore Runtime
  webUi: true          # React Web UI (S3 + CloudFront)

features:
  enableInvocationLogging: false
npx cdk deploy --all

Deployed Stacks (Layer 4 additions)

StackResources
SdpmAuthAmazon Cognito User Pool, hosted UI
SdpmAgentStrands Agent on Amazon Bedrock AgentCore Runtime, ECR image
SdpmWebUiS3 bucket, Amazon CloudFront distribution, Amazon API Gateway, Lambda

Authentication Options

Default: Amazon Cognito User Pool

When agent or webUi is enabled, CDK automatically creates a Amazon Cognito User Pool with hosted UI. Users sign in via the web UI, and the JWT is propagated through the stack.

For authentication and authorization model details, see Architecture โ€” Authentication and Authorization Model.

External OIDC IdP

To use your own IdP (Entra ID, Auth0, Okta, etc.):

  1. Skip the AuthStack or configure your IdP as a Amazon Cognito federation source
  2. Set oidcDiscoveryUrl and allowedClients in config.yaml
  3. The Runtime's customJwtAuthorizer validates JWTs from any OIDC-compliant issuer

Checking Endpoints After Deployment

If the deploy script's log monitoring was interrupted, or you need to check the endpoints later, run:

bash scripts/show_endpoints.sh

This displays the CloudFront URL and Cognito sign-up URL from the deployed CloudFormation stacks.

Updating the Web UI

To update the Web UI without a full CDK deployment:

cd web-ui && npm run build && cd ..
bash scripts/deploy_webui.sh

aws-exports.json (auth info, API endpoints, etc.) is managed by a CDK Custom Resource. If you change the stack configuration, run npx cdk deploy SdpmWebUi.


Optional Features

WAF IP Address Restriction

Set waf.allowedIpV4AddressRanges and/or waf.allowedIpV6AddressRanges in config.yaml to restrict access to CloudFront and API Gateway by IP address.

waf:
  allowedIpV4AddressRanges:
    - "10.0.0.0/8"
    - "192.168.0.0/16"
  allowedIpV6AddressRanges:
    - "2001:db8::/32"

When configured, CDK creates:

  • SdpmCloudFrontWaf stack in us-east-1 (WAFv2 CLOUDFRONT scope requirement) โ€” attached to CloudFront
  • Regional WAF in the deploy region โ€” attached to API Gateway

Default action is Block โ€” only the listed IP ranges are allowed. When the waf section is omitted, no WAF resources are created.

โš ๏ธ IPv6 Note: If you specify only allowedIpV4AddressRanges without allowedIpV6AddressRanges, all IPv6 access is blocked. Modern browsers often prefer IPv6 when available, which can cause the Web UI to hang on "Loading authentication configuration..." even if your IPv4 address is allowed. Always specify both IPv4 and IPv6 ranges if your network uses dual-stack.

Cross-deck semantic search is provided out of the box, backed by Amazon Bedrock Knowledge Bases and Amazon S3 Vectors. No extra configuration is needed.

Custom Templates and Assets

For adding custom .pptx templates and icons, see Custom Templates and Assets.


Important Notes

Cost

See Cost Estimates for details. Delete resources with npx cdk destroy --all when done with development/testing.

Data Retention

DataStack's Amazon DynamoDB table and S3 buckets have RemovalPolicy.RETAIN. Data is not deleted by cdk destroy โ€” manual deletion is required.


Troubleshooting

Docker build fails with Finch

export CDK_DOCKER=finch

ECR permission error during deploy

Amazon Bedrock AgentCore Runtime may encounter permission errors when pulling ECR images. This typically resolves on re-deploy:

npx cdk deploy --all

Templates not showing in list_templates

Run upload_template.py after CDK deployment. CDK deploys .pptx files to S3 but does not create Amazon DynamoDB records.

.dockerignore missing

If Docker builds are extremely slow or fail with disk space errors, ensure .dockerignore exists at the repository root and includes infra/cdk.out/.

Agent not following the workflow

server_instructions auto-injection requires Strands SDK v1.30.0+. Verify that strands-agents>=1.30.0 is installed.

White screen at Amazon CloudFront URL

The deployment may have run without web-ui/build present:

cd web-ui && npm run build && cd ..
bash scripts/deploy_webui.sh