Skip to main content
Glama
daekeun-ml

PowerPoint Translator

by daekeun-ml

PowerPoint Translator using Amazon Bedrock

A powerful PowerPoint translation tool that leverages Amazon Bedrock models for high-quality translation. This service can be used both as a standalone command-line tool and as a FastMCP (Fast Model Context Protocol) service for integration with AI assistants like Kiro. It translates PowerPoint presentations while preserving formatting and structure.

Features

New features

  • Source Language Auto-Detect: One-shot LLM detection from the document text; prompt, cache key, and cost estimate all use the detected language. Skips the API entirely if source == target.

  • Chart Translation: Translates chart titles, axis labels, category names, and series names — without touching numeric data

  • Translation Cache: Pluggable SQLite / in-memory cache that reuses prior translations across runs; cache key includes model, language, polishing, and glossary

  • Custom Glossary: External YAML glossary for consistent terminology per language; auto-detected from ./glossary.yaml

  • Dry-Run / Cost Preview: --dry-run estimates tokens and cost before actually calling Bedrock

  • Automatic Retry: tenacity-backed exponential backoff on throttling / transient Bedrock errors

  • Rich Progress: Real-time progress bar with ETA, cache hit rate, and running token/cost totals — per-file slide progress rows in batch mode

Existing features

  • PowerPoint Translation: Translate text content in PowerPoint presentations

  • Amazon Bedrock Integration: Uses Amazon Bedrock models for high-quality translation (Claude Opus 4.7, Sonnet 4.6, Nova, Llama 4, and more)

  • Format Preservation: Maintains original formatting, layouts, and styles

  • Language-Specific Fonts: Automatically applies appropriate fonts for target languages

  • Color & Style Preservation: Preserves original text colors and formatting even for untranslated content

  • Standalone & MCP Support: Use as a command-line tool or integrate with AI assistants via FastMCP

  • Multiple Languages: Supports translation between various languages (90+ supported)

  • Batch Processing: Can handle multiple slides, text elements, and entire folders efficiently (parallel workers)

  • Selective Translation: Translate entire presentations, specific slides, or all files in a folder

Related MCP server: PowerPoint Translator MCP Service

Examples

Translation

The PowerPoint Translator maintains the original formatting while accurately translating content:

Claude Code MCP Examples

Usage Examples

🧾 Quick reference: see docs/cheatsheet.md for a compact list of everyday flags.

Translate entire presentation:

uv run ppt-translate translate samples/en.pptx --target-language ko

standalone

Translate specific slides:

uv run ppt-translate translate-slides samples/en.pptx --slides "1,3" --target-language ko

Batch translate all PPT files in a folder:

# Recursive by default — translates all .pptx in samples/ and its subfolders
uv run ppt-translate batch-translate samples/ --target-language ko

# Top level only (skip subfolders)
uv run ppt-translate batch-translate samples/ --target-language ko --no-recursive

# Specify output folder
uv run ppt-translate batch-translate samples/ -t ja -o output/

# Specify number of parallel workers (default: 4)
uv run ppt-translate batch-translate samples/ -t ko -w 4

# Custom output and workers
uv run ppt-translate batch-translate reInvent-2025/ -t ko -o translated/ -w 8

batch-translate

Get slide information:

uv run ppt-translate info samples/en.pptx

Preview cost before translating (dry-run):

# Estimate tokens / cost without calling Bedrock — no file is written
uv run ppt-translate translate samples/en.pptx -t ko --dry-run

dry-run

Translation cache (enabled by default):

# SQLite cache at ~/.ppt-translator/cache.db — translations are reused across runs
uv run ppt-translate translate samples/en.pptx -t ko

# In-memory cache (per-process, no disk writes)
uv run ppt-translate translate samples/en.pptx -t ko --cache-backend memory

# Disable cache entirely
uv run ppt-translate translate samples/en.pptx -t ko --no-cache

# Custom cache path
uv run ppt-translate translate samples/en.pptx -t ko --cache-path /tmp/my-cache.db

The cache key is sha256(source_text + target_language + model_id + polishing + glossary_hash), so translations are automatically reused only when every relevant input matches. Changing the glossary, language, or model invalidates entries as expected.

Custom glossary (YAML):

# Auto-detects ./glossary.yaml in the current directory
uv run ppt-translate translate samples/en.pptx -t ko

# Or point to a specific glossary file
uv run ppt-translate translate samples/en.pptx -t ko -g my-glossary.yaml

Example glossary.yaml:

ko:
  "API": "API"            # src == tgt → keep as-is (do not translate)
  "Foundation Model": "파운데이션 모델"
  "Observability": "Observability"
ja:
  "Cloud": "クラウド"

Skip chart translation (if you want charts untouched):

uv run ppt-translate translate samples/en.pptx -t ko --no-charts

Source language (auto-detected by default):

# Source language is auto-detected on first run (1 extra Bedrock call per PPT)
uv run ppt-translate translate samples/en.pptx -t ko

# Or specify it explicitly to skip detection
uv run ppt-translate translate samples/en.pptx --source-language en -t ko

# Disable auto-detection entirely (let the model infer from context, like before)
uv run ppt-translate translate samples/en.pptx -t ko --no-detect-source

The detected language is folded into the cache key, so the same text under different source languages won't cross-contaminate. If source == target (e.g., translating a Korean deck to Korean) the tool skips Bedrock entirely.

Prerequisites

  • Python 3.11 or higher

  • AWS Account with Bedrock access

  • AWS CLI configured with appropriate credentials

  • Access to Amazon Bedrock models (e.g., Claude, Nova, etc.)

AWS Credentials Setup

