GitHub Copilot SDK が GA!TypeScript で カスタムツールを動かして料金体系も調べてみた
製造ビジネステクノロジー部の小林(@kobayashi-shoma)です。
2026 年 6 月 2 日に GitHub Copilot SDK が一般提供(GA)になりました。
これまで Copilot CLI を触っている身としては「あの Agent ランタイムをコードから直接叩けるのか!」とテンションが上がる発表だったので、なんなのか・なにができるのか・何が嬉しいのかを、実際に動かしながら整理してみました。
Copilot SDK の公式リポジトリはこちら。
GitHub Copilot SDK とは
「Copilot CLI の中身(Agent ランタイム)を、自分のコードから呼べるようにしたライブラリ」 です。
アーキテクチャ的には、SDK は Copilot CLI を サーバーモードで起動して JSON-RPC 経由で通信します
(公式 README より)。
つまり、普段 copilot コマンドで実行しているあのエージェントを、TypeScript や Python のコードから呼び出せる、という構造です。CLI のプロセス管理は SDK が自動で面倒を見てくれます。
なにができるのか
GA 時点でできることを公式ドキュメントから整理します。
対応言語と導入方法
GA 時点で 6 言語に対応しています。
| 言語 | インストール | CLI バンドル |
|---|---|---|
| Node.js / TypeScript | npm install @github/copilot-sdk |
自動 |
| Python | pip install github-copilot-sdk |
自動 |
| .NET | dotnet add package GitHub.Copilot.SDK |
自動 |
| Go | go get github.com/github/copilot-sdk/go |
手動 |
| Java | Maven / Gradle | 手動 |
| Rust | cargo add github-copilot-sdk |
手動(※アプリレベルのバンドル機能あり) |
Node.js / Python / .NET は CLI が自動でバンドルされるので、別途 copilot コマンドのインストールは不要です。
公式ドキュメントが列挙する機能
GA リリースノートで挙げられている機能を抜き出すとこうなります。
- Custom tools and MCP: Register tools the agent can invoke autonomously, connect to Model Context Protocol (MCP) servers, or override built-in tools like grep and edit_file.
- Fine-grained system prompt customization: Edit individual sections of the Copilot system prompt (e.g., identity, tone, tool instructions, and safety rules) without rewriting it from scratch.
- OpenTelemetry tracing: W3C trace context propagation across CLI startup, JSON-RPC calls, session operations, and tool execution.
- Flexible authentication: GitHub OAuth, GitHub Apps, environment tokens, and BYOK for OpenAI, Microsoft Foundry, Anthropic, and other providers.
- Cloud and remote sessions: Create cloud-backed sessions with repository metadata or enable remote session URLs on demand.
- Hook system: Intercept agent behavior at pre/post tool use, session start, MCP tool calls, and permission requests.
出典: Copilot SDK is now generally available - GitHub Changelog
ざっくり整理すると、
- Custom Tools / MCP / Custom Agents: エージェントに独自の処理や外部ツールを呼ばせる
- Streaming: トークン単位でストリーミング受信
- Hooks: PreToolUse / PostToolUse / SessionStart / 権限要求などにフック
- System Prompt のセクション単位カスタマイズ: identity / tone / safety rules などをピンポイントで上書き
- OpenTelemetry: W3C Trace Context が CLI まで伝播する分散トレーシング
- 柔軟な認証: GitHub OAuth / GitHub Apps / 環境変数トークン / BYOK
- Cloud / Remote Sessions: クラウドバックエンドのセッション、リモート URL での操作
何が嬉しいのか
「SDK が出たことで何が嬉しいか」を 3 つに絞ります。
オーケストレーション層を自前で書かなくていい
Copilot Agent をアプリに組み込もうとすると、本来は
- LLM のセッション管理
- ツール呼び出しのプロトコル
- ストリーミングのハンドリング
- ファイル編集の差分管理
- マルチターンの履歴管理
…を自前で組む必要があります。これを本番運用されている Copilot のランタイムごと持ってきて、ライブラリとして配ってくれたのが SDK です。
Copilot Free でも触れる / BYOK で逃げ道もある
GA 時点での利用条件は以下です。
- 既存の Copilot サブスクライバーはそのまま使える(Copilot Free 含む)
- 各プロンプトは AI Credits を消費(2026 年 6 月 1 日にプレミアムリクエストから移行。1 AI Credit = $0.01 USD で、input / output / cached トークン量に応じて消費)
- Copilot 契約がなくても BYOK(OpenAI / Microsoft Foundry / Anthropic など)で利用可能
Copilot CLI と完全に地続き
Copilot CLI のカスタム Agent、Hooks、Skills、MCP の概念がそのまま SDK 側にも存在します。
CLI で使ってきた *.instructions.md や SKILL.md、MCP サーバー定義の知識・資産がそのまま活きます。
実際に触ってみる
ここからは実際に動かしてみます。
環境
- macOS / Node.js 22
- GitHub Copilot CLI は SDK にバンドルされるので、別途インストール不要
プロジェクト初期化
公式の Getting Started どおりに進めます。
mkdir copilot-sdk-demo && cd copilot-sdk-demo
pnpm init
pnpm pkg set type=module
pnpm add -D typescript tsx @types/node
pnpm add @github/copilot-sdk
pnpm pkg set type=module は必ず実行してください。これがないと package.json が CJS 扱いになり、サンプルコードのトップレベル await で Top-level await is currently not supported with the "cjs" output format というエラーになります。

