From cdf6b4bdbe7821b06adbe483282e95c50dec64c4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Mar 2026 03:01:58 +0000 Subject: [PATCH 1/5] Initial plan From cf3230882c02e107005ec4f61cea781f7edc676e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Mar 2026 03:13:21 +0000 Subject: [PATCH 2/5] Add OutputSchema property to McpServerToolCreateOptions and McpServerToolAttribute Adds support for specifying the output schema type independently of the return type for tools returning CallToolResult. This allows developers to advertise a meaningful OutputSchema in tools/list while still having full control over the CallToolResult response (Meta, IsError, StructuredContent). - Add `JsonElement? OutputSchema` property to McpServerToolCreateOptions - Add `Type? OutputSchema` property to McpServerToolAttribute - DeriveOptions converts the attribute's Type to a JSON schema - CreateOutputSchema uses explicit OutputSchema over AIFunction's return schema - Add 13 comprehensive tests covering all variations Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- full.xml | 5447 +++++++++++++++++ .../Server/AIFunctionMcpServerTool.cs | 19 +- .../Server/McpServerToolAttribute.cs | 21 + .../Server/McpServerToolCreateOptions.cs | 21 + .../Server/McpServerToolTests.cs | 278 + 5 files changed, 5785 insertions(+), 1 deletion(-) create mode 100644 full.xml diff --git a/full.xml b/full.xml new file mode 100644 index 000000000..eb72d97f2 --- /dev/null +++ b/full.xml @@ -0,0 +1,5447 @@ + + + + + + <_AfterSdkPublishDependsOn Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true'">AfterPublish + <_AfterSdkPublishDependsOn Condition="'$(UsingMicrosoftNETSdkWeb)' != 'true'">Publish + + + + + true + + true + $(CustomAfterDirectoryBuildProps);$(MSBuildThisFileDirectory)UseArtifactsOutputPath.props + + + $(ProjectExtensionsPathForSpecifiedProject) + + + + + + true + true + true + true + true + + + + <_DirectoryBuildPropsFile Condition="'$(_DirectoryBuildPropsFile)' == ''">Directory.Build.props + <_DirectoryBuildPropsBasePath Condition="'$(_DirectoryBuildPropsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), '$(_DirectoryBuildPropsFile)')) + $([System.IO.Path]::Combine('$(_DirectoryBuildPropsBasePath)', '$(_DirectoryBuildPropsFile)')) + + + + + + preview + true + enable + enable + false + false + + false + + + + + Debug + $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)')) + $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'artifacts')) + $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'obj')) + $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'bin')) + $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'TestResults', '$(Configuration)')) + $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'packages', '$(Configuration)')) + $(MSBuildProjectName) + $([System.IO.Path]::GetFullPath('$(ArtifactsObjDir)$(OutDirName)\')) + $(BaseIntermediateOutputPath)$(Configuration)\ + $([System.IO.Path]::GetFullPath('$(ArtifactsBinDir)$(OutDirName)\')) + $(BaseOutputPath)$(Configuration)\ + $(ArtifactsPackagesDir) + + + trx%3bLogFileName=$(MSBuildProjectName).$(TargetFramework).$(OS).trx + $(ArtifactsTestResultsDir) + + + true + + + + true + + + + net10.0;net9.0;net8.0 + $(DefaultTestTargetFrameworks);net472 + + + + https://csharp.sdk.modelcontextprotocol.io + https://github.com/modelcontextprotocol/csharp-sdk + git + 1.1.0 + ModelContextProtocol + © Model Context Protocol a Series of LF Projects, LLC. + ModelContextProtocol;mcp;ai;llm + Apache-2.0 + logo.png + true + snupkg + true + $(RepoRoot)\Open.snk + true + true + 1.0.0 + + + + + + + + + + + + + + + + + true + $(MSBuildProjectName) + + + $(ArtifactsPath)\obj\$(ArtifactsProjectName)\ + $(ArtifactsPath)\obj\ + + + + <_ArtifactsPathSetEarly>true + + + + + + obj\ + $(BaseIntermediateOutputPath)\ + <_InitialBaseIntermediateOutputPath>$(BaseIntermediateOutputPath) + $(BaseIntermediateOutputPath) + + $([System.IO.Path]::Combine('$(MSBuildProjectDirectory)', '$(MSBuildProjectExtensionsPath)')) + $(MSBuildProjectExtensionsPath)\ + + false + true + <_InitialMSBuildProjectExtensionsPath Condition=" '$(ImportProjectExtensionProps)' == 'true' ">$(MSBuildProjectExtensionsPath) + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /home/runner/.nuget/packages/ + /home/runner/.nuget/packages/ + PackageReference + 7.0.0 + + + + + + + + + + + <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\net472\Microsoft.SourceLink.Common.dll + <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\core\Microsoft.SourceLink.Common.dll + + + + true + + true + + + + + + + + + $(MSBuildThisFileDirectory)..\tools\net472\Microsoft.Build.Tasks.Git.dll + $(MSBuildThisFileDirectory)..\tools\core\Microsoft.Build.Tasks.Git.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /home/runner/.nuget/packages/microsoft.sourcelink.common/8.0.0 + /home/runner/.nuget/packages/microsoft.build.tasks.git/8.0.0 + /home/runner/.nuget/packages/microsoft.sourcelink.github/8.0.0 + /home/runner/.nuget/packages/microsoft.net.illink.tasks/10.0.2 + + + /home/runner/.nuget/packages/microsoft.sourcelink.common/8.0.0 + /home/runner/.nuget/packages/microsoft.build.tasks.git/8.0.0 + /home/runner/.nuget/packages/microsoft.sourcelink.github/8.0.0 + /home/runner/.nuget/packages/microsoft.net.illink.tasks/8.0.23 + + + /home/runner/.nuget/packages/microsoft.sourcelink.common/8.0.0 + /home/runner/.nuget/packages/microsoft.build.tasks.git/8.0.0 + /home/runner/.nuget/packages/microsoft.sourcelink.github/8.0.0 + /home/runner/.nuget/packages/microsoft.net.illink.tasks/9.0.12 + + + /home/runner/.nuget/packages/microsoft.sourcelink.common/8.0.0 + /home/runner/.nuget/packages/microsoft.build.tasks.git/8.0.0 + /home/runner/.nuget/packages/microsoft.sourcelink.github/8.0.0 + + + + + + + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.Before.$(MSBuildThisFile) + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.After.$(MSBuildThisFile) + + + + + true + + + $(DefaultProjectConfiguration) + $(DefaultProjectPlatform) + + + WJProject + JavaScript + + + + + + + + $([MSBuild]::IsRunningFromVisualStudio()) + $([MSBuild]::GetToolsDirectory32())\..\..\..\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.props + $(MSBuildToolsPath)\NuGet.props + + + + + + true + + + + <_DirectoryPackagesPropsFile Condition="'$(_DirectoryPackagesPropsFile)' == ''">Directory.Packages.props + <_DirectoryPackagesPropsBasePath Condition="'$(_DirectoryPackagesPropsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildProjectDirectory)', '$(_DirectoryPackagesPropsFile)')) + $([MSBuild]::NormalizePath('$(_DirectoryPackagesPropsBasePath)', '$(_DirectoryPackagesPropsFile)')) + + + + true + 8.0.22 + 9.0.11 + 10.0.3 + 10.3.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + true + true + true + true + true + true + true + true + true + true + true + true + true + + + + + + + true + + + + Debug;Release + AnyCPU + Debug + AnyCPU + + + + + true + + + + Library + 512 + prompt + $(MSBuildProjectName) + $(MSBuildProjectName.Replace(" ", "_")) + true + + + + true + false + + + true + + + + + <_PlatformWithoutConfigurationInference>$(Platform) + + + x64 + + + x86 + + + ARM + + + arm64 + + + + + {CandidateAssemblyFiles} + $(AssemblySearchPaths);{HintPathFromItem} + $(AssemblySearchPaths);{TargetFrameworkDirectory} + $(AssemblySearchPaths);{RawFileName} + + + None + portable + + false + + true + true + + PackageReference + $(AssemblySearchPaths) + false + false + false + false + false + false + + false + false + false + false + true + 1.0.3 + false + true + true + + + + <_ImplicitFileBasedProgramUserSecretsId Condition="'$(FileBasedProgram)' == 'true'">$(MSBuildProjectName)-$([MSBuild]::StableStringHash($(MSBuildProjectFullPath.ToLowerInvariant()), 'Sha256')) + $(_ImplicitFileBasedProgramUserSecretsId) + + + + $(MSBuildThisFileDirectory)GenerateDeps\GenerateDeps.proj + + + + + + $(MSBuildThisFileDirectory)..\..\..\Microsoft.NETCoreSdk.BundledVersions.props + + + + + $([MSBuild]::NormalizePath('$(MSBuildThisFileDirectory)../../')) + $([MSBuild]::EnsureTrailingSlash('$(NetCoreRoot)'))packs + $([MSBuild]::EnsureTrailingSlash('$(MSBuildThisFileDirectory)'))PrunePackageData + <_NetFrameworkHostedCompilersVersion>5.0.0-2.25612.105 + 10.0 + 10.0 + 10.0.2 + 2.1 + 2.1.0 + 10.0.2-servicing.25612.105 + $(MSBuildThisFileDirectory)RuntimeIdentifierGraph.json + 10.0.102 + 10.0.100 + linux-x64 + linux-x64 + <_NETCoreSdkIsPreview>false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_KnownRuntimeIdentiferPlatforms Include="any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix" /> + <_ExcludedKnownRuntimeIdentiferPlatforms Include="rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0" /> + + + + $(MSBuildThisFileDirectory)..\..\..\Microsoft.NETCoreSdk.BundledMSBuildInformation.props + + + + + 17.14.0 + 18.0.7 + <_MSBuildVersionMajorMinor>$([System.Version]::Parse('$(MSBuildVersion)').ToString(2)) + <_IsDisjointMSBuildVersion>$([MSBuild]::VersionLessThan('$(_MSBuildVersionMajorMinor)', '18.0')) + + + + + false + + + <__WindowsAppSdkDefaultImageIncludes>**/*.png;**/*.bmp;**/*.jpg;**/*.dds;**/*.tif;**/*.tga;**/*.gif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <__DisableWorkloadResolverSentinelPath Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildBinPath)\DisableWorkloadResolver.sentinel + <__DisableWorkloadResolverSentinelPath Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildToolsPath32)\SdkResolvers\Microsoft.DotNet.MSBuildSdkResolver\DisableWorkloadResolver.sentinel + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $([MSBuild]::Add($(NETCoreAppMaximumVersion), 1)).0 + 17.16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_NormalizedWindowsSdkSupportedTargetPlatformVersion Include="@(WindowsSdkSupportedTargetPlatformVersion)"> + $([System.Text.RegularExpressions.Regex]::Replace(%(Identity), '^((\d+\.){3})1$', '${1}0')) + + + + + + + + + true + <_SourceLinkPropsImported>true + + + + + + $(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.Build.Tasks.Git.dll + $(MSBuildThisFileDirectory)..\tools\net\Microsoft.Build.Tasks.Git.dll + + + + + + <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.Common.dll + <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.Common.dll + + + + true + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1701;1702 + + $(WarningsAsErrors);NU1605 + + + $(DefineConstants); + $(DefineConstants)TRACE + + + + + + + + + + + + + + + + + + + + + + + + $(TargetsForTfmSpecificContentInPackage);_PackProjectToolValidation + + + + + + MSBuild:Compile + $(DefaultXamlRuntime) + Designer + + + MSBuild:Compile + $(DefaultXamlRuntime) + Designer + + + + + + + + + + + + + + + + + + <_WpfCommonNetFxReference Include="WindowsBase" /> + <_WpfCommonNetFxReference Include="PresentationCore" /> + <_WpfCommonNetFxReference Include="PresentationFramework" /> + <_WpfCommonNetFxReference Include="System.Xaml" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'"> + 4.0 + + <_WpfCommonNetFxReference Include="UIAutomationClient" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="UIAutomationClientSideProviders" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="UIAutomationProvider" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="UIAutomationTypes" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="System.Windows.Controls.Ribbon" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.5'" /> + + + <_SDKImplicitReference Include="@(_WpfCommonNetFxReference)" Condition="'$(UseWPF)' == 'true'" /> + <_SDKImplicitReference Include="System.Windows.Forms" Condition="('$(UseWindowsForms)' == 'true') " /> + <_SDKImplicitReference Include="WindowsFormsIntegration" Condition=" ('$(UseWindowsForms)' == 'true') And ('$(UseWPF)' == 'true') " /> + + + + + + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v1.0" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v1.1" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.0" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.1" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.2" /> + + <_UnsupportedNETStandardTargetFramework Include="@(SupportedNETStandardTargetFramework)" /> + + <_UnsupportedNETFrameworkTargetFramework Include=".NETFramework,Version=v2.0" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + <_TargetFrameworkVersionValue>0.0 + <_WindowsDesktopSdkTargetFrameworkVersionFloor>3.0 + + + + + + + + net10.0;net9.0;net8.0;netstandard2.0 + true + true + ModelContextProtocol.Core + Core .NET SDK for the Model Context Protocol (MCP) + README.md + + $(NoWarn);MCPEXP001 + + + true + + + + $(NoWarn);CS0436 + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + Debug + AnyCPU + $(Platform) + + + + + 1.0.0 + $(VersionPrefix)-$(VersionSuffix) + $(VersionPrefix) + + + $(AssemblyName) + $(Authors) + $(AssemblyName) + $(AssemblyName) + + + + + + + + true + false + true + <_PlatformToAppendToOutputPath Condition="'$(AppendPlatformToOutputPath)' == 'true'">$(PlatformName)\ + + + + + + + + <_DefaultArtifactsPathPropsImported>true + + + + true + true + <_ArtifactsPathLocationType>ExplicitlySpecified + + + + + $(_DirectoryBuildPropsBasePath)\artifacts + true + <_ArtifactsPathLocationType>DirectoryBuildPropsFolder + + + + $(MSBuildProjectDirectory)\artifacts + <_ArtifactsPathLocationType>ProjectFolder + + + + $(MSBuildProjectName) + bin + publish + package + + true + + + $(Configuration.ToLowerInvariant()) + + $(ArtifactsPivots)_$(TargetFramework.ToLowerInvariant()) + + $(ArtifactsPivots)_$(RuntimeIdentifier.ToLowerInvariant()) + + + + $(ArtifactsPath)\$(ArtifactsBinOutputName)\$(ArtifactsProjectName)\ + $(ArtifactsPath)\obj\$(ArtifactsProjectName)\ + $(ArtifactsPath)\$(ArtifactsPublishOutputName)\$(ArtifactsProjectName)\$(ArtifactsPivots)\ + + + + $(ArtifactsPath)\$(ArtifactsBinOutputName)\ + $(ArtifactsPath)\obj\ + $(ArtifactsPath)\$(ArtifactsPublishOutputName)\$(ArtifactsPivots)\ + + + $(BaseOutputPath)$(ArtifactsPivots)\ + $(BaseIntermediateOutputPath)$(ArtifactsPivots)\ + + $(ArtifactsPath)\$(ArtifactsPackageOutputName)\$(Configuration.ToLowerInvariant())\ + + + bin\ + $(BaseOutputPath)\ + $(BaseOutputPath)$(_PlatformToAppendToOutputPath)$(Configuration)\ + $(OutputPath)\ + + + + obj\ + $(BaseIntermediateOutputPath)\ + $(BaseIntermediateOutputPath)$(_PlatformToAppendToOutputPath)$(Configuration)\ + $(IntermediateOutputPath)\ + + + + $(OutputPath) + + + + $(DefaultItemExcludes);$(OutputPath)/** + $(DefaultItemExcludes);$(IntermediateOutputPath)/** + + + $(DefaultItemExcludes);$(ArtifactsPath)/** + + $(DefaultItemExcludes);bin/**;obj/** + + + + $(OutputPath)$(TargetFramework.ToLowerInvariant())\ + + + $(IntermediateOutputPath)$(TargetFramework.ToLowerInvariant())\ + + + + + + + + + + + + + + + + + + + + $(MSBuildToolsPath)\Microsoft.CSharp.targets + $(MSBuildToolsPath)\Microsoft.VisualBasic.targets + $(MSBuildThisFileDirectory)..\targets\Microsoft.NET.Sdk.FSharpTargetsShim.targets + + $(MSBuildToolsPath)\Microsoft.Common.targets + + + + + + + + $(MSBuildToolsPath)\Microsoft.CSharp.CrossTargeting.targets + + + + + $(MSBuildToolsPath)\Microsoft.CSharp.CurrentVersion.targets + + + + + + + + true + + + + + + + + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed\Microsoft.CSharp.DesignTime.targets + + + + + + true + true + + + + + + + + + + + <_ThisProjectBuildMetadata Include="$(MSBuildProjectFullPath)"> + @(_TargetFrameworkInfo) + @(_TargetFrameworkInfo->'%(TargetFrameworkMonikers)') + @(_TargetFrameworkInfo->'%(TargetPlatformMonikers)') + $(_AdditionalPropertiesFromProject) + false + @(_TargetFrameworkInfo->'%(IsRidAgnostic)') + + + false + $(Platform) + $(Platforms) + + + + + + <_TargetFramework Include="$(TargetFrameworks)" /> + + <_TargetFrameworkNormalized Include="@(_TargetFramework->Trim()->Distinct())" /> + <_InnerBuildProjects Include="$(MSBuildProjectFile)"> + TargetFramework=%(_TargetFrameworkNormalized.Identity) + + + + + + + + + + + + true + + + + + + + + + + + + + Build + + + + + + + + + + + + $([MSBuild]::IsRunningFromVisualStudio()) + $([MSBuild]::GetToolsDirectory32())\..\..\..\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets + $(MSBuildToolsPath)\NuGet.targets + + + + + + true + + NuGet.Build.Tasks.dll + + false + + true + true + + false + + WarnAndContinue + + $(BuildInParallel) + true + + <_RestoreSolutionFileUsed Condition=" '$(_RestoreSolutionFileUsed)' == '' AND '$(SolutionDir)' != '' AND $(MSBuildProjectFullPath.EndsWith('.metaproj')) == 'true' ">true + + $(MSBuildInteractive) + + true + + true + + <_CentralPackageVersionsEnabled Condition="'$(ManagePackageVersionsCentrally)' == 'true' AND '$(CentralPackageVersionsFileImported)' == 'true'">true + + + + + true + + low + + all + direct + + + + + true + false + true + false + + + + <_GenerateRestoreGraphProjectEntryInputProperties>ExcludeRestorePackageImports=true + + <_GenerateRestoreGraphProjectEntryInputProperties Condition=" '$(RestoreUseCustomAfterTargets)' == 'true' "> + $(_GenerateRestoreGraphProjectEntryInputProperties); + NuGetRestoreTargets=$(MSBuildThisFileFullPath); + RestoreUseCustomAfterTargets=$(RestoreUseCustomAfterTargets); + CustomAfterMicrosoftCommonCrossTargetingTargets=$(MSBuildThisFileFullPath); + CustomAfterMicrosoftCommonTargets=$(MSBuildThisFileFullPath); + + + <_GenerateRestoreGraphProjectEntryInputProperties Condition=" '$(_RestoreSolutionFileUsed)' == 'true' "> + $(_GenerateRestoreGraphProjectEntryInputProperties); + _RestoreSolutionFileUsed=true; + SolutionDir=$(SolutionDir); + SolutionName=$(SolutionName); + SolutionFileName=$(SolutionFileName); + SolutionPath=$(SolutionPath); + SolutionExt=$(SolutionExt); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + <_FrameworkReferenceForRestore Include="@(FrameworkReference)" Condition="'%(FrameworkReference.IsTransitiveFrameworkReference)' != 'true'" /> + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + exclusionlist + + + + <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" Condition=" '%(RestoreGraphProjectInputItems.Extension)' == '.csproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.vbproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.fsproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.nuproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.proj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.msbuildproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.vcxproj' " /> + + + + <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" Condition=" '%(RestoreGraphProjectInputItems.Extension)' != '.metaproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '.shproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '.vcxitems' AND '%(RestoreGraphProjectInputItems.Extension)' != '.vdproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '' " /> + + + + <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" /> + + + + + + + + + + + + + + + + + + + + + + + + <_GenerateRestoreGraphProjectEntryInput Include="@(FilteredRestoreGraphProjectInputItems)" Condition=" '$(RestoreRecursive)' != 'true' " /> + <_GenerateRestoreGraphProjectEntryInput Include="@(_RestoreProjectPathItems)" Condition=" '$(RestoreRecursive)' == 'true' " /> + + + + + + + + + + + + + + + + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())" Condition=" '$(RestoreProjectStyle)' != 'Unknown' "> + RestoreSpec + $(MSBuildProjectFullPath) + + + + + + + netcoreapp1.0 + + + + + + + + + + + <_HasPackageReferenceItems Condition="'@(PackageReference)' != ''">true + + + <_HasPackageReferenceItems Condition="@(PackageReference->Count()) > 0">true + + + + + + + <_HasPackageReferenceItems /> + + + + + + true + + + + + + <_RestoreProjectFramework /> + <_TargetFrameworkToBeUsed Condition=" '$(_TargetFrameworkOverride)' == '' ">$(TargetFrameworks) + + + + + + <_RestoreTargetFrameworksOutputFiltered Include="$(_RestoreProjectFramework.Split(';'))" /> + + + + + + <_RestoreTargetFrameworkItems Include="$(TargetFrameworks.Split(';'))" /> + + + <_RestoreTargetFrameworkItems Include="$(_TargetFrameworkOverride)" /> + + + + + + $(SolutionDir) + + + + + + + + + + + + + + + + + + + + + + + <_RestoreSettingsPerFramework Include="$([System.Guid]::NewGuid())"> + $(RestoreAdditionalProjectSources) + $(RestoreAdditionalProjectFallbackFolders) + $(RestoreAdditionalProjectFallbackFoldersExcludes) + + + + + + + + $(MSBuildProjectExtensionsPath) + + + + + + + <_RestoreProjectName>$(MSBuildProjectName) + <_RestoreProjectName Condition=" '$(PackageReferenceCompatibleProjectStyle)' == 'true' AND '$(AssemblyName)' != '' ">$(AssemblyName) + <_RestoreProjectName Condition=" '$(PackageReferenceCompatibleProjectStyle)' == 'true' AND '$(PackageId)' != '' ">$(PackageId) + + + + <_RestoreProjectVersion>1.0.0 + <_RestoreProjectVersion Condition=" '$(Version)' != '' ">$(Version) + <_RestoreProjectVersion Condition=" '$(PackageVersion)' != '' ">$(PackageVersion) + + + + <_RestoreCrossTargeting>true + + + + <_RestoreSkipContentFileWrite Condition=" '$(TargetFrameworks)' == '' AND '$(TargetFramework)' == '' ">true + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + ProjectSpec + $(_RestoreProjectVersion) + $(MSBuildProjectFullPath) + $(MSBuildProjectFullPath) + $(_RestoreProjectName) + $(_OutputSources) + $(_OutputFallbackFolders) + $(_OutputPackagesPath) + $(RestoreProjectStyle) + $(RestoreOutputAbsolutePath) + $(RuntimeIdentifiers);$(RuntimeIdentifier) + $(RuntimeSupports) + $(_RestoreCrossTargeting) + $(RestoreLegacyPackagesDirectory) + $(ValidateRuntimeIdentifierCompatibility) + $(_RestoreSkipContentFileWrite) + $(_OutputConfigFilePaths) + $(TreatWarningsAsErrors) + $(WarningsAsErrors) + $(WarningsNotAsErrors) + $(NoWarn) + $(RestorePackagesWithLockFile) + $(NuGetLockFilePath) + $(RestoreLockedMode) + <_CentralPackageVersionsEnabled>$(_CentralPackageVersionsEnabled) + $(CentralPackageFloatingVersionsEnabled) + $(CentralPackageVersionOverrideEnabled) + $(CentralPackageTransitivePinningEnabled) + $(NuGetAudit) + $(NuGetAuditLevel) + $(NuGetAuditMode) + $(SdkAnalysisLevel) + $(UsingMicrosoftNETSdk) + $(RestoreUseLegacyDependencyResolver) + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + ProjectSpec + $(MSBuildProjectFullPath) + $(MSBuildProjectFullPath) + $(_RestoreProjectName) + $(RestoreProjectStyle) + $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config + $(MSBuildProjectDirectory)\packages.config + $(RestorePackagesWithLockFile) + $(NuGetLockFilePath) + $(RestoreLockedMode) + $(_OutputSources) + $(SolutionDir) + $(_OutputRepositoryPath) + $(_OutputConfigFilePaths) + $(_OutputPackagesPath) + @(_RestoreTargetFrameworksOutputFiltered) + $(NuGetAudit) + $(NuGetAuditLevel) + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + ProjectSpec + $(MSBuildProjectFullPath) + $(MSBuildProjectFullPath) + $(_RestoreProjectName) + $(RestoreProjectStyle) + @(_RestoreTargetFrameworksOutputFiltered) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + TargetFrameworkInformation + $(MSBuildProjectFullPath) + $(PackageTargetFallback) + $(AssetTargetFallback) + $(TargetFramework) + $(TargetFrameworkIdentifier) + $(TargetFrameworkVersion) + $(TargetFrameworkMoniker) + $(TargetFrameworkProfile) + $(TargetPlatformMoniker) + $(TargetPlatformIdentifier) + $(TargetPlatformVersion) + $(TargetPlatformMinVersion) + $(CLRSupport) + $(RuntimeIdentifierGraphPath) + $(WindowsTargetPlatformMinVersion) + $(RestoreEnablePackagePruning) + $(RestorePackagePruningDefault) + $(NuGetAuditMode) + + + + + + + + + + + + + <_RestoreProjectPathItems Include="$(_RestoreGraphAbsoluteProjectPaths)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_GenerateRestoreProjectPathWalkOutputs Include="$(MSBuildProjectFullPath)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_RestorePackagesPathOverride>$(RestorePackagesPath) + + + + + + <_RestorePackagesPathOverride>$(RestoreRepositoryPath) + + + + + + <_RestoreSourcesOverride>$(RestoreSources) + + + + + + <_RestoreFallbackFoldersOverride>$(RestoreFallbackFolders) + + + + + + + + + + + + + <_TargetFrameworkOverride Condition=" '$(TargetFrameworks)' == '' ">$(TargetFramework) + + + + + + <_ValidProjectsForRestore Include="$(MSBuildProjectFullPath)" /> + + + + + + + + + true + + + + + $(MSBuildExtensionsPath)\Microsoft.TestPlatform.Build.dll + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + + + + + + <_TestTfmsInParallel>$([MSBuild]::ValueOrDefault('$(TestTfmsInParallel)', '$(BuildInParallel)')) + + + <_TargetFramework Include="$(TargetFrameworks)" /> + <_ProjectToTestWithTFM Include="$(MSBuildProjectFile)" Properties="TargetFramework=%(_TargetFramework.Identity);VSTestNoBuild=true" /> + + + + + + + + + + + + + + + + + + + VSTest + + + + + + + + + + + false + true + + + + + + + + + + + + + + + + + + + + $(RepositoryUrl) + $(ScmRepositoryUrl) + + + + %(SourceRoot.ScmRepositoryUrl) + + + + + + + + true + + + + + + + + + + + local + + + + + + + + + + + git + + + + + + + + + + + + + + + + <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\net472\Microsoft.SourceLink.GitHub.dll + <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\core\Microsoft.SourceLink.GitHub.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeGitHubSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateGitHubUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + <_DirectoryBuildTargetsFile Condition="'$(_DirectoryBuildTargetsFile)' == ''">Directory.Build.targets + <_DirectoryBuildTargetsBasePath Condition="'$(_DirectoryBuildTargetsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), '$(_DirectoryBuildTargetsFile)')) + $([System.IO.Path]::Combine('$(_DirectoryBuildTargetsBasePath)', '$(_DirectoryBuildTargetsFile)')) + + + + false + + + + + + + + + TargetFramework + TargetFrameworks + + + true + + + + + + + + + <_MainReferenceTargetForBuild Condition="'$(BuildProjectReferences)' == '' or '$(BuildProjectReferences)' == 'true'">.projectReferenceTargetsOrDefaultTargets + <_MainReferenceTargetForBuild Condition="'$(_MainReferenceTargetForBuild)' == ''">GetTargetPath + $(_MainReferenceTargetForBuild);GetNativeManifest;$(_RecursiveTargetForContentCopying);$(ProjectReferenceTargetsForBuild) + + <_MainReferenceTargetForPublish Condition="'$(NoBuild)' == 'true'">GetTargetPath + <_MainReferenceTargetForPublish Condition="'$(NoBuild)' != 'true'">$(_MainReferenceTargetForBuild) + GetTargetFrameworks;$(_MainReferenceTargetForPublish);GetNativeManifest;GetCopyToPublishDirectoryItems;$(ProjectReferenceTargetsForPublish) + + $(ProjectReferenceTargetsForBuild);$(ProjectReferenceTargetsForPublish) + $(ProjectReferenceTargetsForRebuild);$(ProjectReferenceTargetsForPublish) + GetCopyToPublishDirectoryItems;$(ProjectReferenceTargetsForGetCopyToPublishDirectoryItems) + + + .default;$(ProjectReferenceTargetsForBuild) + + + Clean;$(ProjectReferenceTargetsForClean) + $(ProjectReferenceTargetsForClean);$(ProjectReferenceTargetsForBuild);$(ProjectReferenceTargetsForRebuild) + + + + + + + + + + + + + + + + + + + + + + + + + $(MSBuildThisFileDirectory)..\tools\ + net10.0 + net472 + $(MicrosoftNETBuildTasksDirectoryRoot)$(MicrosoftNETBuildTasksTFM)\ + $(MicrosoftNETBuildTasksDirectory)Microsoft.NET.Build.Tasks.dll + + Microsoft.NETCore.App;NETStandard.Library + + + + <_IsExecutable Condition="'$(OutputType)' == 'Exe' or '$(OutputType)'=='WinExe'">true + $(_IsExecutable) + + + + netcoreapp2.2 + + + Preview + + + + + + + $(NuGetPackageRoot)\microsoft.net.sdk.compilers.toolset\$(NETCoreSdkVersion) + $(RoslynTargetsPath)\Microsoft.Build.Tasks.CodeAnalysis.dll + <_NeedToDownloadMicrosoftNetSdkCompilersToolsetPackage>true + <_MicrosoftNetSdkCompilersToolsetPackageRootEmpty Condition="'$(NuGetPackageRoot)' == ''">true + + + + + + + + + <_SourceLinkSdkSubDir>build + <_SourceLinkSdkSubDir Condition="'$(IsCrossTargetingBuild)' == 'true'">buildMultiTargeting + + true + + + + + + + + local + + + + + + + + + + + + git + + + + + + + + + + + + + + + + + + + + + + + + + + $(RepositoryUrl) + $(ScmRepositoryUrl) + + + + %(SourceRoot.ScmRepositoryUrl) + + + + + + + + true + + + + + + <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.GitHub.dll + <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.GitHub.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeGitHubSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateGitHubUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + <_SourceLinkGitLabAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.GitLab.dll + <_SourceLinkGitLabAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.GitLab.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeGitLabSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateGitLabUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + <_SourceLinkAzureReposGitAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.AzureRepos.Git.dll + <_SourceLinkAzureReposGitAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.AzureRepos.Git.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeAzureReposGitSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateAzureReposGitUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + <_SourceLinkBitbucketAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.Bitbucket.Git.dll + <_SourceLinkBitbucketAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.Bitbucket.Git.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeBitbucketGitSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateBitbucketGitUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + + + + <_PublishTargetFrameworks Include="$(TargetFrameworks)" /> + + + + + + + <_GetAllRuntimeIdentifiersTargetFrameworks Include="$(TargetFrameworks)" /> + <_AllRuntimeIdentifiers Include="$(RuntimeIdentifiers);$(RuntimeIdentifier)" /> + + + + + + @(_AllRuntimeIdentifiers->Distinct()) + + + + + + + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + $([System.IO.Path]::GetDirectoryName($(BundledRuntimeIdentifierGraphFile)))/PortableRuntimeIdentifierGraph.json + + + + + + + $(MSBuildThisFileDirectory)..\tools\net472\Microsoft.DotNet.ApiCompat.Task.dll + $(MSBuildThisFileDirectory)..\tools\net10.0\Microsoft.DotNet.ApiCompat.Task.dll + + + + + + + + + + + + + + <_UseRoslynToolsetPackage Condition="'$(ApiCompatUseRoslynToolsetPackagePath)' == 'true' and '@(PackageReference->AnyHaveMetadataValue('Identity', 'Microsoft.Net.Compilers.Toolset'))' == 'true'">true + + $([System.IO.Path]::GetDirectoryName('$(CSharpCoreTargetsPath)')) + + $(RoslynTargetsPath) + + $([System.IO.Path]::Combine('$(RoslynAssembliesPath)', 'bincore')) + + + + $(GenerateCompatibilitySuppressionFile) + + + + + + + <_apiCompatDefaultProjectSuppressionFile>$([MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', 'CompatibilitySuppressions.xml')) + + $(_apiCompatDefaultProjectSuppressionFile) + + + + + + + + + + + <_ApiCompatValidatePackageSemaphoreFile>$(IntermediateOutputPath)$(MSBuildThisFileName).semaphore + + CollectApiCompatInputs;_GetReferencePathFromInnerProjects;$(RunPackageValidationDependsOn) + + + + $(PackageId) + $([MSBuild]::NormalizePath('$(NuGetPackageRoot)', '$(PackageValidationBaselineName.ToLower())', '$(PackageValidationBaselineVersion)', '$(PackageValidationBaselineName.ToLower()).$(PackageValidationBaselineVersion).nupkg')) + <_packageValidationBaselinePath Condition="'$(DisablePackageBaselineValidation)' != 'true'">$(PackageValidationBaselinePath) + + + <_PackageTargetPath Include="@(NuGetPackOutput->WithMetadataValue('Extension', '.nupkg'))" Condition="!$([System.String]::new('%(Identity)').EndsWith('.symbols.nupkg'))" /> + + + + + + + + + + $(TargetPlatformMoniker) + + + + + + + + + + + + + + + $(MSBuildThisFileDirectory)..\..\..\NuGet.Build.Tasks.Pack.targets + true + + + + + + Sdks\Microsoft.NET.Sdk\tools\net472\NuGet.Build.Tasks.Pack.dll + NuGet.Build.Tasks.Pack.dll + + + + + + + + + $(AssemblyName) + $(Version) + true + _LoadPackInputItems; _GetTargetFrameworksOutput; _WalkEachTargetPerFramework; _GetPackageFiles; $(GenerateNuspecDependsOn) + $(Description) + Package Description + false + true + true + tools + lib + content;contentFiles + $(BeforePack); _GetRestoreProjectStyle; _IntermediatePack; GenerateNuspec; $(PackDependsOn) + true + symbols.nupkg + DeterminePortableBuildCapabilities + false + false + .dll; .exe; .winmd; .json; .pri; .xml + $(DefaultAllowedOutputExtensionsInPackageBuildOutputFolder) ;$(AllowedOutputExtensionsInPackageBuildOutputFolder) + .pdb; .mdb; $(AllowedOutputExtensionsInPackageBuildOutputFolder); $(AllowedOutputExtensionsInSymbolsPackageBuildOutputFolder) + .pdb + false + + + $(GenerateNuspecDependsOn) + + + Build;$(GenerateNuspecDependsOn) + + + + + + + $(TargetFramework) + + + + $(MSBuildProjectExtensionsPath) + $(BaseOutputPath)$(Configuration)\ + $(BaseIntermediateOutputPath)$(Configuration)\ + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFrameworks /> + + + + + + <_TargetFrameworks Include="$(_ProjectFrameworks.Split(';'))" /> + + + + + + + <_PackageFilesToDelete Include="@(_OutputPackItems)" /> + + + + + + false + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + $(PrivateRepositoryUrl) + $(SourceRevisionId) + $(SourceBranchName) + + + + + + + $(MSBuildProjectFullPath) + + + + + + + + + + + + + + + + + <_ProjectPathWithVersion Include="$(MSBuildProjectFullPath)"> + $(PackageVersion) + 1.0.0 + + + + + + <_ProjectsWithTFM Include="$(MSBuildProjectFullPath)" AdditionalProperties="TargetFramework=%(_TargetFrameworks.Identity)" /> + <_ProjectsWithTFMNoBuild Include="$(MSBuildProjectFullPath)" AdditionalProperties="TargetFramework=%(_TargetFrameworks.Identity);BuildProjectReferences=false" /> + + + + + + + + + + + + + + + + + + + + + + + <_TfmWithDependenciesSuppressed Include="$(TargetFramework)" Condition="'$(SuppressDependenciesWhenPacking)' == 'true'" /> + + + + + + $(TargetFramework) + + + + + + + + + + + + + %(TfmSpecificPackageFile.RecursiveDir) + %(TfmSpecificPackageFile.BuildAction) + + + + + + <_TargetPathsToSymbolsWithTfm Include="@(DebugSymbolsProjectOutputGroupOutput)"> + $(TargetFramework) + + + + <_TargetPathsToSymbolsWithTfm Include="@(TfmSpecificDebugSymbolsFile)" /> + + + + + + <_PathToPriFile Include="$(ProjectPriFullPath)"> + $(ProjectPriFullPath) + $(ProjectPriFileName) + + + + + + + <_PackageFilesToExclude Include="@(Content)" Condition="'%(Content.Pack)' == 'false'" /> + + + + <_PackageFiles Include="@(Content)" Condition=" %(Content.Pack) != 'false' "> + Content + + <_PackageFiles Include="@(Compile)" Condition=" %(Compile.Pack) == 'true' "> + Compile + + <_PackageFiles Include="@(None)" Condition=" %(None.Pack) == 'true' "> + None + + <_PackageFiles Include="@(EmbeddedResource)" Condition=" %(EmbeddedResource.Pack) == 'true' "> + EmbeddedResource + + <_PackageFiles Include="@(ApplicationDefinition)" Condition=" %(ApplicationDefinition.Pack) == 'true' "> + ApplicationDefinition + + <_PackageFiles Include="@(Page)" Condition=" %(Page.Pack) == 'true' "> + Page + + <_PackageFiles Include="@(Resource)" Condition=" %(Resource.Pack) == 'true' "> + Resource + + <_PackageFiles Include="@(SplashScreen)" Condition=" %(SplashScreen.Pack) == 'true' "> + SplashScreen + + <_PackageFiles Include="@(DesignData)" Condition=" %(DesignData.Pack) == 'true' "> + DesignData + + <_PackageFiles Include="@(DesignDataWithDesignTimeCreatableTypes)" Condition=" %(DesignDataWithDesignTimeCreatableTypes.Pack) == 'true' "> + DesignDataWithDesignTimeCreatableTypes + + <_PackageFiles Include="@(CodeAnalysisDictionary)" Condition=" %(CodeAnalysisDictionary.Pack) == 'true' "> + CodeAnalysisDictionary + + <_PackageFiles Include="@(AndroidAsset)" Condition=" %(AndroidAsset.Pack) == 'true' "> + AndroidAsset + + <_PackageFiles Include="@(AndroidResource)" Condition=" %(AndroidResource.Pack) == 'true' "> + AndroidResource + + <_PackageFiles Include="@(BundleResource)" Condition=" %(BundleResource.Pack) == 'true' "> + BundleResource + + + + + + + <_IsNotSetContainersTargetsDir>false + <_IsNotSetContainersTargetsDir Condition=" '$(_ContainersTargetsDir)'=='' ">true + <_ContainersTargetsDir Condition="$(_IsNotSetContainersTargetsDir)">$(MSBuildThisFileDirectory)..\..\..\Containers\build\ + + + + + true + tasks + net10.0 + net472 + containerize + + $(MSBuildThisFileDirectory)..\$(ContainerTaskFolderName)\$(ContainerTaskFramework)\ + $(MSBuildThisFileDirectory)..\$(ContainerizeFolderName)\ + + $(ContainerCustomTasksFolder)$(MSBuildThisFileName).dll + + + + + + + + + + <_IsSDKContainerAllowedVersion>false + + <_IsSDKContainerAllowedVersion Condition="$([MSBuild]::VersionGreaterThan($(NetCoreSdkVersion), 7.0.100)) OR ( $([MSBuild]::VersionEquals($(NetCoreSdkVersion), 7.0.100)) AND ( $(NETCoreSdkVersion.Contains('-preview.7')) OR $(NETCoreSdkVersion.Contains('-rc')) OR $(NETCoreSdkVersion.Contains('-')) == false ) )">true + <_ContainerIsTargetingNet8TFM>false + <_ContainerIsTargetingNet8TFM Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' And $([MSBuild]::VersionGreaterThanOrEquals($(_TargetFrameworkVersionWithoutV), '8.0'))">true + <_ContainerIsSelfContained>false + <_ContainerIsSelfContained Condition="'$(SelfContained)' == 'true' or '$(PublishSelfContained)' == 'true'">true + true + + + + + + + + + + + + $(RuntimeIdentifier) + $(RuntimeIdentifiers) + linux-$(NETCoreSdkPortableRuntimeIdentifier.Split('-')[1]) + + <_InitialContainerBaseImage>$(ContainerBaseImage) + + + <_TargetRuntimeIdentifiers Include="$(ContainerRuntimeIdentifier)" Condition="'$(ContainerRuntimeIdentifier)' != ''" /> + <_TargetRuntimeIdentifiers Include="$(ContainerRuntimeIdentifiers)" Condition="@(_TargetRuntimeIdentifiers->Count()) == 0" /> + + + + + + <_TargetRuntimeIdentifiers Remove="$(_TargetRuntimeIdentifiers)" /> + + + + + + + $(RegistryUrl) + + $(PublishImageTag) + + $([System.DateTime]::UtcNow.ToString('yyyyMMddhhmmss')) + + + + + + + + + + + $(ContainerImageName) + + $(AssemblyName) + + latest + $([System.DateTime]::UtcNow.ToString('yyyyMMddhhmmss')) + + + + + + + + + + + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + $(Description) + $(Authors) + $(PackageProjectUrl) + $(PackageProjectUrl) + $(PackageVersion) + $(PackageLicenseExpression) + $(Title) + + + + + + + + + + + + + + + + + + + + + + <_TrimmedRepositoryUrl Condition="'$(RepositoryType)' == 'git' and '$(PrivateRepositoryUrl)' != '' and $(PrivateRepositoryUrl.EndsWith('.git'))">$(PrivateRepositoryUrl.Substring(0, $(PrivateRepositoryUrl.LastIndexOf('.git')))) + <_TrimmedRepositoryUrl Condition="'$(_TrimmedRepositoryUrl)' == '' and '$(PrivateRepositoryUrl)' != ''">$(PrivateRepositoryUrl) + + + + + + + + + _ContainerVerifySDKVersion; + ComputeContainerConfig; + _CheckContainersPackage; + + + + + + + <_ContainerIsTargetingWindows>false + <_ContainerIsTargetingWindows Condition="$(ContainerRuntimeIdentifier.StartsWith('win'))">true + + /app/ + C:\app\ + <_ContainerIsUsingMicrosoftDefaultImages Condition="'$(_InitialContainerBaseImage)' == ''">true + <_ContainerIsUsingMicrosoftDefaultImages Condition="'$(_InitialContainerBaseImage)' != ''">false + + + + ContainerUser + + + + + + + + + + + + <_ContainersPackageIdentity>Microsoft.NET.Build.Containers + <_WebDefaultSdkVersion>7.0.300 + <_WorkerDefaultSdkVersion>8.0.100 + <_ConsoleDefaultSdkVersion>8.0.200 + + <_SdkCanPublishWeb>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_WebDefaultSdkVersion)')) + <_SdkCanPublishWorker>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_WorkerDefaultSdkVersion)')) + <_SdkCanPublishConsole>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_ConsoleDefaultSdkVersion)')) + + <_ContainerPackageIsPresent>false + <_ContainerPackageIsPresent Condition="@(PackageReference->AnyHaveMetadataValue('Identity', '$(_ContainersPackageIdentity)'))">true + <_IsWebProject>false + <_IsWebProject Condition="@(ProjectCapability->AnyHaveMetadataValue('Identity', 'DotNetCoreWeb'))">true + <_IsWorkerProject>false + <_IsWorkerProject Condition="@(ProjectCapability->AnyHaveMetadataValue('Identity', 'DotNetCoreWorker'))">true + + + + + + + $(NetCoreRoot) + dotnet + dotnet.exe + + + + + + + + + + + + + + $(GeneratedContainerManifest) + $(GeneratedContainerConfiguration) + $(GeneratedContainerDigest) + $(GeneratedContainerMediaType) + + + + + + + + + <_SkipContainerPublishing>false + <_SkipContainerPublishing Condition="$(ContainerArchiveOutputPath) != '' or ( $(ContainerRegistry) == '' and ( $(LocalRegistry) == '' or $(LocalRegistry) == 'Docker' ) )">true + + <_SkipCreateImageIndex>false + <_SkipCreateImageIndex Condition="$(ContainerArchiveOutputPath) == '' and $(ContainerRegistry) == '' and $(LocalRegistry) == 'Podman'">true + + + <_SingleImageContainerFormat Condition="'$(ContainerImageFormat)' != ''">$(ContainerImageFormat) + + <_SingleImageContainerFormat Condition="$(_SkipContainerPublishing) == 'true' ">OCI + + + <_rids Include="$(ContainerRuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' != ''" /> + <_rids Include="$(RuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' == '' and '$(RuntimeIdentifiers)' != ''" /> + <_InnerBuild Include="$(MSBuildProjectFullPath)" AdditionalProperties=" ContainerRuntimeIdentifier=%(_rids.Identity); RuntimeIdentifier=%(_rids.Identity); ContainerBaseRegistry=$(ContainerBaseRegistry); ContainerBaseName=$(ContainerBaseName); ContainerBaseTag=$(ContainerBaseTag); ContainerBaseDigest=$(ContainerBaseDigest); ContainerRegistry=$(ContainerRegistry); _ContainerImageTags=@(ContainerImageTags, ';'); ContainerRepository=$(ContainerRepository); _ContainerLabel=@(ContainerLabel->'%(Identity):%(Value)'); _ContainerPort=@(ContainerPort->'%(Identity):%(Type)'); _ContainerEnvironmentVariables=@(ContainerEnvironmentVariable->'%(Identity):%(Value)'); ContainerGenerateLabels=$(ContainerGenerateLabels); ContainerGenerateLabelsImageBaseDigest=$(ContainerGenerateLabelsImageBaseDigest); _SkipContainerPublishing=$(_SkipContainerPublishing); ContainerImageFormat=$(_SingleImageContainerFormat); _IsMultiRIDBuild=false; _IsSingleRIDBuild=true; _InitialContainerBaseImage=$(_InitialContainerBaseImage) " /> + <_rids Remove="$(_rids)" /> + + + + + + + + + + + + + + <_ParsedContainerLabel Condition="'$(_ContainerLabel)' != ':'" Include="$(_ContainerLabel)" /> + + <_ParsedContainerPort Condition="'$(_ContainerPort)' != ':'" Include="$(_ContainerPort)" /> + + <_ParsedContainerEnvironmentVariables Condition="'$(_ContainerEnvironmentVariables)' != ':'" Include="$(_ContainerEnvironmentVariables)" /> + + + + + + <_IsMultiTFMBuild Condition="'$(TargetFrameworks)' != '' and '$(TargetFramework)' == ''">true + + <_HasCRIDsAndNoCRID Condition="'$(ContainerRuntimeIdentifiers)' != '' and '$(ContainerRuntimeIdentifier)' == ''">true + <_HasRIDs Condition="'$(RuntimeIdentifiers)' != ''">true + <_NoCRIDsOrCRIDorRID Condition="'$(ContainerRuntimeIdentifiers)' == '' and '$(ContainerRuntimeIdentifier)' == '' and '$(RuntimeIdentifier)' == ''">true + + <_IsMultiRIDBuild Condition="'$(BuildingInsideVisualStudio)' != 'true' and ('$(_HasCRIDsAndNoCRID)' == true or ('$(_HasRIDs)' == 'true' and '$(_NoCRIDsOrCRIDorRID)' == 'true'))">true + <_IsSingleRIDBuild Condition="'$(_IsMultiRIDBuild)' == ''">true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerTool.cs b/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerTool.cs index e91bdd206..98896e198 100644 --- a/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerTool.cs +++ b/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerTool.cs @@ -206,6 +206,13 @@ private static McpServerToolCreateOptions DeriveOptions(MethodInfo method, McpSe newOptions.UseStructuredContent = toolAttr.UseStructuredContent; + if (toolAttr.OutputSchema is Type outputSchemaType) + { + newOptions.OutputSchema ??= AIJsonUtilities.CreateJsonSchema(outputSchemaType, + serializerOptions: newOptions.SerializerOptions ?? McpJsonUtilities.DefaultOptions, + inferenceOptions: newOptions.SchemaCreateOptions); + } + if (toolAttr._taskSupport is { } taskSupport) { newOptions.Execution ??= new ToolExecution(); @@ -487,7 +494,17 @@ schema.ValueKind is not JsonValueKind.Object || return null; } - if (function.ReturnJsonSchema is not JsonElement outputSchema) + // Explicit OutputSchema takes precedence over AIFunction's return schema. + JsonElement outputSchema; + if (toolCreateOptions.OutputSchema is { } explicitSchema) + { + outputSchema = explicitSchema; + } + else if (function.ReturnJsonSchema is { } returnSchema) + { + outputSchema = returnSchema; + } + else { return null; } diff --git a/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs index 21a227e8f..0edb310e7 100644 --- a/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs +++ b/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs @@ -265,6 +265,27 @@ public bool ReadOnly /// public bool UseStructuredContent { get; set; } + /// + /// Gets or sets a from which to generate the tool's output schema. + /// + /// + /// The default is , which means the output schema is inferred from the return type. + /// + /// + /// + /// When set, a JSON schema is generated from the specified and used as the + /// instead of the schema inferred from the tool method's return type. + /// This is particularly useful when a tool method returns directly + /// (to control properties like , , + /// or ) but still needs to advertise a meaningful output + /// schema to clients. + /// + /// + /// must also be set to for this property to take effect. + /// + /// + public Type? OutputSchema { get; set; } + /// /// Gets or sets the source URI for the tool's icon. /// diff --git a/src/ModelContextProtocol.Core/Server/McpServerToolCreateOptions.cs b/src/ModelContextProtocol.Core/Server/McpServerToolCreateOptions.cs index 3bf0c5305..88d718d13 100644 --- a/src/ModelContextProtocol.Core/Server/McpServerToolCreateOptions.cs +++ b/src/ModelContextProtocol.Core/Server/McpServerToolCreateOptions.cs @@ -129,6 +129,26 @@ public sealed class McpServerToolCreateOptions /// public bool UseStructuredContent { get; set; } + /// + /// Gets or sets an explicit JSON schema to use as the tool's output schema. + /// + /// + /// The default is , which means the output schema is inferred from the return type. + /// + /// + /// + /// When set, this schema is used as the instead of the schema + /// inferred from the tool method's return type. This is particularly useful when a tool method + /// returns directly (to control properties like , + /// , or ) but still + /// needs to advertise a meaningful output schema to clients. + /// + /// + /// must also be set to for this property to take effect. + /// + /// + public JsonElement? OutputSchema { get; set; } + /// /// Gets or sets the JSON serializer options to use when marshalling data to/from JSON. /// @@ -209,6 +229,7 @@ internal McpServerToolCreateOptions Clone() => OpenWorld = OpenWorld, ReadOnly = ReadOnly, UseStructuredContent = UseStructuredContent, + OutputSchema = OutputSchema, SerializerOptions = SerializerOptions, SchemaCreateOptions = SchemaCreateOptions, Metadata = Metadata, diff --git a/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs b/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs index fd62a05c7..22ee805c2 100644 --- a/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs +++ b/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs @@ -533,6 +533,284 @@ public async Task StructuredOutput_Disabled_ReturnsExpectedSchema(T value) Assert.Null(result.StructuredContent); } + [Fact] + public void OutputSchema_Options_OverridesReturnTypeSchema() + { + // When OutputSchema is set on options, it should be used instead of the return type's schema + JsonElement outputSchema = JsonDocument.Parse("""{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer"}},"required":["name","age"]}""").RootElement; + McpServerTool tool = McpServerTool.Create(() => "result", new() + { + UseStructuredContent = true, + OutputSchema = outputSchema, + }); + + Assert.NotNull(tool.ProtocolTool.OutputSchema); + Assert.True(tool.ProtocolTool.OutputSchema.Value.TryGetProperty("properties", out var properties)); + Assert.True(properties.TryGetProperty("name", out _)); + Assert.True(properties.TryGetProperty("age", out _)); + } + + [Fact] + public void OutputSchema_Options_WithCallToolResultReturn() + { + // When the tool returns CallToolResult, OutputSchema on options provides the advertised schema + JsonElement outputSchema = JsonDocument.Parse("""{"type":"object","properties":{"result":{"type":"string"}},"required":["result"]}""").RootElement; + McpServerTool tool = McpServerTool.Create(() => new CallToolResult() { Content = [] }, new() + { + UseStructuredContent = true, + OutputSchema = outputSchema, + }); + + Assert.NotNull(tool.ProtocolTool.OutputSchema); + Assert.Equal("object", tool.ProtocolTool.OutputSchema.Value.GetProperty("type").GetString()); + Assert.True(tool.ProtocolTool.OutputSchema.Value.TryGetProperty("properties", out var properties)); + Assert.True(properties.TryGetProperty("result", out _)); + } + + [Fact] + public async Task OutputSchema_Options_CallToolResult_PreservesStructuredContent() + { + // When tool returns CallToolResult with StructuredContent, it's preserved in the response + JsonElement outputSchema = JsonDocument.Parse("""{"type":"object","properties":{"value":{"type":"integer"}},"required":["value"]}""").RootElement; + JsonElement structuredContent = JsonDocument.Parse("""{"value":42}""").RootElement; + McpServerTool tool = McpServerTool.Create(() => new CallToolResult() + { + Content = [new TextContentBlock { Text = "42" }], + StructuredContent = structuredContent, + }, new() + { + Name = "tool", + UseStructuredContent = true, + OutputSchema = outputSchema, + }); + var mockServer = new Mock(); + var request = new RequestContext(mockServer.Object, CreateTestJsonRpcRequest()) + { + Params = new CallToolRequestParams { Name = "tool" }, + }; + + var result = await tool.InvokeAsync(request, TestContext.Current.CancellationToken); + + Assert.NotNull(tool.ProtocolTool.OutputSchema); + Assert.NotNull(result.StructuredContent); + Assert.Equal(42, result.StructuredContent.Value.GetProperty("value").GetInt32()); + AssertMatchesJsonSchema(tool.ProtocolTool.OutputSchema.Value, result.StructuredContent); + } + + [Fact] + public void OutputSchema_Options_RequiresUseStructuredContent() + { + // OutputSchema without UseStructuredContent=true should not produce an output schema + JsonElement outputSchema = JsonDocument.Parse("""{"type":"object","properties":{"name":{"type":"string"}}}""").RootElement; + McpServerTool tool = McpServerTool.Create(() => "result", new() + { + UseStructuredContent = false, + OutputSchema = outputSchema, + }); + + Assert.Null(tool.ProtocolTool.OutputSchema); + } + + [Fact] + public void OutputSchema_Options_NonObjectSchema_GetsWrapped() + { + // Non-object output schema should be wrapped in a "result" property envelope + JsonElement outputSchema = JsonDocument.Parse("""{"type":"string"}""").RootElement; + McpServerTool tool = McpServerTool.Create(() => "result", new() + { + UseStructuredContent = true, + OutputSchema = outputSchema, + }); + + Assert.NotNull(tool.ProtocolTool.OutputSchema); + Assert.Equal("object", tool.ProtocolTool.OutputSchema.Value.GetProperty("type").GetString()); + Assert.True(tool.ProtocolTool.OutputSchema.Value.TryGetProperty("properties", out var properties)); + Assert.True(properties.TryGetProperty("result", out var resultProp)); + Assert.Equal("string", resultProp.GetProperty("type").GetString()); + } + + [Fact] + public void OutputSchema_Options_NullableObjectSchema_BecomesObject() + { + // ["object", "null"] type should be simplified to just "object" + JsonElement outputSchema = JsonDocument.Parse("""{"type":["object","null"],"properties":{"name":{"type":"string"}}}""").RootElement; + McpServerTool tool = McpServerTool.Create(() => "result", new() + { + UseStructuredContent = true, + OutputSchema = outputSchema, + }); + + Assert.NotNull(tool.ProtocolTool.OutputSchema); + Assert.Equal("object", tool.ProtocolTool.OutputSchema.Value.GetProperty("type").GetString()); + } + + [Fact] + public void OutputSchema_Attribute_WithType_GeneratesSchema() + { + McpServerTool tool = McpServerTool.Create(ToolWithOutputSchemaAttribute); + + Assert.NotNull(tool.ProtocolTool.OutputSchema); + Assert.Equal("object", tool.ProtocolTool.OutputSchema.Value.GetProperty("type").GetString()); + Assert.True(tool.ProtocolTool.OutputSchema.Value.TryGetProperty("properties", out var properties)); + Assert.True(properties.TryGetProperty("name", out _)); + Assert.True(properties.TryGetProperty("age", out _)); + } + + [Fact] + public async Task OutputSchema_Attribute_CallToolResult_PreservesStructuredContent() + { + McpServerTool tool = McpServerTool.Create(ToolWithOutputSchemaReturningCallToolResult); + + Assert.NotNull(tool.ProtocolTool.OutputSchema); + Assert.Equal("object", tool.ProtocolTool.OutputSchema.Value.GetProperty("type").GetString()); + + var mockServer = new Mock(); + var request = new RequestContext(mockServer.Object, CreateTestJsonRpcRequest()) + { + Params = new CallToolRequestParams { Name = "tool" }, + }; + + var result = await tool.InvokeAsync(request, TestContext.Current.CancellationToken); + + Assert.NotNull(result.StructuredContent); + Assert.Equal("John", result.StructuredContent.Value.GetProperty("name").GetString()); + Assert.Equal(27, result.StructuredContent.Value.GetProperty("age").GetInt32()); + AssertMatchesJsonSchema(tool.ProtocolTool.OutputSchema.Value, result.StructuredContent); + } + + [Fact] + public void OutputSchema_Attribute_WithoutUseStructuredContent_NoSchema() + { + // If UseStructuredContent is false but OutputSchema type is set, no output schema should be generated + McpServerTool tool = McpServerTool.Create(ToolWithOutputSchemaButNoStructuredContent); + + Assert.Null(tool.ProtocolTool.OutputSchema); + } + + [Fact] + public void OutputSchema_Options_TakesPrecedenceOverAttribute() + { + // Options.OutputSchema should take precedence over attribute-derived schema + JsonElement outputSchema = JsonDocument.Parse("""{"type":"object","properties":{"custom":{"type":"boolean"}},"required":["custom"]}""").RootElement; + McpServerTool tool = McpServerTool.Create(ToolWithOutputSchemaAttribute, new() + { + OutputSchema = outputSchema, + }); + + Assert.NotNull(tool.ProtocolTool.OutputSchema); + Assert.True(tool.ProtocolTool.OutputSchema.Value.TryGetProperty("properties", out var properties)); + Assert.True(properties.TryGetProperty("custom", out _)); + // Should not have Person's properties + Assert.False(properties.TryGetProperty("name", out _)); + } + + [Fact] + public void OutputSchema_Options_Clone_PreservesValue() + { + // Verify that Clone() preserves the OutputSchema property + JsonElement outputSchema = JsonDocument.Parse("""{"type":"object","properties":{"x":{"type":"integer"}}}""").RootElement; + McpServerTool tool1 = McpServerTool.Create(() => "result", new() + { + Name = "tool1", + UseStructuredContent = true, + OutputSchema = outputSchema, + }); + + // The output schema should be present since we set it + Assert.NotNull(tool1.ProtocolTool.OutputSchema); + Assert.True(tool1.ProtocolTool.OutputSchema.Value.TryGetProperty("properties", out var props)); + Assert.True(props.TryGetProperty("x", out _)); + } + + [Fact] + public async Task OutputSchema_Options_PersonType_WithCallToolResult() + { + // Create output schema from Person type, tool returns CallToolResult with matching structured content + JsonSerializerOptions serializerOptions = new() { TypeInfoResolver = new DefaultJsonTypeInfoResolver() }; + JsonElement outputSchema = AIJsonUtilities.CreateJsonSchema(typeof(Person), serializerOptions: serializerOptions); + Person person = new("Alice", 30); + JsonElement structuredContent = JsonSerializer.SerializeToElement(person, serializerOptions); + McpServerTool tool = McpServerTool.Create(() => new CallToolResult() + { + Content = [new TextContentBlock { Text = "Alice, 30" }], + StructuredContent = structuredContent, + }, new() + { + Name = "tool", + UseStructuredContent = true, + OutputSchema = outputSchema, + SerializerOptions = serializerOptions, + }); + var mockServer = new Mock(); + var request = new RequestContext(mockServer.Object, CreateTestJsonRpcRequest()) + { + Params = new CallToolRequestParams { Name = "tool" }, + }; + + var result = await tool.InvokeAsync(request, TestContext.Current.CancellationToken); + + Assert.NotNull(tool.ProtocolTool.OutputSchema); + Assert.NotNull(result.StructuredContent); + AssertMatchesJsonSchema(tool.ProtocolTool.OutputSchema.Value, result.StructuredContent); + } + + [Fact] + public async Task OutputSchema_Options_OverridesReturnTypeSchema_InvokeAndValidate() + { + // OutputSchema overrides return type schema; result should match the original return type, but schema is the override + JsonSerializerOptions serializerOptions = new() { TypeInfoResolver = new DefaultJsonTypeInfoResolver() }; + JsonElement outputSchema = AIJsonUtilities.CreateJsonSchema(typeof(Person), serializerOptions: serializerOptions); + McpServerTool tool = McpServerTool.Create(() => new Person("Bob", 25), new() + { + Name = "tool", + UseStructuredContent = true, + OutputSchema = outputSchema, + SerializerOptions = serializerOptions, + }); + var mockServer = new Mock(); + var request = new RequestContext(mockServer.Object, CreateTestJsonRpcRequest()) + { + Params = new CallToolRequestParams { Name = "tool" }, + }; + + var result = await tool.InvokeAsync(request, TestContext.Current.CancellationToken); + + Assert.NotNull(tool.ProtocolTool.OutputSchema); + Assert.NotNull(result.StructuredContent); + AssertMatchesJsonSchema(tool.ProtocolTool.OutputSchema.Value, result.StructuredContent); + } + + [McpServerTool(UseStructuredContent = true, OutputSchema = typeof(Person))] + private static CallToolResult ToolWithOutputSchemaAttribute() + { + var person = new Person("John", 27); + return new CallToolResult() + { + Content = [new TextContentBlock { Text = $"{person.Name}, {person.Age}" }], + StructuredContent = JsonSerializer.SerializeToElement(person, McpJsonUtilities.DefaultOptions), + }; + } + + [McpServerTool(UseStructuredContent = true, OutputSchema = typeof(Person))] + private static CallToolResult ToolWithOutputSchemaReturningCallToolResult() + { + var person = new Person("John", 27); + return new CallToolResult() + { + Content = [new TextContentBlock { Text = $"{person.Name}, {person.Age}" }], + StructuredContent = JsonSerializer.SerializeToElement(person, McpJsonUtilities.DefaultOptions), + }; + } + + [McpServerTool(UseStructuredContent = false, OutputSchema = typeof(Person))] + private static CallToolResult ToolWithOutputSchemaButNoStructuredContent() + { + return new CallToolResult() + { + Content = [new TextContentBlock { Text = "result" }], + }; + } + [Theory] [InlineData(JsonNumberHandling.Strict)] [InlineData(JsonNumberHandling.AllowReadingFromString)] From 7893edc8c0f8c79df99616fa91ce51844f706dbf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Mar 2026 03:13:35 +0000 Subject: [PATCH 3/5] Remove accidentally committed full.xml build artifact Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- full.xml | 5447 ------------------------------------------------------ 1 file changed, 5447 deletions(-) delete mode 100644 full.xml diff --git a/full.xml b/full.xml deleted file mode 100644 index eb72d97f2..000000000 --- a/full.xml +++ /dev/null @@ -1,5447 +0,0 @@ - - - - - - <_AfterSdkPublishDependsOn Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true'">AfterPublish - <_AfterSdkPublishDependsOn Condition="'$(UsingMicrosoftNETSdkWeb)' != 'true'">Publish - - - - - true - - true - $(CustomAfterDirectoryBuildProps);$(MSBuildThisFileDirectory)UseArtifactsOutputPath.props - - - $(ProjectExtensionsPathForSpecifiedProject) - - - - - - true - true - true - true - true - - - - <_DirectoryBuildPropsFile Condition="'$(_DirectoryBuildPropsFile)' == ''">Directory.Build.props - <_DirectoryBuildPropsBasePath Condition="'$(_DirectoryBuildPropsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), '$(_DirectoryBuildPropsFile)')) - $([System.IO.Path]::Combine('$(_DirectoryBuildPropsBasePath)', '$(_DirectoryBuildPropsFile)')) - - - - - - preview - true - enable - enable - false - false - - false - - - - - Debug - $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)')) - $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'artifacts')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'obj')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'bin')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'TestResults', '$(Configuration)')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'packages', '$(Configuration)')) - $(MSBuildProjectName) - $([System.IO.Path]::GetFullPath('$(ArtifactsObjDir)$(OutDirName)\')) - $(BaseIntermediateOutputPath)$(Configuration)\ - $([System.IO.Path]::GetFullPath('$(ArtifactsBinDir)$(OutDirName)\')) - $(BaseOutputPath)$(Configuration)\ - $(ArtifactsPackagesDir) - - - trx%3bLogFileName=$(MSBuildProjectName).$(TargetFramework).$(OS).trx - $(ArtifactsTestResultsDir) - - - true - - - - true - - - - net10.0;net9.0;net8.0 - $(DefaultTestTargetFrameworks);net472 - - - - https://csharp.sdk.modelcontextprotocol.io - https://github.com/modelcontextprotocol/csharp-sdk - git - 1.1.0 - ModelContextProtocol - © Model Context Protocol a Series of LF Projects, LLC. - ModelContextProtocol;mcp;ai;llm - Apache-2.0 - logo.png - true - snupkg - true - $(RepoRoot)\Open.snk - true - true - 1.0.0 - - - - - - - - - - - - - - - - - true - $(MSBuildProjectName) - - - $(ArtifactsPath)\obj\$(ArtifactsProjectName)\ - $(ArtifactsPath)\obj\ - - - - <_ArtifactsPathSetEarly>true - - - - - - obj\ - $(BaseIntermediateOutputPath)\ - <_InitialBaseIntermediateOutputPath>$(BaseIntermediateOutputPath) - $(BaseIntermediateOutputPath) - - $([System.IO.Path]::Combine('$(MSBuildProjectDirectory)', '$(MSBuildProjectExtensionsPath)')) - $(MSBuildProjectExtensionsPath)\ - - false - true - <_InitialMSBuildProjectExtensionsPath Condition=" '$(ImportProjectExtensionProps)' == 'true' ">$(MSBuildProjectExtensionsPath) - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - /home/runner/.nuget/packages/ - /home/runner/.nuget/packages/ - PackageReference - 7.0.0 - - - - - - - - - - - <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\net472\Microsoft.SourceLink.Common.dll - <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\core\Microsoft.SourceLink.Common.dll - - - - true - - true - - - - - - - - - $(MSBuildThisFileDirectory)..\tools\net472\Microsoft.Build.Tasks.Git.dll - $(MSBuildThisFileDirectory)..\tools\core\Microsoft.Build.Tasks.Git.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /home/runner/.nuget/packages/microsoft.sourcelink.common/8.0.0 - /home/runner/.nuget/packages/microsoft.build.tasks.git/8.0.0 - /home/runner/.nuget/packages/microsoft.sourcelink.github/8.0.0 - /home/runner/.nuget/packages/microsoft.net.illink.tasks/10.0.2 - - - /home/runner/.nuget/packages/microsoft.sourcelink.common/8.0.0 - /home/runner/.nuget/packages/microsoft.build.tasks.git/8.0.0 - /home/runner/.nuget/packages/microsoft.sourcelink.github/8.0.0 - /home/runner/.nuget/packages/microsoft.net.illink.tasks/8.0.23 - - - /home/runner/.nuget/packages/microsoft.sourcelink.common/8.0.0 - /home/runner/.nuget/packages/microsoft.build.tasks.git/8.0.0 - /home/runner/.nuget/packages/microsoft.sourcelink.github/8.0.0 - /home/runner/.nuget/packages/microsoft.net.illink.tasks/9.0.12 - - - /home/runner/.nuget/packages/microsoft.sourcelink.common/8.0.0 - /home/runner/.nuget/packages/microsoft.build.tasks.git/8.0.0 - /home/runner/.nuget/packages/microsoft.sourcelink.github/8.0.0 - - - - - - - $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.Before.$(MSBuildThisFile) - $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.After.$(MSBuildThisFile) - - - - - true - - - $(DefaultProjectConfiguration) - $(DefaultProjectPlatform) - - - WJProject - JavaScript - - - - - - - - $([MSBuild]::IsRunningFromVisualStudio()) - $([MSBuild]::GetToolsDirectory32())\..\..\..\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.props - $(MSBuildToolsPath)\NuGet.props - - - - - - true - - - - <_DirectoryPackagesPropsFile Condition="'$(_DirectoryPackagesPropsFile)' == ''">Directory.Packages.props - <_DirectoryPackagesPropsBasePath Condition="'$(_DirectoryPackagesPropsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildProjectDirectory)', '$(_DirectoryPackagesPropsFile)')) - $([MSBuild]::NormalizePath('$(_DirectoryPackagesPropsBasePath)', '$(_DirectoryPackagesPropsFile)')) - - - - true - 8.0.22 - 9.0.11 - 10.0.3 - 10.3.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - true - true - true - true - true - true - true - true - true - true - true - true - true - - - - - - - true - - - - Debug;Release - AnyCPU - Debug - AnyCPU - - - - - true - - - - Library - 512 - prompt - $(MSBuildProjectName) - $(MSBuildProjectName.Replace(" ", "_")) - true - - - - true - false - - - true - - - - - <_PlatformWithoutConfigurationInference>$(Platform) - - - x64 - - - x86 - - - ARM - - - arm64 - - - - - {CandidateAssemblyFiles} - $(AssemblySearchPaths);{HintPathFromItem} - $(AssemblySearchPaths);{TargetFrameworkDirectory} - $(AssemblySearchPaths);{RawFileName} - - - None - portable - - false - - true - true - - PackageReference - $(AssemblySearchPaths) - false - false - false - false - false - false - - false - false - false - false - true - 1.0.3 - false - true - true - - - - <_ImplicitFileBasedProgramUserSecretsId Condition="'$(FileBasedProgram)' == 'true'">$(MSBuildProjectName)-$([MSBuild]::StableStringHash($(MSBuildProjectFullPath.ToLowerInvariant()), 'Sha256')) - $(_ImplicitFileBasedProgramUserSecretsId) - - - - $(MSBuildThisFileDirectory)GenerateDeps\GenerateDeps.proj - - - - - - $(MSBuildThisFileDirectory)..\..\..\Microsoft.NETCoreSdk.BundledVersions.props - - - - - $([MSBuild]::NormalizePath('$(MSBuildThisFileDirectory)../../')) - $([MSBuild]::EnsureTrailingSlash('$(NetCoreRoot)'))packs - $([MSBuild]::EnsureTrailingSlash('$(MSBuildThisFileDirectory)'))PrunePackageData - <_NetFrameworkHostedCompilersVersion>5.0.0-2.25612.105 - 10.0 - 10.0 - 10.0.2 - 2.1 - 2.1.0 - 10.0.2-servicing.25612.105 - $(MSBuildThisFileDirectory)RuntimeIdentifierGraph.json - 10.0.102 - 10.0.100 - linux-x64 - linux-x64 - <_NETCoreSdkIsPreview>false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_KnownRuntimeIdentiferPlatforms Include="any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix" /> - <_ExcludedKnownRuntimeIdentiferPlatforms Include="rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0" /> - - - - $(MSBuildThisFileDirectory)..\..\..\Microsoft.NETCoreSdk.BundledMSBuildInformation.props - - - - - 17.14.0 - 18.0.7 - <_MSBuildVersionMajorMinor>$([System.Version]::Parse('$(MSBuildVersion)').ToString(2)) - <_IsDisjointMSBuildVersion>$([MSBuild]::VersionLessThan('$(_MSBuildVersionMajorMinor)', '18.0')) - - - - - false - - - <__WindowsAppSdkDefaultImageIncludes>**/*.png;**/*.bmp;**/*.jpg;**/*.dds;**/*.tif;**/*.tga;**/*.gif - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <__DisableWorkloadResolverSentinelPath Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildBinPath)\DisableWorkloadResolver.sentinel - <__DisableWorkloadResolverSentinelPath Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildToolsPath32)\SdkResolvers\Microsoft.DotNet.MSBuildSdkResolver\DisableWorkloadResolver.sentinel - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $([MSBuild]::Add($(NETCoreAppMaximumVersion), 1)).0 - 17.16 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_NormalizedWindowsSdkSupportedTargetPlatformVersion Include="@(WindowsSdkSupportedTargetPlatformVersion)"> - $([System.Text.RegularExpressions.Regex]::Replace(%(Identity), '^((\d+\.){3})1$', '${1}0')) - - - - - - - - - true - <_SourceLinkPropsImported>true - - - - - - $(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.Build.Tasks.Git.dll - $(MSBuildThisFileDirectory)..\tools\net\Microsoft.Build.Tasks.Git.dll - - - - - - <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.Common.dll - <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.Common.dll - - - - true - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1701;1702 - - $(WarningsAsErrors);NU1605 - - - $(DefineConstants); - $(DefineConstants)TRACE - - - - - - - - - - - - - - - - - - - - - - - - $(TargetsForTfmSpecificContentInPackage);_PackProjectToolValidation - - - - - - MSBuild:Compile - $(DefaultXamlRuntime) - Designer - - - MSBuild:Compile - $(DefaultXamlRuntime) - Designer - - - - - - - - - - - - - - - - - - <_WpfCommonNetFxReference Include="WindowsBase" /> - <_WpfCommonNetFxReference Include="PresentationCore" /> - <_WpfCommonNetFxReference Include="PresentationFramework" /> - <_WpfCommonNetFxReference Include="System.Xaml" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'"> - 4.0 - - <_WpfCommonNetFxReference Include="UIAutomationClient" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> - <_WpfCommonNetFxReference Include="UIAutomationClientSideProviders" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> - <_WpfCommonNetFxReference Include="UIAutomationProvider" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> - <_WpfCommonNetFxReference Include="UIAutomationTypes" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> - <_WpfCommonNetFxReference Include="System.Windows.Controls.Ribbon" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.5'" /> - - - <_SDKImplicitReference Include="@(_WpfCommonNetFxReference)" Condition="'$(UseWPF)' == 'true'" /> - <_SDKImplicitReference Include="System.Windows.Forms" Condition="('$(UseWindowsForms)' == 'true') " /> - <_SDKImplicitReference Include="WindowsFormsIntegration" Condition=" ('$(UseWindowsForms)' == 'true') And ('$(UseWPF)' == 'true') " /> - - - - - - <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v1.0" /> - <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v1.1" /> - <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.0" /> - <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.1" /> - <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.2" /> - - <_UnsupportedNETStandardTargetFramework Include="@(SupportedNETStandardTargetFramework)" /> - - <_UnsupportedNETFrameworkTargetFramework Include=".NETFramework,Version=v2.0" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - <_TargetFrameworkVersionValue>0.0 - <_WindowsDesktopSdkTargetFrameworkVersionFloor>3.0 - - - - - - - - net10.0;net9.0;net8.0;netstandard2.0 - true - true - ModelContextProtocol.Core - Core .NET SDK for the Model Context Protocol (MCP) - README.md - - $(NoWarn);MCPEXP001 - - - true - - - - $(NoWarn);CS0436 - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - Debug - AnyCPU - $(Platform) - - - - - 1.0.0 - $(VersionPrefix)-$(VersionSuffix) - $(VersionPrefix) - - - $(AssemblyName) - $(Authors) - $(AssemblyName) - $(AssemblyName) - - - - - - - - true - false - true - <_PlatformToAppendToOutputPath Condition="'$(AppendPlatformToOutputPath)' == 'true'">$(PlatformName)\ - - - - - - - - <_DefaultArtifactsPathPropsImported>true - - - - true - true - <_ArtifactsPathLocationType>ExplicitlySpecified - - - - - $(_DirectoryBuildPropsBasePath)\artifacts - true - <_ArtifactsPathLocationType>DirectoryBuildPropsFolder - - - - $(MSBuildProjectDirectory)\artifacts - <_ArtifactsPathLocationType>ProjectFolder - - - - $(MSBuildProjectName) - bin - publish - package - - true - - - $(Configuration.ToLowerInvariant()) - - $(ArtifactsPivots)_$(TargetFramework.ToLowerInvariant()) - - $(ArtifactsPivots)_$(RuntimeIdentifier.ToLowerInvariant()) - - - - $(ArtifactsPath)\$(ArtifactsBinOutputName)\$(ArtifactsProjectName)\ - $(ArtifactsPath)\obj\$(ArtifactsProjectName)\ - $(ArtifactsPath)\$(ArtifactsPublishOutputName)\$(ArtifactsProjectName)\$(ArtifactsPivots)\ - - - - $(ArtifactsPath)\$(ArtifactsBinOutputName)\ - $(ArtifactsPath)\obj\ - $(ArtifactsPath)\$(ArtifactsPublishOutputName)\$(ArtifactsPivots)\ - - - $(BaseOutputPath)$(ArtifactsPivots)\ - $(BaseIntermediateOutputPath)$(ArtifactsPivots)\ - - $(ArtifactsPath)\$(ArtifactsPackageOutputName)\$(Configuration.ToLowerInvariant())\ - - - bin\ - $(BaseOutputPath)\ - $(BaseOutputPath)$(_PlatformToAppendToOutputPath)$(Configuration)\ - $(OutputPath)\ - - - - obj\ - $(BaseIntermediateOutputPath)\ - $(BaseIntermediateOutputPath)$(_PlatformToAppendToOutputPath)$(Configuration)\ - $(IntermediateOutputPath)\ - - - - $(OutputPath) - - - - $(DefaultItemExcludes);$(OutputPath)/** - $(DefaultItemExcludes);$(IntermediateOutputPath)/** - - - $(DefaultItemExcludes);$(ArtifactsPath)/** - - $(DefaultItemExcludes);bin/**;obj/** - - - - $(OutputPath)$(TargetFramework.ToLowerInvariant())\ - - - $(IntermediateOutputPath)$(TargetFramework.ToLowerInvariant())\ - - - - - - - - - - - - - - - - - - - - $(MSBuildToolsPath)\Microsoft.CSharp.targets - $(MSBuildToolsPath)\Microsoft.VisualBasic.targets - $(MSBuildThisFileDirectory)..\targets\Microsoft.NET.Sdk.FSharpTargetsShim.targets - - $(MSBuildToolsPath)\Microsoft.Common.targets - - - - - - - - $(MSBuildToolsPath)\Microsoft.CSharp.CrossTargeting.targets - - - - - $(MSBuildToolsPath)\Microsoft.CSharp.CurrentVersion.targets - - - - - - - - true - - - - - - - - $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed\Microsoft.CSharp.DesignTime.targets - - - - - - true - true - - - - - - - - - - - <_ThisProjectBuildMetadata Include="$(MSBuildProjectFullPath)"> - @(_TargetFrameworkInfo) - @(_TargetFrameworkInfo->'%(TargetFrameworkMonikers)') - @(_TargetFrameworkInfo->'%(TargetPlatformMonikers)') - $(_AdditionalPropertiesFromProject) - false - @(_TargetFrameworkInfo->'%(IsRidAgnostic)') - - - false - $(Platform) - $(Platforms) - - - - - - <_TargetFramework Include="$(TargetFrameworks)" /> - - <_TargetFrameworkNormalized Include="@(_TargetFramework->Trim()->Distinct())" /> - <_InnerBuildProjects Include="$(MSBuildProjectFile)"> - TargetFramework=%(_TargetFrameworkNormalized.Identity) - - - - - - - - - - - - true - - - - - - - - - - - - - Build - - - - - - - - - - - - $([MSBuild]::IsRunningFromVisualStudio()) - $([MSBuild]::GetToolsDirectory32())\..\..\..\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets - $(MSBuildToolsPath)\NuGet.targets - - - - - - true - - NuGet.Build.Tasks.dll - - false - - true - true - - false - - WarnAndContinue - - $(BuildInParallel) - true - - <_RestoreSolutionFileUsed Condition=" '$(_RestoreSolutionFileUsed)' == '' AND '$(SolutionDir)' != '' AND $(MSBuildProjectFullPath.EndsWith('.metaproj')) == 'true' ">true - - $(MSBuildInteractive) - - true - - true - - <_CentralPackageVersionsEnabled Condition="'$(ManagePackageVersionsCentrally)' == 'true' AND '$(CentralPackageVersionsFileImported)' == 'true'">true - - - - - true - - low - - all - direct - - - - - true - false - true - false - - - - <_GenerateRestoreGraphProjectEntryInputProperties>ExcludeRestorePackageImports=true - - <_GenerateRestoreGraphProjectEntryInputProperties Condition=" '$(RestoreUseCustomAfterTargets)' == 'true' "> - $(_GenerateRestoreGraphProjectEntryInputProperties); - NuGetRestoreTargets=$(MSBuildThisFileFullPath); - RestoreUseCustomAfterTargets=$(RestoreUseCustomAfterTargets); - CustomAfterMicrosoftCommonCrossTargetingTargets=$(MSBuildThisFileFullPath); - CustomAfterMicrosoftCommonTargets=$(MSBuildThisFileFullPath); - - - <_GenerateRestoreGraphProjectEntryInputProperties Condition=" '$(_RestoreSolutionFileUsed)' == 'true' "> - $(_GenerateRestoreGraphProjectEntryInputProperties); - _RestoreSolutionFileUsed=true; - SolutionDir=$(SolutionDir); - SolutionName=$(SolutionName); - SolutionFileName=$(SolutionFileName); - SolutionPath=$(SolutionPath); - SolutionExt=$(SolutionExt); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $(ContinueOnError) - false - - - - - - - - - - - - - - $(ContinueOnError) - false - - - - - - - - - - - - - - $(ContinueOnError) - false - - - - - - - - - - - - - <_FrameworkReferenceForRestore Include="@(FrameworkReference)" Condition="'%(FrameworkReference.IsTransitiveFrameworkReference)' != 'true'" /> - - - - - - - $(ContinueOnError) - false - - - - - - - - - - - - - $(ContinueOnError) - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - exclusionlist - - - - <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" Condition=" '%(RestoreGraphProjectInputItems.Extension)' == '.csproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.vbproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.fsproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.nuproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.proj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.msbuildproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.vcxproj' " /> - - - - <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" Condition=" '%(RestoreGraphProjectInputItems.Extension)' != '.metaproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '.shproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '.vcxitems' AND '%(RestoreGraphProjectInputItems.Extension)' != '.vdproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '' " /> - - - - <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" /> - - - - - - - - - - - - - - - - - - - - - - - - <_GenerateRestoreGraphProjectEntryInput Include="@(FilteredRestoreGraphProjectInputItems)" Condition=" '$(RestoreRecursive)' != 'true' " /> - <_GenerateRestoreGraphProjectEntryInput Include="@(_RestoreProjectPathItems)" Condition=" '$(RestoreRecursive)' == 'true' " /> - - - - - - - - - - - - - - - - - - - - <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())" Condition=" '$(RestoreProjectStyle)' != 'Unknown' "> - RestoreSpec - $(MSBuildProjectFullPath) - - - - - - - netcoreapp1.0 - - - - - - - - - - - <_HasPackageReferenceItems Condition="'@(PackageReference)' != ''">true - - - <_HasPackageReferenceItems Condition="@(PackageReference->Count()) > 0">true - - - - - - - <_HasPackageReferenceItems /> - - - - - - true - - - - - - <_RestoreProjectFramework /> - <_TargetFrameworkToBeUsed Condition=" '$(_TargetFrameworkOverride)' == '' ">$(TargetFrameworks) - - - - - - <_RestoreTargetFrameworksOutputFiltered Include="$(_RestoreProjectFramework.Split(';'))" /> - - - - - - <_RestoreTargetFrameworkItems Include="$(TargetFrameworks.Split(';'))" /> - - - <_RestoreTargetFrameworkItems Include="$(_TargetFrameworkOverride)" /> - - - - - - $(SolutionDir) - - - - - - - - - - - - - - - - - - - - - - - <_RestoreSettingsPerFramework Include="$([System.Guid]::NewGuid())"> - $(RestoreAdditionalProjectSources) - $(RestoreAdditionalProjectFallbackFolders) - $(RestoreAdditionalProjectFallbackFoldersExcludes) - - - - - - - - $(MSBuildProjectExtensionsPath) - - - - - - - <_RestoreProjectName>$(MSBuildProjectName) - <_RestoreProjectName Condition=" '$(PackageReferenceCompatibleProjectStyle)' == 'true' AND '$(AssemblyName)' != '' ">$(AssemblyName) - <_RestoreProjectName Condition=" '$(PackageReferenceCompatibleProjectStyle)' == 'true' AND '$(PackageId)' != '' ">$(PackageId) - - - - <_RestoreProjectVersion>1.0.0 - <_RestoreProjectVersion Condition=" '$(Version)' != '' ">$(Version) - <_RestoreProjectVersion Condition=" '$(PackageVersion)' != '' ">$(PackageVersion) - - - - <_RestoreCrossTargeting>true - - - - <_RestoreSkipContentFileWrite Condition=" '$(TargetFrameworks)' == '' AND '$(TargetFramework)' == '' ">true - - - - <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> - ProjectSpec - $(_RestoreProjectVersion) - $(MSBuildProjectFullPath) - $(MSBuildProjectFullPath) - $(_RestoreProjectName) - $(_OutputSources) - $(_OutputFallbackFolders) - $(_OutputPackagesPath) - $(RestoreProjectStyle) - $(RestoreOutputAbsolutePath) - $(RuntimeIdentifiers);$(RuntimeIdentifier) - $(RuntimeSupports) - $(_RestoreCrossTargeting) - $(RestoreLegacyPackagesDirectory) - $(ValidateRuntimeIdentifierCompatibility) - $(_RestoreSkipContentFileWrite) - $(_OutputConfigFilePaths) - $(TreatWarningsAsErrors) - $(WarningsAsErrors) - $(WarningsNotAsErrors) - $(NoWarn) - $(RestorePackagesWithLockFile) - $(NuGetLockFilePath) - $(RestoreLockedMode) - <_CentralPackageVersionsEnabled>$(_CentralPackageVersionsEnabled) - $(CentralPackageFloatingVersionsEnabled) - $(CentralPackageVersionOverrideEnabled) - $(CentralPackageTransitivePinningEnabled) - $(NuGetAudit) - $(NuGetAuditLevel) - $(NuGetAuditMode) - $(SdkAnalysisLevel) - $(UsingMicrosoftNETSdk) - $(RestoreUseLegacyDependencyResolver) - - - - - <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> - ProjectSpec - $(MSBuildProjectFullPath) - $(MSBuildProjectFullPath) - $(_RestoreProjectName) - $(RestoreProjectStyle) - $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config - $(MSBuildProjectDirectory)\packages.config - $(RestorePackagesWithLockFile) - $(NuGetLockFilePath) - $(RestoreLockedMode) - $(_OutputSources) - $(SolutionDir) - $(_OutputRepositoryPath) - $(_OutputConfigFilePaths) - $(_OutputPackagesPath) - @(_RestoreTargetFrameworksOutputFiltered) - $(NuGetAudit) - $(NuGetAuditLevel) - - - - - <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> - ProjectSpec - $(MSBuildProjectFullPath) - $(MSBuildProjectFullPath) - $(_RestoreProjectName) - $(RestoreProjectStyle) - @(_RestoreTargetFrameworksOutputFiltered) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> - TargetFrameworkInformation - $(MSBuildProjectFullPath) - $(PackageTargetFallback) - $(AssetTargetFallback) - $(TargetFramework) - $(TargetFrameworkIdentifier) - $(TargetFrameworkVersion) - $(TargetFrameworkMoniker) - $(TargetFrameworkProfile) - $(TargetPlatformMoniker) - $(TargetPlatformIdentifier) - $(TargetPlatformVersion) - $(TargetPlatformMinVersion) - $(CLRSupport) - $(RuntimeIdentifierGraphPath) - $(WindowsTargetPlatformMinVersion) - $(RestoreEnablePackagePruning) - $(RestorePackagePruningDefault) - $(NuGetAuditMode) - - - - - - - - - - - - - <_RestoreProjectPathItems Include="$(_RestoreGraphAbsoluteProjectPaths)" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_GenerateRestoreProjectPathWalkOutputs Include="$(MSBuildProjectFullPath)" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_RestorePackagesPathOverride>$(RestorePackagesPath) - - - - - - <_RestorePackagesPathOverride>$(RestoreRepositoryPath) - - - - - - <_RestoreSourcesOverride>$(RestoreSources) - - - - - - <_RestoreFallbackFoldersOverride>$(RestoreFallbackFolders) - - - - - - - - - - - - - <_TargetFrameworkOverride Condition=" '$(TargetFrameworks)' == '' ">$(TargetFramework) - - - - - - <_ValidProjectsForRestore Include="$(MSBuildProjectFullPath)" /> - - - - - - - - - true - - - - - $(MSBuildExtensionsPath)\Microsoft.TestPlatform.Build.dll - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - - - - - - <_TestTfmsInParallel>$([MSBuild]::ValueOrDefault('$(TestTfmsInParallel)', '$(BuildInParallel)')) - - - <_TargetFramework Include="$(TargetFrameworks)" /> - <_ProjectToTestWithTFM Include="$(MSBuildProjectFile)" Properties="TargetFramework=%(_TargetFramework.Identity);VSTestNoBuild=true" /> - - - - - - - - - - - - - - - - - - - VSTest - - - - - - - - - - - false - true - - - - - - - - - - - - - - - - - - - - $(RepositoryUrl) - $(ScmRepositoryUrl) - - - - %(SourceRoot.ScmRepositoryUrl) - - - - - - - - true - - - - - - - - - - - local - - - - - - - - - - - git - - - - - - - - - - - - - - - - <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\net472\Microsoft.SourceLink.GitHub.dll - <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\core\Microsoft.SourceLink.GitHub.dll - - - - - $(SourceLinkUrlInitializerTargets);_InitializeGitHubSourceLinkUrl - $(SourceControlManagerUrlTranslationTargets);TranslateGitHubUrlsInSourceControlInformation - - - - - - - - - - - - - - - <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - <_DirectoryBuildTargetsFile Condition="'$(_DirectoryBuildTargetsFile)' == ''">Directory.Build.targets - <_DirectoryBuildTargetsBasePath Condition="'$(_DirectoryBuildTargetsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), '$(_DirectoryBuildTargetsFile)')) - $([System.IO.Path]::Combine('$(_DirectoryBuildTargetsBasePath)', '$(_DirectoryBuildTargetsFile)')) - - - - false - - - - - - - - - TargetFramework - TargetFrameworks - - - true - - - - - - - - - <_MainReferenceTargetForBuild Condition="'$(BuildProjectReferences)' == '' or '$(BuildProjectReferences)' == 'true'">.projectReferenceTargetsOrDefaultTargets - <_MainReferenceTargetForBuild Condition="'$(_MainReferenceTargetForBuild)' == ''">GetTargetPath - $(_MainReferenceTargetForBuild);GetNativeManifest;$(_RecursiveTargetForContentCopying);$(ProjectReferenceTargetsForBuild) - - <_MainReferenceTargetForPublish Condition="'$(NoBuild)' == 'true'">GetTargetPath - <_MainReferenceTargetForPublish Condition="'$(NoBuild)' != 'true'">$(_MainReferenceTargetForBuild) - GetTargetFrameworks;$(_MainReferenceTargetForPublish);GetNativeManifest;GetCopyToPublishDirectoryItems;$(ProjectReferenceTargetsForPublish) - - $(ProjectReferenceTargetsForBuild);$(ProjectReferenceTargetsForPublish) - $(ProjectReferenceTargetsForRebuild);$(ProjectReferenceTargetsForPublish) - GetCopyToPublishDirectoryItems;$(ProjectReferenceTargetsForGetCopyToPublishDirectoryItems) - - - .default;$(ProjectReferenceTargetsForBuild) - - - Clean;$(ProjectReferenceTargetsForClean) - $(ProjectReferenceTargetsForClean);$(ProjectReferenceTargetsForBuild);$(ProjectReferenceTargetsForRebuild) - - - - - - - - - - - - - - - - - - - - - - - - - $(MSBuildThisFileDirectory)..\tools\ - net10.0 - net472 - $(MicrosoftNETBuildTasksDirectoryRoot)$(MicrosoftNETBuildTasksTFM)\ - $(MicrosoftNETBuildTasksDirectory)Microsoft.NET.Build.Tasks.dll - - Microsoft.NETCore.App;NETStandard.Library - - - - <_IsExecutable Condition="'$(OutputType)' == 'Exe' or '$(OutputType)'=='WinExe'">true - $(_IsExecutable) - - - - netcoreapp2.2 - - - Preview - - - - - - - $(NuGetPackageRoot)\microsoft.net.sdk.compilers.toolset\$(NETCoreSdkVersion) - $(RoslynTargetsPath)\Microsoft.Build.Tasks.CodeAnalysis.dll - <_NeedToDownloadMicrosoftNetSdkCompilersToolsetPackage>true - <_MicrosoftNetSdkCompilersToolsetPackageRootEmpty Condition="'$(NuGetPackageRoot)' == ''">true - - - - - - - - - <_SourceLinkSdkSubDir>build - <_SourceLinkSdkSubDir Condition="'$(IsCrossTargetingBuild)' == 'true'">buildMultiTargeting - - true - - - - - - - - local - - - - - - - - - - - - git - - - - - - - - - - - - - - - - - - - - - - - - - - $(RepositoryUrl) - $(ScmRepositoryUrl) - - - - %(SourceRoot.ScmRepositoryUrl) - - - - - - - - true - - - - - - <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.GitHub.dll - <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.GitHub.dll - - - - - $(SourceLinkUrlInitializerTargets);_InitializeGitHubSourceLinkUrl - $(SourceControlManagerUrlTranslationTargets);TranslateGitHubUrlsInSourceControlInformation - - - - - - - - - - - - - - - <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> - - - - - - - - - - - - - - - <_SourceLinkGitLabAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.GitLab.dll - <_SourceLinkGitLabAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.GitLab.dll - - - - - $(SourceLinkUrlInitializerTargets);_InitializeGitLabSourceLinkUrl - $(SourceControlManagerUrlTranslationTargets);TranslateGitLabUrlsInSourceControlInformation - - - - - - - - - - - - - - - <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> - - - - - - - - - - - - - - - <_SourceLinkAzureReposGitAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.AzureRepos.Git.dll - <_SourceLinkAzureReposGitAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.AzureRepos.Git.dll - - - - - $(SourceLinkUrlInitializerTargets);_InitializeAzureReposGitSourceLinkUrl - $(SourceControlManagerUrlTranslationTargets);TranslateAzureReposGitUrlsInSourceControlInformation - - - - - - - - - - - - - - - <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> - - - - - - - - - - - - - - - <_SourceLinkBitbucketAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.Bitbucket.Git.dll - <_SourceLinkBitbucketAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.Bitbucket.Git.dll - - - - - $(SourceLinkUrlInitializerTargets);_InitializeBitbucketGitSourceLinkUrl - $(SourceControlManagerUrlTranslationTargets);TranslateBitbucketGitUrlsInSourceControlInformation - - - - - - - - - - - - - - - <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> - - - - - - - - - - - - - - - - - - <_PublishTargetFrameworks Include="$(TargetFrameworks)" /> - - - - - - - <_GetAllRuntimeIdentifiersTargetFrameworks Include="$(TargetFrameworks)" /> - <_AllRuntimeIdentifiers Include="$(RuntimeIdentifiers);$(RuntimeIdentifier)" /> - - - - - - @(_AllRuntimeIdentifiers->Distinct()) - - - - - - - {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {F184B08F-C81C-45F6-A57F-5ABD9991F28F} - - - - - - $([System.IO.Path]::GetDirectoryName($(BundledRuntimeIdentifierGraphFile)))/PortableRuntimeIdentifierGraph.json - - - - - - - $(MSBuildThisFileDirectory)..\tools\net472\Microsoft.DotNet.ApiCompat.Task.dll - $(MSBuildThisFileDirectory)..\tools\net10.0\Microsoft.DotNet.ApiCompat.Task.dll - - - - - - - - - - - - - - <_UseRoslynToolsetPackage Condition="'$(ApiCompatUseRoslynToolsetPackagePath)' == 'true' and '@(PackageReference->AnyHaveMetadataValue('Identity', 'Microsoft.Net.Compilers.Toolset'))' == 'true'">true - - $([System.IO.Path]::GetDirectoryName('$(CSharpCoreTargetsPath)')) - - $(RoslynTargetsPath) - - $([System.IO.Path]::Combine('$(RoslynAssembliesPath)', 'bincore')) - - - - $(GenerateCompatibilitySuppressionFile) - - - - - - - <_apiCompatDefaultProjectSuppressionFile>$([MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', 'CompatibilitySuppressions.xml')) - - $(_apiCompatDefaultProjectSuppressionFile) - - - - - - - - - - - <_ApiCompatValidatePackageSemaphoreFile>$(IntermediateOutputPath)$(MSBuildThisFileName).semaphore - - CollectApiCompatInputs;_GetReferencePathFromInnerProjects;$(RunPackageValidationDependsOn) - - - - $(PackageId) - $([MSBuild]::NormalizePath('$(NuGetPackageRoot)', '$(PackageValidationBaselineName.ToLower())', '$(PackageValidationBaselineVersion)', '$(PackageValidationBaselineName.ToLower()).$(PackageValidationBaselineVersion).nupkg')) - <_packageValidationBaselinePath Condition="'$(DisablePackageBaselineValidation)' != 'true'">$(PackageValidationBaselinePath) - - - <_PackageTargetPath Include="@(NuGetPackOutput->WithMetadataValue('Extension', '.nupkg'))" Condition="!$([System.String]::new('%(Identity)').EndsWith('.symbols.nupkg'))" /> - - - - - - - - - - $(TargetPlatformMoniker) - - - - - - - - - - - - - - - $(MSBuildThisFileDirectory)..\..\..\NuGet.Build.Tasks.Pack.targets - true - - - - - - Sdks\Microsoft.NET.Sdk\tools\net472\NuGet.Build.Tasks.Pack.dll - NuGet.Build.Tasks.Pack.dll - - - - - - - - - $(AssemblyName) - $(Version) - true - _LoadPackInputItems; _GetTargetFrameworksOutput; _WalkEachTargetPerFramework; _GetPackageFiles; $(GenerateNuspecDependsOn) - $(Description) - Package Description - false - true - true - tools - lib - content;contentFiles - $(BeforePack); _GetRestoreProjectStyle; _IntermediatePack; GenerateNuspec; $(PackDependsOn) - true - symbols.nupkg - DeterminePortableBuildCapabilities - false - false - .dll; .exe; .winmd; .json; .pri; .xml - $(DefaultAllowedOutputExtensionsInPackageBuildOutputFolder) ;$(AllowedOutputExtensionsInPackageBuildOutputFolder) - .pdb; .mdb; $(AllowedOutputExtensionsInPackageBuildOutputFolder); $(AllowedOutputExtensionsInSymbolsPackageBuildOutputFolder) - .pdb - false - - - $(GenerateNuspecDependsOn) - - - Build;$(GenerateNuspecDependsOn) - - - - - - - $(TargetFramework) - - - - $(MSBuildProjectExtensionsPath) - $(BaseOutputPath)$(Configuration)\ - $(BaseIntermediateOutputPath)$(Configuration)\ - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFrameworks /> - - - - - - <_TargetFrameworks Include="$(_ProjectFrameworks.Split(';'))" /> - - - - - - - <_PackageFilesToDelete Include="@(_OutputPackItems)" /> - - - - - - false - - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - $(PrivateRepositoryUrl) - $(SourceRevisionId) - $(SourceBranchName) - - - - - - - $(MSBuildProjectFullPath) - - - - - - - - - - - - - - - - - <_ProjectPathWithVersion Include="$(MSBuildProjectFullPath)"> - $(PackageVersion) - 1.0.0 - - - - - - <_ProjectsWithTFM Include="$(MSBuildProjectFullPath)" AdditionalProperties="TargetFramework=%(_TargetFrameworks.Identity)" /> - <_ProjectsWithTFMNoBuild Include="$(MSBuildProjectFullPath)" AdditionalProperties="TargetFramework=%(_TargetFrameworks.Identity);BuildProjectReferences=false" /> - - - - - - - - - - - - - - - - - - - - - - - <_TfmWithDependenciesSuppressed Include="$(TargetFramework)" Condition="'$(SuppressDependenciesWhenPacking)' == 'true'" /> - - - - - - $(TargetFramework) - - - - - - - - - - - - - %(TfmSpecificPackageFile.RecursiveDir) - %(TfmSpecificPackageFile.BuildAction) - - - - - - <_TargetPathsToSymbolsWithTfm Include="@(DebugSymbolsProjectOutputGroupOutput)"> - $(TargetFramework) - - - - <_TargetPathsToSymbolsWithTfm Include="@(TfmSpecificDebugSymbolsFile)" /> - - - - - - <_PathToPriFile Include="$(ProjectPriFullPath)"> - $(ProjectPriFullPath) - $(ProjectPriFileName) - - - - - - - <_PackageFilesToExclude Include="@(Content)" Condition="'%(Content.Pack)' == 'false'" /> - - - - <_PackageFiles Include="@(Content)" Condition=" %(Content.Pack) != 'false' "> - Content - - <_PackageFiles Include="@(Compile)" Condition=" %(Compile.Pack) == 'true' "> - Compile - - <_PackageFiles Include="@(None)" Condition=" %(None.Pack) == 'true' "> - None - - <_PackageFiles Include="@(EmbeddedResource)" Condition=" %(EmbeddedResource.Pack) == 'true' "> - EmbeddedResource - - <_PackageFiles Include="@(ApplicationDefinition)" Condition=" %(ApplicationDefinition.Pack) == 'true' "> - ApplicationDefinition - - <_PackageFiles Include="@(Page)" Condition=" %(Page.Pack) == 'true' "> - Page - - <_PackageFiles Include="@(Resource)" Condition=" %(Resource.Pack) == 'true' "> - Resource - - <_PackageFiles Include="@(SplashScreen)" Condition=" %(SplashScreen.Pack) == 'true' "> - SplashScreen - - <_PackageFiles Include="@(DesignData)" Condition=" %(DesignData.Pack) == 'true' "> - DesignData - - <_PackageFiles Include="@(DesignDataWithDesignTimeCreatableTypes)" Condition=" %(DesignDataWithDesignTimeCreatableTypes.Pack) == 'true' "> - DesignDataWithDesignTimeCreatableTypes - - <_PackageFiles Include="@(CodeAnalysisDictionary)" Condition=" %(CodeAnalysisDictionary.Pack) == 'true' "> - CodeAnalysisDictionary - - <_PackageFiles Include="@(AndroidAsset)" Condition=" %(AndroidAsset.Pack) == 'true' "> - AndroidAsset - - <_PackageFiles Include="@(AndroidResource)" Condition=" %(AndroidResource.Pack) == 'true' "> - AndroidResource - - <_PackageFiles Include="@(BundleResource)" Condition=" %(BundleResource.Pack) == 'true' "> - BundleResource - - - - - - - <_IsNotSetContainersTargetsDir>false - <_IsNotSetContainersTargetsDir Condition=" '$(_ContainersTargetsDir)'=='' ">true - <_ContainersTargetsDir Condition="$(_IsNotSetContainersTargetsDir)">$(MSBuildThisFileDirectory)..\..\..\Containers\build\ - - - - - true - tasks - net10.0 - net472 - containerize - - $(MSBuildThisFileDirectory)..\$(ContainerTaskFolderName)\$(ContainerTaskFramework)\ - $(MSBuildThisFileDirectory)..\$(ContainerizeFolderName)\ - - $(ContainerCustomTasksFolder)$(MSBuildThisFileName).dll - - - - - - - - - - <_IsSDKContainerAllowedVersion>false - - <_IsSDKContainerAllowedVersion Condition="$([MSBuild]::VersionGreaterThan($(NetCoreSdkVersion), 7.0.100)) OR ( $([MSBuild]::VersionEquals($(NetCoreSdkVersion), 7.0.100)) AND ( $(NETCoreSdkVersion.Contains('-preview.7')) OR $(NETCoreSdkVersion.Contains('-rc')) OR $(NETCoreSdkVersion.Contains('-')) == false ) )">true - <_ContainerIsTargetingNet8TFM>false - <_ContainerIsTargetingNet8TFM Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' And $([MSBuild]::VersionGreaterThanOrEquals($(_TargetFrameworkVersionWithoutV), '8.0'))">true - <_ContainerIsSelfContained>false - <_ContainerIsSelfContained Condition="'$(SelfContained)' == 'true' or '$(PublishSelfContained)' == 'true'">true - true - - - - - - - - - - - - $(RuntimeIdentifier) - $(RuntimeIdentifiers) - linux-$(NETCoreSdkPortableRuntimeIdentifier.Split('-')[1]) - - <_InitialContainerBaseImage>$(ContainerBaseImage) - - - <_TargetRuntimeIdentifiers Include="$(ContainerRuntimeIdentifier)" Condition="'$(ContainerRuntimeIdentifier)' != ''" /> - <_TargetRuntimeIdentifiers Include="$(ContainerRuntimeIdentifiers)" Condition="@(_TargetRuntimeIdentifiers->Count()) == 0" /> - - - - - - <_TargetRuntimeIdentifiers Remove="$(_TargetRuntimeIdentifiers)" /> - - - - - - - $(RegistryUrl) - - $(PublishImageTag) - - $([System.DateTime]::UtcNow.ToString('yyyyMMddhhmmss')) - - - - - - - - - - - $(ContainerImageName) - - $(AssemblyName) - - latest - $([System.DateTime]::UtcNow.ToString('yyyyMMddhhmmss')) - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - $(Description) - $(Authors) - $(PackageProjectUrl) - $(PackageProjectUrl) - $(PackageVersion) - $(PackageLicenseExpression) - $(Title) - - - - - - - - - - - - - - - - - - - - - - <_TrimmedRepositoryUrl Condition="'$(RepositoryType)' == 'git' and '$(PrivateRepositoryUrl)' != '' and $(PrivateRepositoryUrl.EndsWith('.git'))">$(PrivateRepositoryUrl.Substring(0, $(PrivateRepositoryUrl.LastIndexOf('.git')))) - <_TrimmedRepositoryUrl Condition="'$(_TrimmedRepositoryUrl)' == '' and '$(PrivateRepositoryUrl)' != ''">$(PrivateRepositoryUrl) - - - - - - - - - _ContainerVerifySDKVersion; - ComputeContainerConfig; - _CheckContainersPackage; - - - - - - - <_ContainerIsTargetingWindows>false - <_ContainerIsTargetingWindows Condition="$(ContainerRuntimeIdentifier.StartsWith('win'))">true - - /app/ - C:\app\ - <_ContainerIsUsingMicrosoftDefaultImages Condition="'$(_InitialContainerBaseImage)' == ''">true - <_ContainerIsUsingMicrosoftDefaultImages Condition="'$(_InitialContainerBaseImage)' != ''">false - - - - ContainerUser - - - - - - - - - - - - <_ContainersPackageIdentity>Microsoft.NET.Build.Containers - <_WebDefaultSdkVersion>7.0.300 - <_WorkerDefaultSdkVersion>8.0.100 - <_ConsoleDefaultSdkVersion>8.0.200 - - <_SdkCanPublishWeb>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_WebDefaultSdkVersion)')) - <_SdkCanPublishWorker>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_WorkerDefaultSdkVersion)')) - <_SdkCanPublishConsole>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_ConsoleDefaultSdkVersion)')) - - <_ContainerPackageIsPresent>false - <_ContainerPackageIsPresent Condition="@(PackageReference->AnyHaveMetadataValue('Identity', '$(_ContainersPackageIdentity)'))">true - <_IsWebProject>false - <_IsWebProject Condition="@(ProjectCapability->AnyHaveMetadataValue('Identity', 'DotNetCoreWeb'))">true - <_IsWorkerProject>false - <_IsWorkerProject Condition="@(ProjectCapability->AnyHaveMetadataValue('Identity', 'DotNetCoreWorker'))">true - - - - - - - $(NetCoreRoot) - dotnet - dotnet.exe - - - - - - - - - - - - - - $(GeneratedContainerManifest) - $(GeneratedContainerConfiguration) - $(GeneratedContainerDigest) - $(GeneratedContainerMediaType) - - - - - - - - - <_SkipContainerPublishing>false - <_SkipContainerPublishing Condition="$(ContainerArchiveOutputPath) != '' or ( $(ContainerRegistry) == '' and ( $(LocalRegistry) == '' or $(LocalRegistry) == 'Docker' ) )">true - - <_SkipCreateImageIndex>false - <_SkipCreateImageIndex Condition="$(ContainerArchiveOutputPath) == '' and $(ContainerRegistry) == '' and $(LocalRegistry) == 'Podman'">true - - - <_SingleImageContainerFormat Condition="'$(ContainerImageFormat)' != ''">$(ContainerImageFormat) - - <_SingleImageContainerFormat Condition="$(_SkipContainerPublishing) == 'true' ">OCI - - - <_rids Include="$(ContainerRuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' != ''" /> - <_rids Include="$(RuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' == '' and '$(RuntimeIdentifiers)' != ''" /> - <_InnerBuild Include="$(MSBuildProjectFullPath)" AdditionalProperties=" ContainerRuntimeIdentifier=%(_rids.Identity); RuntimeIdentifier=%(_rids.Identity); ContainerBaseRegistry=$(ContainerBaseRegistry); ContainerBaseName=$(ContainerBaseName); ContainerBaseTag=$(ContainerBaseTag); ContainerBaseDigest=$(ContainerBaseDigest); ContainerRegistry=$(ContainerRegistry); _ContainerImageTags=@(ContainerImageTags, ';'); ContainerRepository=$(ContainerRepository); _ContainerLabel=@(ContainerLabel->'%(Identity):%(Value)'); _ContainerPort=@(ContainerPort->'%(Identity):%(Type)'); _ContainerEnvironmentVariables=@(ContainerEnvironmentVariable->'%(Identity):%(Value)'); ContainerGenerateLabels=$(ContainerGenerateLabels); ContainerGenerateLabelsImageBaseDigest=$(ContainerGenerateLabelsImageBaseDigest); _SkipContainerPublishing=$(_SkipContainerPublishing); ContainerImageFormat=$(_SingleImageContainerFormat); _IsMultiRIDBuild=false; _IsSingleRIDBuild=true; _InitialContainerBaseImage=$(_InitialContainerBaseImage) " /> - <_rids Remove="$(_rids)" /> - - - - - - - - - - - - - - <_ParsedContainerLabel Condition="'$(_ContainerLabel)' != ':'" Include="$(_ContainerLabel)" /> - - <_ParsedContainerPort Condition="'$(_ContainerPort)' != ':'" Include="$(_ContainerPort)" /> - - <_ParsedContainerEnvironmentVariables Condition="'$(_ContainerEnvironmentVariables)' != ':'" Include="$(_ContainerEnvironmentVariables)" /> - - - - - - <_IsMultiTFMBuild Condition="'$(TargetFrameworks)' != '' and '$(TargetFramework)' == ''">true - - <_HasCRIDsAndNoCRID Condition="'$(ContainerRuntimeIdentifiers)' != '' and '$(ContainerRuntimeIdentifier)' == ''">true - <_HasRIDs Condition="'$(RuntimeIdentifiers)' != ''">true - <_NoCRIDsOrCRIDorRID Condition="'$(ContainerRuntimeIdentifiers)' == '' and '$(ContainerRuntimeIdentifier)' == '' and '$(RuntimeIdentifier)' == ''">true - - <_IsMultiRIDBuild Condition="'$(BuildingInsideVisualStudio)' != 'true' and ('$(_HasCRIDsAndNoCRID)' == true or ('$(_HasRIDs)' == 'true' and '$(_NoCRIDsOrCRIDorRID)' == 'true'))">true - <_IsSingleRIDBuild Condition="'$(_IsMultiRIDBuild)' == ''">true - - - - - - - - - - - - - - - \ No newline at end of file From 7e475514c350e3f572bb4067bef858a6ec3547ce Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Mar 2026 03:14:53 +0000 Subject: [PATCH 4/5] Remove duplicate test helper method per code review feedback Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../Server/McpServerToolTests.cs | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs b/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs index 22ee805c2..18d889099 100644 --- a/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs +++ b/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs @@ -659,7 +659,7 @@ public void OutputSchema_Attribute_WithType_GeneratesSchema() [Fact] public async Task OutputSchema_Attribute_CallToolResult_PreservesStructuredContent() { - McpServerTool tool = McpServerTool.Create(ToolWithOutputSchemaReturningCallToolResult); + McpServerTool tool = McpServerTool.Create(ToolWithOutputSchemaAttribute); Assert.NotNull(tool.ProtocolTool.OutputSchema); Assert.Equal("object", tool.ProtocolTool.OutputSchema.Value.GetProperty("type").GetString()); @@ -791,17 +791,6 @@ private static CallToolResult ToolWithOutputSchemaAttribute() }; } - [McpServerTool(UseStructuredContent = true, OutputSchema = typeof(Person))] - private static CallToolResult ToolWithOutputSchemaReturningCallToolResult() - { - var person = new Person("John", 27); - return new CallToolResult() - { - Content = [new TextContentBlock { Text = $"{person.Name}, {person.Age}" }], - StructuredContent = JsonSerializer.SerializeToElement(person, McpJsonUtilities.DefaultOptions), - }; - } - [McpServerTool(UseStructuredContent = false, OutputSchema = typeof(Person))] private static CallToolResult ToolWithOutputSchemaButNoStructuredContent() { From f958a0e0ada2b1d3b7df711c37a293736668e431 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Mar 2026 03:20:26 +0000 Subject: [PATCH 5/5] Rename McpServerToolAttribute.OutputSchema to OutputSchemaType Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../Server/AIFunctionMcpServerTool.cs | 2 +- .../Server/McpServerToolAttribute.cs | 2 +- tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerTool.cs b/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerTool.cs index 98896e198..700d9d26d 100644 --- a/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerTool.cs +++ b/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerTool.cs @@ -206,7 +206,7 @@ private static McpServerToolCreateOptions DeriveOptions(MethodInfo method, McpSe newOptions.UseStructuredContent = toolAttr.UseStructuredContent; - if (toolAttr.OutputSchema is Type outputSchemaType) + if (toolAttr.OutputSchemaType is Type outputSchemaType) { newOptions.OutputSchema ??= AIJsonUtilities.CreateJsonSchema(outputSchemaType, serializerOptions: newOptions.SerializerOptions ?? McpJsonUtilities.DefaultOptions, diff --git a/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs index 0edb310e7..d67bac18c 100644 --- a/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs +++ b/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs @@ -284,7 +284,7 @@ public bool ReadOnly /// must also be set to for this property to take effect. /// /// - public Type? OutputSchema { get; set; } + public Type? OutputSchemaType { get; set; } /// /// Gets or sets the source URI for the tool's icon. diff --git a/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs b/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs index 18d889099..045a5d72f 100644 --- a/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs +++ b/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs @@ -780,7 +780,7 @@ public async Task OutputSchema_Options_OverridesReturnTypeSchema_InvokeAndValida AssertMatchesJsonSchema(tool.ProtocolTool.OutputSchema.Value, result.StructuredContent); } - [McpServerTool(UseStructuredContent = true, OutputSchema = typeof(Person))] + [McpServerTool(UseStructuredContent = true, OutputSchemaType = typeof(Person))] private static CallToolResult ToolWithOutputSchemaAttribute() { var person = new Person("John", 27); @@ -791,7 +791,7 @@ private static CallToolResult ToolWithOutputSchemaAttribute() }; } - [McpServerTool(UseStructuredContent = false, OutputSchema = typeof(Person))] + [McpServerTool(UseStructuredContent = false, OutputSchemaType = typeof(Person))] private static CallToolResult ToolWithOutputSchemaButNoStructuredContent() { return new CallToolResult()