Before using this service, ensure your AWS credentials are properly configured. You have several options:

  1. AWS CLI Configuration (Recommended):

    aws configure

    This will prompt you for:

    • AWS Access Key ID

    • AWS Secret Access Key

    • Default region name

    • Default output format

  2. AWS Profile Configuration:

    aws configure --profile your-profile-name
  3. Environment Variables (if needed):

    export AWS_ACCESS_KEY_ID=your_access_key
    export AWS_SECRET_ACCESS_KEY=your_secret_key
    export AWS_DEFAULT_REGION=us-east-1
  4. IAM Roles (when running on EC2 instances)

The service will automatically use your configured AWS credentials. You can specify which profile to use in the .env file.

Installation

  1. Clone the repository:

    git clone https://github.com/daekeun-ml/ppt-translator
    cd ppt-translator
  2. Install dependencies using uv (recommended):

    uv sync

    Or using pip:

    pip install -r requirements.txt
  3. Set up environment variables: Edit .env file with your configuration:

    # AWS Configuration
    AWS_REGION=us-east-1
    AWS_PROFILE=default
    
    # Translation Configuration
    DEFAULT_TARGET_LANGUAGE=ko
    BEDROCK_MODEL_ID=global.anthropic.claude-sonnet-4-6
    
    # Translation Settings
    MAX_TOKENS=4000
    TEMPERATURE=0.1
    ENABLE_POLISHING=true
    BATCH_SIZE=20
    CONTEXT_THRESHOLD=5
    
    # Font Settings by Language
    FONT_KOREAN=맑은 고딕
    FONT_JAPANESE=Yu Gothic UI
    FONT_ENGLISH=Amazon Ember
    FONT_CHINESE=Microsoft YaHei
    FONT_DEFAULT=Arial
    
    # Debug Settings
    DEBUG=false
    
    # Post-processing Settings
    ENABLE_TEXT_AUTOFIT=true
    TEXT_LENGTH_THRESHOLD=10

    Note: AWS credentials (Access Key ID and Secret Access Key) are not needed in the .env file if you have already configured them using aws configure. The service will automatically use your AWS CLI credentials.

Usage

Standalone Command-Line Usage

The PowerPoint Translator can be used directly from the command line using the ppt-translate command:

# Translate entire presentation to Korean
uv run ppt-translate translate samples/en.pptx --target-language ko

# Translate specific slides (individual slides)
uv run ppt-translate translate-slides samples/en.pptx --slides "1,3" --target-language ko

# Translate slide range
uv run ppt-translate translate-slides samples/en.pptx --slides "2-4" --target-language ko

# Translate mixed (individual + range)
uv run ppt-translate translate-slides samples/en.pptx --slides "1,2-4" --target-language ko

# Get slide information and previews
uv run ppt-translate info samples/en.pptx

# Show help
uv run ppt-translate --help
uv run ppt-translate translate --help
uv run ppt-translate translate-slides --help

FastMCP Server Mode (for AI Assistant Integration)

Start the FastMCP server for integration with AI assistants like Kiro:

# Using uv (recommended)
uv run mcp_server.py

# Using python directly
python mcp_server.py

FastMCP Setup

The same server works with any MCP host (Claude Code, Kiro, Kiro CLI, ...). Pick your host below — the JSON schema is identical; only the config file path differs.

Shared server config

Replace /path/to/ppt-translator/ with the actual path to your clone. AWS_* env vars are optional when aws configure is already set up.

{
  "mcpServers": {
    "ppt-translator": {
      "command": "uv",
      "args": [
        "--project", "/path/to/ppt-translator",
        "run", "/path/to/ppt-translator/mcp_server.py"
      ],
      "env": {
        "AWS_REGION": "us-east-1",
        "AWS_PROFILE": "default",
        "BEDROCK_MODEL_ID": "global.anthropic.claude-sonnet-4-6"
      },
      "disabled": false,
      "autoApprove": [
        "translate_powerpoint",
        "get_slide_info",
        "get_slide_preview",
        "translate_specific_slides"
      ]
    }
  }
}

Prefer running with plain python instead of uv? Swap "command": "uv" and remove "--project", ... from args, leaving "args": ["/path/to/ppt-translator/mcp_server.py"].

Claude Code

Claude Code is Anthropic's official CLI. Two ways to register:

Option 1 — claude mcp add (fastest)

# Project-scoped (only when running Claude Code inside this repo)
claude mcp add ppt-translator \
  --scope project \
  -- uv --project /path/to/ppt-translator run /path/to/ppt-translator/mcp_server.py


claude mcp add ppt-translator \
  --scope project \
  -- uv --project /Users/daekeun/Github/ppt-translator run /Users/daekeun/Github/ppt-translator/mcp_server.py

# User-scoped (available in every project)
claude mcp add ppt-translator \
  --scope user \
  -e AWS_REGION=us-east-1 \
  -e AWS_PROFILE=default \
  -e BEDROCK_MODEL_ID=global.anthropic.claude-sonnet-4-6 \
  -- uv --project /path/to/ppt-translator run /path/to/ppt-translator/mcp_server.py

Restart Claude Code, then run /mcp to confirm the server is connected.

Option 2 — config file

Paste the shared JSON into one of:

  • Project-scoped: .mcp.json at the repo root (commit to share with the team)

  • User-scoped: ~/.claude.json under the top-level mcpServers key

Troubleshooting

  • claude --debug prints MCP connection logs at startup.

  • Test the server standalone: uv run mcp_server.py. If that errors, fix it before retrying the integration.

Kiro

  • Install Kiro: https://kiro.dev (CLI: https://kiro.dev/cli)

  • Paste the shared JSON into the appropriate file:

    • Kiro (desktop): ~/.kiro/settings/mcp.json

    • Kiro CLI (macOS/Linux): ~/.aws/amazonq/mcp.json

    • Kiro CLI (Windows): %APPDATA%\amazonq\mcp.json

Using it

Just ask in natural language — the host picks the right tool automatically:

Translate samples/en.pptx to Korean
Batch-translate samples/ into Japanese, dry-run first
Show me what's in slide 3 of en.pptx

Available MCP Tools