最初のメッセージを送る
まずは「質問を1回送って回答を受け取る」という最小構成を動かしてみます。index.ts を作成します。
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient();
const session = await client.createSession({ model: "auto" });
const response = await session.sendAndWait({ prompt: "What is 2 + 2?" });
console.log(response?.data.content);
await client.stop();
process.exit(0);
クライアント生成 → セッション作成 → 質問を送って回答を待つ → 表示 → 後始末という 1 往復の流れです。model: "auto" は最適なモデルを Copilot 側に自動選択させるオプションです。
実行します。
pnpm tsx index.ts

"What is 2 + 2?" に対する回答が表示され、Copilot のエージェントへ問い合わせができました。
ストリーミングを有効化する
回答を一括で受け取るのではなく、生成されたそばからトークン単位で流して表示してみます。
import { CopilotClient, approveAll } from "@github/copilot-sdk";
const client = new CopilotClient();
const session = await client.createSession({
model: "auto",
onPermissionRequest: approveAll,
streaming: true,
});
session.on("assistant.message_delta", (event) => {
process.stdout.write(event.data.deltaContent);
});
session.on("session.idle", () => {
console.log();
});
await session.sendAndWait({ prompt: "なんか面白いジョーク言って" });
await client.stop();
process.exit(0);
ポイントは 3 つです。
- streaming: true … セッション作成時にストリーミングを有効化します。
- assistant.message_delta … 応答の差分(トークン)が届くたびに発火するイベント。process.stdout.write で改行なしに繋げて出力することで、文字が流れるように表示されます。
- session.idle … 応答が完了したタイミングで発火。最後に改行を入れて出力を整えています。
なお onPermissionRequest: approveAll は、エージェントが権限を要求した際にすべて自動承認する設定です。
実行すると、回答がリアルタイムに流れてくる様子が確認できます。
エージェントが生成したジョークが返されました!
カスタムツールを定義する
defineTool で関数を定義してエージェントに渡すと、エージェントが「これを呼ぶべきだ」と判断したときに自動で実行してくれます。
LLM 自身はリアルタイムの情報を持っていないため、実際にデータを取ってくる手段=ツールを渡してあげる必要があります。役割分担はシンプルで、LLM が「どのツールをどう呼ぶか」を判断し、handler が実際のデータ取得を担当します。
題材として、github/copilot-sdk リポジトリの最近のプルリクエストを LLM に調査・要約させるツールを作ってみます。
import { CopilotClient, approveAll, defineTool } from "@github/copilot-sdk";
const listPRs = defineTool("list_prs", {
description: "GitHubリポジトリのPR一覧を取得する",
parameters: {
type: "object",
properties: {
owner: { type: "string", description: "リポジトリのオーナー" },
repo: { type: "string", description: "リポジトリ名" },
state: { type: "string", description: "open / closed / all" },
},
required: ["owner", "repo"],
},
handler: async (args: { owner: string; repo: string; state?: string }) => {
const state = args.state ?? "closed";
const res = await fetch(
`https://api.github.com/repos/${args.owner}/${args.repo}/pulls?state=${state}&per_page=20`,
{ headers: { Accept: "application/vnd.github+json" } }
);
const prs = (await res.json()) as Array<{
number: number;
title: string;
merged_at: string | null;
user: { login: string } | null;
body: string | null;
}>;
return prs.map((pr) => ({
number: pr.number,
title: pr.title,
merged_at: pr.merged_at,
author: pr.user?.login,
body: pr.body?.slice(0, 300),
}));
},
});
const client = new CopilotClient();
const session = await client.createSession({
model: "auto",
onPermissionRequest: approveAll,
streaming: true,
tools: [listPRs],
});
session.on("assistant.message_delta", (event) => {
process.stdout.write(event.data.deltaContent);
});
session.on("session.idle", () => {
console.log();
});
await session.sendAndWait({
prompt:
"github/copilot-sdk リポジトリの最近マージされたプルリクエストから、特に重要そうな変更を3つピックアップして、それぞれ2行で要約して",
});
await client.stop();
process.exit(0);
実行すると、エージェントが自分で list_prs を適切な引数で呼び出し、取得したプルリクストから重要な3件を選んで要約してくれます。API の呼び出し方や要約の仕方をこちらで指示しなくても、すべてエージェントが自動で判断してくれるのがポイントです。

