コンテンツへスキップ
Strata
ログイン

Strataドキュメント

Strataは、AI搭載のドキュメント編集プラットフォームです。MarkdownまたはHTMLドキュメントをアップロードして、閲覧、コメント、編集ができます。MCP(Model Context Protocol)を通じたAIによるきめ細かな編集のために設計されたセクションベースのドキュメントモデルを採用しています。

セットアップ

クイックスタート

AIクライアントをStrataのMCPサーバーに接続して、ドキュメントの読み取り、編集、検索、管理を行います。ほとんどのクライアントはOAuthを自動的に処理します — サーバーURLを指定するだけです。

接続情報

MCPサーバーURL
https://api.strata.space/mcp
認証
OAuth 2.1 with Dynamic Client Registration
利用可能なツール
app_get_section_content, browse_connector_resources, edit_document, export_presentation, find, get_agent_status, get_company_theme, get_document_graph, get_image, get_presence, get_publish_status, invoke_agent, invoke_connector_action, list_company_themes, list_connected_tools, manage_comments, manage_suggestions, publish_document, read_document, unpublish_document, validate_presentation
連携

クライアント設定

Claude Code をお使いですか?Strata プラグインが最速です。コマンド一つで MCP サーバーを登録し、Spaces スキルも追加できます。

Claude Desktop

claude_desktop_config.jsonに以下を追加してください:

json
{
  "mcpServers": {
    "strata": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.strata.space/mcp"
      ]
    }
  }
}

OAuth認証は自動的に処理されます。初回使用時にサインインを求められます。

Claude Code

CLIでStrata MCPサーバーを追加します:

bash
claude mcp add strata https://api.strata.space/mcp

OAuth認証はブラウザを通じて自動的に処理されます。

Cursor

~/.cursor/mcp.jsonまたは.cursor/mcp.jsonに追加してください:

json
{
  "mcpServers": {
    "strata": {
      "url": "https://api.strata.space/mcp"
    }
  }
}

Cursorはサーバーが401を返した際に自動的にOAuthを処理します。

VS Code (Copilot)

プロジェクトの.vscode/mcp.jsonに追加してください:

json
{
  "servers": {
    "strata": {
      "type": "http",
      "url": "https://api.strata.space/mcp"
    }
  }
}

VS Code 1.101以上が必要です。"servers"("mcpServers"ではなく)とタイプ"http"を使用します。PKCEと動的クライアント登録によるOAuthは自動的に処理されます。

Windsurf

~/.codeium/windsurf/mcp_config.jsonに追加してください:

json
{
  "mcpServers": {
    "strata": {
      "serverUrl": "https://api.strata.space/mcp"
    }
  }
}

Windsurfはurlの代わりにserverUrlを使用します。OAuthは自動的に処理されます。

Cline

ClineのMCPサーバーパネルを開き、設定に追加してください:

json
{
  "mcpServers": {
    "strata": {
      "url": "https://api.strata.space/mcp",
      "type": "streamableHttp"
    }
  }
}

"streamableHttp"(キャメルケース)を使用します。OAuthが必要な場合、Clineは認証ボタンを表示します。

Continue

~/.continue/config.yamlに追加してください:

yaml
mcpServers:
  - name: strata
    command: npx
    args:
      - "-y"
      - "mcp-remote"
      - "https://api.strata.space/mcp"

ContinueはまだOAuthをネイティブでサポートしていません。代わりにmcp-remoteブリッジを使用してください(下記参照)。

Zed

Zedのsettings.jsonに追加してください:

json
{
  "context_servers": {
    "strata": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.strata.space/mcp"
      ]
    }
  }
}

ZedはOAuthをネイティブでサポートしていません。mcp-remoteをstdioブリッジとして使用し、ブラウザでOAuthフローを処理します。

連携

Claude.ai と ChatGPT

これらのチャット製品は Strata のエディターをインラインで表示します。上記の MCP サーバー URL をホストのコネクター設定に追加してください。

Claude.ai

設定 → コネクター → カスタムコネクターを追加

有料プランでご利用いただけます。組織のコネクターはオーナーが追加します。

ChatGPT

設定 → コネクター → 作成