The MCP server provides the following tools:

  • translate_powerpoint: Translate an entire PowerPoint presentation

    • Parameters:

      • input_file: Path to the input PowerPoint file (.pptx)

      • target_language: Target language code (default: 'ko')

      • output_file: Path for the translated output file (optional, auto-generated)

      • model_id: Amazon Bedrock model ID (default from BEDROCK_MODEL_ID env)

      • enable_polishing: Enable natural language polishing (default: true)

      • glossary_file: Path to a glossary YAML file (defaults to ./glossary.yaml if present)

      • cache_backend: "sqlite" (default), "memory", or "none"

      • dry_run: If true, estimate cost without translating (default: false)

      • translate_charts: Translate chart titles/axes/categories/series (default: true)

      • source_language: ISO 639-1 source code. Auto-detected if omitted.

      • auto_detect_source: Run 1-shot LLM language detection when source_language is omitted (default: true)

  • translate_specific_slides: Translate only specific slides in a PowerPoint presentation

    • Parameters:

      • input_file: Path to the input PowerPoint file (.pptx)

      • slide_numbers: Comma-separated slide numbers to translate (e.g., "1,3,5" or "2-4,7")

      • target_language: Target language code (default: 'ko')

      • output_file: Path for the translated output file (optional, auto-generated)

      • model_id: Amazon Bedrock model ID (default from BEDROCK_MODEL_ID env)

      • enable_polishing: Enable natural language polishing (default: true)

      • glossary_file, cache_backend, dry_run, translate_charts, source_language, auto_detect_source: same as above

  • batch_translate_powerpoint: Translate all PowerPoint files in a folder in parallel

    • Parameters:

      • input_folder, target_language, output_folder, model_id, enable_polishing

      • recursive, workers (default: 4)

      • glossary_file, cache_backend, cache_path, dry_run, translate_charts, source_language, auto_detect_source

  • get_slide_info: Get information about slides in a PowerPoint presentation

    • Parameters:

      • input_file: Path to the PowerPoint file (.pptx)

    • Returns: Overview with slide count and preview of each slide's content

  • get_slide_preview: Get detailed preview of a specific slide's content

    • Parameters:

      • input_file: Path to the PowerPoint file (.pptx)

      • slide_number: Slide number to preview (1-based indexing)

  • list_supported_languages: List all supported target languages for translation

  • list_supported_models: List all supported Amazon Bedrock models

  • get_translation_help: Get help information about using the translator

Configuration

Environment Variables

  • AWS_REGION: AWS region for Bedrock service (default: us-east-1)

  • AWS_PROFILE: AWS profile to use (default: default)

  • DEFAULT_TARGET_LANGUAGE: Default target language for translation (default: ko)

  • BEDROCK_MODEL_ID: Bedrock model ID for translation (default: global.anthropic.claude-sonnet-4-6)

  • BEDROCK_MAX_RETRIES: Max retry attempts for transient Bedrock errors (default: 5)

  • MAX_TOKENS: Maximum tokens for translation requests (default: 4000)

  • TEMPERATURE: Temperature setting for AI model (default: 0.1)

  • ENABLE_POLISHING: Enable translation polishing (default: true)

  • BATCH_SIZE: Number of texts to process in a batch (default: 20)

  • CONTEXT_THRESHOLD: Number of texts to trigger context-aware translation (default: 5)

  • CACHE_BACKEND: Translation cache backend — sqlite / memory / none (default: sqlite)

  • CACHE_PATH: SQLite cache file location (default: ~/.ppt-translator/cache.db)

  • DEBUG: Enable debug logging (default: false)

Supported Claude Models (Bedrock)

The latest Anthropic models on Amazon Bedrock are registered in Config.SUPPORTED_MODELS and pricing.py. Common IDs you can pass via --model-id or BEDROCK_MODEL_ID:

Model

Global profile

US profile

Claude Opus 4.7

global.anthropic.claude-opus-4-7

us.anthropic.claude-opus-4-7

Claude Opus 4.6

global.anthropic.claude-opus-4-6-v1

us.anthropic.claude-opus-4-6-v1

Claude Sonnet 4.6

global.anthropic.claude-sonnet-4-6

us.anthropic.claude-sonnet-4-6

Claude Opus 4.5

global.anthropic.claude-opus-4-5-20251101-v1:0

us.anthropic.claude-opus-4-5-20251101-v1:0

Claude Sonnet 4.5

global.anthropic.claude-sonnet-4-5-20250929-v1:0

us.anthropic.claude-sonnet-4-5-20250929-v1:0

Claude Haiku 4.5

global.anthropic.claude-haiku-4-5-20251001-v1:0

us.anthropic.claude-haiku-4-5-20251001-v1:0

Claude 3.7 Sonnet

—

us.anthropic.claude-3-7-sonnet-20250219-v1:0

Claude Opus 4.6 / 4.7 also support eu., au. (Opus 4.6), and jp. (Opus 4.7) geo-specific inference profiles. Availability depends on your AWS account / region — check the AWS Bedrock console to confirm.

Supported Languages

The service supports translation between major languages including:

  • English (en)

  • Korean (ko)

  • Japanese (ja)

  • Chinese Simplified (zh)

  • Chinese Traditional (zh-tw)

  • Spanish (es)

  • French (fr)

  • German (de)

  • Italian (it)

  • Portuguese (pt)

  • Russian (ru)

  • Arabic (ar)

  • Hindi (hi)

  • And many more...

Troubleshooting

Common Issues

  1. AWS Credentials Not Found:

    • Ensure AWS credentials are properly configured

    • Check AWS CLI configuration: aws configure list

  2. Bedrock Access Denied:

    • Verify your AWS account has access to Bedrock

    • Check if the specified model is available in your region

  3. FastMCP Connection Issues:

    • Verify the path in mcp.json is correct

    • Check that Python and dependencies are properly installed

    • Review logs in Q Developer for error messages

    • Test the server: uv run python mcp_server.py

  4. PowerPoint File Issues:

    • Ensure the input file is a valid PowerPoint (.pptx) file

    • Check file permissions for both input and output paths

  5. Module Import Errors:

    • Use uv run to ensure proper virtual environment activation

    • Install dependencies: uv sync

