Claude Platform Docs
SDK、CLI、ライブラリクライアントSDK

C# SDK

IChatClient統合を備えた.NETアプリケーション向けのAnthropic C# SDKをインストールして設定します

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

インストール

NuGetからパッケージをインストールします:

dotnet add package Anthropic

要件

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

使用方法

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を含む認証オプションについては、認証を参照してください。お使いのAPIキーが複数のワークスペースにアクセスできる個人キーまたはサービスアカウントキーである場合は、anthropic-workspace-idリクエストヘッダーにワークスペースIDを設定してください。ワークスペースを選択するでは、このSDKにおけるリクエストごとのオプションを示しています。

クライアントの設定

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

using Anthropic;

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

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

using Anthropic;

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

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

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

プロパティ環境変数必須デフォルト値
ApiKeyANTHROPIC_API_KEYfalse-
AuthTokenANTHROPIC_AUTH_TOKENfalse-
BaseUrlANTHROPIC_BASE_URLtrue"https://api.anthropic.com"

設定の変更

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

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式を使用すると、変更したオプションを簡単に構築できます。

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

ストリーミング

SDKは、レスポンスの「chunk」(チャンク)ストリームを返すメソッドを定義しています。各チャンクは、完全なレスポンスを待つことなく、到着次第個別に処理できます。ストリーミングメソッドは通常、SSEまたはJSONLレスポンスに対応します。

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

これらのストリーミングメソッドはIAsyncEnumerableを返します:

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ステータスコードに対してどの例外サブクラスがスローされるかについては、次の表を参照してください:
ステータス例外
400AnthropicBadRequestException
401AnthropicUnauthorizedException
403AnthropicForbiddenException
404AnthropicNotFoundException
422AnthropicUnprocessableEntityException
429AnthropicRateLimitException
5xxAnthropic5xxException
その他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プロパティを使用してクライアントを設定します:

using Anthropic;

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

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

using System;

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

Console.WriteLine(message);

タイムアウト

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

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

using System;
using Anthropic;

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

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

using System;

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

Console.WriteLine(message);

ページネーション

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

自動ページネーション

すべてのページにわたってすべての結果を反復処理するには、必要に応じて自動的に追加のページを取得するPaginateメソッドを使用します。このメソッドはIAsyncEnumerableを返します:

using System;

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

手動ページネーション

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

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を呼び出します:

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

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

using Anthropic;

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

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

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で直接使用できます。

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を返します:

using System;
using Anthropic.Models.Files;

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

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

Console.WriteLine(response);

レスポンスの内容をファイルまたは任意のStreamに保存するには、CopyToAsyncメソッドを使用します:

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を付けます:

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

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

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

using System;
using Anthropic.Models.Messages;

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

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

using System;

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

ロギング

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

export ANTHROPIC_LOG=debug

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

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

プラットフォーム統合

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

  • Agent Platform: Anthropic.Vertex。クライアントのセットアップについては、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環境変数を設定します(ワークスペースを参照)。ベータ版で利用可能です。
  • 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環境変数を設定してください。プロジェクト、ロケーション、およびワークスペースの解決を参照してください。

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

このSDKの各メジャーバージョンは、デフォルトでanthropic-versionヘッダーに1つのAPIバージョンを送信し、新しいAPIバージョンごとに新しいメジャーバージョンがリリースされます。2026-10-21を送信する最初のメジャーバージョンは13.0.0です。APIバージョン2026-10-21への移行を参照してください。

このパッケージは一般的にSemVerの規則に従いますが、特定の後方互換性のない変更がマイナーバージョンとしてリリースされる場合があります:

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

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

その他のリソース

Was this page helpful?