デベロッパーモード(設定 → アプリとコネクター → 詳細設定)が必要です。Plus、Pro、または Enterprise プランのみ。

フォールバック

ユニバーサルフォールバック(mcp-remote)

ネイティブOAuthサポートのないクライアントには、mcp-remoteをstdioブリッジとして使用します。完全なOAuthフローを処理し、任意のMCPクライアントで動作します:

json
{
  "mcpServers": {
    "strata": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.strata.space/mcp"
      ]
    }
  }
}

認証状態は~/.mcp-auth/に保存されるため、サーバーごとに一度だけ認証すれば済みます。

リファレンス

次のステップ

利用可能なすべてのツールとそのパラメータの完全なドキュメントについては、MCPツールリファレンスをご覧ください。

リファレンス

ブログのデザイン

最初の YAML フロントマターブロックに blog: マッピングを追加すると、公開記事をデザインできます。外観パネルも同じテキストを編集し、ほかのキーやコメントを保持します。

プレビューには下書きが反映されます。公開すると、公開テーマから継承した既定値を含むデザイン全体が保存されます。その後に下書きやプロフィールのテーマを変更しても、その公開版には反映されません。プレゼンテーションには専用の設定があります。フロントマターは公開ページと説明文に表示されません。

blog: 内の不明なキー、不正な YAML、無効な値、存在しない参照や重複した名前、コントラスト不足があると公開できません。すべてのエラーを修正してください。エージェントによる編集では blogValidation の結果が返されます。設定をリセットすると既定値を継承します。目次の既定値は非表示、読書面の既定値は不透明です。

要約は160文字まで、タグは各32文字で10個までです。シリーズ名は80文字までで、順序は正の整数が必要です。名前が完全に一致する記事がまとめられ、同じ順序番号には警告が表示されます。noindex はプロフィールとフィードへの掲載を維持しつつ、サイトマップから除外して検索エンジンにインデックスしないよう求めます。cover は文書内の画像名です。画像の直前に <!-- strata:name=cover --> を置いて名前を付けます。

色はライトとダークの両方で、引用符付きの #RRGGBB 値を指定します。background は読書面と、壁紙がない場合のページを着色します。本文と accent リンクは、両モードの実際の読書面に対して4.5:1以上のコントラストが必要です。フォントは下記の一覧から選びます。半透明の読書面は不透明度88%で、単色またはグラデーションの全域で十分なコントラストを確保できる場合にのみ使用できます。

壁紙の種類は1つだけ選びます。グラデーションは2〜5色で、パターンは下記の名前を使用します。画像壁紙は文書内の画像名を指定します。HTML 壁紙は html コードブロック名を指定し、静的な代替色または画像が必要です。既存のサンドボックス内で記事の背後に表示され、クリックやフォーカスを受け取らず、タブが非表示になると停止します。動きやデータの削減設定、性能の低い端末、HTML プレビューの無効化、エラー時には代替背景を使用します。印刷と PDF では壁紙を省略します。ページへの直接の HTML や CSS、記事全体を HTML にする形式には対応していません。

uses="frontmatter" を宣言した HTML ブロックは strata.data.get("frontmatter").values を参照します。解決済みのキーは blog.typography、blog.palette、blog.readingWidth、blog.blockControls、blog.tableOfContents、blog.readingSurface、blog.accent、blog.background、blog.fonts.heading、blog.fonts.body です。色は現在のモードに対応し、未指定のフォントは省略されます。公開ブロックにはこのデザイン値だけが渡され、ほかのスカラーメタデータはエディター内でのみ使用できます。壁紙に渡されるのもこの値とカラーモードだけで、ほかの文書データは渡されません。

フィールドと使用できる値

