A Semantic Kernel connector for Anthropic models with API-key-first authentication and optional local Claude Code OAuth support.
- API-key-first authentication — supports
sk-ant-api*via options orANTHROPIC_API_KEY - Optional local OAuth support —
sk-ant-oat*is opt-in and interactive-only - Multi-source credential resolution — options/env API key first, then local OAuth sources
- Full Semantic Kernel integration —
IKernelBuilder.UseClaudeCodeChatCompletion()one-liner - DI-friendly —
IServiceCollection.AddClaudeCodeAuthentication()for ASP.NET Core / Generic Host - Broad TFM support —
netstandard2.0,net8.0,net10.0
- OAuth token support is disabled by default.
- OAuth usage requires
EnableOAuthTokenSupport = trueand an interactive session. - Unattended or automated OAuth workflows are intentionally blocked.
- For service, CI, or unattended usage, use Anthropic API keys (
sk-ant-api*). - Anthropic Consumer Terms (effective October 8, 2025) apply to consumer-service usage: https://www.anthropic.com/legal/consumer-terms
- Anthropic API keys are governed by Anthropic Commercial Terms: https://www.anthropic.com/legal/commercial-terms
dotnet add package JD.SemanticKernel.Connectors.ClaudeCodeusing JD.SemanticKernel.Connectors.ClaudeCode;
var builder = Kernel.CreateBuilder();
builder.UseClaudeCodeChatCompletion(apiKey: "sk-ant-api..."); // defaults to ClaudeModels.Default (Sonnet)
var kernel = builder.Build();
var result = await kernel.InvokePromptAsync("Hello, Claude!");
Console.WriteLine(result);builder.Services.AddClaudeCodeAuthentication(options =>
{
options.CredentialsPath = "/custom/path/.credentials.json"; // optional
options.EnableOAuthTokenSupport = true; // only for local interactive OAuth use
});{
"ClaudeSession": {
"ApiKey": null,
"OAuthToken": null,
"EnableOAuthTokenSupport": false,
"CredentialsPath": null
}
}builder.Services.AddClaudeCodeAuthentication(builder.Configuration);| Priority | Source | Description |
|---|---|---|
| 1 | ClaudeSession:ApiKey |
Explicit API key in options/config |
| 2 | ANTHROPIC_API_KEY env var |
Environment variable |
| 3 | ClaudeSession:OAuthToken |
Explicit OAuth token (requires EnableOAuthTokenSupport = true) |
| 4 | ~/.claude/.credentials.json |
Local Claude Code session (requires EnableOAuthTokenSupport = true) |
This repo includes sample projects demonstrating agentic workflows with Semantic Kernel:
| Tool | Command | Description |
|---|---|---|
| Gherkin Generator | jdgerkinator |
Converts acceptance criteria into Gherkin/Reqnroll specs |
| PR Review Agent | jdpr |
Multi-provider PR review (GitHub, Azure DevOps, GitLab) |
| Codebase Explorer | jdxplr |
Profiles codebases into structured knowledgebases |
| Todo Extractor | (library demo) | Extracts structured todos from natural language |
Install the CLI tools as global tools:
dotnet tool install -g JD.Tools.GherkinGenerator
dotnet tool install -g JD.Tools.PullRequestReviewer
dotnet tool install -g JD.Tools.CodebaseExplorerWell-known model constants are available via ClaudeModels:
builder.UseClaudeCodeChatCompletion(ClaudeModels.Opus); // claude-opus-4-6
builder.UseClaudeCodeChatCompletion(ClaudeModels.Sonnet); // claude-sonnet-4-6 (default)
builder.UseClaudeCodeChatCompletion(ClaudeModels.Haiku); // claude-haiku-4-5Full documentation is available at the DocFX site including:
- Getting Started
- Credential Resolution
- Kernel Builder Integration
- Service Collection Integration
- HttpClientFactory
- Configuration Reference
- Sample Tools Guide
dotnet build
dotnet testcd docs
dotnet tool restore
dotnet docfx docfx.jsonThis connector implements the JD.SemanticKernel.Connectors.Abstractions interfaces, enabling multi-provider bridging:
| Interface | Implementation |
|---|---|
ISessionProvider |
ClaudeCodeSessionProvider — credential resolution with IsAuthenticatedAsync() |
IModelDiscoveryProvider |
ClaudeModelDiscovery — returns known Claude model catalogue |
SessionOptionsBase |
ClaudeCodeSessionOptions — inherits DangerouslyDisableSslValidation, CustomEndpoint |
Use the same abstractions across providers:
ISessionProvider provider = isClaudeCode
? claudeCodeProvider
: copilotProvider;
var creds = await provider.GetCredentialsAsync();- JD.SemanticKernel.Connectors.GitHubCopilot — Same pattern for GitHub Copilot subscriptions
- JD.SemanticKernel.Extensions — SK extensions for skills, hooks, plugins, compaction, and semantic memory
