mcpField
D
Distri: A Composable Agent Framework

Distri: A Composable Agent Framework

ローカル
distri.devAI・エージェント9今日更新

Distri: A Composable Agent Framework について

DistriはRust製のオープンソースAIエージェントフレームワークです。CLI、API、Reactアプリでエージェントを実行・構成でき、Markdownでの定義、サブエージェント、スキル、トレース、A2A呼び出しに対応します。

主な機能

  1. 01Markdownによるエージェント定義
  2. 02CLI、API、Reactでの実行
  3. 03組み込み・HTTP・外部・MCPツール
  4. 04スキル読み込みとサブエージェントへの委任
  5. 05サンドボックスコンテナでのリモート実行
  6. 06A2Aプロトコルと呼び出しトレース

活用シーン

  1. 01CLIから単一のエージェントタスクを実行
  2. 02Reactアプリにエージェントを組み込む
  3. 03専門のサブエージェントへ作業を委任
  4. 04エージェント、LLM、ツールの呼び出しを追跡

MCP 対応

エージェントの実行フローにMCPツールを組み込めます。外部のクライアント側ツールにも対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Distri

README の画像 README の画像 README の画像

Distri は Rust で構築されたオープンソースの AI エージェントフレームワークです。エージェントを Markdown で定義し、製品の関数をツールとして接続して、CLI、API サーバー、または React UI に組み込んで実行できます。

ドキュメント · ウェブサイト · Distri Cloud

Distri ダッシュボード


Distri を選ぶ理由

  • Markdown でエージェントを定義 — 動作、ツール、モデル設定を、TOML フロントマター付きの単一の .md ファイルで定義できます
  • 組み込みのツールシステム — 組み込み機能(検索、シェル、ブラウザー)、動的な HTTP ツール、外部のクライアント側ツール、MCP に対応しています
  • スキル — エージェントが実行時に load_skill を使って読み込む、必要に応じたナレッジドキュメントです。コンテキストの圧縮後も自動で再注入されます
  • サブエージェント — エージェントが、分離されたコンテキストとトークン予算を持つ専門の子エージェントにタスクを委任します
  • リモート実行 — 信頼できないコードやリソースの分離のために、サンドボックス化されたコンテナでエージェントを実行できます
  • React SDK — ストリーミング、ツールレンダラー、音声、開発者モードに対応した <Chat /> コンポーネントをすぐに利用できます
  • A2A 互換 — エージェントの検出と呼び出しのための A2A プロトコルを実装しています
  • セルフホスト可能 — SQLite を使って独自のインフラストラクチャで実行できます。外部依存関係は必要ありません。

インストール

# Install script (macOS / Linux)
curl -fsSL https://distri.dev/install.sh | sh

# Homebrew
brew tap distrihub/distri && brew install distri

# Verify
distri --version
その他のプラットフォーム

直接ダウンロード:

# darwin-arm64 | darwin-x86_64 | linux-arm64 | linux-x86_64
TARGET=darwin-arm64
curl -L "https://github.com/distrihub/distri/releases/latest/download/distri-${TARGET}.tar.gz" -o distri.tar.gz
sudo tar -xzf distri.tar.gz -C /usr/local/bin distri

Windows(PowerShell):

Invoke-WebRequest https://github.com/distrihub/distri/releases/latest/download/distri-windows-x86_64.zip -OutFile distri.zip
Expand-Archive distri.zip -DestinationPath $Env:LOCALAPPDATA\distri -Force
$Env:Path += ";$Env:LOCALAPPDATA\distri"

実行

インストール後、サーバーとウェブ UI を起動します。

distri serve

初回起動時に、対応する distri-server バイナリと UI バンドルが github.com/distrihub/distri/releases から ~/.distri/ にダウンロードされます。ブラウザーが自動的に起動し、http://localhost:7777 を開きます。

serve オプション
フラグ動作
distri serveデフォルト:distri-server を解決して起動し、UI を提供してブラウザーを開きます
--port 8080ポートを指定します(デフォルトは 7777)
--no-uiAPI のみのモード(ウェブインターフェースなし)
--no-browserブラウザーを自動で開きません
--server-version 0.5.3特定のサーバーバージョンを固定します
--ui-version 0.5.7特定の UI バージョンを固定します
ライフサイクルコマンド
コマンド動作
distri servedistri-server を解決して起動し、UI を提供します
distri update互換性のある範囲内で最新のサーバーと UI を取得します
distri update --preプレリリースバージョンを許可します
distri versionインストール済みの CLI/サーバー/UI のバージョンを表示します
distri uninstall~/.distri/{bin, ui, cache} を消去します

