mcpField
P
pptx-author

pptx-author

github.com/nousresearchドキュメント258.5k64 回インストール今日更新
リポジトリ

pptx-author について

pptx-authorは、python-pptxでPowerPointファイルを作成する軽量スキルです。モデルに基づく金融資料向けで、各数値を元のワークブックまで追跡できるようにします。

主な機能

  1. 01python-pptxで.pptxを作成
  2. 02数値をワークブックのセルに紐付け
  3. 03配置済みの企業テンプレートを読み込み
  4. 04ワークブックのグラフをPNGで埋め込み
  5. 05出力先を./out/に設定

活用シーン

  1. 01財務モデルからピッチデッキを作成
  2. 02投資委員会向け資料を準備
  3. 03業績メモをPowerPointファイル化

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nousresearch/hermes-agent --skill pptx-author

インストール後、Claude Code で/pptx-authorを入力して読み込まれたか確認します。

詳細

pptx-author

python-pptx を使用して、ディスク上に .pptx ファイルを作成します。ライブの PowerPoint セッションを操作するのではなく、ファイル成果物としてデッキを納品する場合に使用します。

Anthropic の pptx-author および pitch-deck スキルを anthropics/financial-services から改変したものです。元のスキルにあった MCP / Office-JS 分岐は削除されています。ヘッドレスの Python 環境を前提としています。

より包括的で、すでに提供されている PowerPoint 作成スキル(スライド、発表者ノート、埋め込み、メディア)については、組み込みの powerpoint スキルをご覧ください。このスキルは、すべての数値の出典をソースのワークブックまでたどれるようにする、モデルを基にしたデッキ(ピッチデッキ、IC メモ、決算ノート)向けの軽量なパターンです。

出力要件

  • ./out/<name>.pptx に書き込みます。./out/ が存在しない場合は作成します。
  • 最終メッセージでは相対パスを返します。

セットアップ

pip install "python-pptx>=0.6"

基本ルール

1 枚のスライドにつき 1 つのアイデア

タイトルで要点を示し、本文でそれを裏付けます。「Q3 の売上高」というスライドタイトルは弱く、「Q3 の売上高成長率は前年同期比 14%に加速」というタイトルは効果的です。

すべての数値の出典をモデルまでたどれるようにする

スライドの数値が ./out/model.xlsx に由来する場合は、シートとセルを脚注に記載します。

Revenue: $1,250M  (Source: model.xlsx, Inputs!C3)

数値を記憶や要約から転記しないでください。ワークブックを開いて名前付き範囲を読み取り、可能であればデッキの値をプログラムで紐付けます。

会社のテンプレートがマウントされている場合は使用する

./templates/firm-template.pptx が存在する場合は読み込み、デッキにブランドカラー、フォント、マスターレイアウトを引き継がせます。

from pptx import Presentation
from pathlib import Path

template = Path("./templates/firm-template.pptx")
prs = Presentation(str(template)) if template.exists() else Presentation()
グラフ:モデルから作成した PNG はネイティブの pptx グラフより優先

忠実性が重要な場合(モデルのグラフのスタイルをデッキに正確に合わせる必要がある場合)は、ソースのワークブックからグラフを PNG としてレンダリングし、画像を埋め込みます。ネイティブの pptx.chart グラフは不安定で、会社の標準に合わないことがよくあります。

from pptx.util import Inches
slide.shapes.add_picture("./out/charts/football_field.png",
                         Inches(1), Inches(2),
                         width=Inches(8))
外部への送信は禁止

このスキルはファイルを書き込みます。メール送信、アップロード、投稿は行いません。配信はオーケストレーションレイヤーが処理します。

基本構成

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pathlib import Path

template = Path("./templates/firm-template.pptx")
prs = Presentation(str(template)) if template.exists() else Presentation()

# Title slide
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = "Project Aurora — Strategic Alternatives"
slide.placeholders[1].text = "Preliminary Discussion Materials"

# Valuation summary slide (title-only layout)
slide = prs.slides.add_slide(prs.slide_layouts[5])
slide.shapes.title.text = "Valuation implies $38–$52 per share across methodologies"

# Add a table bound to model outputs
rows, cols = 5, 4
tbl_shape = slide.shapes.add_table(rows, cols,
                                   Inches(0.5), Inches(1.5),
                                   Inches(9), Inches(3))
tbl = tbl_shape.table
headers = ["Methodology", "Low ($)", "Mid ($)", "High ($)"]
for c, h in enumerate(headers):
    tbl.cell(0, c).text = h

# In a real deck, read these from the model workbook with openpyxl
data = [
    ("Trading comps",     "35", "41", "48"),
    ("Precedent M&A",     "39", "45", "52"),
    ("DCF (base)",        "36", "43", "51"),
    ("LBO (10% IRR)",     "33", "38", "44"),
]
for r, row in enumerate(data, start=1):
    for c, val in enumerate(row):
        tbl.cell(r, c).text = val

# Embed a chart rendered from the model
slide = prs.slides.add_slide(prs.slide_layouts[5])
slide.shapes.title.text = "Football field — current price $42"
slide.shapes.add_picture("./out/charts/football_field.png",
                         Inches(1), Inches(1.8), width=Inches(8))

Path("./out").mkdir(exist_ok=True)
prs.save("./out/pitch-aurora.pptx")

ソースのワークブックへのデッキ数値の紐付け

Excel モデルから名前付き範囲または特定のセルを読み取り、デッキの数値がずれないようにします。

from openpyxl import load_workbook

wb = load_workbook("./out/model.xlsx", data_only=True)
def nr(name):
    """Resolve a named range to its current computed value."""
    rng = wb.defined_names[name]
    sheet, coord = next(rng.destinations)
    return wb[sheet][coord].value

revenue_fy24 = nr("RevenueFY24")
implied_mid  = nr("ImpliedSharePriceBase")

次に、それらの値を使ってデッキの内容を作成します。

slide.shapes.title.text = f"Implied share price of ${implied_mid:.2f} (base case)"

読み取り前に、必ずワークブックを再計算してください。openpyxl が計算済みの値を取得できるのは、シートがすでに計算されている場合のみです。まず excel-author スキルの再計算ヘルパーを実行するか、実際の Excel セッションで開いて保存してください。

ピッチデッキ向けスライドタイプのチェックリスト

一般的な投資銀行のピッチデッキは、通常、次の構成に従います。必須ではありませんが、基本構成として役立ちます。

  1. 表紙/タイトル
  2. 免責事項
  3. 目次
  4. 状況の概要
  5. 企業の概要(対象企業)
  6. 市場/セクターの背景
  7. バリュエーションの概要(フットボールフィールド)— 最重要スライド
  8. 類似上場企業の詳細
  9. 類似取引の詳細
  10. DCF の概要
  11. 参考 LBO /スポンサーケース
  12. プロセスに関する検討事項
  13. 付録

このスキルを使用しない場合

  • Office MCP が利用可能なライブの PowerPoint セッションで作業するユーザー — 代わりにライブのドキュメントを操作します。
  • 財務以外のスライド資料(四半期ごとの全社集会、マーケティングデッキ)— より包括的な powerpoint スキルを使用します。
  • アニメーション、画面切り替え、発表者ノートを多用するデッキ — より包括的な powerpoint スキルを使用します。

クレジット

Anthropic の Claude for Financial Services プラグインスイートの規約を改変したものです。ライセンスは Apache-2.0 です。原文:https://github.com/anthropics/financial-services/tree/main/plugins/agent-plugins/pitch-agent/skills/pptx-author

コメント