ツール定義のポイントは次の3つです。
- description … ツールの用途。エージェントはこの説明を読んで「いつ呼ぶべきか」を判断するため、わかりやすく書くことが重要です。
- parameters … 受け取る引数の仕様を JSON Schema で定義します。ここでは owner / repo を必須、state(open / closed / all)を任意としています。エージェントはこのスキーマに沿って引数を組み立てます。
- handler … 実際の処理本体。GitHub の REST API を叩いてプルリクエスト一覧を取得し、LLM が扱いやすいよう必要な項目だけに絞って返しているのがポイントです。

料金について
SDK 経由の利用も、Copilot 本体と同じく AI Credits を消費します。
1 AI Credit = $0.01 USD で、毎月のプランに応じて base credits + flex allotment が含まれます。個人向けプランは以下のとおりです。
| プラン | 月額 | base credits | flex allotment | 月あたり合計 |
|---|---|---|---|---|
| Copilot Free | 無料 | (限定的) | - | - |
| Copilot Pro | $10 USD | 1,000 | 500 | 1,500 |
| Copilot Pro+ | $39 USD | 3,900 | 3,100 | 7,000 |
| Copilot Max | $100 USD | 10,000 | 10,000 | 20,000 |
組織向けの Copilot Business / Copilot Enterprise はユーザー 1 人あたりの月次クレジットが定義されており、以下のとおりです。
| プラン | ユーザー 1 人あたり/月(標準) | プロモ期間中(2026 年 6 月 1 日〜9 月 1 日) |
|---|---|---|
| Copilot Business | 1,900 | 3,000 |
| Copilot Enterprise | 3,900 | 7,000 |
組織向けプランでは、クレジットが請求単位でプールされます。たとえば Copilot Business を 100 ユーザーで契約していると、1,900 × 100 = 190,000 クレジットの共有プールになります。
誰のクレジットが消費されるのか
SDK は 認証に使われた GitHub アカウントの持ち主のクレジットを消費します。
認証方法は 4 つあり、それぞれ「誰が支払うか」が変わります。
| 認証方法 | 支払う人 | シナリオ |
|---|---|---|
| GitHub Signed-in User(デフォルト) | copilot CLI でログイン中の本人 | ローカル開発・PoC |
| OAuth GitHub App | OAuth で認可したエンドユーザー本人 | 自社 SaaS にユーザーが連携 |
| Environment Variables(COPILOT_GITHUB_TOKEN / GH_TOKEN / GITHUB_TOKEN) | トークンを発行したアカウント | CI/CD、サーバー常駐 Bot |
| BYOK | Copilot ではなくモデルプロバイダに直接課金 | 部署 / PoC ごとに予算分け |
本記事の Hello World サンプルは、copilot CLI でログイン済みの状態で pnpm tsx index.ts を実行しているため GitHub Signed-in User モードで動作します。つまり、私自身の Copilot アカウントの AI Credits が引かれています。
こんな使い道がある
Copilot SDK のユースケースを考えてみました。
Slack Bot / 社内アシスタント
Slack からチャットを Copilot エージェントに投げ、結果を Slack に返す Bot。MCP で社内システム(Jira / Confluence / GitHub)に繋いでおけば「直近のプルリクエスト一覧見せて」「障害履歴を要約して」みたいなチャット運用が組めそうです。
CI 上での自動コードレビュー / プルリクエスト要約
GitHub Actions から SDK を叩いて、プルリクエストごとに自動レビューや要約コメントを投稿する。でファイル書き込みは禁止しつつ read 系のツールだけ許可、といった権限の絞り込みもコードで完結します。
バッチみたいに定期的にレビューさせるのもよさそう。
スケジュール実行のレポート Bot
EventBridge などから定期実行して、定型レポートを生成する。「朝のテックニュース要約を Slack に流す」みたいな Bot を SDK で組めば、カスタムツールで「社内 Wiki から引っ張ってくる」「プルリクエストの進捗を含める」といった拡張がサクッと書けそう。
既存業務システムへの AI 機能の後付け
社内の管理画面や運用ツールに「AI で要約」「AI で生成」ボタンを足してみる。SDK を Backend に組み込んで API として叩けるようにすれば、フロントエンドからは普通の Web API として使えます。
カスタム Agent / Skill の本番運用化
Copilot CLI で 作成した SKILL.md やカスタム Agent の定義をそのまま SDK に持っていって、サービスとして動かす。
まとめ
今回は Copilot SDK を試してみました。アプリケーションに組み込むことでいろんなことができそうですね!
参考