クイックスタート

組み込みエージェントを実行する
distri run search --task "What are the top programming languages in 2026?"
独自のエージェントを定義する

agents/my_agent.md を作成します。

---
name = "my_agent"
description = "A helpful assistant with web search"
max_iterations = 15

[tools]
builtin = ["final", "search"]
---

# My Agent

You are a helpful assistant. Use the search tool to find current information.

{{task}}
実行する
# Interactive chat
distri tui my_agent

# Single task
distri run --agent my_agent --task "Find the latest SpaceX launch date"

# Start as API server
distri serve --port 8080
Distri Cloud にプッシュする
distri login
distri agents push agents/my_agent.md

組み込みエージェント

エージェント目的例
searchWeb 検索とスクレイピングdistri run search --task "latest AI news"
fast_search単一クエリの高速な検索distri run fast_search --task "population of Tokyo"
webブラウザーの自動化とスクレイピングdistri run web --task "scrape HN top 5 stories"
codeサンドボックスでのコード実行distri run code --task "sum of primes below 1000"
deepresearchサブエージェントに委任する多段階の調査distri run deepresearch --task "state of quantum computing"
distriマスターオーケストレーターdistri run distri --task "find and calculate..."
coderフル機能のコーディングエージェント(シェル、Web、ファイル)distri run coder --task "build a REST API"
agent_designer新しいエージェント定義を設計distri run agent_designer --task "design a stock alert agent"

検索、ブラウザー、シェルのツールには BROWSR_BASE_URL と BROWSR_API_KEY が必要です。Distri Cloud では自動的に設定されます。


エージェント定義の形式

エージェントは TOML フロントマターを含む Markdown ファイルです。

---
name = "my_agent"
description = "What this agent does"
max_iterations = 25
context_size = 80000
sub_agents = ["search", "code"]     # delegate to other agents

[tools]
builtin = ["final", "search", "load_skill"]
external = ["Read", "Write", "Edit"]  # client-side tools

[[tools.dynamic]]
name = "my_api"
type = "http"
description = "Call my API"
config = { base_url = "$API_URL", headers = { "Authorization" = "Bearer $TOKEN" } }

[[available_skills]]
id = "*"
name = "*"
---

# System Prompt

Your instructions here. Supports Handlebars templates:
- {{task}} — the user's message
- {{> skills}} — available skills listing
- {{> connections}} — available connections

スキーマの詳細については、エージェント定義のドキュメントをご覧ください。


スキル

スキルは、エージェントが必要に応じて読み込む再利用可能な指示ドキュメントです。

---
name = "data_pipeline"
description = "How to run the data transformation pipeline"
tags = ["data", "etl"]
context = "inline"
---

# Data Pipeline

## Steps
1. Fetch data with `my_api` tool...
2. Transform using Python...
# Push skills
distri skills push skills/data_pipeline.md
distri skills list

エージェントは実行時に load_skill("data_pipeline") を呼び出します。モードは 2 種類あります。

  • Inline(デフォルト)— 内容を会話に挿入します。コンテキストの圧縮後も保持されます
  • Fork — スキルを指示として持つ、分離された子エージェントを起動します

React SDK(DistriJS)

エージェントを React アプリに組み込みます。

npm install @distri/react
import { useAgent, Chat } from '@distri/react';

function App() {
  const { agent } = useAgent({ agentIdOrDef: 'my_agent' });
  return <Chat agent={agent} threadId="conversation-1" />;
}

機能:SSE ストリーミング、カスタムレンダラーによるツール実行、音声入出力、開発者モード、ブラウザー側のファイルツール(IndexedDB を利用した Read/Write/Edit/Glob/Grep)。

統合ガイドの詳細については、DistriJS のドキュメントをご覧ください。


CLI リファレンス

