Skip to main content
Glama

think-cell MCP Server

An MCP server that wraps think-cell's JSON data automation. Claude builds think-cell automation files (.ppttc) from plain data and turns them into PowerPoint decks (.pptx) with think-cell's ppttc.exe. The charts stay real, editable think-cell charts.

Use it in three ways:

  • Claude Desktop: a one-click extension (.mcpb).

  • Claude in PowerPoint and claude.ai: a connector that runs on your own PC.

  • Claude Code or any MCP client: a plain stdio server.

Tools

Tool

Purpose

create_chart

Build a .ppttc file for a single chart.

build_presentation

Combine many charts/slides into one .ppttc file.

create_auto_deck

Build a multi-slide .ppttc deck with no template setup.

set_deck_branding

Recolour the auto-deck template and drop the think-cell logo.

list_color_palettes

List the built-in colour palettes.

import_chart_data

Read chart data from an Excel or CSV file.

convert_to_pptx

Run ppttc.exe to turn a .ppttc into a .pptx.

insert_into_powerpoint

Insert the finished slides into the deck open in PowerPoint.

validate_ppttc

Structurally validate a .ppttc document.

list_chart_types

Describe every supported chart type.

diagnose_thinkcell

Check why think-cell automation isn't working.

list_chart_templates

List think-cell's chart library (34 designs) and your saved slides.

fill_chart_template

Fill one of those templates with your data, title and texts.

template_from_slide

Save a think-cell slide of your own as a reusable template.

Supported chart types: waterfall, bar, stacked_bar, line, scatter, mekko, area, combo, table, process.

Related MCP server: MakeSlates MCP Server

Requirements

  • Windows with think-cell installed. It is a separately licensed product, and JSON automation needs a licence that includes it (think-cell AI Suite in the current manual). The server finds the install folder from the Windows registry. Set the THINKCELL_DIR environment variable only if that fails.

  • Microsoft PowerPoint, which ppttc.exe drives during conversion.

  • Python 3.10+, except with the Claude Desktop extension, which brings its own.

Building and validating .ppttc files works on any OS. Converting to .pptx and diagnostics need Windows, think-cell and PowerPoint.

Install

Claude Desktop: one-click extension

  1. Download thinkcell-mcp-<version>.mcpb from the Releases page.

  2. Double-click it, or go to Claude Desktop → Settings → Extensions and install it there.

  3. Pick the folder where the generated files go. The default is Documents\think-cell.

Claude Desktop installs Python and the dependencies itself. To build the file yourself, run python build_mcpb.py; it writes dist\thinkcell-mcp-<version>.mcpb.

Claude in PowerPoint and claude.ai: connector

Your PC runs the server, and a free ngrok address makes it reachable. Claude adds it under Settings → Connectors and you approve it with a connect code:

python connector.py setup

The full walkthrough, security notes and troubleshooting are in CONNECTOR.md. The same connector also works with think-cell Assist in PowerPoint and Excel. Run python connector.py assist to get its settings.

Claude Code or any MCP client: stdio

git clone https://github.com/Dentdoc-stack/thinkcell-mcp.git
cd thinkcell-mcp
python -m pip install -r requirements.txt

Then register it. For Claude Code, copy .mcp.json.example to .mcp.json or run claude mcp add. For other clients, add this to their mcpServers:

{
  "mcpServers": {
    "thinkcell": {
      "command": "python",
      "args": ["/absolute/path/to/thinkcell-mcp/server.py"]
    }
  }
}

command must resolve to a Python 3.10+ interpreter. Use the full path to python.exe if python is not on your PATH. Set THINKCELL_OUTPUT_DIR in an env block to save the generated files somewhere other than output/.

Quickstart

The fastest end-to-end flow needs no PowerPoint template setup: create_auto_deck builds the .ppttc against think-cell's bundled official template, and convert_to_pptx renders the finished .pptx.

1. Build a .ppttc with create_auto_deck — one slide with a title, a left chart and a right chart, each with its own title:

{
  "output_name": "Quickstart",
  "slides": [
    {
      "slide_title": "Quarterly Review",
      "left_title": "Market share",
      "right_title": "Orders",
      "left_chart": {
        "categories": ["Q1", "Q2", "Q3"],
        "series": [
          {"name": "Our brand", "values": [52, 54, 57]},
          {"name": "Competitor", "values": [21, 20, 18]}
        ]
      },
      "right_chart": {
        "categories": ["Q1", "Q2", "Q3"],
        "series": [
          {"name": "Delivered", "values": [740, 760, 805]}
        ]
      }
    }
  ]
}

Chart categories accept either plain string labels like "Q1" (a category axis) or ISO dates "YYYY-MM-DD" (a date axis) — the axis kind is auto-detected. This call returns a ppttc_path in the output/ folder.

2. Render the .pptx with convert_to_pptx — pass the ppttc_path from step 1:

{
  "ppttc_path": "C:\\Users\\you\\thinkcell-mcp\\output\\Quickstart.ppttc"
}

Result: a finished PowerPoint deck (Quickstart.pptx) with real think-cell charts — no template preparation and no manual element naming.

See Tool reference and examples below for every option of each tool.

How think-cell automation works

think-cell's automation does not create charts from nothing. The flow is:

  1. You prepare a PowerPoint template (.pptx) that already contains think-cell charts. Each chart and text field is given a name in the think-cell Data links / element naming UI.

  2. This server produces a .ppttc file — JSON that maps each name to a data table.

  3. ppttc.exe opens the template, pushes the data into the matching named elements, and writes the finished .pptx.

Key point: the chart_name in a .ppttc must match the name assigned to a think-cell element in the template. To name an element: select the chart in PowerPoint and type a unique name in the "Name" field of its think-cell mini toolbar, then press Enter. create_chart takes a chart_name (default Chart1); build_presentation lets you set names per chart (or auto-assigns Chart1, Chart2, ...). If the names do not match, ppttc.exe runs but updates nothing. The chart type (waterfall, line, ...) is decided by the chart you placed in the template — this server validates and shapes the data to match, and the per-type rules guard against malformed input.