blog.typography
modern | editorial | expressive | technical
blog.palette
strata | paper
blog.readingWidth
focused | comfortable | wide | full
blog.blockControls
visible | hidden
blog.tableOfContents
visible | hidden
blog.accent
{ light: "#RRGGBB", dark: "#RRGGBB" }
blog.background
{ light: "#RRGGBB", dark: "#RRGGBB" }
blog.fonts.heading, blog.fonts.body
Manrope | Syne | Fira Code | Georgia | Times New Roman | Arial | Helvetica | Verdana | Trebuchet MS | Palatino | Courier New | IBM Plex Mono
blog.summary
string (1…160)
blog.cover
image.name
blog.tags
string[] (0…10 × 1…32)
blog.noindex
true | false
blog.series
{ name: string (1…80), order: integer (≥1) }
blog.wallpaper.color
{ light: "#RRGGBB", dark: "#RRGGBB" }
blog.wallpaper.gradient
{ type: linear | radial, stops: [{ light: "#RRGGBB", dark: "#RRGGBB" }, …] } (2…5)
blog.wallpaper.pattern
{ name: dots | grid | lines | paper | topographic | stars, tint: { light: "#RRGGBB", dark: "#RRGGBB" } }
blog.wallpaper.image
image.name
blog.wallpaper.html
codeBlock.name (language: html)
blog.wallpaper.fallback
{ color: { light: "#RRGGBB", dark: "#RRGGBB" } } | { image: image.name }
blog.readingSurface
opaque | translucent

HTML 壁紙の完全な例

markdown
---
blog:
  typography: editorial
  palette: paper
  readingWidth: comfortable
  blockControls: hidden
  tableOfContents: visible
  accent: { light: "#8a3515", dark: "#ffb788" }
  background: { light: "#fffdf8", dark: "#272119" }
  fonts: { heading: Georgia, body: Georgia }
  summary: "An astronomy journal about the night sky."
  tags: [astronomy, observation]
  noindex: false
  series: { name: "Night notes", order: 1 }
  readingSurface: opaque
  wallpaper:
    html: starfield
    fallback:
      color: { light: "#e7e0d4", dark: "#111827" }
---

# Night notes

Our first observing session began at twilight.

## The northern sky

The article stays on an opaque reading surface above the animation.

```html name=starfield uses="frontmatter"
<style>
  html, body { margin: 0; width: 100%; height: 100%; overflow: hidden; }
  canvas { display: block; width: 100%; height: 100%; }
</style>
<canvas id="sky"></canvas>
<script>
  const canvas = document.getElementById('sky');
  const ctx = canvas.getContext('2d');
  let color = '#8a3515';
  function readDesign() {
    const source = strata.data.get('frontmatter');
    if (source?.kind === 'frontmatter') color = source.values['blog.accent'];
  }
  readDesign();
  window.addEventListener('strata:data', readDesign);
  function paint(time) {
    const width = canvas.clientWidth, height = canvas.clientHeight;
    if (canvas.width !== width || canvas.height !== height) {
      canvas.width = width;
      canvas.height = height;
    }
    ctx.clearRect(0, 0, width, height);
    ctx.fillStyle = color;
    for (let i = 0; i < 90; i++) {
      ctx.globalAlpha = 0.25 + 0.25 * Math.sin(time / 1800 + i);
      ctx.beginPath();
      ctx.arc((i * 137.508 % 100) / 100 * width,
        (i * 71.37 % 100) / 100 * height, 1 + i % 2, 0, Math.PI * 2);
      ctx.fill();
    }
    requestAnimationFrame(paint);
  }
  requestAnimationFrame(paint);
</script>
```
リファレンス

インタラクティブな HTML ブロック

html タグを付けたコードブロックは、Strata エディターとエクスポートされた PDF の中で、ライブなサンドボックス化プレビューとして表示されます。チャート、図、3D シーン、小さなインタラクティブウィジェットを、通常のフェンス付きコードとして記述できます。

言語タグ html を指定したフェンス付きコードブロックを書きます。そのマークアップ、スタイル、スクリプトは隔離されたプレビュー内で自動的に実行されます。編集のたびにクリーンな状態から再レンダリングされ、読者はプレビューとソースを切り替えられます。

プレビューは完全に隔離されています。Cookie やストレージは使えず、周囲のページへのアクセスや外部 URL も許可されません。WebSocket、ビーコン、フォーム送信は完全に取り除かれ、fetch は下記の検証済み /sandbox/ アセットにしか到達しません。Doom エンジンはこの経路で自身のゲームデータを読み込みます。これらの制約に違反したものは、そのプレビュー内だけで失敗し、ほかには影響しません。

