---
title: C# SDK
url: https://platform.claude.com/docs/ja/cli-sdks-libraries/sdks/csharp
description: IChatClient統合を備えた.NETアプリケーション向けのAnthropic C# SDKをインストールして設定します
---

Anthropic C# SDKは、C#で記述されたアプリケーションからClaude APIへの便利なアクセスを提供します。

<Info>
  コード例を含むAPI機能のドキュメントについては、[APIリファレンス](https://platform.claude.com/docs/ja/api/overview)を参照してください。このページでは、C#固有のSDK機能と設定について説明します。
</Info>

<Warning>
  バージョン10以降、`Anthropic`パッケージはC#向けの公式Anthropic SDKになりました。パッケージバージョン3.X以前は、以前はtryAGIのコミュニティ製SDKに使用されていましたが、これは[`tryAGI.Anthropic`](https://www.nuget.org/packages/tryagi.Anthropic/)に移動しました。プロジェクトで以前のクライアントを引き続き使用する必要がある場合は、パッケージ参照を`tryAGI.Anthropic`に更新してください。
</Warning>

## インストール

[NuGet](https://www.nuget.org/packages/Anthropic)からパッケージをインストールします：

```bash
dotnet add package Anthropic
```

## 要件

このライブラリには.NET Standard 2.0以降が必要です。

## 使用方法

```csharp
using System;
using Anthropic;
using Anthropic.Models.Messages;

AnthropicClient client = new();

MessageCreateParams parameters = new()
{
    MaxTokens = 1024,
    Messages = [new UserMessageParam { Content = "Hello, Claude" }],
    Model = Model.ClaudeOpus5_5,
};

var message = await client.Messages.Create(parameters);

foreach (var block in message.Content)
{
    if (block.TryPickText(out var textBlock))
    {
        Console.WriteLine(textBlock.Text);
    }
}
```

Workload Identity Federationを含む認証オプションについては、[認証](https://platform.claude.com/docs/ja/manage-claude/authentication)を参照してください。APIキーがワークスペースにスコープされていない[個人キーまたはサービスアカウントキー](https://platform.claude.com/docs/ja/manage-claude/authentication#key-types)である場合は、`anthropic-workspace-id`リクエストヘッダーにワークスペースIDを設定してください。このSDKでのリクエストごとのオプションについては、[ワークスペースを選択する](https://platform.claude.com/docs/ja/manage-claude/authentication#select-a-workspace)で説明しています。

## クライアントの設定

環境変数を使用してクライアントを設定します：

```csharp
using Anthropic;

// 環境変数 ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_BASE_URL を使用して設定されます
AnthropicClient client = new();
```

または手動で設定します：

```csharp
using Anthropic;

AnthropicClient client = new() { ApiKey = "my-anthropic-api-key" };
```

または、この2つのアプローチを組み合わせて使用します。

利用可能なオプションについては、次の表を参照してください：

| プロパティ       | 環境変数                   | 必須    | デフォルト値                        |
| ----------- | ---------------------- | ----- | ----------------------------- |
| `ApiKey`    | `ANTHROPIC_API_KEY`    | false | -                             |
| `AuthToken` | `ANTHROPIC_AUTH_TOKEN` | false | -                             |
| `BaseUrl`   | `ANTHROPIC_BASE_URL`   | true  | `"https://api.anthropic.com"` |

### 設定の変更

同じ接続プールとスレッドプールを再利用しながら、変更したクライアント設定を一時的に使用するには、任意のクライアントまたはサービスで`WithOptions`を呼び出します：

```csharp
using System;

var message = await client
    .WithOptions(options =>
        options with
        {
            BaseUrl = "https://example.com",
            Timeout = TimeSpan.FromSeconds(42),
        }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);
```

[`with`式](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/with-expression)を使用すると、変更したオプションを簡単に構築できます。

`WithOptions`メソッドは、元のクライアントやサービスには影響しません。

## ストリーミング

SDKは、レスポンスの「chunk」（チャンク）ストリームを返すメソッドを定義しています。各チャンクは、完全なレスポンスを待つことなく、到着次第個別に処理できます。ストリーミングメソッドは通常、[SSE](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events)または[JSONL](https://jsonlines.org)レスポンスに対応します。

ストリーミングメソッドは、非ストリーミング版が存在しない場合でも、常に名前に`Streaming`サフィックスが付きます。

これらのストリーミングメソッドは[`IAsyncEnumerable`](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.iasyncenumerable-1)を返します：

```csharp
using System;
using Anthropic.Models.Messages;

MessageCreateParams parameters = new()
{
    MaxTokens = 1024,
    Messages = [new UserMessageParam { Content = "Hello, Claude" }],
    Model = Model.ClaudeOpus5_5,
};

await foreach (var message in client.Messages.CreateStreaming(parameters))
{
    Console.WriteLine(message);
}
```

## エラー処理

SDKはカスタムの非チェック例外型をスローします：

* `AnthropicApiException`：APIエラーの基底クラスです。各HTTPステータスコードに対してどの例外サブクラスがスローされるかについては、次の表を参照してください：

| ステータス | 例外                                       |
| ----- | ---------------------------------------- |
| 400   | `AnthropicBadRequestException`           |
| 401   | `AnthropicUnauthorizedException`         |
| 403   | `AnthropicForbiddenException`            |
| 404   | `AnthropicNotFoundException`             |
| 422   | `AnthropicUnprocessableEntityException`  |
| 429   | `AnthropicRateLimitException`            |
| 5xx   | `Anthropic5xxException`                  |
| その他   | `AnthropicUnexpectedStatusCodeException` |

さらに、すべての4xxエラーは`Anthropic4xxException`を継承します。

* `AnthropicSseException`：最初のHTTPレスポンスが成功した後、SSEストリーミング中に発生したエラーに対してスローされます。

* `AnthropicIOException`：I/Oネットワークエラーです。

* `AnthropicInvalidDataException`：正常に解析されたデータの解釈に失敗した場合です。たとえば、必須であるはずのプロパティにアクセスしたものの、APIが予期せずレスポンスからそれを省略していた場合などです。

* `AnthropicException`：すべての例外の基底クラスです。

## リトライ

SDKはデフォルトで自動的に2回リトライし、リクエスト間に短い指数バックオフを挟みます。

次のエラータイプのみがリトライされます：

* 接続エラー（たとえば、ネットワーク接続の問題によるもの）
* 408 Request Timeout
* 409 Conflict
* 429 Rate Limit
* 5xx Internal

APIは、リクエストをリトライするかどうかをSDKに明示的に指示することもあります。

リトライ回数をカスタム設定するには、`MaxRetries`プロパティを使用してクライアントを設定します：

```csharp
using Anthropic;

AnthropicClient client = new() { MaxRetries = 3 };
```

または、`WithOptions`を使用して単一のメソッド呼び出しを設定します：

```csharp
using System;

var message = await client
    .WithOptions(options =>
        options with { MaxRetries = 3 }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);
```

## タイムアウト

リクエストはデフォルトで10分後にタイムアウトします。

タイムアウトをカスタム設定するには、`Timeout`オプションを使用してクライアントを設定します：

```csharp
using System;
using Anthropic;

AnthropicClient client = new() { Timeout = TimeSpan.FromSeconds(42) };
```

または、`WithOptions`を使用して単一のメソッド呼び出しを設定します：

```csharp
using System;

var message = await client
    .WithOptions(options =>
        options with { Timeout = TimeSpan.FromSeconds(42) }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);
```

## ページネーション

SDKは、結果のページ分割されたリストを返すメソッドを定義しています。結果に1ページずつアクセスする方法と、すべてのページにわたってアイテムごとにアクセスする方法の両方を便利に提供します。

### 自動ページネーション

すべてのページにわたってすべての結果を反復処理するには、必要に応じて自動的に追加のページを取得する`Paginate`メソッドを使用します。このメソッドは[`IAsyncEnumerable`](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.iasyncenumerable-1)を返します：

```csharp
using System;

var page = await client.Messages.Batches.List(parameters);
await foreach (var item in page.Paginate())
{
    Console.WriteLine(item);
}
```

### 手動ページネーション

個々のページアイテムにアクセスし、次のページを手動でリクエストするには、`Items`プロパティと、`HasNext`および`Next`メソッドを使用します：

```csharp
var page = await client.Messages.Batches.List();
while (true)
{
    foreach (var item in page.Items)
    {
        Console.WriteLine(item);
    }
    if (!page.HasNext())
    {
        break;
    }
    page = await page.Next();
}
```

## レスポンスの検証

まれに、APIが期待される型と一致しないレスポンスを返すことがあります。デフォルトでは、この場合SDKは例外をスローしません。プロパティに直接アクセスした場合にのみ`AnthropicInvalidDataException`をスローします。

レスポンスが完全に正しく型付けされていることを事前に確認したい場合は、`Validate`を呼び出します：

```csharp
var message = await client.Messages.Create(parameters);
message.Validate();
```

または、`ResponseValidation`オプションを使用してクライアントを設定します：

```csharp
using Anthropic;

AnthropicClient client = new() { ResponseValidation = true };
```

または、`WithOptions`を使用して単一のメソッド呼び出しを設定します：

```csharp
using System;

var message = await client
    .WithOptions(options =>
        options with { ResponseValidation = true }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);
```

## IChatClient統合

SDKは、`Microsoft.Extensions.AI.Abstractions`ライブラリの`IChatClient`インターフェースの実装を提供します。これにより、`AnthropicClient`（および`Anthropic.Services.IBetaService`）を、これらのコア抽象化と統合する他のライブラリで使用できるようになります。たとえば、MCP C# SDK（`ModelContextProtocol`）ライブラリのツールは、`IChatClient`を通じて公開された`AnthropicClient`で直接使用できます。

```csharp
using Anthropic;
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;

// 環境変数 ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_BASE_URL を使用して設定されます
AnthropicClient client = new();

IChatClient chatClient = client.AsIChatClient("claude-opus-5-5")
    .AsBuilder()
    .UseFunctionInvocation()
    .Build();

// MCP C# SDK の McpClient を使用します
McpClient learningServer = await McpClient.CreateAsync(
    new HttpClientTransport(new() { Endpoint = new("https://learn.microsoft.com/api/mcp") }));

ChatOptions options = new() { Tools = [.. await learningServer.ListToolsAsync()] };

Console.WriteLine(await chatClient.GetResponseAsync("Tell me about IChatClient", options));
```

## リクエストとレスポンス

Claude APIにリクエストを送信するには、`Params`クラスのインスタンスを構築し、対応するクライアントメソッドに渡します。レスポンスを受信すると、C#クラスのインスタンスにデシリアライズされます。

たとえば、`client.Messages.Create`は`MessageCreateParams`のインスタンスを指定して呼び出す必要があり、`Task<Message>`のインスタンスを返します。

## 高度な使用方法

### バイナリレスポンス

SDKは、バイナリレスポンスを返すメソッドを定義しています。これらは、非JSONデータなど、必ずしも解析する必要のないAPIレスポンスに使用されます。

これらのメソッドは`HttpResponse`を返します：

```csharp
using System;
using Anthropic.Models.Files;

FileDownloadParams parameters = new() { FileID = "file_id" };

var response = await client.Files.Download(parameters);

Console.WriteLine(response);
```

レスポンスの内容をファイルまたは任意の[`Stream`](https://learn.microsoft.com/en-us/dotnet/api/system.io.stream)に保存するには、[`CopyToAsync`](https://learn.microsoft.com/en-us/dotnet/api/system.io.stream.copytoasync)メソッドを使用します：

```csharp
using System.IO;

using var response = await client.Files.Download(parameters);
using var contentStream = await response.ReadAsStream();
using var fileStream = File.Open(path, FileMode.OpenOrCreate);
await contentStream.CopyToAsync(fileStream); // Or any other Stream
```

### 生のレスポンス

SDKは、レスポンスをC#クラスのインスタンスにデシリアライズするメソッドを定義しています。レスポンスヘッダー、ステータスコード、または生のレスポンスボディにアクセスするには、クライアントまたはサービスでの任意のHTTPメソッド呼び出しの前に`WithRawResponse`を付けます：

```csharp
var response = await client.WithRawResponse.Messages.Create(parameters);
var statusCode = response.StatusCode;
var headers = response.Headers;
```

生の`HttpResponseMessage`には、`RawMessage`プロパティを通じてアクセスすることもできます。

非ストリーミングレスポンスの場合、必要に応じてレスポンスをC#クラスのインスタンスにデシリアライズできます：

```csharp
using System;
using Anthropic.Models.Messages;

var response = await client.WithRawResponse.Messages.Create(parameters);
Message deserialized = await response.Deserialize();
Console.WriteLine(deserialized);
```

ストリーミングレスポンスの場合、必要に応じてレスポンスを`IAsyncEnumerable`にデシリアライズできます：

```csharp
using System;

var response = await client.WithRawResponse.Messages.CreateStreaming(parameters);
await foreach (var item in response.Enumerate())
{
    Console.WriteLine(item);
}
```

### ロギング

<Warning>
  すべてのログメッセージはデバッグ専用です。ログメッセージの形式と内容は、リリース間で変更される可能性があります。
</Warning>

環境変数を設定してデバッグロギングを有効にします：

```bash
export ANTHROPIC_LOG=debug
```

### OpenTelemetryトレーシング

アプリケーションが`AddSource("com.anthropic.sdk.csharp*")`でSDKのソースをOpenTelemetryトレーサープロバイダーに追加すると、SDKは送信する各リクエストについてスパンを出力します。スパンをオブザーバビリティプラットフォームに送信するには、[Claude SDKでOpenTelemetryを設定する](https://platform.claude.com/docs/ja/manage-claude/opentelemetry/sdk)を参照してください。

### ドキュメント化されていないAPI機能

SDKは、ドキュメント化されたAPIを便利に使用できるように型付けされています。ただし、APIのドキュメント化されていない部分や、まだサポートされていない部分を扱うこともサポートしています。

## プラットフォーム統合

<Note>
  コード例を含む詳細なプラットフォームセットアップガイドについては、以下を参照してください：

  * [Amazon Bedrock](https://platform.claude.com/docs/ja/build-with-claude/claude-in-amazon-bedrock)
  * [Amazon Bedrock（Opus 4.6以前）](https://platform.claude.com/docs/ja/build-with-claude/claude-on-amazon-bedrock-legacy)
  * [Claude Platform on AWS](https://platform.claude.com/docs/ja/build-with-claude/claude-platform-on-aws)
  * [Claude Models on Google Cloud (Google managed)](https://platform.claude.com/docs/ja/build-with-claude/claude-models-on-google-cloud/google-managed)
  * [Microsoft Foundry](https://platform.claude.com/docs/ja/build-with-claude/claude-in-microsoft-foundry)

  [Claude Models on Google Cloud (Anthropic managed)](https://platform.claude.com/docs/ja/build-with-claude/claude-models-on-google-cloud/anthropic-managed)も参照してください。
</Note>

C# SDKは、個別のNuGetパッケージを通じて次のプラットフォームをサポートしています：

* **Agent Platform：** `Anthropic.Vertex`。クライアントのセットアップについては、[Claude Models on Google Cloud (Google managed)](https://platform.claude.com/docs/ja/build-with-claude/claude-models-on-google-cloud/google-managed)を参照してください。
* **Bedrock：** `Anthropic.Bedrock`。Messages-API Bedrockエンドポイントには`AnthropicBedrockMantleClient`を、または`AnthropicBedrockClient`（`bedrock-runtime`パス）を使用します。`AnthropicBedrockMantleClient`はオプションの`MantleAwsClientOptions`設定オブジェクトを受け取ります。`AnthropicBedrockClient`は`AnthropicBedrockCredentialsHelper.FromEnv()`または明示的な認証情報を受け付けます。
* **Claude Platform on AWS：** `Anthropic.Aws`。`AnthropicAwsClient`を使用します。クライアントで`WorkspaceId`を設定するか、`ANTHROPIC_AWS_WORKSPACE_ID`環境変数を設定します（[ワークスペース](https://platform.claude.com/docs/ja/build-with-claude/claude-platform-on-aws#workspaces)を参照）。ベータ版で利用可能です。
* **Foundry：** `Anthropic.Foundry`。`DefaultAnthropicFoundryCredentials.FromEnv()`または明示的な認証情報とともに`AnthropicFoundryClient`を使用します。

新しいプロジェクトには`AnthropicBedrockMantleClient`を使用してください。`AnthropicBedrockClient`は、Bedrock `InvokeModel` APIを使用する既存のアプリケーション向けに引き続き提供されます。

C# SDKは、`Anthropic.GoogleCloud`パッケージの`AnthropicGoogleCloudClient`を通じて、Claude Models on Google Cloud (Anthropic managed)もサポートしています。このクライアントはベータ版です。オプションの`GoogleCloudClientOptions`値で`WorkspaceId`を設定するか、`ANTHROPIC_GOOGLE_CLOUD_WORKSPACE_ID`環境変数を設定してください。[プロジェクト、ロケーション、およびワークスペースの解決](https://platform.claude.com/docs/ja/build-with-claude/claude-models-on-google-cloud/anthropic-managed#project-location-and-workspace-resolution)を参照してください。

## セマンティックバージョニング

このSDKの各メジャーバージョンは、デフォルトで`anthropic-version`ヘッダーに1つのAPIバージョンを送信し、新しいAPIバージョンごとに新しいメジャーバージョンがリリースされます。`2026-10-21`を送信する最初のメジャーバージョンは13.0.0です。[APIバージョン2026-10-21への移行](https://platform.claude.com/docs/ja/api/migration-2026-10-21#upgrade)を参照してください。

このパッケージは一般的に[SemVer](https://semver.org/spec/v2.0.0.html)の規則に従いますが、特定の後方互換性のない変更がマイナーバージョンとしてリリースされる場合があります：

1. 技術的には公開されているものの、外部での使用を意図していない、またはドキュメント化されていないライブラリ内部の変更。
2. 実際には大多数のユーザーに影響を与えないと予想される変更。

スムーズなアップグレード体験を確実に得られるよう、後方互換性は真剣に考慮されています。

## その他のリソース

* [GitHubリポジトリ](https://github.com/anthropics/anthropic-sdk-csharp)
* [NuGetパッケージ](https://www.nuget.org/packages/Anthropic)
* [APIリファレンス](https://platform.claude.com/docs/ja/api/overview)
* [メッセージのストリーミング](https://platform.claude.com/docs/ja/build-with-claude/streaming)