Development

Project Structure

ppt-translator/
├── mcp_server.py                    # FastMCP server implementation
├── main.py                          # Main entry point
├── ppt_translator/                  # Core package
│   ├── __init__.py                  # Package initialization
│   ├── cli.py                       # Command-line interface
│   ├── ppt_handler.py               # PowerPoint processing logic
│   ├── translation_engine.py        # Translation service (cache/glossary/metrics)
│   ├── bedrock_client.py            # Amazon Bedrock client (with retry)
│   ├── retry.py                     # tenacity-based retry policy for Bedrock
│   ├── cache.py                     # Translation cache backends (SQLite/Memory/Null)
│   ├── glossary.py                  # YAML glossary loader and hashing
│   ├── pricing.py                   # Model pricing table + token/cost estimation
│   ├── chart_handler.py             # Chart text collection and update
│   ├── progress.py                  # Rich-based progress display
│   ├── language_detection.py        # 1-shot source language detection (LLM)
│   ├── post_processing.py           # Post-processing utilities
│   ├── config.py                    # Configuration management
│   ├── dependencies.py              # Dependency management
│   ├── text_utils.py                # Text processing utilities
│   └── prompts.py                   # Translation prompts
├── glossary.yaml                    # Default glossary (per-language term map)
├── requirements.txt                 # Python dependencies
├── pyproject.toml                   # Project configuration (uv)
├── uv.lock                          # Dependency lock file
├── .env                             # Environment variables template
├── Dockerfile                       # Docker configuration
├── docs/                            # Documentation
├── imgs/                            # Example images and screenshots
└── samples/                         # Sample files

License

This project is licensed under the MIT License - see the LICENSE file for details.

Available Tools

11 tools
batch_export_powerpoint_markdownC

Export all PowerPoint files in a folder as Markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNostructured
workersNo
model_idNoopenai.gpt-5.6-terra
recursiveNo
cache_pathNo
web_verifyNo
input_folderYes
cache_backendNosqlite
chunk_workersNo
output_folderNo
max_web_queriesNo
output_languageNoja
slides_per_chunkNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the output format and batch scope; it does not mention output location, caching, concurrency, web queries, or side effects of the many configuration options.

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

Conciseness3/5

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

The description is a single concise sentence with no unnecessary words, and the core operation is front-loaded. However, for a tool with 13 parameters, no annotations, and an output schema, this brevity crosses into under-specification rather than good structure.

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?

With 13 parameters, no annotations, and no parameter-level documentation, the description is insufficient. It gives an agent the minimal default-call scenario but omits all operational guidance about output folders, language, model selection, concurrency, and when the batch tool is preferable to the single-file tool.

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

Parameters1/5

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

Schema description coverage is 0%, and the description names none of the 13 parameters. The important parameters such as mode, workers, output_language, cache_path, recursive, and output_folder are left completely unexplained, so an agent cannot reason about their semantics.

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

Purpose4/5

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

The description uses a clear verb ('Export') and a specific resource/scope: all PowerPoint files in a folder to Markdown. It identifies the batch nature of the tool well enough to be distinguished from the sibling export_powerpoint_markdown, though it does not name that sibling.

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

Usage Guidelines3/5

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

The phrase 'all ... in a folder' implies this is the batch variant and should be used for folder-wide conversion. However, there is no explicit guidance about when to prefer the single-file sibling or any exclusions, prerequisites, or boundary conditions.

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

batch_translate_powerpointA

Translate all PowerPoint files in a folder (with optional recursive processing).

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoIf True, estimate aggregate cost without translating
workersNoNumber of PowerPoint files translated concurrently (default: 10)
model_idNoAmazon Bedrock Mantle model ID to use for translationopenai.gpt-5.6-terra
recursiveNoProcess subfolders recursively (default: True — set to False to limit to top level)
cache_pathNoSQLite cache path (ignored for memory/none backends)
input_folderYesPath to the input folder containing PowerPoint files
cache_backendNoTranslation cache backend: 'sqlite' (default), 'memory', or 'none'sqlite
glossary_fileNoPath to a glossary YAML file (defaults to ./glossary.yaml if present)
output_folderNoPath to save translated files (optional, auto-generated if not provided)
slide_workersNoMaximum slide translation workers per presentation
source_languageNo
target_languageNoTarget language code (e.g., 'ko', 'ja', 'es', 'fr', 'de')ja
enable_polishingNoEnable natural language polishing for more fluent translation
translate_chartsNoIf True, translate chart titles/axes/categories/series
slides_per_workerNoNumber of slides assigned to each slide worker
auto_detect_sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

There are no annotations, so the description carries the full responsibility for behavioral disclosure. It only states scope and recursion; it does not mention where output files are written, whether source files are modified, cost implications, caching, model defaults, or any dry-run behavior. For a batch mutation-like operation, this is a meaningful transparency gap.

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?

The description is a single focused sentence with the core action front-loaded and the recursive option included as a compact parenthetical. There is no fluff, and every component contributes to the primary selection decision.

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

Completeness3/5

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

For a 16-parameter tool with no annotations, this description is quite sparse, but the rich input schema and existence of an output schema reduce the burden. It still omits useful high-level context, such as how the output folder is determined, whether files are overwritten, and how dry-run behaves, but it is sufficient for a straightforward batch translation call.

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?