Strata のデザイントークンはあらかじめ読み込まれています。var(--color-foreground)、var(--color-muted-foreground)、var(--color-primary)、var(--color-border) などの CSS 変数はアプリのテーマと一致し、プレビューは閲覧者のライトモード/ダークモードに自動的に従います。自分で指定した色は書いたとおりに使われ、調整されることはありません。背景色と文字色は必ずセットで指定してください。どちらか一方しか指定していないブロックは、確認していない方のモードで読めなくなることがあります。

プレビューは高さ約 360 ピクセルから始まり、その後は内容に合わせて変化します。内容が高ければブロックは伸び、短ければ縮みます。この初期の高さは相対単位の基準にもなるため、height: 100%、100vh、window.innerHeight のいずれも機能します。three.js のシーンやブロック全体に広がるチャートが通常使うのは、まさにこの指定です。

スクリプトのエラー、処理されなかった Promise の拒否、プレビュー内部からの console.error/console.warn の出力は収集され、プレビューの下に表示されます。ブラウザが報告する場合は行番号も併せて示されます。プレビューには独自の開発者ツールがないため、ブロックがレンダリングされなかった理由は、このパネルで確認します。

ドキュメントのデータをグラフにする

ブロックは同じドキュメント内にあるデータを読み取れるため、グラフは読者が見ている数値と一致し続けます。名前を付けられるソースは 4 種類です。json、csv、tsv、yaml のコードブロックは、その開始行で name=sales のように名前を付けます。表は、すぐ上の行に置いた HTML コメント <!-- strata:name=headcount --> で名前を付けます。ドキュメントの frontmatter は予約名 frontmatter で常に利用でき、対象はスカラー値のフィールドだけです。画像は表と同じように、すぐ上の行に置いた HTML コメント <!-- strata:name=hero --> で名前を付けます。エディタでは画像を選択し、データ名を追加を使います。ブロックがバインドできるのはこの 4 種類だけです。名前は英字で始まり、英字・数字・ハイフン・アンダースコアが続き、最大 64 文字で、ドキュメント内で一意である必要があります。

html ブロックは、自身の開始行で uses="sales,headcount" のように読み取る対象を宣言します。ブロックは宣言したソースだけを受け取り、ドキュメントの残りを受け取ることはありません。別のドキュメントのデータには到達できず、読者がこのドキュメントですでに見られないものが届くこともありません。ブロックのコードや宣言を編集すると、プレビューはクリーンな状態から再読み込みされます。すでに宣言済みの名前の背後にあるデータだけを編集した場合は、実行中のプレビューがその場で更新されます。1 つのブロックが宣言できる名前は最大 8 個です。9 個目以降も黙って捨てられるのではなく、理由が oversize の unavailable として届きます。

プレビュー内では、宣言されたデータは自分のスクリプトが動く前に strata.data として用意されます。strata.data.get(name) は 1 つのソースを返し、strata.data.names はブロックが宣言した名前を宣言順に列挙します。json、csv、tsv、yaml のソースは未解析のまま { kind: 'text', format, text } として届くので、解析はブロックが好みのパーサーで行います。表は { kind: 'table', columns, rows } として届き、各セルは数値や日付に変換されない素のテキストです。frontmatter は { kind: 'frontmatter', values } として届きます。届く値はすべて深く凍結されています。バインドしたソースが変わると、Strata は新しいスナップショットを送り、window で strata:data イベントを発火します。detail には新しいデータが入り、イベント発火の時点で strata.data.get はすでにそのスナップショットを返します。プレビュー側からデータを要求することはないため、イベントを無視するブロックは最初に受け取ったデータのまま動作し続けます。

画像は { kind: 'image', url, width, height, alt } として届きます。url は画像自身のバイトを含むデータ URL なので、ブロックはネットワークアクセスなしに img 要素へそのまま代入できます。Strata は読み手自身の権限でそのバイトを取得し、プレビューが始まる前に埋め込みます。プレビューがたどれるリンクを見ることはなく、自分で画像を要求することもありません。画像には別途上限があり、画像 1 枚は最大 3 MiB、1 つのプレビュー内の画像合計は最大 12 MiB で、超えた場合は大きいものから外れます。バイトを取得できなかった画像は、理由 unreachable の unavailable として届きます。プレゼンテーションではコードを書かずに名前付き画像を表示できます。layout=image uses="hero" と書いたスライドの開始行が画像を全面に描き、キャプションを本文から読み取ります。