There is no general API to "control" the think-cell add-in. Unlike some Office add-ins, think-cell exposes no COM/scripting interface for creating charts or driving its ribbon — the .ppttc / ppttc.exe pipeline is the only supported automation, and it just pushes data into a prepared template. If a conversion seems to do nothing, the cause is almost always environmental (the add-in isn't registered, PowerPoint disabled it, the licence lapsed, or the template has no think-cell charts). Run diagnose_thinkcell to pinpoint it.

Generated .ppttc files are written to the output/ folder next to server.py.

Zero-setup decks (no PowerPoint, no naming)

Naming think-cell elements inside PowerPoint is the one manual step the .ppttc pipeline normally requires. The create_auto_deck tool removes it. think-cell ships an official automation template whose elements are already named. This project does not redistribute that file; instead autodeck.py copies it from your local think-cell install (<THINKCELL_DIR>/ppttc/template.pptx) into templates/thinkcell_auto.pptx the first time create_auto_deck runs. Its five named elements are fixed:

Element

Role

SlideTitle

Slide title text field.

LeftChartTitle

Title above the left chart.

RightChartTitle

Title above the right chart.

LeftChart

Left chart — date or category axis, percentage series.

RightChart

Right chart — date or category axis, number series.

The user never opens PowerPoint or names anything — they just supply data. Each slide becomes one .ppttc entry (one slide). The resulting .ppttc can be handed straight to convert_to_pptx.

Branding

think-cell's template carries think-cell's own logo and a green/blue accent palette. On first use the bundled copy is automatically de-branded — the logo is removed and a professional, blue-anchored palette (drawn from the Big Four firms' brand colours) is applied. Both live in standard PowerPoint parts (the theme and the slide master), not in the named think-cell elements, so re-skinning never affects automation. Use set_deck_branding to apply your own accent colours or to toggle the logo. Per-series fill values in create_auto_deck still override the palette for individual series.

Chart library and your own slides

create_auto_deck covers line and column charts. For everything else think-cell can draw, the template tools reuse real think-cell slides:

  • think-cell's chart library. On first use library.py cuts every slide of the chart library that ships with think-cell (<THINKCELL_DIR>/templates/ think-cell Charts/*.potx) into templates/library/, one template per slide, and names its charts c1, c2, … in reading order. That gives 34 designs: stacked, 100%, clustered and combination columns and bars, butterfly, line, area, football field, box plot, candlestick, both Mekko kinds, pie, doughnut, bar-of-pie, scatter, bubble, waterfalls, funnel, and CAGR, difference and value-line annotations. Gantt charts are left out because ppttc.exe garbles their date axis. Nothing is redistributed; the files are copied from your install.

  • Your own slides. template_from_slide copies one slide of your deck, names its think-cell charts in code (no clicking in PowerPoint) and saves it as templates/user/<name>.pptx. With no path it uses the deck open in PowerPoint. From then on fill_chart_template("user/<name>", …) rebuilds that slide, in its own style, with new data.

fill_chart_template takes one entry per chart name:

{"c1": {"categories": ["2025", "2026"],
        "series": [{"name": "Sales", "values": [10, 12]}]}}
  • "percent": true writes percentage cells.

  • Pie: one category and one series per segment. Scatter: categories ["X", "Y"] (plus "Size" for bubbles) and one series per point.

  • Waterfall: "e" as a value draws a total bar.

  • Charts with think-cell's "100%=" datasheet row (Mekko, some 100% charts) get it filled automatically from the template; pass "total" to override.

  • "table" passes a raw .ppttc data table through unchanged.

  • title sets the slide title; texts maps a text box's current text to new text ("" deletes the box, starts a new line).

The result says which charts verifiably took the data (filled, not_filled, not_checked).

Tool reference and examples

1. create_chart

Build a .ppttc file for one chart.

{
  "chart_type": "bar",
  "title": "Revenue by Region",
  "data": [
    {"category": "North", "Revenue": 120},
    {"category": "South", "Revenue": 95},
    {"category": "West", "Revenue": 140}
  ],
  "template_path": "C:\\decks\\regions.pptx",
  "chart_name": "RevenueChart"
}

Returns, e.g.:

{
  "success": true,
  "ppttc_path": "C:\\Users\\you\\thinkcell-mcp\\output\\Revenue_by_Region.ppttc",
  "chart_type": "bar",
  "chart_name": "RevenueChart",
  "template": "C:\\decks\\regions.pptx",
  "errors": []
}

template_path is optional; when omitted the placeholder template.pptx is written and must be corrected before conversion. chart_name (default Chart1) must match the name given to the chart inside think-cell — select the chart in PowerPoint and set the "Name" field in its think-cell mini toolbar. If the names differ, ppttc.exe runs but updates nothing.

options is an optional object for chart-type-specific settings: category_key (any categorical chart) forces which row key is the category column; line_series (combo only) lists which series render as lines. An unrecognized option key is rejected with a clear error.

2. build_presentation

Combine several charts/slides into a single .ppttc file. Each chart entry may set chart_name to match a named element in the template.

{
  "template_path": "C:\\decks\\quarterly.pptx",
  "output_name": "Q3_Review",
  "slides": [
    {
      "title": "Revenue Bridge",
      "charts": [
        {
          "chart_type": "waterfall",
          "chart_name": "BridgeChart",
          "data": [
            {"category": "Opening", "Value": 100},
            {"category": "New", "Value": 40},
            {"category": "Churn", "Value": -15},
            {"category": "Closing", "Value": 125}
          ]
        }
      ]
    },
    {
      "title": "Revenue Trend",
      "charts": [
        {
          "chart_type": "line",
          "chart_name": "TrendChart",
          "data": [
            {"category": "Jul", "2025": 100},
            {"category": "Aug", "2025": 112},
            {"category": "Sep", "2025": 125}
          ]
        }
      ]
    }
  ]
}

Returns the .ppttc path plus slide_count and chart_count.

3. create_auto_deck

Build a multi-slide .ppttc deck without preparing or naming any template — it always uses the bundled templates/thinkcell_auto.pptx (see Zero-setup decks above). Every slide has the same fixed layout: a slide title, plus a left chart and a right chart, each with its own title. All fields are optional, but every slide must carry at least one. Each chart's categories may be either ISO dates "YYYY-MM-DD" (producing a date axis) or plain string labels like "Q1" (producing a category axis) — the axis kind is auto-detected per chart. The left chart renders percentage values, the right chart renders plain number values. Each slide becomes one .ppttc entry (one slide).

Input schema — slides is a non-empty list of slide objects:

Slide field

Type

Notes

slide_title

string

optional — slide heading

left_title

string

optional — title above the left chart

right_title

string

optional — title above the right chart

left_chart

object

optional — left chart (percentage values)

right_chart

object

optional — right chart (number values)

A chart object has categories (a non-empty list of either ISO date strings "YYYY-MM-DD" for a date axis, or plain string labels for a category axis) and series (non-empty list of series objects). Each series object has name (string), values (list of numbers, one per category) and an optional fill (hex colour like "#ff0000" applied to every point of that series).

{
  "output_name": "Germany_Review",
  "slides": [
    {
      "slide_title": "Competition: Germany",
      "left_title": "Market share",
      "right_title": "Our orders (10K)",
      "left_chart": {
        "categories": ["2024-01-01", "2025-01-01"],
        "series": [
          {"name": "Our brand", "values": [55, 55]},
          {"name": "Competitor 1", "values": [4, 4.5]}
        ]
      },
      "right_chart": {
        "categories": ["2024-01-01", "2025-01-01"],
        "series": [
          {"name": "Pending", "values": [0, 14], "fill": "#ff0000"},
          {"name": "Delivered", "values": [760, 747]}
        ]
      }
    }
  ]
}

Returns {"success": true, "ppttc_path": "...", "slide_count": 1, "template": "...", "errors": []}, or success: false with a list of structured validation errors. output_name is optional (default auto_deck); the .ppttc is written to the output/ folder.

4. set_deck_branding

Re-brand the template that create_auto_deck uses. Rewrites the bundled template's theme accent palette and removes the think-cell logo — once — so every future deck inherits it. Only standard PowerPoint parts are touched; named think-cell elements are left intact.

{
  "accent_colors": ["#00338D", "#0091DA", "#86BC25", "#E88D14", "#797878", "#FFDB00"],
  "remove_logo": true
}

accent_colors takes up to six #RRGGBB colours (theme accent1..accent6); omit it to apply the default Big-Four-inspired palette. Returns {"success": true, "template": "...", "accents": [...], "logo_removed": bool, "errors": []}.

5. convert_to_pptx

Run ppttc.exe to produce a .pptx. Internally runs: ppttc.exe <input.ppttc> -o <output.pptx>.

{
  "ppttc_path": "C:\\Users\\you\\thinkcell-mcp\\output\\Q3_Review.ppttc",
  "output_path": "C:\\decks\\Q3_Review_final.pptx"
}

Returns {"success": true, "pptx_path": "...", "stdout": "...", "stderr": "...", "error": null}, or a structured error (missing input, ppttc.exe not found, non-zero exit, timeout). output_path is optional and defaults to the input path with a .pptx extension.

6. validate_ppttc

Structurally validate a .ppttc document. Pass either ppttc_path or ppttc_json.

{
  "ppttc_path": "C:\\Users\\you\\thinkcell-mcp\\output\\Q3_Review.ppttc"
}

Returns {"valid": true, "errors": []}, or valid: false with a list of problems (bad JSON, missing template/data/name/table, malformed cells, inconsistent row widths, ...).

7. list_chart_types

No input. Returns every supported chart type with its required/optional parameters, the expected data shape, and a ready-to-use example:

{
  "count": 8,
  "chart_types": {
    "bar": {
      "required_params": ["chart_type", "data", "title"],
      "optional_params": ["template_path", "chart_name", "options"],
      "data_shape": "List of row objects. Each row has one category key ...",
      "example": { "chart_type": "bar", "title": "Revenue by Region", "data": [ ... ] }
    }
  }
}

8. diagnose_thinkcell

Explain why think-cell automation isn't working. Runs read-only Windows registry and filesystem checks — no processes are launched. template_path is optional.

{
  "template_path": "C:\\decks\\quarterly.pptx"
}

Returns a report whose summary gives an overall status (ok / warning / error) and actionable recommendations, plus per-area checks:

{
  "platform_supported": true,
  "summary": {
    "status": "error",
    "headline": "think-cell automation cannot work until the errors below are resolved.",
    "recommendations": ["In PowerPoint: File > Options > Add-ins > ..."]
  },
  "checks": {
    "thinkcell_installation": { "status": "ok", "summary": "...", "details": { ... } },
    "powerpoint": { "status": "ok", "summary": "..." },
    "com_addin": { "status": "error", "summary": "The think-cell COM add-in is ...", "recommendation": "..." },
    "office_disabled_items": { "status": "ok", "summary": "..." },
    "license": { "status": "info", "summary": "..." },
    "template": { "status": "warning", "summary": "...", "details": { ... } }
  }
}

Checks performed: think-cell installation and ppttc.exe; PowerPoint presence; the think-cell COM add-in registration and LoadBehavior; PowerPoint's disabled / crashing add-in list; think-cell registry/licence presence; and (with template_path) whether the .pptx is valid and actually contains think-cell content.

Chart data shapes

Every chart type takes data as a list of row objects.

  • Categorical charts (bar, stacked_bar, line, area, waterfall, mekko, combo): each row has one category key (category, label or name) plus one or more numeric series keys. Every row must define the same set of series — a row that omits a series is rejected, because a missing value would otherwise be charted as 0 rather than as a gap.

    [{"category": "Q1", "Plan": 100, "Actual": 92},
     {"category": "Q2", "Plan": 110, "Actual": 118}]
  • scatter: each row is a point with numeric x and y, plus an optional numeric size (bubble chart) and optional label.

    [{"label": "A", "x": 9.99, "y": 1200},
     {"label": "B", "x": 14.99, "y": 850}]

Call list_chart_types for the exact rules and an example per type.

Project structure

thinkcell-mcp/
  server.py            MCP server entry point (FastMCP, stdio transport)
  autodeck.py          zero-setup .ppttc builder (powers create_auto_deck)
  branding.py          re-themes the auto-deck template (set_deck_branding)
  converter.py         ppttc.exe wrapper with structured error handling
  validator.py         .ppttc JSON structural validation
  diagnostics.py       think-cell environment diagnostics (registry/files)
  data_import.py       Excel/CSV reader (import_chart_data)
  layout.py, palettes.py  auto-deck layouts and colour palettes
  connector.py         runs the remote connector: setup, start/stop, ngrok
  oauth.py             connect-code sign-in for the remote connector
  manifest.json        Claude Desktop extension manifest (.mcpb)
  build_mcpb.py        packs the extension into dist/
  tests.py             self-contained test suite (run: python tests.py)
  charts/
    __init__.py        chart registry + catalog helpers
    base.py            shared ChartBuilder base class + .ppttc writer
    waterfall.py       one module per chart type
    bar.py
    stacked_bar.py
    line.py
    scatter.py
    mekko.py
    area.py
    combo.py
    table.py
    process.py
  templates/           thinkcell_auto.pptx is copied here from your think-cell
                       install on first use (not shipped with the repo)
  output/              generated .ppttc / .pptx files (git-ignored)
  pyproject.toml       packaging metadata
  requirements.txt     Python dependencies
  .mcp.json.example    sample Claude MCP registration
  LICENSE              MIT licence
  README.md            this file
  CONNECTOR.md         connector setup guide

Notes and limitations

  • All tools return structured objects. On failure they return success: false (or valid: false) with an errors list — never a bare string.

  • This server builds and validates .ppttc files on any OS, but convert_to_pptx requires Windows with think-cell and PowerPoint installed.

  • The data table layout follows the thinkcell library's .ppttc format. Exact rendering (totals on a waterfall, which series is a line in a combo, Mekko column widths) is governed by the chart you set up in the template.

Credits and license

Built on Hector Vargas's thinkcell-mcp, which wrote the original server, chart builders and auto-deck. This fork adds the Claude Desktop extension, the remote connector, Excel/CSV import, tables, process charts and slide insertion. Released under the MIT License.

This is an independent, unofficial integration. "think-cell" is a trademark of think-cell Sales GmbH & Co. KG; this project is not affiliated with or endorsed by think-cell. It requires a separately licensed think-cell installation and does not redistribute any think-cell software or template files.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables Claude to build and modify slide decks with bullets, pictures, charts, tables, speaker notes, themes and transitions, then export them as PowerPoint pptx, PDF, per-slide images or outlines. It also reads and inspects existing presentations, finding and replacing content across whole folders, and can optionally open decks in the DeckCraft app for live editing.
    9
    Apache 2.0