# Microsoft PowerPoint

```json
{
  "name": "Microsoft PowerPoint",
  "slug": "microsoft_powerpoint",
  "url": "https://composio.dev/toolkits/microsoft_powerpoint",
  "markdown_url": "https://composio.dev/toolkits/microsoft_powerpoint.md",
  "logo_url": "https://logos.composio.dev/api/microsoft_powerpoint",
  "categories": [
    "document & file management"
  ],
  "is_composio_managed": false,
  "updated_at": "2026-10-24T05:34:39.286Z"
}
```

![Microsoft PowerPoint logo](https://logos.composio.dev/api/microsoft_powerpoint)

## Description

Securely connect your AI agents and chatbots (Claude, ChatGPT, Cursor, etc) with Microsoft PowerPoint MCP or direct API to create presentations, edit slides, manage shapes and charts, and organize files through natural language.

## Summary

Microsoft PowerPoint is a presentation app for creating and delivering slide decks.
It helps teams turn ideas into polished, visual stories with flexible design tools.

## Categories

- document & file management

## Toolkit Details

- Tools: 28

## Images

- Logo: https://logos.composio.dev/api/microsoft_powerpoint

## Authentication

- **Oauth2**
  - Type: `oauth2`
  - Description: Oauth2 authentication for Microsoft PowerPoint.
  - Setup:
    - Configure Oauth2 credentials for Microsoft PowerPoint.
    - Use the credentials when creating an auth config in Composio.

## Suggested Prompts

- Create a presentation from a project brief
- Find presentations containing quarterly revenue slides
- Add speaker notes to the launch deck

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `MICROSOFT_POWERPOINT_CHECK_IN_PRESENTATION` | Check In Presentation | Check in a checked-out PowerPoint DriveItem and make its version available according to the SharePoint/document-library configuration. Microsoft Graph documents no atomic If-Match/eTag option for this operation. |
| `MICROSOFT_POWERPOINT_CHECK_OUT_PRESENTATION` | Check Out Presentation | Check out a PowerPoint DriveItem where its SharePoint/document-library configuration supports checkout, preventing others from editing and hiding changes until check-in. Microsoft Graph documents no atomic If-Match/eTag option for this operation. |
| `MICROSOFT_POWERPOINT_COPY_PRESENTATION` | Copy Presentation | Start an asynchronous Microsoft Graph copy of a PowerPoint presentation. A successful result means only that Graph accepted the submission; it does not mean the copy completed or ultimately succeeded. The action never returns the bearer-equivalent Location monitor URL. Discover the result by destination and filename with FIND_PRESENTATIONS. conflict_behavior is unsupported on OneDrive Personal. To preserve all versions, omit name and rename the copy after discovery. |
| `MICROSOFT_POWERPOINT_COPY_PRESENTATION_AND_WAIT` | Copy Presentation and Wait | Submit a PowerPoint presentation copy with a required unique filename, then boundedly search the resolved destination folder for an exact-name candidate. Search results cannot be correlated to the copy request, so a discovered candidate is returned as discovered_unverified and may belong to another writer. The bearer-equivalent Graph monitor URL is never returned or read. An exact-name search result is returned only as an uncorrelated candidate, never as confirmed completion, because Graph's secret monitor URL is not exposed or consumed. A timeout or indeterminate result is not proof of failure: verify the destination before retrying. All-version-history copies require the asynchronous COPY_PRESENTATION workflow because Graph does not safely combine that option with a discovery name. |
| `MICROSOFT_POWERPOINT_CREATE_FOLDER` | Create Folder | Create a folder for PowerPoint files in the current or an explicitly selected accessible drive. |
| `MICROSOFT_POWERPOINT_CREATE_PRESENTATION` | Create Presentation | Create a bounded macro-free PPTX from one to 50 structured slides containing titles, plain text, nested bullets, rectangular tables, uploaded PNG images, and optional speaker notes. The generated Open XML package, relationships, and semantic readback are validated locally before exactly one Microsoft Graph upload. Limits include 500 content blocks, 500,000 text characters, 10,000 line breaks, 2,000 table cells, and 20 PNGs (10 MiB each, 25 MiB compressed and decoded in aggregate); the final package is limited to 50 MiB. |
| `MICROSOFT_POWERPOINT_CREATE_PRESENTATION_SHARING_LINK` | Create Presentation Sharing Link | Create or return a view or edit sharing link for a PowerPoint presentation in the current or an explicitly selected drive. |
| `MICROSOFT_POWERPOINT_DELETE_FOLDER` | Delete Folder | Move a folder to the Microsoft Graph recycle bin after a metadata preflight proves the DriveItem has a folder facet. Recycling a nonempty folder removes the entire descendant tree from its current location. Files are rejected. The preflight eTag is used for a concurrency-safe delete when available. |
| `MICROSOFT_POWERPOINT_DELETE_PRESENTATION` | Delete Presentation | Move a PowerPoint presentation to the Microsoft Graph recycle bin. This action does not permanently erase the file. It can require a matching eTag or cTag and can send Microsoft's documented shared-lock or checkout bypass preferences. |
| `MICROSOFT_POWERPOINT_DOWNLOAD_PRESENTATION` | Download Presentation | Download a PowerPoint file in its original format or export it as PDF or JPG. Export conversion is not presentation editing and accepts source files up to 2 MB. |
| `MICROSOFT_POWERPOINT_DOWNLOAD_PRESENTATION_VERSION` | Download Presentation Version | Verify that the selected DriveItem is a PPTX, then download one retained previous version as a bounded PPTX file. Non-PPTX items are rejected before content download. Use LIST_PRESENTATION_VERSIONS to obtain a version ID, but do not use its first newest/current entry: Microsoft Graph refuses current-version content here. Use DOWNLOAD_PRESENTATION for the current version. |
| `MICROSOFT_POWERPOINT_FILL_TEMPLATE` | Fill PowerPoint Template | Create one presentation from an existing designed PPTX template by replacing unique literal {{tokens}} simultaneously across reachable slides and speaker notes. The template is downloaded and its eTag is rechecked before one create upload; no intermediate provider copy is created. Every requested token must match. |
| `MICROSOFT_POWERPOINT_FIND_PRESENTATIONS` | Find Presentations | List a folder or search a drive and return only PowerPoint files. Omit search_text to browse folder_id; provide it to search the full drive. A page can contain no matching files while has_more remains true. |
| `MICROSOFT_POWERPOINT_GET_CURRENT_DRIVE` | Get Current Drive | Return the signed-in user's default OneDrive ID and basic owner, type, and quota details. Use the drive ID to target other accessible-drive actions explicitly. |
| `MICROSOFT_POWERPOINT_GET_PRESENTATION` | Get Presentation | Return metadata for one PowerPoint file by item ID, including its current eTag for concurrency-safe updates. |
| `MICROSOFT_POWERPOINT_GET_PRESENTATION_CONTENT` | Get Presentation Content | Read bounded, text-first semantic content from a current macro-free PPTX, including slides, shapes, text, safe hyperlinks, alt text, image metadata, tables, and speaker notes. Default budgets are 100 slides, 200 shapes per slide, 100 paragraphs per shape, 100 runs per paragraph, 20,000 characters per shape, 100,000 total characters, 5,000 structural elements, and 100 comments per slide. Maxima are respectively 500, 1,000, 500, 500, 100,000, 500,000, 20,000, and 200. For ordinary reads, use slide_numbers for only the needed slides and lower budgets instead of reading a whole large deck. Formatting, geometry, supported chart data, and modern comments are opt-ins. Uses eTag consistency and never returns layouts, package bytes, raw XML, unsafe external targets, or preauthenticated URLs. |
| `MICROSOFT_POWERPOINT_GET_PRESENTATION_LAYOUTS` | Get Presentation Layouts | Download and validate the current macro-free PPTX, then return its complete bounded slide-layout catalog. Each layout has a unique opaque selector accepted by UPDATE_PRESENTATION_CONTENT add_slide, plus exact human-facing name and matchingName values and safe type/placeholder summaries for duplicate-name disambiguation. Never returns package paths, raw OOXML, package bytes, or download URLs. |
| `MICROSOFT_POWERPOINT_GET_PRESENTATION_THUMBNAILS` | Get Presentation Thumbnails | List generated thumbnail metadata for a PowerPoint presentation. Microsoft Graph represents only the first slide and can return an empty set; it does not provide per-slide thumbnails. Returned URLs are short-lived bearer-equivalent capabilities for the caller only and must not be shared, logged, cached, or persisted. |
| `MICROSOFT_POWERPOINT_GET_PRESENTATION_VERSION` | Get Presentation Version | Retrieve compact metadata for one retained or current version of a PowerPoint file. Use List Presentation Versions to discover retained version IDs. |
| `MICROSOFT_POWERPOINT_INVITE_TO_PRESENTATION` | Invite People to Presentation | Grant named people read or write access to a PowerPoint presentation. By default, send_invitation=true also causes Microsoft to send external invitation emails; set it false to grant permission without notifications. A 207 response preserves recipient-level errors and is never reported as complete success. |
| `MICROSOFT_POWERPOINT_LIST_PRESENTATION_VERSIONS` | List Presentation Versions | List retained versions of a PowerPoint file in Microsoft Graph's newest-first order, one provider page at a time. Continue while has_more is true before treating the final version as the oldest retained version. The first entry is current: its metadata is readable, but Graph refuses its content through DOWNLOAD_PRESENTATION_VERSION. Choose a later entry for version download/restore, or use DOWNLOAD_PRESENTATION for current content. Version retention depends on the drive's configuration. |
| `MICROSOFT_POWERPOINT_REPLACE_PRESENTATION_FILE` | Replace Presentation File | Replace the bytes of an existing PowerPoint DriveItem with a valid, non-macro-enabled PPTX package no larger than 250 MiB, optionally requiring a matching eTag. |
| `MICROSOFT_POWERPOINT_RESTORE_PRESENTATION_VERSION` | Restore Presentation Version | Restore a retained previous version of a PowerPoint presentation as a new current version while preserving its version history. |
| `MICROSOFT_POWERPOINT_TRANSFORM_PRESENTATION_TEXT_AND_PROPERTIES` | Transform Presentation Text and Properties | Transform text, slide order, or embedded core document properties inside a macro-free PPTX, then conditionally replace the same file. Supports literal, run-normalized text and {{placeholder}} replacement within DrawingML paragraphs, complete slide reordering, and core document-property updates. Provide at least one non-empty text_replacements, slide_order, or core_properties transformation. Rules run sequentially; a find string crosses a line break only when it includes a newline. Use UPDATE_PRESENTATION_METADATA instead to rename or move the DriveItem or change its filesystem metadata. It does not add or delete slides or edit layouts, themes, animations, charts, tables, or images. |
| `MICROSOFT_POWERPOINT_UPDATE_PRESENTATION_CONTENT_DESTRUCTIVE` | Update Presentation Content Destructively | Atomically update one macro-free PPTX with at least one irreversible delete operation, under an exact eTag and one conditional upload. delete_slide permanently removes a slide and eligible private dependencies; delete_shape permanently removes a top-level shape and unreferenced relationships; delete_comment permanently removes a root comment and its replies. Supporting non-delete operations may be included in the same transaction, but every call must contain delete_slide, delete_shape, or delete_comment and requires irreversible-update approval. Validates the package graph and semantic result. Limits include 50 MiB packages, 100 operations, 500,000 text characters, 20 uploaded PNGs, and 10,000 generated line breaks. |
| `MICROSOFT_POWERPOINT_UPDATE_PRESENTATION_CONTENT_SAFE` | Update Presentation Content Safely | Atomically update one macro-free PPTX without delete operations, under an exact eTag and one conditional upload. Allowed operations are add_text_box, add_image, replace_image, set_existing_speaker_notes, add_table, add_slide, duplicate_slide, set_slide_hidden, set_shape_text, format_text_run, set_shape_bounds, set_shape_alt_text, set_shape_hyperlink, set_text_run_hyperlink, add_comment, reply_comment, add_chart, and replace_chart_data. delete_slide, delete_shape, and delete_comment are rejected during request validation before any network request. Validates the package graph and semantic result. Limits include 50 MiB packages, 100 operations, 500,000 text characters, 20 uploaded PNGs, and 10,000 generated line breaks. |
| `MICROSOFT_POWERPOINT_UPDATE_PRESENTATION_METADATA` | Update Presentation Metadata | Update Microsoft Graph DriveItem metadata or path only: rename a PowerPoint presentation, move it within its current drive, or set supported filesystem metadata. This action does not edit slide text, slide order, document properties inside the PPTX package, or other presentation content. Optionally require a matching eTag. Provide at least one of name, parent_folder_id, description, created_datetime, or last_modified_datetime. OneDrive may accept a description without persisting it; the response reports that limitation. |
| `MICROSOFT_POWERPOINT_UPLOAD_NEW_PRESENTATION` | Upload New Presentation | Create a new PPTX in a Microsoft Graph drive folder, with configurable filename-conflict behavior. The file must be a valid, non-macro-enabled PPTX package no larger than 250 MiB. |

## Supported Triggers

None listed.

## Installation and MCP Setup

### Path 1: SDK Installation

#### Path 1, Step 1: Install Composio

Install the Composio SDK, the OpenAI provider, and the OpenAI SDK
```python
pip install composio composio_openai openai
```

```typescript
npm install @composio/core @composio/openai openai
```

#### Path 1, Step 2: Create a Composio session

Initialize Composio with the OpenAI Responses provider and create a session scoped to Microsoft PowerPoint
```python
import json
from openai import OpenAI
from composio import Composio
from composio_openai import OpenAIResponsesProvider

composio = Composio(provider=OpenAIResponsesProvider())
client = OpenAI()

session = composio.create(user_id="your-user-id", toolkits=["microsoft_powerpoint"])
tools = session.tools()
```

```typescript
import OpenAI from "openai";
import { Composio } from "@composio/core";
import { OpenAIResponsesProvider } from "@composio/openai";

const composio = new Composio({ provider: new OpenAIResponsesProvider() });
const client = new OpenAI();

const session = await composio.create("your-user-id", { toolkits: ["microsoft_powerpoint"] });
const tools = await session.tools();
```

#### Path 1, Step 3: Run Microsoft PowerPoint tools with your agent

Send a request, execute the Microsoft PowerPoint tool calls through the session, and print the final answer
```python
response = client.responses.create(
    model="gpt-5.6-sol",
    tools=tools,
    input=[{"role": "user", "content": "Create a new PowerPoint presentation named Quarterly Business Review with title, agenda, revenue summary, and next steps slides"}],
)

while True:
    tool_calls = [o for o in response.output if o.type == "function_call"]
    if not tool_calls:
        break
    results = composio.provider.handle_tool_calls(response=response, session=session)
    response = client.responses.create(
        model="gpt-5.6-sol",
        tools=tools,
        previous_response_id=response.id,
        input=[
            {"type": "function_call_output", "call_id": call.call_id, "output": json.dumps(results[i])}
            for i, call in enumerate(tool_calls)
        ],
    )

print(response.output_text)
```

```typescript
let response = await client.responses.create({
  model: "gpt-5.6-sol",
  tools,
  input: [{ role: "user", content: "Create a new PowerPoint presentation named Quarterly Business Review with title, agenda, revenue summary, and next steps slides" }],
});

while (response.output.some((o) => o.type === "function_call")) {
  const outputs = await composio.provider.handleToolCalls(session, response.output);
  response = await client.responses.create({
    model: "gpt-5.6-sol",
    tools,
    previous_response_id: response.id,
    input: outputs,
  });
}

console.log(response.output_text);
```

### Path 2: MCP Server Setup

#### Path 2, Step 1: Install Composio

Install the Composio SDK and your agent framework
```python
pip install composio claude-agent-sdk
```

```typescript
npm install @composio/core ai @ai-sdk/mcp @ai-sdk/openai
```

#### Path 2, Step 2: Create a session with MCP enabled

Create a session scoped to Microsoft PowerPoint and read its MCP URL and headers
```python
from composio import Composio

composio = Composio()
session = composio.create(user_id="your-user-id", toolkits=["microsoft_powerpoint"], mcp=True)
```

```typescript
import { Composio } from "@composio/core";

const composio = new Composio();
const { mcp } = await composio.create("your-user-id", {
  toolkits: ["microsoft_powerpoint"],
  mcp: true,
});
```

#### Path 2, Step 3: Connect your agent to the MCP server

Pass the session's MCP URL and headers to your agent and run a Microsoft PowerPoint request
```python
import asyncio
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, AssistantMessage, TextBlock

options = ClaudeAgentOptions(
    mcp_servers={
        "composio": {
            "type": "http",
            "url": session.mcp.url,
            "headers": session.mcp.headers,
        }
    },
    system_prompt="You are a helpful assistant with access to Microsoft PowerPoint tools.",
    tools=[],
    allowed_tools=["mcp__composio__*"],
)

async def main():
    async with ClaudeSDKClient(options=options) as client:
        await client.query("Create a new PowerPoint presentation named Quarterly Business Review with title, agenda, revenue summary, and next steps slides")
        async for message in client.receive_response():
            if isinstance(message, AssistantMessage):
                for block in message.content:
                    if isinstance(block, TextBlock):
                        print(block.text)

asyncio.run(main())
```

```typescript
import { createMCPClient } from "@ai-sdk/mcp";
import { openai } from "@ai-sdk/openai";
import { generateText, stepCountIs } from "ai";

const client = await createMCPClient({
  transport: { type: "http", url: mcp.url, headers: mcp.headers },
});

const { text } = await generateText({
  model: openai("gpt-5.6-sol"),
  tools: await client.tools(),
  prompt: "Create a new PowerPoint presentation named Quarterly Business Review with title, agenda, revenue summary, and next steps slides",
  stopWhen: stepCountIs(10),
});

console.log(text);
await client.close();
```

## Why Use Composio?

### 1. AI Native Microsoft PowerPoint Integration

- Supports both Microsoft PowerPoint MCP and direct API based integrations
- Structured, LLM-friendly schemas for reliable tool execution
- Rich coverage for reading, writing, and querying your Microsoft PowerPoint data

### 2. Managed Auth

- Built-in OAuth handling with automatic token refresh and rotation
- Central place to manage, scope, and revoke Microsoft PowerPoint access
- Per user and per environment credentials instead of hard-coded keys

### 3. Agent Optimized Design

- Tools are tuned using real error and success rates to improve reliability over time
- Comprehensive execution logs so you always know what ran, when, and on whose behalf

### 4. Enterprise Grade Security

- Fine-grained RBAC so you control which agents and users can access Microsoft PowerPoint
- Scoped, least privilege access to Microsoft PowerPoint resources
- Full audit trail of agent actions to support review and compliance

## Use Microsoft PowerPoint with any AI Agent Framework

Choose a framework you want to connect Microsoft PowerPoint with:

- [ChatGPT](https://composio.dev/toolkits/microsoft_powerpoint/framework/chatgpt)
- [Claude Cowork](https://composio.dev/toolkits/microsoft_powerpoint/framework/claude-cowork)
- [Hermes](https://composio.dev/toolkits/microsoft_powerpoint/framework/hermes-agent)
- [Atomic Agent](https://composio.dev/toolkits/microsoft_powerpoint/framework/atomic-agent)

## Related Toolkits

- [Google Drive](https://composio.dev/toolkits/googledrive) - Google Drive is a cloud storage platform for uploading, sharing, and collaborating on files. It's perfect for keeping your documents accessible and organized across devices.
- [Google Docs](https://composio.dev/toolkits/googledocs) - Google Docs is a cloud-based word processor that enables document creation and real-time collaboration. Its seamless sharing and version history make team editing and content management a breeze.
- [Google Super](https://composio.dev/toolkits/googlesuper) - Google Super is an all-in-one suite combining Gmail, Drive, Calendar, Sheets, Analytics, and more. It gives you a unified platform to manage your digital life, boosting productivity and organization.
- [ActiveMerge](https://composio.dev/toolkits/active_merge) - ActiveMerge is a document automation platform for generating documents, images, merged files, and e-signature workflows. It helps teams turn templates and stored files into finished, shareable documents faster.
- [Affinda](https://composio.dev/toolkits/affinda) - Affinda is an AI-powered document processing platform that automates data extraction from resumes, invoices, and more. It streamlines document-heavy workflows by turning files into structured, actionable data.
- [Agility cms](https://composio.dev/toolkits/agility_cms) - Agility CMS is a headless content management system for building and managing digital experiences across platforms. It lets teams update content quickly and deliver omnichannel experiences with ease.
- [Airparser](https://composio.dev/toolkits/airparser) - Airparser is an AI-powered parser for extracting structured data from emails, documents, PDFs, and files. It turns messy inbound content into clean fields your apps and workflows can use.
- [Algodocs](https://composio.dev/toolkits/algodocs) - Algodocs is an AI-powered platform that automates data extraction from business documents. It delivers fast, secure, and accurate processing without templates or manual training.
- [Api2pdf](https://composio.dev/toolkits/api2pdf) - Api2Pdf is a REST API for generating PDFs from HTML, URLs, and documents using powerful engines like wkhtmltopdf and Headless Chrome. It streamlines document conversion and automation for developers and businesses.
- [Archive.org](https://composio.dev/toolkits/archive_org) - Archive.org is the Internet Archive's digital library of websites, books, audio, video, and images. Use it to preserve, explore, and access historical web captures and public-domain media.
- [Aryn](https://composio.dev/toolkits/aryn) - Aryn is an AI-powered platform for parsing, extracting, and analyzing data from unstructured documents. Use it to automate document processing and unlock actionable insights from your files.
- [Boldsign](https://composio.dev/toolkits/boldsign) - Boldsign is a digital eSignature platform for sending, signing, and tracking documents online. Organizations use it to automate agreements and manage legally binding workflows efficiently.
- [Boloforms](https://composio.dev/toolkits/boloforms) - BoloForms is an eSignature platform built for small businesses, offering unlimited signatures, templates, and forms. It simplifies digital document signing and team collaboration at a predictable, fixed price.
- [Box](https://composio.dev/toolkits/box) - Box is a cloud content management and file sharing platform for businesses. It helps teams securely store, organize, and collaborate on files from anywhere.
- [Box MCP](https://composio.dev/toolkits/box_mcp) - Box MCP is Box's hosted MCP server that exposes enterprise files, folders, and metadata. It provides secure, centralized access to corporate content for search and management.
- [Carbone](https://composio.dev/toolkits/carbone) - Carbone is a blazing-fast report generator that turns JSON data into PDFs, Word docs, spreadsheets, and more using flexible templates. It lets you automate document creation at scale with minimal code.
- [Castingwords](https://composio.dev/toolkits/castingwords) - CastingWords is a transcription service specializing in human-powered, accurate transcripts via a simple API. Get seamless audio-to-text conversion for interviews, meetings, podcasts, and more.
- [CertSeal](https://composio.dev/toolkits/cert_seal) - CertSeal is an API platform for issuing and managing verifiable digital certificates. Use it to automate trusted certificate workflows for recipients, batches, designs, and webhooks.
- [Cloudconvert](https://composio.dev/toolkits/cloudconvert) - CloudConvert is a powerful file conversion service supporting over 200 file formats. It streamlines converting, compressing, and managing documents, media, and more, all in one place.
- [Cloudlayer](https://composio.dev/toolkits/cloudlayer) - Cloudlayer is a document and asset generation service for creating PDFs and images via API or SDKs. It lets you automate high-quality doc creation, saving dev time and reducing manual work.

## Frequently Asked Questions

### Do I need my own developer credentials to use Microsoft PowerPoint with Composio?

Yes, Microsoft PowerPoint requires you to configure your own OAuth credentials. Once set up, Composio handles token storage, refresh, and lifecycle management for you.

### Can I use multiple toolkits together?

Yes! Composio's Tool Router enables agents to use multiple toolkits. [Learn more](https://docs.composio.dev/tool-router/overview).

### Is Composio secure?

Composio is SOC 2 and ISO 27001 compliant with all data encrypted in transit and at rest. [Learn more](https://trust.composio.dev).

### What if the API changes?

Composio maintains and updates all toolkit integrations automatically, so your agents always work with the latest API versions.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