The schema already provides detailed descriptions for 88% of parameters, including defaults, so the description does not need to repeat parameter semantics. The only parameter-related mention is the recursive parenthetical, which adds marginal value over the schema's own recursive parameter description, so the baseline 3 is appropriate.

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 names a specific verb and resource ('Translate all PowerPoint files in a folder') and adds a recursive scope trait. It clearly distinguishes this from siblings such as translate_powerpoint, translate_specific_slides, or batch_export_powerpoint_markdown, even without naming them.

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?

The description gives a clear usage context: use this when you want to translate every PowerPoint file in a folder, optionally recursing into subfolders. It does not explicitly name sibling tools for single-file translation or exclusion rules, but the folder-scoped phrasing makes the intended invocation obvious.

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

export_powerpoint_markdownB

Export one PowerPoint presentation as structured Markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo"structured" for AI notes or "extract" for deterministic extractionstructured
workersNoConcurrent slide-summary chunks
model_idNoBedrock Mantle model used for structured modeopenai.gpt-5.6-terra
cache_pathNoOptional SQLite cache path
input_fileYesPath to a .pptx file
web_verifyNoRun bounded client-side web verification
output_fileNoMarkdown output path; generated beside the PPT when omitted
cache_backendNosqlite, memory, or nonesqlite
max_web_queriesNoMaximum search queries when web_verify is enabled
output_languageNoLanguage code for AI notes, or "source"ja
slides_per_chunkNoSlides supplied to each summary request

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the burden of explaining behavior. It only discloses that a PowerPoint is exported to Markdown, but fails to mention that the tool may invoke an AI model, perform web verification, write output files, use a cache, or have side effects. These behaviors are important for agent decision-making and are not 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?

The description is one concise, front-loaded sentence with no filler. It does not waste space, though for a tool with 11 parameters and important behavioral differences, a slightly richer description would be more appropriately sized.

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?

This is a complex tool with many options (mode, workers, model, caching, web_verify, output_language, chunking) and no annotations. The one-sentence description is not enough to let an agent know when to choose single export vs batch, or what operational trade-offs exist. The presence of an output schema helps, but the description still leaves substantial contextual gaps.

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?

Parameter schema coverage is 100%, with descriptions for all parameters, so the schema already explains each parameter. The tool description adds no parameter-level nuance beyond saying 'structured Markdown', so a baseline score of 3 is appropriate.

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 states a concrete action ('Export'), a clear resource ('one PowerPoint presentation'), and a specific output ('structured Markdown'). The word 'one' distinguishes it from the sibling batch_export_powerpoint_markdown tool, making the intended scope unambiguous.

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

Usage Guidelines2/5

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

The description provides no guidance on when to prefer this tool over alternatives such as batch_export_powerpoint_markdown or translate_powerpoint. It also does not mention the 'structured' vs 'extract' modes as usage decisions, leaving the agent to infer mostly from parameter defaults.

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

get_slide_infoC

Get information about slides in a PowerPoint presentation.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_fileYesPath to the PowerPoint file (.pptx)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/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, but it only says 'get information.' It does not describe whether the operation changes files, requires authentication, opens read-only, performs disk access beyond the given path, or has performance implications. The 'get' verb implies a read, but little else is 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?

The description is short, direct, and front-loaded, with no filler. It is appropriately compact for a tool with one parameter, but its brevity also skips useful context about the returned data and how this tool differs from nearby siblings.

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

Completeness3/5

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

For a simple one-parameter tool with an output schema, the description is minimally adequate. However, given the presence of purpose-overlapping siblings such as get_slide_preview, a little more context about what makes get_slide_info distinct would meaningfully improve the definition.

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?

The single parameter input_file is already fully described in the schema as 'Path to the PowerPoint file (.pptx).' The description adds no parameter-level detail beyond that, so it meets the baseline for high schema coverage without adding new meaning.

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

Purpose4/5

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

The description states a clear verb and resource — it 'gets information about slides' from a PowerPoint file. It is understandable, but 'information' is vague and does not define what kinds of slide data are returned, so it stops short of a fully precise statement.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool over its siblings like get_slide_preview, export_powerpoint_markdown, or translate_specific_slides. The agent is not told whether this is the right fit for a casual read, a translation workflow, or a visual check, so selection depends entirely on inference.

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

get_slide_previewB

Get a detailed preview of a specific slide's content.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_fileYesPath to the PowerPoint file (.pptx)
slide_numberYesSlide number to preview (1-based indexing)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It says 'detailed preview' but does not disclose read-only behavior, what is included, or how it handles missing files or invalid slide numbers. This is not misleading, but it is under-specified.

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?

The description is a single, front-loaded sentence with no filler. It conveys the essential operation without redundant restatement of parameter names or sibling context.

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

Completeness3/5

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

For a two-parameter read-style tool with a full output schema, this is close to sufficient, but the missing use-case guidance and behavioral detail prevent it from being fully complete. An agent can likely call it correctly, but not confidently know when it is the right choice versus get_slide_info or export tools.

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?

The schema already provides high-quality, 100% descriptions for both parameters. The phrase 'specific slide' reinforces the slide_number parameter, but the description adds no additional semantic value beyond the schema.

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

Purpose4/5

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

