スキルフォーマット仕様
skills.mdフォーマットは、スキルの構造、設定、実行方法を定義します。この仕様により、すべてのTajoスキルが一貫した動作をします。
ファイル構成
スキルはYAMLフロントマター付きの単一のマークダウンファイルで定義されます。
---name: customer-syncversion: 2.1.0description: Sync customer data to Brevo contactscategory: data-syncstatus: stable
triggers: - event: customer_created - event: customer_updated - event: customer_deleted
actions: - brevo/create-contact - brevo/update-contact - brevo/delete-contact
brevoEndpoints: - POST /v3/contacts - PUT /v3/contacts/{identifier} - DELETE /v3/contacts/{identifier}
permissions: - contacts:write - contacts:read---
# Customer Sync
Automatically synchronize customer data from your platform to Brevo contacts.
## Overview
This skill listens for customer lifecycle events and mirrors changes to Brevo...フロントマターフィールド
必須フィールド
| フィールド | 型 | 説明 |
|---|---|---|
name | string | 一意の識別子(kebab-case) |
version | string | セマンティックバージョン(例: “2.1.0”) |
description | string | 短い説明(最大160文字) |
category | enum | data-sync、email-marketing、sms-whatsapp、loyalty、analytics、integrationsのいずれか |
triggers | array | このスキルを起動するイベント |
actions | array | このスキルが実行できる操作 |
オプションフィールド
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
status | enum | stable | stable、beta、experimentalのいずれか |
brevoEndpoints | array | [] | 使用するBrevo APIエンドポイント |
permissions | array | [] | 必要なBrevo APIパーミッション |
relatedSkills | array | [] | 関連スキルのID |
featured | boolean | false | スキルカタログで強調表示 |
トリガー
トリガーはスキルを起動するイベントを定義します。
イベントトリガー
triggers: - event: cart_abandoned conditions: - cart_value: "> 50" # Minimum cart value - items_count: ">= 1" # At least one item - time_since_activity: "> 30m" # 30 minutes of inactivity debounce: 5m # Wait 5 minutes before re-triggeringスケジュールトリガー
triggers: - schedule: "0 9 * * *" # Cron expression (daily at 9am) timezone: "America/New_York" - schedule: every_hour - schedule: every_dayWebhookトリガー
triggers: - webhook: /skills/customer-sync/trigger method: POST authentication: api_key条件演算子
| 演算子 | 説明 | 例 |
|---|---|---|
= | 等しい | status: "active" |
!= | 等しくない | status: "!= deleted" |
> | より大きい | cart_value: "> 50" |
>= | 以上 | items: ">= 1" |
< | より小さい | age: "< 30" |
<= | 以下 | quantity: "<= 10" |
contains | 文字列に含まれる | email: "contains @gmail.com" |
starts_with | 文字列の接頭辞 | name: "starts_with Dr." |
in | リスト内の値 | country: "in US,CA,UK" |
アクション
アクションはスキルが実行する操作を定義します。
アクション定義
actions: - id: send_reminder_email type: brevo/send-email parameters: template_id: 12345 to: "{{ contact.email }}" params: first_name: "{{ contact.firstName }}" cart_items: "{{ cart.items }}" retry: attempts: 3 backoff: exponential on_error: continue # or 'stop'アクションタイプ
| タイプ | 説明 |
|---|---|
brevo/send-email | トランザクションメールを送信 |
brevo/send-sms | SMSメッセージを送信 |
brevo/send-whatsapp | WhatsAppメッセージを送信 |
brevo/create-contact | 新しいコンタクトを作成 |
brevo/update-contact | コンタクト属性を更新 |
brevo/delete-contact | コンタクトを削除 |
brevo/add-to-list | コンタクトをリストに追加 |
brevo/remove-from-list | コンタクトをリストから削除 |
brevo/track-event | カスタムイベントを追跡 |
http/request | HTTPリクエストを発行 |
transform/map | データを変換 |
control/delay | 続行前に待機 |
control/condition | 条件で分岐 |
テンプレート変数
{{ }}構文でデータを参照します。
parameters: to: "{{ contact.email }}" subject: "Your order #{{ order.number }} has shipped" params: name: "{{ contact.firstName | default: 'Customer' }}" items: "{{ cart.items | map: 'name' | join: ', ' }}" total: "{{ cart.total | currency: 'USD' }}"利用可能なフィルター
| フィルター | 説明 | 例 |
|---|---|---|
default | デフォルト値 | {{ name | default: 'Guest' }} |
uppercase | 大文字化 | {{ name | uppercase }} |
lowercase | 小文字化 | {{ email | lowercase }} |
capitalize | 先頭文字を大文字化 | {{ name | capitalize }} |
truncate | 文字列を切り詰める | {{ desc | truncate: 100 }} |
date | 日付をフォーマット | {{ date | date: 'YYYY-MM-DD' }} |
currency | 通貨をフォーマット | {{ price | currency: 'EUR' }} |
map | 配列プロパティをマップ | {{ items | map: 'name' }} |
join | 配列を連結 | {{ tags | join: ', ' }} |
first | 配列の最初の要素 | {{ items | first }} |
last | 配列の最後の要素 | {{ items | last }} |
size | 配列・文字列の長さ | {{ items | size }} |
パーミッション
必要なBrevo APIパーミッションを定義します。
permissions: - contacts:read # Read contact data - contacts:write # Create/update contacts - email:send # Send transactional emails - sms:send # Send SMS messages - lists:write # Manage contact lists - events:write # Track events完全な例
---name: abandoned-cart-recoveryversion: 3.0.0description: Recover abandoned shopping carts with a multi-step email sequencecategory: email-marketingstatus: stable
triggers: - event: cart_abandoned conditions: - cart_value: "> 25" - customer_email: "exists" - items_count: ">= 1" debounce: 30m
actions: - id: wait_1h type: control/delay parameters: duration: 1h
- id: check_purchase type: control/condition parameters: condition: "{{ cart.converted }} = false" then: send_first_email else: stop
- id: send_first_email type: brevo/send-email parameters: template_id: {{ env.ABANDONED_CART_TEMPLATE_1 }} to: "{{ contact.email }}" params: first_name: "{{ contact.firstName }}" cart_url: "{{ cart.recovery_url }}" items: "{{ cart.items }}" total: "{{ cart.total | currency }}"
- id: wait_24h type: control/delay parameters: duration: 24h
- id: check_purchase_2 type: control/condition parameters: condition: "{{ cart.converted }} = false" then: send_second_email else: stop
- id: send_second_email type: brevo/send-email parameters: template_id: {{ env.ABANDONED_CART_TEMPLATE_2 }} to: "{{ contact.email }}" params: first_name: "{{ contact.firstName }}" cart_url: "{{ cart.recovery_url }}" discount_code: "{{ generate_discount(10, 'percent') }}"
brevoEndpoints: - POST /v3/smtp/email - GET /v3/contacts/{identifier}
permissions: - contacts:read - email:send
relatedSkills: - customer-sync - order-events - browse-abandonment---
# Abandoned Cart Recovery
Recover lost sales with a proven multi-step email sequence...MCPツールとしての公開
スキルはMCPツールとして公開でき、AIエージェントから呼び出し可能になります。フロントマターにmcpフィールドを追加します。
---name: abandoned-cart-recoveryversion: 3.0.0description: Recover abandoned shopping carts with a multi-step email sequencecategory: email-marketing
# MCP Configurationmcp: tool_name: tajo/recover-abandoned-cart description: Execute abandoned cart recovery sequence for a specific cart inputSchema: type: object properties: cart_id: type: string description: The abandoned cart identifier customer_email: type: string description: Customer email address min_cart_value: type: number description: Minimum cart value to trigger recovery default: 25 required: [cart_id, customer_email] brevo_servers: - brevo_contacts - brevo_email_campaign_management - brevo_templates---MCP公開の仕組み
スキルにmcpフィールドがあると、AIエージェントが発見して呼び出せるツールになります。
Agent: "Recover abandoned cart #4521 for [email protected]" ↓MCP Tool Discovery: finds tajo/recover-abandoned-cart ↓Tool Execution: runs the skill's action chain ↓Brevo MCP Servers: contacts + email modules called ↓Result: recovery sequence initiatedMCPフィールド
| フィールド | 型 | 説明 |
|---|---|---|
mcp.tool_name | string | MCPツール名(形式: tajo/skill-name) |
mcp.description | string | ツール発見時にAIエージェントに表示される説明 |
mcp.inputSchema | object | ツールの入力パラメータを定義するJSON Schema |
mcp.brevo_servers | array | このスキルが必要とするBrevo MCPサーバーモジュール |
スキルと直接MCPツールの比較
| 側面 | MCPツールとしてのスキル | 直接Brevo MCP |
|---|---|---|
| 抽象化 | 高い, エージェントは「このカートをリカバリー」と言うだけ | 低い, エージェントは個別のBrevoエンドポイントを呼び出す必要がある |
| 複雑さ | 多段階のロジックをカプセル化 | エージェントが各ステップをオーケストレートする必要がある |
| ガードレール | スキル内に組み込み(条件、デバウンス) | エージェントが独自に実装する必要がある |
| 適した用途 | 繰り返し可能なワークフロー | 単発の操作 |
Tip
MCPツールとしてのスキルは、エージェントに毎回作り直させたくない複雑な多段階ワークフローに使用してください。コンタクトの参照や単発メール送信のようなシンプルな一回限りの操作には直接Brevo MCPツールを使用します。
スキルとエージェントの組み合わせ
エージェントは(MCPツールとしての)スキルと直接Brevo MCPモジュールの両方を使えます。
# Agent spec---name: retention-agenttools: # Tajo Skills as MCP tools - tajo/recover-abandoned-cart - tajo/customer-sync - tajo/win-back-sequence # Direct Brevo MCP modules - brevo_contacts - brevo_campaign_analytics - brevo_segments---これにより、エージェントは一般的なパターンに対して高レベルのオートメーション(スキル)を使いつつ、カスタムロジック用に低レベルアクセス(Brevo MCP)も維持できます。
詳しくはエージェント仕様フォーマットとエージェントの構築をご覧ください。
ベストプラクティス
Tip
スキルにはセマンティックバージョニングを使ってバージョンを付けてください。破壊的変更はメジャーバージョンの引き上げが必要です。
- スキルは焦点を絞る - 1つのスキルで1つのことを上手にこなす
- わかりやすい名前を使う -
acrではなくabandoned-cart-recovery - 条件をドキュメント化 - 各条件が存在する理由を説明する
- エラーを優雅に処理 - クリティカルでないアクションには
on_error: continueを使う - 小さなオーディエンスでテスト - 開発中は
status: experimentalを使う - MCP公開を追加 - エージェントが直接呼び出せるべきスキルに
次のステップ
- MCPとエージェントの概要 - スキルがエージェントアーキテクチャにどう収まるか
- エージェント仕様フォーマット - スキルをツールとして使うエージェントを定義
- エージェントの構築 - 最初のマーケティングエージェントを構築
- データ同期スキル - データ同期スキルを見る