サーバーと UI
distri serve                        # Start server + UI on port 7777
distri serve --port 8080            # Custom port
distri serve --no-ui                # API-only
distri update                       # Pull latest server + UI
distri version                      # Show versions
distri uninstall                    # Clean ~/.distri/
エージェントとスキルの管理
distri                              # Interactive TUI
distri run --task "..." [--agent A] # Run a task
distri run --task "..." --remote    # Run in sandboxed container

distri agents list / push / delete  # Manage agents
distri skills list [-a] / push      # Manage skills
デバッグとツール
distri traces list / show ID [-v]   # Debug with trace viewer
distri tools list / invoke          # Inspect and test tools
接続と設定
distri connections list / token     # OAuth connections
distri secrets list / set / delete  # Manage secrets
distri workflows run / push         # DAG workflows

distri login                        # Auth with Distri Cloud
distri profile list / use / config  # Multi-profile management

呼び出しとトレース

Distri には 2 つの呼び出し API があり、どちらも Traces ビュー/distri traces list で完全にトレースされます(エージェント → ステップ → LLM → ツール、トークン数/コスト/レイテンシー、プロベナンスを含む)。

APIエンドポイント機能
executePOST /v1/agents/{id}(A2A message/send | message/stream)エージェントを完全に実行
llm_executePOST /v1/llm/execute単一の LLM 呼び出し(大量の評価/抽出に最適)
// JS (@distri/core)
const agent = await Agent.create('scoring_agent', client)
await agent.invoke({ /* messages */, contextId, tags: { team: 'growth' } })   // execute
await client.llm(messages, tools, { agent_id: 'scoring_agent', thread_id, title })  // llm_execute
// Rust (distri client)
run_agent(&client, RunOptions { agent: Some("scoring_agent".into()), task, thread_id,
                                tags: Some(tags), trace_context: None, ..Default::default() }, cb).await?;   // execute
client.llm_execute(LlmExecuteOptions::new(LLmContext { thread_id, label, messages, ..Default::default() })
                       .with_agent_id("scoring_agent".into())).await?;          // llm_execute
distri run --agent scoring_agent --task "grade: 2+2=4" --tag team=growth   # CLI

複数の呼び出しを 1 つのトレースにまとめる: 関連する呼び出しに同じスレッド/コンテキスト IDを指定します(execute では contextId、llm_execute では thread_id)。Distri はその ID からトレース ID を導出するため、呼び出しが 1 つのトレースにまとめられます(例:1 回の評価実行におけるすべての評価呼び出し)。 プロセス間で伝播させるには、execute に明示的な trace_context { trace_id, parent_span_id } を渡し、呼び出し元の既存のトレースの下にエージェントのスパンをネストします。

詳細なガイドについては、**トレースとトレースコンテキスト**をご覧ください。


アーキテクチャ

distri/
├── distri-types/          # Shared type definitions
├── distri-cli/            # CLI binary
├── distri/                # Client library
├── distri-formatter/      # Output formatting
│
├── server/
│   ├── distri-core/       # Agent engine (orchestrator, loop, tools, LLM)
│   ├── distri-server/     # HTTP server (actix-web, A2A endpoints)
│   ├── distri-stores/     # Storage backends (SQLite, Postgres)
│   ├── distri-auth/       # Auth providers
│   ├── distri-parsers/    # Parsing utilities
│   └── agents/            # Built-in agent definitions (.md)
│
└── samples/               # Example applications
    └── scraper/           # Web scraping agent
実行フロー
User message → AgentOrchestrator
  → Load agent definition
  → Create ExecutorContext (thread, task, run)
  → AgentLoop
    → PlanningStrategy.plan() → LLM produces plan
    → ExecutionStrategy.execute_step() per step
      → Tool calls (builtin, dynamic, external, MCP)
      → Event streaming (SSE)
    → Loop until final tool or max iterations
  → Return result

開発

# Build
cargo build

# Run tests
cargo test

# Test a specific crate
cargo test -p distri-core

このリポジトリに含まれるのは Rust バックエンドのみです。TypeScript SDK(@distri/core、 @distri/react、@distri/components)は distrihub/distrijs にあります。


サンプル

サンプル種類説明
scraperCLI/RustWeb スクレイピングとデータ抽出を行うエージェント

ライセンス


リンク

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。