The description clearly identifies the verb ('Get') and resource ('detailed preview of a specific slide's content'), making it easy to recognize what the tool does. It is slightly vague about how this differs from the sibling get_slide_info, so it does not fully earn a 5.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool instead of get_slide_info, export_powerpoint_markdown, or translate_specific_slides. The description gives a definitional statement but no contextual signal for tool selection.

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

get_translation_helpA

Get help information about using the PowerPoint translator.

Returns: Help text with usage examples

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

The description tells the agent what the operation returns — help text and usage examples — and thus describes the complete observable behavior. Since there are no annotations and no realistic side effects for a help lookup, the description carries the transparency burden reasonably well.

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?

Two sentences, no fluff, and a clear 'Returns:' marker makes it easy to scan. Every word earns its place.

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?

Given zero parameters and an output schema, the description is nearly complete for a help-intent tool. It states what the user receives and covering the full scope of the operation; a little more explicit context about which translator features the help covers would fully set expectations.

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?

The tool has zero parameters, so there is no schema to reinforce or undocumented input to compensate for. The baseline of 4 applies because the description has nothing to add about non-existent parameters and no semantic risk to mitigate.

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?

States a clear verb and resource: get help about using the PowerPoint translator. The mention of 'help text and usage examples' makes its purpose concrete and distinct from translation/export sibling tools.

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

Usage Guidelines3/5

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

The name and description imply that this should be used when an agent needs assistance or examples about the translator. However, there is no explicit 'when to use this vs alternatives' statement, though the absence is less harmful here because siblings are task-execution tools and this is clearly the help lookup tool.

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

list_supported_languagesA

List all supported target languages for translation.

Returns: List of supported language codes and names

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

There are no annotations, so the description carries the burden of disclosing behavior. The description explains that the tool returns a list of supported language codes and names, which covers the basic behavioral outcome, but it does not disclose details such as whether the list is exhaustive, whether it is ordered, or whether it includes any additional metadata. This is acceptable for a simple read-only list tool but lacks depth.

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?

The description is extremely concise and front-loaded with the core purpose. The returns statement adds necessary information without redundancy. Every sentence earns its place.

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

Completeness5/5

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

For a zero-parameter tool with a straightforward output, the description is sufficient. It states the action, the resource, and the return content. The presence of an output schema covers further structural details, leaving no missing information an agent would need to invoke this tool correctly.

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?

The tool has zero parameters, so the description does not need to explain parameter usage. The baseline of 4 applies, and the schema coverage is 100%, leaving no ambiguity.

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 uses a specific verb ('List') and clearly identifies the resource ('all supported target languages for translation'). It distinguishes itself from sibling tools like list_supported_models by specifying target languages, leaving no ambiguity about what this tool returns.

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

Usage Guidelines3/5

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

The purpose is stated clearly enough to infer when it should be used, but there is no explicit mention of when not to use it or alternatives. Since sibling tools include similar list-related operations, some explicit usage guidance would be helpful, though the description implies its use for enumerating translation target languages.

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

list_supported_modelsA

List all supported Amazon Bedrock Mantle models for translation.

Returns: List of supported model IDs

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

Annotations are nonexistent, so the description carries the full burden of behavioral disclosure. It only says 'List', which implies read-only, but does not explicitly state safety, permissions, or side effects. The return type is the only behavioral clue.

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?

The description is short and front-loaded with the purpose. The 'Returns' line is somewhat redundant with the opening sentence, but the overall structure is clear and economically written.

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 parameterless tool with an output schema provided, the description captures the essential purpose and return. However, it could have briefly mentioned how this model list fits into the translation process, which is minor given the simplicity of the tool.

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?

The tool has zero parameters and the input schema confirms this. There is nothing for the description to add. The baseline for 0-parameter tools is 4, and the description correctly contains no parameter-specific text.

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 states a specific verb, 'List', and a clear resource, 'all supported Amazon Bedrock Mantle models for translation'. This clearly differentiates it from sibling tools like list_supported_languages or the translation/export operations.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool, no mention of alternatives or exclusions, and no context about how this relates to the translation workflow. The agent must infer its usage externally.

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

post_process_powerpointA

Apply post-processing to a PowerPoint presentation to optimize text boxes.

This function enables text wrapping and shrink text on overflow for text boxes that contain text longer than the specified threshold.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_fileYesPath to the input PowerPoint file (.pptx)
output_fileNoPath to save the processed file (optional, auto-generated if not provided)
enable_autofitNoEnable text auto-fitting (default: True)
text_thresholdNoText length threshold for enabling auto-fit (overrides .env setting)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/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 behavior disclosure. It does disclose the core behavioral effect — enabling text wrapping and shrink-on-overflow for qualifying text boxes. However, it does not mention whether the input file is modified in place, how the auto-generated output path behaves, or any side effects on existing autofit settings, leaving a mild gap for a mutation tool.

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?

Two front-loaded sentences with zero filler. The first sentence states the operation and resource, the second immediately gives the concrete behavior and the condition that triggers it. Every part of the description earns its place.

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 tool with 4 fully-schema-covered parameters and no output schema needing explanation, the description communicates the purpose, target behavior, and the threshold condition. Minor omissions are details such as where the auto-generated output path is written and the meaning of the .env fallback for the threshold, but nothing that would prevent an agent from invoking the tool correctly.

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 description coverage is 100%, so the baseline is 3 and the schema already documents all four parameters. The description does add useful context by tying the threshold concept to the tool's trigger condition ('text longer than the specified threshold'), which clarifies text_threshold's role. But it offers no extra format, syntax, or edge-case details beyond what the schema already provides.

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

Purpose4/5

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

The description states a clear operation on a specific resource: 'Apply post-processing to a PowerPoint presentation' and concretely defines what that means with 'enables text wrapping and shrink text on overflow'. It is easily distinguishable from the sibling tools, which are all translation/export operations, so an agent can tell this is the text-box optimization tool. The one weakness is the generic initial verb 'Apply post-processing' before the more specific detail.

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

Usage Guidelines3/5

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

There is no explicit when-to-use vs alternative statements, no exclusions, and no mention of the sibling translation/export tools. However, usage is strongly implied by the content: the description defines the trigger condition ('text boxes that contain text longer than the specified threshold'), and the sibling set is clearly for different tasks, making the intended context reasonably inferable.

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

translate_powerpointC

Translate a PowerPoint presentation to the specified language.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoIf True, estimate cost without translating or saving the output file
model_idNoAmazon Bedrock Mantle model ID to use for translationopenai.gpt-5.6-terra
input_fileYesPath to the input PowerPoint file (.pptx)
output_fileNoPath to save the translated file (optional, auto-generated if not provided)
cache_backendNoTranslation cache backend: 'sqlite' (default), 'memory', or 'none'sqlite
glossary_fileNoPath to a glossary YAML file (defaults to ./glossary.yaml if present)
slide_workersNoMaximum parallel workers within this presentation
source_languageNo
target_languageNoTarget language code (e.g., 'ko', 'ja', 'es', 'fr', 'de')ja
enable_polishingNoEnable natural language polishing for more fluent translation
translate_chartsNoIf True, translate chart titles, axes, categories, and series names
slides_per_workerNoNumber of slides assigned to each worker
auto_detect_sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions only the translation action and says nothing about output file generation, cost estimation via dry_run, model selection, caching, or any side effects. For a tool that writes a translated file and has many tunable behaviors, this is a significant transparency gap.

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?

The description is a single efficient sentence with no wasted words. It is front-loaded with the key action and resource. It is concise, though it sacrifices contextual details that other dimensions would need.

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?

Given the tool's complexity (13 parameters, multiple translation options, output file handling) and the lack of annotations, the one-sentence description is inadequate. The output schema reduces the need to describe return values, but the description still fails to explain overall workflow, output side effects, or how this tool fits with its siblings. More context is needed for reliable invocation.

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 description coverage is 85%, so most parameters are already documented in the schema and the description does not need to repeat them. The description adds no extra meaning beyond stating the general translation goal, but the few undocumented parameters like source_language and auto_detect_source are not compensated for in the description either. Baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('Translate') and the resource ('a PowerPoint presentation') with a target language, making the tool's primary function obvious. However, it does not distinguish itself from siblings like translate_specific_slides or batch_translate_powerpoint, so the exact scope (whole deck vs. selected slides) is left implicit.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives. It does not say 'use for a single full deck' or exclude partial-slide translation, and it does not mention batch_translate_powerpoint for multiple presentations. The contextual choice is left entirely to inference.

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

translate_specific_slidesB

Translate specific slides in a PowerPoint presentation.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
model_idNoAmazon Bedrock Mantle model ID to use for translationopenai.gpt-5.6-terra
input_fileYesPath to the input PowerPoint file (.pptx)
output_fileNoPath to save the translated file (optional, auto-generated if not provided)
cache_backendNosqlite
glossary_fileNo
slide_numbersYesComma-separated slide numbers to translate (e.g., "1,3,5" or "2-4,7")
slide_workersNoMaximum parallel workers within this presentation
source_languageNo
target_languageNoTarget language code (e.g., 'ko', 'ja', 'es', 'fr', 'de')ja
enable_polishingNoEnable natural language polishing for more fluent translation
translate_chartsNo
slides_per_workerNoNumber of slides assigned to each worker
auto_detect_sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden of transparent behavior. It only says 'translate' and provides no insight into whether the original file is modified, how output files are produced, whether dry-run is available, or what model/language behavior is involved. This is minimal behavior disclosure for a complex tool.

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?

The description is a single, concise sentence with no filler. It is front-loaded with the core action, though it is so terse that it may sacrifice usefulness for brevity.

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?

The tool has 14 parameters and several closely related sibling tools, yet the description provides only the basic action. It does not clarify whether slides are selected via `slide_numbers`, whether a new file is generated, what happens with missing glossaries or charts, and how this differs from batch or whole-presentation variants. The output schema helps but does not compensate for this lack of contextual detail.

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 descriptions are present for 8 of 14 parameters (57%), and several defaults and parameter names are self-explanatory. The description adds essentially no parameter-specific meaning beyond the schema, though it does reinforce the slide-subset intent behind the `slide_numbers` parameter.

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

Purpose4/5

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

The description names a specific action ('Translate specific slides') and the target resource ('a PowerPoint presentation'), clearly conveying that only a subset of slides will be handled rather than an entire deck. It lacks an explicit contrast with sibling tools, but the scope is reasonably unambiguous.

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

Usage Guidelines3/5

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

The phrase 'specific slides' implies that this tool is for translating selected slides rather than a whole presentation, giving some usage context. However, there is no explicit statement of when to prefer this tool over `translate_powerpoint` or `batch_translate_powerpoint`, nor any exclusion or alternative guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv1.1.0
    • Addedbatch_export_powerpoint_markdown
    • Addedbatch_translate_powerpoint
    • Addedexport_powerpoint_markdown
    • Changedget_slide_info5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / input_file / description
        Added value: +"Path to the PowerPoint file (.pptx)"
      • removedInput schema / properties / input_file / title
        Removed value: -"Input File"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_slide_preview7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / input_file / description
        Added value: +"Path to the PowerPoint file (.pptx)"
      • removedInput schema / properties / input_file / title
        Removed value: -"Input File"
      • addedInput schema / properties / slide_number / description
        Added value: +"Slide number to preview (1-based indexing)"
      • removedInput schema / properties / slide_number / title
        Removed value: -"Slide Number"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_translation_help3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedlist_supported_languages3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedlist_supported_models3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedpost_process_powerpoint11 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / enable_autofit / description
        Added value: +"Enable text auto-fitting (default: True)"
      • removedInput schema / properties / enable_autofit / title
        Removed value: -"Enable Autofit"
      • addedInput schema / properties / input_file / description
        Added value: +"Path to the input PowerPoint file (.pptx)"
      • removedInput schema / properties / input_file / title
        Removed value: -"Input File"
      • addedInput schema / properties / output_file / description
        Added value: +"Path to save the processed file (optional, auto-generated if not provided)"
      • removedInput schema / properties / output_file / title
        Removed value: -"Output File"
      • addedInput schema / properties / text_threshold / description
        Added value: +"Text length threshold for enabling auto-fit (overrides .env setting)"
      • removedInput schema / properties / text_threshold / title
        Removed value: -"Text Threshold"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedtranslate_powerpoint23 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / auto_detect_source
        Added value: +{
        +  "default": true,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / cache_backend
        Added value: +{
        +  "default": "sqlite",
        +  "description": "Translation cache backend: 'sqlite' (default), 'memory', or 'none'",
        +  "type": "string"
        +}
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "default": false,
        +  "description": "If True, estimate cost without translating or saving the output file",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / enable_polishing / description
        Added value: +"Enable natural language polishing for more fluent translation"
      • removedInput schema / properties / enable_polishing / title
        Removed value: -"Enable Polishing"
      • addedInput schema / properties / glossary_file
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Path to a glossary YAML file (defaults to ./glossary.yaml if present)"
        +}
      • addedInput schema / properties / input_file / description
        Added value: +"Path to the input PowerPoint file (.pptx)"
      • removedInput schema / properties / input_file / title
        Removed value: -"Input File"
      • changedInput schema / properties / model_id / default
        Previous value: -"us.anthropic.claude-3-7-sonnet-20250219-v1:0"New value: +"openai.gpt-5.6-terra"
      • addedInput schema / properties / model_id / description
        Added value: +"Amazon Bedrock Mantle model ID to use for translation"
      • removedInput schema / properties / model_id / title
        Removed value: -"Model Id"
      • addedInput schema / properties / output_file / description
        Added value: +"Path to save the translated file (optional, auto-generated if not provided)"
      • removedInput schema / properties / output_file / title
        Removed value: -"Output File"
      • addedInput schema / properties / slide_workers
        Added value: +{
        +  "default": 4,
        +  "description": "Maximum parallel workers within this presentation",
        +  "type": "integer"
        +}
      • addedInput schema / properties / slides_per_worker
        Added value: +{
        +  "default": 30,
        +  "description": "Number of slides assigned to each worker",
        +  "type": "integer"
        +}
      • addedInput schema / properties / source_language
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • changedInput schema / properties / target_language / default
        Previous value: -"ko"New value: +"ja"
      • addedInput schema / properties / target_language / description
        Added value: +"Target language code (e.g., 'ko', 'ja', 'es', 'fr', 'de')"
      • removedInput schema / properties / target_language / title
        Removed value: -"Target Language"
      • addedInput schema / properties / translate_charts
        Added value: +{
        +  "default": true,
        +  "description": "If True, translate chart titles, axes, categories, and series names",
        +  "type": "boolean"
        +}
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedtranslate_specific_slides25 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / auto_detect_source
        Added value: +{
        +  "default": true,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / cache_backend
        Added value: +{
        +  "default": "sqlite",
        +  "type": "string"
        +}
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / enable_polishing / description
        Added value: +"Enable natural language polishing for more fluent translation"
      • removedInput schema / properties / enable_polishing / title
        Removed value: -"Enable Polishing"
      • addedInput schema / properties / glossary_file
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / input_file / description
        Added value: +"Path to the input PowerPoint file (.pptx)"
      • removedInput schema / properties / input_file / title
        Removed value: -"Input File"
      • changedInput schema / properties / model_id / default
        Previous value: -"us.anthropic.claude-3-7-sonnet-20250219-v1:0"New value: +"openai.gpt-5.6-terra"
      • addedInput schema / properties / model_id / description
        Added value: +"Amazon Bedrock Mantle model ID to use for translation"
      • removedInput schema / properties / model_id / title
        Removed value: -"Model Id"
      • addedInput schema / properties / output_file / description
        Added value: +"Path to save the translated file (optional, auto-generated if not provided)"
      • removedInput schema / properties / output_file / title
        Removed value: -"Output File"
      • addedInput schema / properties / slide_numbers / description
        Added value: +"Comma-separated slide numbers to translate (e.g., \"1,3,5\" or \"2-4,7\")"
      • removedInput schema / properties / slide_numbers / title
        Removed value: -"Slide Numbers"
      • addedInput schema / properties / slide_workers
        Added value: +{
        +  "default": 4,
        +  "description": "Maximum parallel workers within this presentation",
        +  "type": "integer"
        +}
      • addedInput schema / properties / slides_per_worker
        Added value: +{
        +  "default": 30,
        +  "description": "Number of slides assigned to each worker",
        +  "type": "integer"
        +}
      • addedInput schema / properties / source_language
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • changedInput schema / properties / target_language / default
        Previous value: -"ko"New value: +"ja"
      • addedInput schema / properties / target_language / description
        Added value: +"Target language code (e.g., 'ko', 'ja', 'es', 'fr', 'de')"
      • removedInput schema / properties / target_language / title
        Removed value: -"Target Language"
      • addedInput schema / properties / translate_charts
        Added value: +{
        +  "default": true,
        +  "type": "boolean"
        +}
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
  2. 8 tool updatesv1.0.0
    • First observedget_slide_info
    • First observedget_slide_preview
    • First observedget_translation_help
    • First observedlist_supported_languages
    • First observedlist_supported_models
    • First observedpost_process_powerpoint
    • First observedtranslate_powerpoint
    • First observedtranslate_specific_slides

TDQS

A3.5/5.0

Scored across 11 tools

Disambiguation4/5

Most tools are clearly distinct: translate vs. export vs. get info vs. list supported options. However, translate_powerpoint and batch_translate_powerpoint could be confused at first glance, though the batch prefix and description clarify the scope.

Naming Consistency4/5

Tool names mostly follow a verb_noun pattern (translate_powerpoint, get_slide_info, list_supported_languages). Minor deviations: get_translation_help uses a noun phrase instead of a verb_noun form, and batch_export_powerpoint_markdown is longer but still consistent.

Tool Count5/5

11 tools is well-scoped for a PowerPoint translation server. Each tool covers a distinct operation: translation, export, inspection, and configuration lookups, with no obvious redundancy.

Completeness4/5

The server covers the core workflow: translate, batch translate, export, inspect slides, and post-process. Minor gaps include no explicit tool for reverting translations or managing output destinations, but the surface is sufficient for the stated purpose.

Maintenance

ActivityStale
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers