MCP
MCP ツールでファイルを生成する
Bannerify の MCP ツールで、テンプレートの一覧取得、画像と PDF の生成、図形からの画像の組み立てを行う方法を説明します。
Bannerify の MCP サーバーには、6 つのツールがあります。アシスタントがリクエストに合わせてツールを選ぶので、ツール名を指定して呼び出すことはほとんどありません。どのツールも、接続したワークスペースに対してだけ動作します。まだの場合は、先にMCP クライアントを接続してください。
ツール
| ツール | 内容 | 生成として数えられるか | 引数 |
|---|---|---|---|
list_templates |
ワークスペースのテンプレートを一覧表示します。includeLayers を付けると、変更できるレイヤーも一覧表示します |
数えられない | includeLayers(boolean、省略可) |
get_template |
1 つのテンプレートと、そのレイヤーを取得します | 数えられない | templateId(string) |
get_project |
ワークスペースの ID、名前、プラン、作成日を取得します | 数えられない | なし |
create_image |
テンプレートを描画し、画像を返します | 数えられる | templateId(string)、modifications(object、省略可)、format(png、jpeg、webp、初期値は png) |
create_pdf |
テンプレートを PDF として描画し、そのリンクを返します | 数えられる | templateId(string)、modifications(object、省略可) |
create_image_from_shapes |
テンプレートを使わず、図形から画像を組み立てます | 数えられる | canvas(object、省略可)、shapes(array)、format(png、jpeg、webp、初期値は png) |
テンプレート ID は、list_templates が返したとおりに使ってください。
テンプレートを探す
テンプレートと、そのレイヤーを頼みます。
Bannerify のテンプレートを、各テンプレートのレイヤーつきで一覧表示してください。
ツールは、テンプレートごとに 1 件ずつ返します。includeLayers がない場合、各件には ID と名前だけが入ります。付けた場合は、各レイヤーに、modifications で使う名前が付いてきます。
[
{
"id": "tpl_xxx",
"name": "Lifecycle email",
"layers": [
{ "name": "headline", "id": "shape:abc123", "type": "text", "suggestInput": "text" },
{ "name": "photo", "id": "shape:def456", "type": "image", "suggestInput": "src" },
{ "name": "qr", "id": "shape:ghi789", "type": "qrcode", "suggestInput": null }
]
}
]
suggestInput は、設定するフィールドを示します。テキストレイヤーなら text、画像レイヤーなら src、それ以外の種類なら null です。名前のないレイヤーは Untitled と表示されます。
レイヤー名は、テンプレートエディターで付けます。レイヤーをダブルクリックして名前を変更します。名前とレイヤーがどう対応するかは、Modificationsで説明しています。
レイヤーの値を渡す
modifications は、レイヤー名をキーにしたオブジェクトです。文字列を渡すとレイヤーのテキストを設定し、オブジェクトを渡すとそのレイヤーのフィールドを設定します。REST API の配列形式は、ここでは使えません。
| レイヤー | 値の例 |
|---|---|
| テキスト | { "headline": "Summer sale" } |
| 画像 | { "photo": { "src": "https://example.com/photo.png" } } |
| QR コード | { "qr": { "qrcode": "https://example.com/restart" } } |
| 表 | { "prices": { "columns": ["Plan", "Price"], "rows": [{ "Plan": "Automate", "Price": "$29" }] } } |
| すべてのレイヤー | { "tag": { "visible": false } } |
create_image の完全な例です。
{
"templateId": "tpl_xxx",
"format": "png",
"modifications": {
"headline": "Welcome back, An",
"photo": { "src": "https://example.com/hero.png" },
"qr": { "qrcode": "https://example.com/restart" }
}
}
指定しなかったレイヤーは、テンプレートの値のままです。どのレイヤーにも一致しない名前は無視されます。レイヤーの種類ごとのフィールドは、Modificationsにまとめています。
結果を読む
create_image は、画像をインラインで返し、形式とバイト単位のサイズを示す 1 行を添えます。画像の表示や保存の方法は、クライアントが決めます。
create_pdf は、ファイルを保存してリンクを返します。
Generated a PDF from template tpl_xxx. Download: https://images.bannerify.co/files/mcp/0b3c1c1e-5d6f-4c52-9e0a-8f6a4c0f2a11.pdf
PDF はキャンバスと同じサイズの 1 ページで、テキストを選択して検索できます。詳しくはPDF の生成を参照してください。
テンプレートなしで画像を組み立てる
合うテンプレートがないときは、create_image_from_shapes を使います。キャンバスと図形のリストを渡すと、ツールが図形を順番に描画して画像を返すため、アシスタントは 1 回限りのバナーや請求書をデザインできます。
canvas オブジェクトは省略できます。次のフィールドを設定しない限り、1200 × 630 ピクセルの白い背景になります。
| フィールド | 説明 |
|---|---|
width, height |
ピクセル単位のサイズ。各辺 16〜4096 |
background |
単色。初期値は白です |
backgroundImage |
HTTPS URL、データ URL、または linear-gradient(to right, #4f46e5, #9333ea) のような CSS グラデーション。background より優先されます |
objectFit |
背景画像がキャンバスを埋める方法: cover(初期値)、contain、none |
すべての図形には、type、x、y、width、height があり、キャンバスの左上からのピクセルで指定します。最初の図形が最背面で、最後の図形が最前面です。どの種類でも、さらに 3 つのフィールドが使えます。opacity(0〜1)、rotation(度、時計回り)、style です。
| 種類 | 必須 | 省略可 |
|---|---|---|
text |
text |
fontSize(初期値 24)、align(left、center、right)、lineClamp、color、fontFamily、fontWeight |
frame |
なし | backgroundColor、borderColor、borderWidth、borderRadius |
image |
src |
objectFit(fill、contain、cover、none、scale-down、初期値は cover)、borderRadius |
qrcode |
qrcode |
backgroundColor |
barcode |
barcode |
なし |
icon |
icon |
color |
star |
なし | star(1〜5、初期値 1)、color |
table |
columns、rows |
footer、variant、stripe、compact、fontFamily、align(left、center、right) |
いくつかのルールがあります。
iconには、Iconoir の名前(例:check-circle、arrow-right)を指定します。Iconoir にない名前を指定すると、呼び出しは失敗します。srcには、HTTPS URL またはデータ URL を指定します。リモート画像は、テンプレートと同じルールで読み込まれます。形式は PNG、JPEG、WebP、SVG で、ダウンロードに失敗するとFETCH_IMAGE_ERRORが返ります。- 表は、すべての行に列ごとに 1 つの値を持ちます。行がオブジェクトになる
modificationsとは異なります。variantは、line、grid(初期値)、minimal、striped、compact、bordered、primary-headerのいずれかです。 styleには、キャメルケースの CSS プロパティ名(例:padding、boxShadow、lineHeight、letterSpacing)を指定します。レンダラーが対応していないキーを指定すると、呼び出しはUnrecognized keyメッセージで失敗します。サイズは、styleではなくwidthとheightで指定します。colorやborderRadiusなど、図形のフィールドは、styleの同じキーより優先されます。- 色には、16 進数の値、
rgb()、hsl()、CSS の色名が使えます。
| 制限 | 値 |
|---|---|
| 図形 | 1〜100 |
| キャンバス | 各辺 16〜4096 ピクセル、合計 12,000,000 ピクセルまで |
| テキスト | 4,000 文字 |
| 表 | 12 列、200 行 |
src と backgroundImage |
8,192 文字 |
qrcode の値 |
2,000 文字 |
barcode の値 |
200 文字 |
請求書の完全な例です。
{
"canvas": { "width": 800, "height": 560, "background": "#f8fafc" },
"shapes": [
{ "type": "frame", "x": 0, "y": 0, "width": 800, "height": 120, "backgroundColor": "#0f172a" },
{ "type": "text", "x": 48, "y": 44, "width": 400, "height": 40, "text": "INVOICE", "fontSize": 30, "color": "#ffffff" },
{ "type": "text", "x": 500, "y": 52, "width": 252, "height": 24, "text": "INV-1042", "fontSize": 18, "align": "right", "color": "#94a3b8" },
{
"type": "table",
"x": 48,
"y": 176,
"width": 704,
"height": 180,
"columns": ["Item", "Qty", "Total"],
"rows": [["Logo pack", 1, "$29.00"], ["Banner credits", 500, "$19.00"]],
"footer": ["", "Due", "$48.00"],
"variant": "striped",
"compact": true
},
{ "type": "text", "x": 48, "y": 392, "width": 300, "height": 28, "text": "Thank you for your business.", "fontSize": 16, "color": "#475569" },
{ "type": "qrcode", "x": 632, "y": 384, "width": 120, "height": 120, "qrcode": "https://bannerify.co/invoices/1042" }
]
}
Bannerify は、描画の前にリクエスト全体を検証するため、無効なリクエストは生成を消費しません。有効なリクエストは、テンプレートからの生成と同じように数えられます。詳しくはクォータと制限を参照してください。
エラーを処理する
失敗した呼び出しは、isError: true と、次のいずれかの形式のテキストメッセージを返します。
| 形式 | 意味 |
|---|---|
CODE: message(例: NOT_FOUND: template tpl_xxx not found) |
Bannerify からのエラーです。コードは次の表にまとめています |
Invalid arguments. <field>: <message> |
引数がツールと一致していません。メッセージにフィールド名が示されます。この形式にはコードがありません |
| コード | 意味 | 対処 |
|---|---|---|
NOT_FOUND |
このワークスペースにテンプレートが存在しません。別のワークスペースのテンプレートも見つかりません | list_templates を実行し、結果の ID を使います |
USAGE_EXCEEDED |
ワークスペースが、月間または日次の生成回数の上限に達しました | 次の期間まで待つか、クォータと制限を参照します |
BAD_REQUEST |
create_image_from_shapes の色またはスタイルの値が無効か、modifications の値がレイヤーのフィールドに合っていません |
メッセージに示された値を修正します。modifications の場合、メッセージには、オブジェクト内のレイヤーの位置が 0 から数えて示されます(例: modifications[0].src) |
FETCH_IMAGE_ERROR |
画像をダウンロードできなかったか、サイズが大きすぎてデコードできません | 画像を返す公開 URL を使います |
INTERNAL_SERVER_ERROR |
描画に失敗したか、icon の名前が Iconoir に存在しません |
もう一度試し、アイコン名を確認します |
トークンがない、または期限切れの場合は、ツールが実行される前に、エラー invalid_token を伴う HTTP 401 が返ります。そのため、ツールが UNAUTHORIZED を返すことはありません。その後、クライアントがもう一度サインインします。MCP サーバーにはリクエストのレート制限がないため、RATE_LIMITED と TOO_MANY_REQUESTS は発生しません。REST API のコードは、エラーの処理にまとめています。