どちらを選ぶかは、その数値をほかに誰が読むかで決まります。json や csv のコードブロックはコンパクトで差分が読みやすく、長い系列を本文から切り離しておけますが、届くのは生のテキストなので解析はブロックの仕事です。csv の行をカンマで分割するのは典型的な失敗で、カンマを含む引用符付きのフィールドが途中で切れてしまいます。名前を付けた表は逆の取引です。読者はコードブロックではなく本物の表を見られ、ブロックには最初の行が columns、それ以降の行が rows として分かれた状態で届きます。frontmatter はタイトルや目標のような単独の値に向いており、系列には向きません。

解決できなかった宣言済みの名前も { kind: 'unavailable', reason } として届くので、空のデータセットと存在しないデータセットを区別できます。理由は、その名前を持つソースがドキュメントにない場合は unknown、2 つのソースが同じ名前を主張している場合は duplicate、プレビューを開いたままソースが削除された場合は removed、配信の上限を超えている場合は oversize、画像のバイトを取得できなかった場合は unreachable です。外れるのは該当するソースだけで、ほかのソースは引き続き届きます。データがあることを前提にせず、unavailable の種類を確認してメッセージを表示してください。

審査済みライブラリ

  • /sandbox/libs/mermaid.min.js — <script src="/sandbox/libs/mermaid.min.js"></script> then mermaid.initialize({ startOnLoad: false }); mermaid.run()
  • /sandbox/libs/d3.min.js — <script src="/sandbox/libs/d3.min.js"></script> — global `d3`
  • /sandbox/libs/three.module.min.js — <script type="module">import * as THREE from '/sandbox/libs/three.module.min.js'</script>
  • /sandbox/libs/doom.js — <script src="/sandbox/libs/doom.js"></script> is the whole block: it appends its own canvas and boots. Options go on the script tag: data-doom-warp="1,1", data-doom-skill="3", data-doom-manual (call Doom.start() yourself). To place the canvas, supply one with id="canvas". The reader clicks the preview once to give it keyboard focus; arrows move, Ctrl fires, Esc opens the menu. Music is off, sound effects work. First load pulls about 10 MB, then caches. Chocolate Doom compiled to WebAssembly (GPL-2.0-or-later, github.com/cloudflare/doom-wasm) with Freedoom game data (BSD-3-Clause, github.com/freedoom/freedoom). No commercial or shareware WAD is distributed.

これ以外の外部スクリプト・スタイル URL はプレビュー内では読み込まれません。バージョンを固定するには、.min.js の前に -<version> を挿入します(旧バージョンも引き続き利用できます)。

例

html
<div id="chart"></div>
<script src="/sandbox/libs/d3.min.js"></script>
<script>
  const data = [4, 8, 15, 16, 23, 42];
  d3.select('#chart')
    .selectAll('div')
    .data(data)
    .join('div')
    .style('height', '18px')
    .style('margin', '2px 0')
    .style('background', 'var(--color-primary, #2c7cb0)')
    .style('width', (d) => d * 6 + 'px');
</script>

例:json コードブロックにバインドしたグラフ

markdown
```json name=sales
[
  { "quarter": "Q1", "revenue": 42 },
  { "quarter": "Q2", "revenue": 58 },
  { "quarter": "Q3", "revenue": 71 }
]
```

```html uses="sales"
<div id="chart"></div>
<script src="/sandbox/libs/d3.min.js"></script>
<script>
  function render() {
    const source = strata.data.get('sales');
    if (!source || source.kind !== 'text') return;
    d3.select('#chart')
      .selectAll('div')
      .data(JSON.parse(source.text))
      .join('div')
      .style('height', '18px')
      .style('margin', '2px 0')
      .style('background', 'var(--color-primary, #2c7cb0)')
      .style('width', (d) => d.revenue * 6 + 'px');
  }
  render();
  window.addEventListener('strata:data', render);
</script>
```

例:csv コードブロックにバインドしたグラフ

