Add ToolAnnotations support (#124)
* Add ToolAnnotations support * Address feedback
This commit is contained in:
parent
2c1672cc1a
commit
62e92fa154
1 changed files with 645 additions and 394 deletions
|
|
@ -1,6 +1,5 @@
|
|||
using Microsoft.Extensions.AI;
|
||||
using ModelContextProtocol.Protocol.Types;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Reflection;
|
||||
|
||||
|
|
@ -30,58 +29,28 @@ public abstract class McpServerTool
|
|||
/// Creates an <see cref="McpServerTool"/> instance for a method, specified via a <see cref="Delegate"/> instance.
|
||||
/// </summary>
|
||||
/// <param name="method">The method to be represented via the created <see cref="McpServerTool"/>.</param>
|
||||
/// <param name="name">
|
||||
/// The name to use for the <see cref="McpServerTool"/>. If <see langword="null"/>, but an <see cref="McpServerToolAttribute"/>
|
||||
/// is applied to <paramref name="method"/>, the name from the attribute will be used. If that's not present, the name based
|
||||
/// on <paramref name="method"/>'s name will be used.
|
||||
/// </param>
|
||||
/// <param name="description">
|
||||
/// The description to use for the <see cref="McpServerTool"/>. If <see langword="null"/>, but a <see cref="DescriptionAttribute"/>
|
||||
/// is applied to <paramref name="method"/>, the description from that attribute will be used.
|
||||
/// </param>
|
||||
/// <param name="services">
|
||||
/// Optional services used in the construction of the <see cref="McpServerTool"/>. These services will be
|
||||
/// used to determine which parameters should be satisifed from dependency injection; what services
|
||||
/// are satisfied via this provider should match what's satisfied via the provider passed in at invocation time.
|
||||
/// </param>
|
||||
/// <param name="options">Optional options used in the creation of the <see cref="McpServerTool"/> to control its behavior.</param>
|
||||
/// <returns>The created <see cref="McpServerTool"/> for invoking <paramref name="method"/>.</returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="method"/> is <see langword="null"/>.</exception>
|
||||
public static McpServerTool Create(
|
||||
Delegate method,
|
||||
string? name = null,
|
||||
string? description = null,
|
||||
IServiceProvider? services = null) =>
|
||||
AIFunctionMcpServerTool.Create(method, name, description, services);
|
||||
McpServerToolCreateOptions? options = null) =>
|
||||
AIFunctionMcpServerTool.Create(method, options);
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="McpServerTool"/> instance for a method, specified via a <see cref="Delegate"/> instance.
|
||||
/// </summary>
|
||||
/// <param name="method">The method to be represented via the created <see cref="McpServerTool"/>.</param>
|
||||
/// <param name="target">The instance if <paramref name="method"/> is an instance method; otherwise, <see langword="null"/>.</param>
|
||||
/// <param name="name">
|
||||
/// The name to use for the <see cref="McpServerTool"/>. If <see langword="null"/>, but an <see cref="McpServerToolAttribute"/>
|
||||
/// is applied to <paramref name="method"/>, the name from the attribute will be used. If that's not present, the name based
|
||||
/// on <paramref name="method"/>'s name will be used.
|
||||
/// </param>
|
||||
/// <param name="description">
|
||||
/// The description to use for the <see cref="McpServerTool"/>. If <see langword="null"/>, but a <see cref="DescriptionAttribute"/>
|
||||
/// is applied to <paramref name="method"/>, the description from that attribute will be used.
|
||||
/// </param>
|
||||
/// <param name="services">
|
||||
/// Optional services used in the construction of the <see cref="McpServerTool"/>. These services will be
|
||||
/// used to determine which parameters should be satisifed from dependency injection; what services
|
||||
/// are satisfied via this provider should match what's satisfied via the provider passed in at invocation time.
|
||||
/// </param>
|
||||
/// <param name="options">Optional options used in the creation of the <see cref="McpServerTool"/> to control its behavior.</param>
|
||||
/// <returns>The created <see cref="McpServerTool"/> for invoking <paramref name="method"/>.</returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="method"/> is <see langword="null"/>.</exception>
|
||||
/// <exception cref="ArgumentException"><paramref name="method"/> is an instance method but <paramref name="target"/> is <see langword="null"/>.</exception>
|
||||
public static McpServerTool Create(
|
||||
MethodInfo method,
|
||||
object? target = null,
|
||||
string? name = null,
|
||||
string? description = null,
|
||||
IServiceProvider? services = null) =>
|
||||
AIFunctionMcpServerTool.Create(method, target, name, description, services);
|
||||
McpServerToolCreateOptions? options = null) =>
|
||||
AIFunctionMcpServerTool.Create(method, target, options);
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="McpServerTool"/> instance for a method, specified via an <see cref="MethodInfo"/> for
|
||||
|
|
@ -96,39 +65,27 @@ public abstract class McpServerTool
|
|||
/// <see cref="Activator.CreateInstance(Type)"/> is used, utilizing the type's public parameterless constructor.
|
||||
/// If an instance can't be constructed, an exception is thrown during the function's invocation.
|
||||
/// </param>
|
||||
/// <param name="name">
|
||||
/// The name to use for the <see cref="McpServerTool"/>. If <see langword="null"/>, but an <see cref="McpServerToolAttribute"/>
|
||||
/// is applied to <paramref name="method"/>, the name from the attribute will be used. If that's not present, the name based
|
||||
/// on <paramref name="method"/>'s name will be used.
|
||||
/// </param>
|
||||
/// <param name="description">
|
||||
/// The description to use for the <see cref="McpServerTool"/>. If <see langword="null"/>, but a <see cref="DescriptionAttribute"/>
|
||||
/// is applied to <paramref name="method"/>, the description from that attribute will be used.
|
||||
/// </param>
|
||||
/// <param name="services">
|
||||
/// Optional services used in the construction of the <see cref="McpServerTool"/>. These services will be
|
||||
/// used to determine which parameters should be satisifed from dependency injection; what services
|
||||
/// are satisfied via this provider should match what's satisfied via the provider passed in at invocation time.
|
||||
/// </param>
|
||||
/// <param name="options">Optional options used in the creation of the <see cref="McpServerTool"/> to control its behavior.</param>
|
||||
/// <returns>The created <see cref="AIFunction"/> for invoking <paramref name="method"/>.</returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="method"/> is <see langword="null"/>.</exception>
|
||||
public static McpServerTool Create(
|
||||
MethodInfo method,
|
||||
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type targetType,
|
||||
string? name = null,
|
||||
string? description = null,
|
||||
IServiceProvider? services = null) =>
|
||||
AIFunctionMcpServerTool.Create(method, targetType, name, description, services);
|
||||
McpServerToolCreateOptions? options = null) =>
|
||||
AIFunctionMcpServerTool.Create(method, targetType, options);
|
||||
|
||||
/// <summary>Creates an <see cref="McpServerTool"/> that wraps the specified <see cref="AIFunction"/>.</summary>
|
||||
/// <param name="function">The function to wrap.</param>
|
||||
/// <param name="options">Optional options used in the creation of the <see cref="McpServerTool"/> to control its behavior.</param>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="function"/> is <see langword="null"/>.</exception>
|
||||
/// <remarks>
|
||||
/// Unlike the other overloads of Create, the <see cref="McpServerTool"/> created by <see cref="Create(AIFunction)"/>
|
||||
/// Unlike the other overloads of Create, the <see cref="McpServerTool"/> created by <see cref="Create(AIFunction, McpServerToolCreateOptions)"/>
|
||||
/// does not provide all of the special parameter handling for MCP-specific concepts, like <see cref="IMcpServer"/>.
|
||||
/// </remarks>
|
||||
public static McpServerTool Create(AIFunction function) =>
|
||||
AIFunctionMcpServerTool.Create(function);
|
||||
public static McpServerTool Create(
|
||||
AIFunction function,
|
||||
McpServerToolCreateOptions? options = null) =>
|
||||
AIFunctionMcpServerTool.Create(function, options);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString() => ProtocolTool.Name;
|
||||
|
|
|
|||
Loading…
Reference in a new issue