Keel.Endpoints.Mcp
1.0.0-rc.8
dotnet add package Keel.Endpoints.Mcp --version 1.0.0-rc.8
NuGet\Install-Package Keel.Endpoints.Mcp -Version 1.0.0-rc.8
<PackageReference Include="Keel.Endpoints.Mcp" Version="1.0.0-rc.8" />
<PackageVersion Include="Keel.Endpoints.Mcp" Version="1.0.0-rc.8" />
<PackageReference Include="Keel.Endpoints.Mcp" />
paket add Keel.Endpoints.Mcp --version 1.0.0-rc.8
#r "nuget: Keel.Endpoints.Mcp, 1.0.0-rc.8"
#:package Keel.Endpoints.Mcp@1.0.0-rc.8
#addin nuget:?package=Keel.Endpoints.Mcp&version=1.0.0-rc.8&prerelease
#tool nuget:?package=Keel.Endpoints.Mcp&version=1.0.0-rc.8&prerelease
Keel.Endpoints.Mcp
Your Keel endpoints as MCP tools for AI agents, on the official MCP C# SDK. One line per endpoint; the contract is the tool, and each call is the endpoint.
builder.Services.AddKeelEndpoints();
builder.Services.AddKeelMcp(); // MCP server, Streamable HTTP (stateless)
app.MapKeelEndpoints("/api");
app.MapKeelMcp("/mcp");
[Get("invoices/{id}"), Authorize]
public sealed class Endpoint(InvoiceStore store) : ResultEndpoint<GetInvoice, Results<Ok<InvoiceView>, NotFound>>
{
public override void Configure(EndpointOptions options) => options.ExposeAsTool("Gets an invoice by its number.");
// ...
}
[Delete("invoices/{id}"), Authorize("admin")]
public sealed class Endpoint(InvoiceStore store) : Endpoint<DeleteInvoice>
{
public override void Configure(EndpointOptions options) =>
options.ExposeAsTool("Deletes an invoice for good.", tool => tool.Destructive = true);
// ...
}
| Opt-in | Only endpoints with ExposeAsTool(description) are tools |
| Name | The operation name in snake case: Invoices.Get is invoices_get (or tool.Name) |
| Input schema | The request contract through System.Text.Json, with its DataAnnotations (Range, StringLength, Required...) |
| Output schema | The response type (T, or the success value of Results<Ok<T>, ...>); the body also comes as structured content |
| A call | Runs the endpoint in process, as the caller: binding, validation, filters and ProblemDetails are the endpoint's |
| Authorization | The endpoint's own policies, with the MCP request's identity; tools a caller cannot use are not listed |
| Writes | Must set Destructive (false if it only adds, true if it may overwrite or delete), or the host does not start |
| Errors | A 4xx or 5xx is a tool error with the status and the endpoint's problem details; unhandled exceptions say nothing more |
| Lean results | Compact text for the model by default; optional MaxItems, a fields argument and a table format cut a list's tokens by up to 79 % |
| Reviews | The API manifest records each tool: dotnet keel diff reports renamed tools, new writes and lost confirmations |
| Discovery | Optional MCP Server Card at /mcp/server-card (o.ServerCard = new() { Name, Description }) |
See the MCP guide.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Keel.Endpoints (>= 1.0.0-rc.8)
- ModelContextProtocol.AspNetCore (>= 2.3.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Keel.Endpoints.Mcp:
| Package | Downloads |
|---|---|
|
Keel.Endpoints.Agents
Safe actions for AI agents on Keel.Endpoints MCP tools: the server asks the user to confirm before a destructive or sensitive tool runs (MCP elicitation, stateless), with a signed confirmation bound to the tool, its arguments and the user, and an audit trail of every write an agent makes. Fail-closed: no confirmation, no action. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0-rc.8 | 52 | 11/12/2026 |
| 1.0.0-rc.7 | 76 | 11/1/2026 |
| 1.0.0-rc.6 | 71 | 11/1/2026 |
| 1.0.0-rc.5 | 70 | 10/31/2026 |
| 1.0.0-rc.4 | 73 | 10/31/2026 |
| 1.0.0-rc.3 | 66 | 10/31/2026 |
| 1.0.0-rc.2 | 86 | 10/31/2026 |