rpt-mcp (SAP Crystal Reports) について
rpt-mcpは、Windows上でSAP Crystal Reportsの`.rpt`ファイルを調査・編集するMCPサーバーです。Crystal .NETランタイムを介して構造化された操作を提供し、編集時には元ファイルをバックアップします。
主な機能
- 01レポート構造と数式の調査
- 02フィールド、パラメーター、グループ、セクションの編集
- 03データソースとレイアウトの変更
- 04レポート比較とデータベース検証
- 05レポートの文書・画像へのエクスポート
活用シーン
- 01レポートのフィールドと条件式の確認
- 02レポートのパラメーターやグループの更新
- 03レポートのテーブルを別のデータベースへ切り替え
- 04レポートをPDFまたはページ画像に出力
MCP 対応
MCPクライアントに、Crystal Reportsファイルの一覧表示、調査、編集、比較、検証、エクスポート用ツールを提供します。stdio上のJSON-RPC 2.0を使用し、WindowsとSAP Crystal Reports .NET Frameworkランタイムが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
rpt-mcp
英語 | 中国語
SAP Crystal Reports の .rpt ファイル用 MCP サーバーです。
AI アシスタント(Claude Code、Claude Desktop、Cursor など)が SAP Crystal Reports の .rpt ファイルを読み取り、編集できる MCP サーバーです。
.rpt はバイナリ形式のため、AI はテキストとして編集できません。このサーバーは、公式の Crystal Reports .NET ランタイム(エンジンとインプロセスの Report Application Server)をラップし、安全で構造化された編集操作を MCP ツールとして公開します。
ツール
| ツール | 機能 |
|---|---|
list_reports | フォルダー内の .rpt ファイルを一覧表示します |
inspect_report | ページ設定、テーブル/SQL コマンド/接続、リンク、パラメーター、数式、選択数式、グループ、並べ替え、セクション、すべてのオブジェクト(位置、テキスト、バインドされたフィールド、フォント)を確認します。書式設定に隠れている条件付き数式(抑制、色、数値形式など)も含みます |
batch_edit | 複数の編集操作を、読み込み、バックアップ、保存をそれぞれ1回ずつ行って実行します。すべて成功するか、すべて取り消されます |
diff_reports | 2つのレポート(例:バックアップと編集済みレポート)の構造を比較します |
set_formula / delete_formula | 数式フィールドを編集、作成、削除します |
set_selection_formula | レコードまたはグループの選択数式を設定します |
add_parameter / set_parameter / delete_parameter | レポートパラメーターを操作します。set_parameter は、使用しているすべての数式を維持したまま、プロンプト、型、複数値、デフォルト値をその場で変更します |
add_group / delete_group | フィールドでグループ化します(シフトごと、日ごと、月ごとなど)。新しい Group Header/Footer セクションを返します。小計は、グループフッター内の Sum({T.Qty}, {T.Shift}) のような数式で計算します |
add_sort / delete_sort | レコードを並べ替えます(昇順/降順)。グループ化フィールドに対して add_sort を実行すると、グループの順序が切り替わります |
add_running_total / delete_running_total | レコードごと、フィールド/グループの値が変わるごと、または数式に基づいて計算する累計(合計、件数、個別件数、平均、最小値、最大値)を設定します。リセット方法は、なし、フィールドごと、グループごと、数式に基づく方法から選べます |
set_command_sql | 既存の SQL Command テーブルの SQL を置き換えます(実験的機能) |
add_table | データベーステーブル(OLE DB/ADO、例:SQL Server または LocalDB)を追加し、その列をレポートに配置できるようにします。列の一覧を返します |
set_datasource | テーブルの接続先を別のサーバー/データベースに切り替え、必要に応じて OLE DB プロバイダーも変更します(変更内容は保持されます) |
remove_table | テーブル/コマンドを削除します(そのフィールドが使用中の場合は削除を拒否します。force を指定すると削除できます) |
set_text | テキストオブジェクトのテキストを変更します |
set_text_with_fields | Shift : {T.Shift} や Page {PageNumber} of {TotalPageCount} のように、フィールドを埋め込んだテキストを新規または既存のテキストオブジェクトに設定します |
set_object_props | 位置/サイズ、フォント、色、配置、抑制、伸長可否を設定します。線/四角形では、終点、線のスタイル/太さ/色、四角形の塗りつぶしも設定できます |
add_line / add_box | 水平線/垂直線や四角形を追加します(塗りつぶし、角丸に対応)。後続のセクションまでまたがるように設定することもできます |
add_picture / replace_picture | 画像を挿入するか、画像(例:ロゴ)を、名前、位置、サイズを維持したまま差し替えます |
set_field_format | フィールドの数値/日付/時刻/ブール値の形式を設定します。小数桁、桁区切り記号と小数点記号、負の数、通貨、ゼロの表示テキスト、日付の順序/区切り記号、12/24時間表記などに対応し、カスタム形式(#,##0.00、yyyy-MM-dd HH:mm)も指定できます |
set_condition_formula | 条件付き数式(抑制、フォント色、表示文字列、枠線、数値形式など)を設定/解除します |
set_section_props | セクションの高さ、抑制、改ページ、分割禁止、背景を設定します |
add_section / delete_section | セクション(例:2つ目の Detail)を追加するか、削除します(オブジェクトを含むセクションは削除できません) |
move_object | 名前、フォント、形式、条件付き数式を維持したまま、オブジェクトを別のセクションに移動します |
add_subreport / set_subreport_links | 別の .rpt をサブレポートとして挿入し、リンクします。メインパラメーターからサブレポートパラメーターへ、またはメインフィールドからサブレポートフィールドへリンクできます(例:グループごとにサブレポートをフィルターします) |
set_page_setup | 用紙サイズ(A4、Letter、Legal など、またはカスタム)、向き、余白を設定します。印刷可能な幅を返します |
add_text_object / add_field_object / delete_object | レポートオブジェクトを追加または削除します。フィールドオブジェクトには特殊フィールド(RecordNumber、PageNumber、TotalPageCount、PageNofM、PrintDate、GroupNumber、FileName など)も表示できます |
verify_database | レポートとデータベースを照合します。存在しなくなった列(およびその列を使用している箇所)、型の変更、ログオン/プロバイダーの問題を確認します。保存は行いません |
export_report | レポートを実行し、PDF/Excel/Word/CSV など、または PNG/JPG 画像(1ページにつき1枚。dpi と pages を指定)にエクスポートして、エージェントがレイアウトそのものを確認できるようにします。画像のエクスポートでは、Windows 10/Server 2016 以降に組み込まれた PDF レンダラーを使用します。PNG は JPG よりもテキストが鮮明で、ファイルサイズも小さくなります。DataSet/XML ベースのレポートや、データベースを使わない簡易プレビューでは、行をインラインで(data)渡せます |
| 位置とサイズは、Crystal 固有の単位である twips(1440 = 1 インチ、567 ≈ 1 cm)で指定します。 |
すべてのツールで subreport を指定すると、サブレポート内で操作できます。
安全性
- 編集時は、元のファイルを同じ場所にある
_rptmcp_backup/<name>_<timestamp>.rptにコピーしてから、ファイルを上書きします。新しいファイルに書き込むにはoutput_pathを指定してください。 delete_formula、delete_parameter、delete_running_total、remove_tableは、フィールドがまだ使用されている場合(フィールドオブジェクト、テキストオブジェクトに埋め込まれたフィールド、数式、選択/条件付き数式、グループ、並べ替え、SQL コマンド)に削除を拒否し、使用箇所を一覧表示します。force: trueを指定すると、関連付けられたオブジェクトも削除します。この保護がない場合、Crystal は削除された数式に関連付けられたすべてのオブジェクトを暗黙のうちに削除します。
要件
- Windows
- .NET Framework 4.8
- SAP Crystal Reports runtime for .NET Framework(v13、64-bit)、または SAP Crystal Reports for Visual Studio(SP 20 以降を推奨)。SAP から無料でダウンロードできます。ランタイムは SAP のプロプライエタリソフトウェアであり、このリポジトリには含まれていません。
- ソースからビルドする場合:.NET SDK 6 以降(
net48をビルドします)。
インストール
- SAP Crystal Reports ランタイムをインストールします(「要件」を参照)。
- 次のいずれかの方法で rpt-mcp を入手します。
- Zip: Releases から
rpt-mcp-<version>-win-x64.zipをダウンロードして任意の場所(例:C:\Tools\rpt-mcp)に展開し、rpt-mcp.exeを MCP クライアントに登録します(以下を参照)。 - MCP Bundle: Releases の
rpt-mcp-<version>.mcpbを、Claude Desktop など、MCP Bundles に対応したクライアントで開きます。 - MCP Registry: rpt-mcp は、
io.github.ashafizullah/rpt-mcpとして公式 MCP Registry に登録されています。
- Zip: Releases から
ソースからビルド
cd src
dotnet build -c Release
# -> src\bin\Release\rpt-mcp.exe
このプロジェクトは、GAC(C:\Windows\assembly\GAC_MSIL)から Crystal アセンブリを参照します。別の場所にある場合は、dotnet build -p:CrGacMsil=<folder> で上書きしてください。
32 ビット版 Crystal ランタイムを使用する場合は、-p:PlatformTarget=x86 を指定してビルドします。
dotnet test RptMcp.sln -c Release でテストを実行します。レポートのテストについては、CONTRIBUTING.md を参照してください。
MCP クライアントへの登録
Claude Code:
claude mcp add rpt-mcp -- "C:\path\to\rpt-mcp.exe"
Claude Desktop/その他のクライアント(mcpServers 設定):
{
"mcpServers": {
"rpt-mcp": { "command": "C:\\path\\to\\rpt-mcp.exe" }
}
}
データベース接続(任意)
編集にデータベースは必要ありません。通常、export_report、set_command_sql、set_datasource ではデータベースが必要です。また、add_table では常に必要です(Crystal がサーバーから列一覧を読み取るためです)。
server/database/user/password/integrated を直接渡すか、実行ファイルの隣に connections.json を作成(または RPTMCP_CONNECTIONS でそのファイルを指定)し、connection: "<name>" を渡します。
{
"dev": { "server": "localhost\\SQLEXPRESS", "database": "Northwind", "integrated": true }
}
connections.json は Git の対象外です。認証情報は絶対にコミットしないでください。
プロンプトの例
- 「
C:\reports\Invoice.rptを調べ、タイトルを Tax Invoice に変更して、太字の 14pt にしてください。」 - 「数式
{@FullName}を追加し、姓と名を結合して、顧客コードの隣にある詳細セクションに配置してください。」 - 「
C:\reports以下のすべてのレポートのすべてのテーブルを、サーバーSQL02、データベースSalesProdに接続してください。」 - 「
(localdb)\MSSQLLocalDBのデータベースSalesからテーブルdbo.Ordersを空のOrders.rptに追加し、OrderNoとTotalを詳細セクションに配置してください。」 - 「製造レポートをシフト別にグループ化し、グループヘッダーに Shift : n を表示して、グループフッターに Qty/Good/Reject の小計を表示してください。」
- 「レポートフッターにサブレポートとして製品別サマリーを追加し、レポートの日付およびシフトのパラメーターにリンクしてください。」
- 「レポートを A4 横向きにし、RecordNumber で行番号を付けてください。」
- 「レイアウトを確認できるように、
OrderNo = 1001で Invoice.rpt を PDF にエクスポートしてください。」 - 「Invoice.rpt の 1 ページ目を PNG にエクスポートして確認し、列の重なりがあれば修正してください。」
ヒント
- 古いレポートでは、LocalDB や TLS 1.2 のみをサポートするサーバーに接続できない従来の
SQLOLEDBプロバイダーが使われていることがよくあります。provider: "MSOLEDBSQL"(Microsoft OLE DB Driver for SQL Server)を指定してset_datasourceを使用すると解決できます。
制限事項
- 新しい SQL コマンドの作成には対応していません。 同じ接続で通常のテーブルを追加できる場合でも、インプロセスの Crystal ランタイムは「Failed to load database information」というエラーを返します。
set_command_sqlで編集できるのは既存のコマンドのみであり、コマンドを含むレポートでの動作はまだ検証されていません。 add_tableはリンクなしでテーブルを追加します。レポートに複数のテーブルがある場合、Crystal はそれらをクロス結合します。テーブルリンクの追加にはまだ対応していません。- チャート、クロスタブ、OLAP グリッドは確認および移動できますが、構造を編集することはできません。
- 線のスタイル:ランタイムは
doubleを拒否し、dashed/dottedの線を極細線として描画します。画像はビットマップとして保存されます(透明部分は白に平坦化されます)。 - 実行中の合計に直接バインドされたフィールドオブジェクトは、ランタイムで保存できません(
SaveAsは「No error」で失敗します)。そのため、add_field_objectはテキストが{#Name}である数式{@Name}を使って{#Name}を表示します。delete_running_totalはその数式も削除します。 - ランタイムでは空のレポートを作成できないため、新しいサブレポートはまず独立した
.rptとして作成し(例:レポートをコピーし、これらのツールで不要部分を削除)、add_subreportで挿入します。サブレポートオブジェクトを別のセクションに移動することはできません。挿入先のセクションに挿入してください。 - デフォルトのパラメーター値は、プロンプトに表示される選択肢です。
export_reportには引き続き、parametersで値を渡す必要があります。 set_command_sqlとset_datasourceは、スキーマを検証するためにデータベースへ接続する Crystal のテーブルロケーション API を使用します。- Windows 11 および SQL Server LocalDB 上の Crystal Reports runtime 13.0.2000(x64)でテスト済みです。
プロトコル
stdio 上の JSON-RPC 2.0(改行区切り)です。Crystal ランタイムは .NET Framework 上でしか動作しないため、手動で実装されています。ログは stderr に出力されます。
ライセンスと法的事項
- rpt-mcp はMIT Licenseの下で公開されています。
- 独立したプロジェクトであり、SAP SE とは提携、承認、または後援の関係にありません。SAP および Crystal Reports は、ドイツその他の国における SAP SE の商標または登録商標です。ここでは互換性を説明する目的でのみ使用しています。
- SAP Crystal Reports runtime はこのプロジェクトに同梱されていません。各ユーザーが SAP からインストールする必要があり、SAP のライセンス条項が適用されます。SAP は、このランタイムをクライアント(デスクトップ)アプリケーション向けに無償で提供していると説明しています。rpt-mcp はローカルで実行される単一ユーザーのプロセスであり、この種の導入形態に該当します。複数のユーザーがアクセスする共有サーバーとして実行する場合は、サーバーアプリケーションに関する SAP のライセンス(例:Crystal Reports Developer Advantage ライセンス)を確認してください。
- サードパーティ製コンポーネントはTHIRD-PARTY-NOTICES.mdに記載されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。