markdown
```csv name=signups
week,signups
"Jan 1, 2026",120
"Jan 8, 2026",148
"Jan 15, 2026",173
"Jan 22, 2026",162
```

```html uses="signups"
<div id="chart"></div>
<script src="/sandbox/libs/d3.min.js"></script>
<script>
  function render() {
    const chart = d3.select('#chart');
    chart.selectAll('*').remove();
    const source = strata.data.get('signups');
    if (!source || source.kind !== 'text') {
      chart.text('No signups data.');
      return;
    }
    // A csv source arrives as raw text. text.split(',') would tear
    // "Jan 1, 2026" in half; d3.csvParse honours the quotes.
    const rows = d3.csvParse(source.text, (row) => ({
      week: row.week,
      signups: Number(row.signups),
    }));
    const scale = d3
      .scaleLinear()
      .domain([0, Math.max(1, d3.max(rows, (d) => d.signups) || 0)])
      .range([0, 100]);
    const line = chart.selectAll('div').data(rows).join('div');
    line
      .style('display', 'flex')
      .style('align-items', 'center')
      .style('gap', '8px')
      .style('margin', '2px 0');
    line
      .append('span')
      .style('flex', '0 0 7rem')
      .style('color', 'var(--color-muted-foreground, #6b7280)')
      .text((d) => d.week);
    line
      .append('span')
      .style('height', '18px')
      .style('background', 'var(--color-primary, #2c7cb0)')
      .style('width', (d) => scale(d.signups) + '%');
    line.append('span').text((d) => d.signups);
  }
  render();
  // Edit a number in the csv block and this chart follows it.
  window.addEventListener('strata:data', render);
</script>
```

例:ドキュメントの表にバインドしたグラフ

markdown
<!-- strata:name=headcount -->

| Team | People |
| --- | --- |
| Growth | 12 |
| Platform | 27 |
| Support | 8 |

```html uses="headcount"
<div id="chart"></div>
<script>
  function render() {
    const chart = document.getElementById('chart');
    chart.textContent = '';
    const source = strata.data.get('headcount');
    if (!source || source.kind !== 'table') {
      chart.textContent = 'No headcount table.';
      return;
    }
    // columns is the table's first row; rows is everything under it, and
    // every cell is a string, so the numbers are yours to convert.
    const team = source.columns.indexOf('Team');
    const people = source.columns.indexOf('People');
    const counts = source.rows.map((row) => Number(row[people]) || 0);
    const widest = Math.max(1, ...counts);
    source.rows.forEach((row, index) => {
      const line = document.createElement('div');
      line.style.display = 'flex';
      line.style.alignItems = 'center';
      line.style.gap = '8px';
      line.style.margin = '2px 0';
      const label = document.createElement('span');
      label.style.flex = '0 0 7rem';
      label.style.color = 'var(--color-muted-foreground, #6b7280)';
      label.textContent = row[team];
      const bar = document.createElement('span');
      bar.style.height = '18px';
      bar.style.width = (counts[index] / widest) * 100 + '%';
      bar.style.background = 'var(--color-primary, #2c7cb0)';
      const value = document.createElement('span');
      value.textContent = row[people];
      line.append(label, bar, value);
      chart.append(line);
    });
  }
  render();
  // Type a new number into the table and this chart follows it.
  window.addEventListener('strata:data', render);
</script>
```

例: ドキュメントの画像にバインドした画像

markdown
<!-- strata:name=hero -->

