MCP
用 MCP 工具生成檔案
了解如何使用 Bannerify MCP 工具列出範本、生成圖片和 PDF,以及用形狀組合圖片。
Bannerify MCP 伺服器有六個工具。助理會依據你的請求挑選工具,所以你很少需要直接指定工具名稱。每個工具都只會作用於所連接的工作區。如果還沒有連接,請先連接 MCP 用戶端。
工具
| 工具 | 功能 | 是否計為一次生成 | 引數 |
|---|---|---|---|
list_templates |
列出工作區中的範本。加上 includeLayers 時,也會列出可以變更的圖層 |
否 | includeLayers(boolean,選填) |
get_template |
讀取一個範本及其圖層 | 否 | 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 範本,以及每個範本的圖層。
工具會為每個範本回傳一個項目。沒有 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 會直接回傳圖片,並附上一行說明格式與位元組大小的文字。如何顯示或儲存圖片,由你的用戶端決定。
create_pdf 會儲存檔案並回傳連結:
Generated a PDF from template tpl_xxx. Download: https://images.bannerify.co/files/mcp/0b3c1c1e-5d6f-4c52-9e0a-8f6a4c0f2a11.pdf
PDF 只有一頁,大小與畫布相同,文字可以選取和搜尋。詳情請見生成 PDF。
不用範本組合圖片
沒有合適的範本時,請使用 create_image_from_shapes。給工具一個畫布和一份形狀清單,它會依序繪製這些形狀並回傳圖片,因此助理可以設計一次性的橫幅或發票。
canvas 物件是選填的。除非你設定下列欄位,否則大小為 1200 × 630 像素,背景為白色:
| 欄位 | 說明 |
|---|---|
width, height |
以像素為單位的大小,每邊 16 到 4096 |
background |
純色。預設為白色 |
backgroundImage |
HTTPS 網址、資料網址,或 CSS 漸層,例如 linear-gradient(to right, #4f46e5, #9333ea)。它的優先順序高於 background |
objectFit |
背景圖片如何填滿畫布:cover(預設)、contain 或 none |
每個形狀都有 type、x、y、width 和 height,單位為像素,從畫布左上角算起。第一個形狀在最下層,最後一個在最上層。另外有三個欄位適用於每種類型: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 網址或資料網址。遠端圖片的載入規則與範本相同:PNG、JPEG、WebP 或 SVG,下載失敗時會回傳FETCH_IMAGE_ERROR。- 表格的每一列,每個欄位都只有一個值。這與
modifications不同,在modifications中,一列是一個物件。variant可以是line、grid(預設)、minimal、striped、compact、bordered或primary-header。 style接受駝峰式命名的 CSS 屬性名稱,例如padding、boxShadow、lineHeight和letterSpacing。繪製引擎不支援的鍵會讓呼叫失敗,並顯示Unrecognized key訊息。大小請用width和height設定,不要用style。- 形狀上的欄位,例如
color或borderRadius,優先於style中相同的鍵。 - 顏色可以是十六進位值、
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 |
無法下載圖片,或圖片太大而無法解碼 | 使用會回傳圖片的公開網址 |
INTERNAL_SERVER_ERROR |
繪製失敗,或 icon 名稱在 Iconoir 中不存在 |
再試一次,並檢查圖示名稱 |
權杖不存在或已過期時,會在任何工具執行之前收到 HTTP 401 和錯誤 invalid_token,所以工具永遠不會回傳 UNAUTHORIZED。之後你的用戶端會重新登入。RATE_LIMITED 和 TOO_MANY_REQUESTS 不會發生,因為 MCP 伺服器沒有請求速率限制。REST API 的錯誤碼請見處理錯誤。