![The team on launch day](strata://image/img_01ARZ3NDEKTSV4RRFFQ69G5FAV)

```html uses="hero"
<figure id="card" style="margin:0"></figure>
<script>
  function render() {
    const card = document.getElementById('card');
    card.textContent = '';
    const source = strata.data.get('hero');
    if (!source || source.kind !== 'image') {
      card.textContent = 'No hero image.';
      return;
    }
    const image = document.createElement('img');
    // url already carries the bytes, so this needs no network access.
    image.src = source.url;
    image.alt = source.alt;
    image.style.width = '100%';
    image.style.borderRadius = '12px';
    const caption = document.createElement('figcaption');
    caption.style.color = 'var(--color-muted-foreground, #6b7280)';
    caption.textContent = source.width + '×' + source.height;
    card.append(image, caption);
  }
  render();
  // Swap the image in the document and this card follows it.
  window.addEventListener('strata:data', render);
</script>
```
リファレンス

エージェントのフロントマター

エージェント定義は /Agents フォルダー配下の Markdown ドキュメントです。YAML フロントマターでエージェントの識別子、ツール許可リスト、オーケストレーターからの可視性を宣言し、フロントマターの下にある本文は、オーケストレーターがユーザーのリクエストをそのまま渡すシステムプロンプトになります。すべてのフィールドは保存時にサーバー側で検証されます。

エージェントのフロントマター項目
フィールド型必須既定値説明
autoInvokableboolean任意falsetrue の場合、説明がユーザーのリクエストに合致すれば、チャットのオーケストレーターがこのエージェントを自動的に選べます。false(既定)の場合は明示的な呼び出し(@mention、MCP invoke_agent、接続されたソース)でのみ実行されます。
connectorAccountsobject任意—Owner's personal account selected for each connector kind.
descriptionstring必須—このエージェントを使うべき場面を一文で要約。オーケストレーターの自動呼び出しカタログや @mention ピッカーに表示されるため、エージェントの役割を具体的に書いてください。
enabledboolean任意trueマスタースイッチ。false の場合、フロントマターが妥当でも、あらゆる呼び出し面でエージェントが非表示になります。
modelstring任意—エージェントが動作するモデルを上書きする任意指定。省略した場合はプラットフォームの既定モデルが使われます。プラットフォームのモデルレジストリで解決可能である必要があります。
namestring必須—kebab-case の識別子 ([a-z0-9-]) で、自分のエージェントの中で一意であり、プラットフォーム側で予約された名前と衝突しないこと。チャットの @mention トークンと、MCP invoke_agent の agentName 引数を決定します。
pinnedResourcesPinnedResourceSpec[]任意—External resources pinned to this agent as standing knowledge. A compact manifest is injected into every run and the bodies are fetched live with the owner's connector grant. Omit or pass an empty list for no pinned knowledge.
toolsstring[]任意[]エージェントが呼び出せるプラットフォームツールの許可リスト(例: read_document、search_space)。エージェントバナー内の「利用可能なツール」パネルですべての有効な名前を確認できます。何も付与しない場合は空にするか省略します。

例

markdown
---
name: meeting-notes-summarizer
description: Summarizes meeting notes into a TL;DR with action items.
tools:
  - read_document
  - search_space
model: claude-sonnet-4-6
color: emerald
enabled: true
autoInvokable: false
---

You are a meeting-notes summarizer. Given the document body the
orchestrator hands you verbatim, produce a one-paragraph TL;DR and a
bulleted action-item list…
リファレンス

プロンプトのフロントマター

プロンプトテンプレートは /Prompts フォルダー配下の Markdown ドキュメントです。YAML フロントマターで名前、説明、引数、オーケストレーターからの可視性を宣言し、フロントマターの下の本文がプロンプトテンプレートになります — {{argument}} のプレースホルダーはレンダリング時に置換されます。引数の値はチャット入力欄のスラッシュシート、または MCP prompts/get リクエストで収集されます。

プロンプトのフロントマター項目
フィールド型必須既定値説明
argumentsPromptArgument[]任意[]プロンプト本文が `{{name}}` プレースホルダーで参照する `PromptArgument` エントリの順序付きリスト。スラッシュピッカーが作者の指定順で項目を表示できるよう、ワイヤー上で順序が保持されます。最大 16 エントリ。
autoInvokableboolean任意falsetrue の場合、説明がユーザーの意図に合致すれば、チャットのオーケストレーターがこのプロンプトを自動的に選べます。false(既定)の場合は、ユーザーがスラッシュトークンを入力するか、クライアントが MCP prompts/get を呼び出した場合にのみ実行されます。
descriptionstring必須—プロンプトの目的を一文で要約。スラッシュメニュー、MCP prompts/list、autoInvokable: true のときはオーケストレーターのツールカタログにも表示されます。
namestring必須—可読なプロンプトのタイトル。スラッグ化された形式が、チャット入力欄のスラッシュメニューに表示される /prompt:<slug> トークンになります。

PromptArgument

上記 `arguments` 配列の各エントリは次の構造を持ちます:

PromptArgument 項目
フィールド型必須既定値説明
descriptionstring必須—Short human-readable description shown in the slash-picker argument sheet, the MCP `prompts/list` payload, and the `loadUserPrompt` catalog so the user (or the model) knows what to fill in. 1-200 chars.
namestring必須—Identifier matched verbatim against the body's `{{name}}` placeholders. Matching is case-sensitive — `{{Focus}}` and `{{focus}}` are distinct placeholders. Restricted to ASCII letters, digits, and underscores (1-48 chars) so the same identifier is valid in YAML and the placeholder grammar.
requiredboolean任意falseWhen true, the slash-picker argument sheet blocks submit until a value is supplied; the `loadUserPrompt` catalog also flags it so the model knows it must ask the user to clarify. When false (default), an omitted argument substitutes the empty string into its placeholders at render time.

例

markdown
---
name: Summarize document
description: Summarize the active document for a chosen audience.
autoInvokable: false
arguments:
  - name: focus
    description: What the assistant should focus on.
    required: true
  - name: audience
    description: Target audience for the summary.
    required: false
---

Summarize this document for {{audience}}, focusing on {{focus}}. Keep
the summary under 200 words and finish with a short action-items list.
リファレンス

テンプレートのフロントマター

ドキュメントテンプレートは、テンプレートフォルダー内の Markdown ドキュメントです。YAML フロントマターでテンプレートの名前、型付き変数、セクション構成を宣言し、フロントマターの下の本文が再利用されるコンテンツになります。{{key}} プレースホルダーは、ギャラリー、MCP の createFromTemplate アクション、またはエージェントの create_document_from_template ツールからドキュメントを作成する際に置き換えられます。

テンプレートのフロントマターのフィールド
フィールド型必須既定値説明
descriptionstring必須—Sentence describing when to use this template. Surfaces in the gallery and in tool catalogs, so be specific about the document shape it produces.
namestring必須—Kebab-case identifier, unique among the templates in the same folder. Shown in the gallery alongside the document title.
sectionsTemplateSection[]任意[]Section contract: what a conforming instance must contain. Maximum 64 entries. Empty when the template declares no section structure.
variablesTemplateVariable[]任意[]Typed placeholders substituted at instantiation. Order is preserved across the wire so fill-in forms render fields in the author's chosen order. Maximum 16 entries. Empty when the template takes no variables.

TemplateVariable

上記の `variables` 配列の各エントリは次の形式です:

TemplateVariable のフィールド
フィールド型必須既定値説明
keystring必須—Identifier matched verbatim against the body's `{{key}}` placeholders. Matching is case-sensitive. Restricted to ASCII letters, digits, and underscores (1-64 chars) so the same identifier is valid in YAML and the placeholder grammar.
kindunknown任意"text"Input kind. Defaults to free text.
labelstring必須—Human-readable label shown on the fill-in form. 1-80 chars.
requiredboolean任意falseWhen true, instantiation fails unless a value is supplied. When false (default), an omitted variable substitutes the empty string into its placeholders.

TemplateSection

上記の `sections` 配列の各エントリは次の形式です:

TemplateSection のフィールド
フィールド型必須既定値説明
fillunknown任意"required"Fill discipline for the section. Defaults to required.
guidancestring任意""Instructions for whoever (or whatever) fills the section in. Optional; shown alongside the section in fill-in surfaces.
titlestring必須—Section title. Matches a heading in the template body verbatim.

例

markdown
---
name: incident-postmortem
description: Standard postmortem with a verbatim escalation matrix.
variables:
  - key: incident_id
    label: Incident ID
    kind: text
    required: true
  - key: occurred_on
    label: Date of incident
    kind: date
    required: true
sections:
  - title: Timeline
    guidance: Chronological events from first alert to resolution.
    fill: required
  - title: Lessons learned
    guidance: What we change going forward.
    fill: optional
  - title: Escalation matrix
    fill: verbatim
---

## Timeline

Incident {{incident_id}} on {{occurred_on}}.

## Lessons learned

## Escalation matrix

Page the on-call lead, then the service owner…