{"id":2273,"date":"2025-07-22T17:34:16","date_gmt":"2025-07-22T17:34:16","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/07\/22\/mcp-c-sdk-gets-major-update-support-for-protocol-version-2025-06-18\/"},"modified":"2025-07-22T17:34:16","modified_gmt":"2025-07-22T17:34:16","slug":"mcp-c-sdk-gets-major-update-support-for-protocol-version-2025-06-18","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/07\/22\/mcp-c-sdk-gets-major-update-support-for-protocol-version-2025-06-18\/","title":{"rendered":"MCP C# SDK Gets Major Update: Support for Protocol Version 2025-06-18"},"content":{"rendered":"<p>The Model Context Protocol (MCP) continues to evolve, and we\u2019re excited to announce that the MCP C# SDK now supports the <a href=\"https:\/\/modelcontextprotocol.io\/specification\/2025-06-18\">latest specification version 2025-06-18<\/a>. This update brings significant new capabilities to .NET developers building AI applications, including an improved authentication protocol, elicitation support, structured tool output, and support for resource links in tool responses.<\/p>\n<p>Whether you\u2019re building AI assistants, automation tools, or integrating AI capabilities into existing .NET applications, these new features will help you create more robust and secure solutions.<\/p>\n<p>Here\u2019s a rundown of the new features and how to access them with the MCP C# SDK.<\/p>\n<h2>Improved Authentication Protocol<\/h2>\n<p>The 2025-06-18 specification introduces a new <strong>authentication protocol<\/strong> that enhances security and flexibility for AI applications. The new protocol separates the roles of authentication server and resource server, allowing easier integration with existing OAuth 2.0 and OpenID Connect providers.<\/p>\n<p>This is a large topic and has already been covered in detail in a separate blog post by Den Delimarsky, <a href=\"https:\/\/den.dev\/blog\/mcp-csharp-sdk-authorization\/\">OAuth In The MCP C# SDK: Simple, Secure, Standard<\/a>.<\/p>\n<h2>Elicitation: Interactive User Engagement<\/h2>\n<p>One of the most significant additions is the <strong>elicitation<\/strong> feature, which allows servers to request additional information from users during interactions. This enables more dynamic and interactive AI experiences, making it easier to gather necessary context before executing tasks.<\/p>\n<h3>Server Support for Elicitation<\/h3>\n<p>Servers request structured data from users with the <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.Server.McpServerExtensions.html#ModelContextProtocol_Server_McpServerExtensions_ElicitAsync_ModelContextProtocol_Server_IMcpServer_ModelContextProtocol_Protocol_ElicitRequestParams_System_Threading_CancellationToken_\">ElicitAsync<\/a> extension method on <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.Server.IMcpServer.html\">IMcpServer<\/a>.<br \/>\nThe C# SDK registers an instance of <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.Server.IMcpServer.html\">IMcpServer<\/a> with the dependency injection container,<br \/>\nso tools can simply add a parameter of type <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.Server.IMcpServer.html\">IMcpServer<\/a> to their method signature to access it.<\/p>\n<p>The MCP Server must specify the schema of each input value it is requesting from the user.<br \/>\nOnly primitive types (string, number, boolean) are supported for elicitation requests.<br \/>\nThe schema may include a description to help the user understand what is being requested.<\/p>\n<p>The server can request a single input or multiple inputs at once.<br \/>\nTo help distinguish multiple inputs, each input has a unique name.<\/p>\n<p>The following example demonstrates how a server could request a boolean response from the user.<\/p>\n<p>[McpServerTool, Description(&#8220;A simple game where the user has to guess a number between 1 and 10.&#8221;)]<br \/>\npublic async Task&lt;string&gt; GuessTheNumber(<br \/>\n    IMcpServer server, \/\/ Get the McpServer from DI container<br \/>\n    CancellationToken token<br \/>\n)<br \/>\n{<br \/>\n    \/\/ First ask the user if they want to play<br \/>\n    var playSchema = new RequestSchema<br \/>\n    {<br \/>\n        Properties =<br \/>\n        {<br \/>\n            [&#8220;Answer&#8221;] = new BooleanSchema()<br \/>\n        }<br \/>\n    };<\/p>\n<p>    var playResponse = await server.ElicitAsync(new ElicitRequestParams<br \/>\n    {<br \/>\n        Message = &#8220;Do you want to play a game?&#8221;,<br \/>\n        RequestedSchema = playSchema<br \/>\n    }, token);<\/p>\n<p>    \/\/ Check if user wants to play<br \/>\n    if (playResponse.Action != &#8220;accept&#8221; || playResponse.Content?[&#8220;Answer&#8221;].ValueKind != JsonValueKind.True)<br \/>\n    {<br \/>\n        return &#8220;Maybe next time!&#8221;;<br \/>\n    }<\/p>\n<p>    \/\/ remaining implementation of GuessTheNumber method<\/p>\n<h3>Client Support for Elicitation<\/h3>\n<p>Elicitation is an optional feature so clients declare their support for it in their capabilities as part of the initialize request. In the MCP C# SDK, this is done by configuring an <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.Protocol.ElicitationCapability.html#ModelContextProtocol_Protocol_ElicitationCapability_ElicitationHandler\">ElicitationHandler<\/a> in the <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.Client.McpClientOptions.html\">McpClientOptions<\/a>:<\/p>\n<p>McpClientOptions options = new()<br \/>\n{<br \/>\n    ClientInfo = new()<br \/>\n    {<br \/>\n        Name = &#8220;ElicitationClient&#8221;,<br \/>\n        Version = &#8220;1.0.0&#8221;<br \/>\n    },<br \/>\n    Capabilities = new()<br \/>\n    {<br \/>\n        Elicitation = new()<br \/>\n        {<br \/>\n            ElicitationHandler = HandleElicitationAsync<br \/>\n        }<br \/>\n    }<br \/>\n};<\/p>\n<p>The ElicitationHandler is an asynchronous method that will be called when the server requests additional information.<br \/>\nThe ElicitationHandler must request input from the user and return the data in a format that matches the requested schema.<br \/>\nThis will be highly dependent on the client application and how it interacts with the user.<\/p>\n<p>If the user provides the requested information, the ElicitationHandler should return an [ElicitResult] with the action set to \u201caccept\u201d and the content containing the user\u2019s input.<br \/>\nIf the user does not provide the requested information, the ElicitationHandler should return an [ElicitResult] with the action set to \u201creject\u201d and no content.<\/p>\n<p>Below is an example of how a console application might handle elicitation requests.<br \/>\nHere\u2019s an example implementation:<\/p>\n<p>async ValueTask&lt;ElicitResult&gt; HandleElicitationAsync(ElicitRequestParams? requestParams, CancellationToken token)<br \/>\n{<br \/>\n    \/\/ Bail out if the requestParams is null or if the requested schema has no properties<br \/>\n    if (requestParams?.RequestedSchema?.Properties == null)<br \/>\n    {<br \/>\n        return new ElicitResult(); \/\/ New ElicitResult with default Action &#8220;reject&#8221;<br \/>\n    }<\/p>\n<p>    \/\/ Process the elicitation request<br \/>\n    if (requestParams?.Message is not null)<br \/>\n    {<br \/>\n        Console.WriteLine(requestParams.Message);<br \/>\n    }<\/p>\n<p>    var content = new Dictionary&lt;string, JsonElement&gt;();<\/p>\n<p>    \/\/ Loop through requestParams.requestSchema.Properties dictionary requesting values for each property<br \/>\n    foreach (var property in requestParams.RequestedSchema.Properties)<br \/>\n    {<br \/>\n        if (property.Value is ElicitRequestParams.BooleanSchema booleanSchema)<br \/>\n        {<br \/>\n            Console.Write($&#8221;{booleanSchema.Description}: &#8220;);<br \/>\n            var clientInput = Console.ReadLine();<br \/>\n            bool parsedBool;<br \/>\n            if (bool.TryParse(clientInput, out parsedBool))<br \/>\n            {<br \/>\n                content[property.Key] = JsonSerializer.Deserialize&lt;JsonElement&gt;(JsonSerializer.Serialize(parsedBool));<br \/>\n            }<br \/>\n        }<br \/>\n        else if (property.Value is ElicitRequestParams.NumberSchema numberSchema)<br \/>\n        {<br \/>\n            Console.Write($&#8221;{numberSchema.Description}: &#8220;);<br \/>\n            var clientInput = Console.ReadLine();<br \/>\n            double parsedNumber;<br \/>\n            if (double.TryParse(clientInput, out parsedNumber))<br \/>\n            {<br \/>\n                content[property.Key] = JsonSerializer.Deserialize&lt;JsonElement&gt;(JsonSerializer.Serialize(parsedNumber));<br \/>\n            }<br \/>\n        }<br \/>\n        else if (property.Value is ElicitRequestParams.StringSchema stringSchema)<br \/>\n        {<br \/>\n            Console.Write($&#8221;{stringSchema.Description}: &#8220;);<br \/>\n            var clientInput = Console.ReadLine();<br \/>\n            content[property.Key] = JsonSerializer.Deserialize&lt;JsonElement&gt;(JsonSerializer.Serialize(clientInput));<br \/>\n        }<br \/>\n    }<\/p>\n<p>    \/\/ Return the user&#8217;s input<br \/>\n    return new ElicitResult<br \/>\n    {<br \/>\n        Action = &#8220;accept&#8221;,<br \/>\n        Content = content<br \/>\n    };<br \/>\n}<\/p>\n<h2>Structured Tool Output<\/h2>\n<p>Another important addition in the 2025-06-18 spec is support for <strong>structured tool output<\/strong>.<br \/>\nPreviously, tool results were allowed to contain structured data but the host\/LLM had to perform the parsing and interpretation<br \/>\nwithout any guidance from the tool itself.<br \/>\nNow, tools can return structured content that is explicitly defined, allowing AI models to better understand and process the output.<\/p>\n<p>The C# SDK supports this by allowing tools to specify that their output is structured, with the <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.Server.McpServerToolAttribute.html#ModelContextProtocol_Server_McpServerToolAttribute_UseStructuredContent\">UseStructuredContent<\/a> parameter<br \/>\nof the <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.Server.McpServerToolAttribute.html\">McpServerTool<\/a> attribute.<\/p>\n<p>[McpServerTool(UseStructuredContent = true), Description(&#8220;Gets a list of structured product data with detailed information.&#8221;)]<br \/>\npublic static List&lt;Product&gt; GetProducts(int count = 5)<\/p>\n<p>The C# SDK will generate a JSON schema for the tool\u2019s output based on the return type of the method<br \/>\nand will include this schema in the tool\u2019s metadata. Here is an example of the response to a tools\/list call<br \/>\nthat shows the output schema for the get_products tool:<\/p>\n<p>{<br \/>\n  &#8220;result&#8221;: {<br \/>\n    &#8220;tools&#8221;: [<br \/>\n      {<br \/>\n        &#8220;name&#8221;: &#8220;get_products&#8221;,<br \/>\n        &#8220;description&#8221;: &#8220;Gets a list of structured product data with detailed information.&#8221;,<br \/>\n        &#8220;inputSchema&#8221;: {<br \/>\n          &#8220;type&#8221;: &#8220;object&#8221;,<br \/>\n          &#8220;properties&#8221;: {<br \/>\n            &#8220;count&#8221;: {<br \/>\n              &#8220;type&#8221;: &#8220;integer&#8221;,<br \/>\n              &#8220;default&#8221;: 5<br \/>\n            }<br \/>\n          }<br \/>\n        },<br \/>\n        &#8220;outputSchema&#8221;: {<br \/>\n          &#8220;type&#8221;: &#8220;object&#8221;,<br \/>\n          &#8220;properties&#8221;: {<br \/>\n            &#8220;result&#8221;: {<br \/>\n              &#8220;type&#8221;: &#8220;array&#8221;,<br \/>\n              &#8220;items&#8221;: {<br \/>\n                &#8220;type&#8221;: &#8220;object&#8221;,<br \/>\n                &#8220;properties&#8221;: {<br \/>\n                  &#8220;id&#8221;: {<br \/>\n                    &#8220;description&#8221;: &#8220;Unique identifier for the product&#8221;,<br \/>\n                    &#8220;type&#8221;: &#8220;integer&#8221;<br \/>\n                  },<br \/>\n                  &#8220;name&#8221;: {<br \/>\n                    &#8220;description&#8221;: &#8220;Name of the product&#8221;,<br \/>\n                    &#8220;type&#8221;: &#8220;string&#8221;<br \/>\n                  },<br \/>\n&#8230;<\/p>\n<p>And when the tool is called, the tool response will include the structured output in the result.structuredContent field:<\/p>\n<p>{<br \/>\n  &#8220;result&#8221;: {<br \/>\n    &#8220;content&#8221;: [<br \/>\n      {<br \/>\n        &#8220;type&#8221;: &#8220;text&#8221;,<br \/>\n        &#8220;text&#8221;: &#8220;&lt;text content&gt;&#8221;<br \/>\n      }<br \/>\n    ],<br \/>\n    &#8220;structuredContent&#8221;: {<br \/>\n      &#8220;result&#8221;: [<br \/>\n        {<br \/>\n          &#8220;id&#8221;: 1,<br \/>\n          &#8220;name&#8221;: &#8220;Laptop Pro&#8221;,<br \/>\n          &#8220;description&#8221;: &#8220;High-quality laptop pro for professional use&#8221;,<br \/>\n          &#8220;price&#8221;: 278,<br \/>\n          &#8220;category&#8221;: &#8220;Electronics&#8221;,<br \/>\n          &#8220;brand&#8221;: &#8220;TechCorp&#8221;,<br \/>\n          &#8220;inStock&#8221;: 24,<br \/>\n          &#8220;rating&#8221;: 4.3,<br \/>\n          &#8220;features&#8221;: [<br \/>\n            &#8220;Durable construction&#8221;,<br \/>\n            &#8220;Modern design&#8221;,<br \/>\n            &#8220;Easy to use&#8221;<br \/>\n          ],<br \/>\n          &#8220;specifications&#8221;: {<br \/>\n            &#8220;Weight&#8221;: &#8220;1 lbs&#8221;,<br \/>\n            &#8220;Dimensions&#8221;: &#8220;12x12x2 inches&#8221;,<br \/>\n            &#8220;Warranty&#8221;: &#8220;2 years&#8221;<br \/>\n          }<br \/>\n        },<br \/>\n        &#8230;<br \/>\n      ]<br \/>\n    }<br \/>\n  },<br \/>\n  &#8220;id&#8221;: 2,<br \/>\n  &#8220;jsonrpc&#8221;: &#8220;2.0&#8221;<br \/>\n}<\/p>\n<h2>Resource Links in Tool Results<\/h2>\n<p>Tools can now include <strong>resource links<\/strong> in their results, enabling better resource discovery and navigation.<br \/>\nThis is particularly useful for tools that create or manage resources, allowing clients to easily access and interact with those resources.<\/p>\n<p>In the following example, a tool creates a resource with a random value and returns a link to this resource:<\/p>\n<p>[McpServerTool]<br \/>\n[Description(&#8220;Creates a resource with a random value and returns a link to this resource.&#8221;)]<br \/>\npublic async Task&lt;CallToolResult&gt; MakeAResource()<br \/>\n{<br \/>\n    int id = new Random().Next(1, 101); \/\/ 1 to 100 inclusive<\/p>\n<p>    var resource = ResourceGenerator.CreateResource(id);<\/p>\n<p>    var result = new CallToolResult();<\/p>\n<p>    result.Content.Add(new ResourceLinkBlock()<br \/>\n    {<br \/>\n        Uri = resource.Uri,<br \/>\n        Name = resource.Name<br \/>\n    });<\/p>\n<p>    return result;<br \/>\n}<\/p>\n<h2>Schema Improvements<\/h2>\n<p>Beyond the major features, several schema improvements enhance the developer experience:<\/p>\n<h3>Enhanced Metadata Support<\/h3>\n<p>The _meta field is now available on more interface types, providing better extensibility:<\/p>\n<p>public class CustomTool : Tool<br \/>\n{<br \/>\n    public ToolMetadata Meta { get; set; } = new()<br \/>\n    {<br \/>\n        [&#8220;version&#8221;] = &#8220;1.0.0&#8221;,<br \/>\n        [&#8220;author&#8221;] = &#8220;Your Name&#8221;,<br \/>\n        [&#8220;category&#8221;] = &#8220;data-analysis&#8221;<br \/>\n    };<br \/>\n}<\/p>\n<h3>Human-Friendly Titles<\/h3>\n<p><!-- https:\/\/github.com\/modelcontextprotocol\/csharp-sdk\/pull\/513 --><\/p>\n<p>Tools, Resources, and Prompts all now support separate name and title fields.<\/p>\n<p>In the MCP C# SDK, you can specify a title for your tool using the Title property of the <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.Server.McpServerToolAttribute.html\">McpServerTool<\/a> attribute.<\/p>\n<p>[McpServerToolType]<br \/>\npublic class EchoTool<br \/>\n{<br \/>\n    [McpServerTool(Name = &#8220;echo&#8221;, Title = &#8220;Echo Tool&#8221;)]<br \/>\n    [Description(&#8220;Echoes the message back to the client.&#8221;)]<br \/>\n    public static string Echo(string message) =&gt; $&#8221;Echo: {message}&#8221;;<br \/>\n}<\/p>\n<p>This produces the following tool metadata in the tools\/list response:<\/p>\n<p>&#8220;tools&#8221;: [<br \/>\n  {<br \/>\n    &#8220;name&#8221;: &#8220;echo&#8221;,<br \/>\n    &#8220;title&#8221;: &#8220;Echo Tool&#8221;,<br \/>\n    &#8220;description&#8221;: &#8220;Echoes the message back to the client.&#8221;,<br \/>\n    &#8220;inputSchema&#8221;: {<br \/>\n      &#8220;type&#8221;: &#8220;object&#8221;,<br \/>\n      &#8220;properties&#8221;: {<br \/>\n        &#8220;message&#8221;: {<br \/>\n          &#8220;type&#8221;: &#8220;string&#8221;<br \/>\n        }<br \/>\n      },<br \/>\n      &#8220;required&#8221;: [<br \/>\n        &#8220;message&#8221;<br \/>\n      ]<br \/>\n    },<\/p>\n<p>The name and title parameters of the <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.Server.McpServerToolAttribute.html\">McpServerTool<\/a> attribute are optional.<br \/>\nIf not specified, the name defaults to the lower snake case form of the method name and the title defaults to an empty string.<\/p>\n<h2>Getting Started with the Updated SDK<\/h2>\n<p>To start using these new features, update your MCP C# SDK package:<\/p>\n<p>dotnet add package ModelContextProtocol &#8211;prerelease<\/p>\n<p>When implementing these new capabilities, consider the following best practices:<\/p>\n<p>Always implement proper OAuth flows for production applications<br \/>\nUse resource indicators to prevent token misuse<br \/>\nValidate all elicited user input<br \/>\nFollow the <a href=\"https:\/\/modelcontextprotocol.io\/specification\/2025-06-18\/basic\/security_best_practices\">security best practices<\/a> outlined in the specification<\/p>\n<h2>What\u2019s Next<\/h2>\n<p>The MCP ecosystem continues to grow, and we\u2019re committed to keeping the C# SDK up-to-date with the latest specification changes.<\/p>\n<p>The MCP C# SDK is open source and we welcome contributions! Whether you\u2019re reporting bugs, suggesting features, or contributing code, your involvement helps make the SDK better for everyone.<\/p>\n<p><strong>GitHub Repository<\/strong>: <a href=\"https:\/\/github.com\/modelcontextprotocol\/csharp-sdk\">modelcontextprotocol\/csharp-sdk<\/a><br \/>\n<strong>Documentation<\/strong>: <a href=\"https:\/\/modelcontextprotocol.github.io\/csharp-sdk\/api\/ModelContextProtocol.html\">MCP C# SDK Docs<\/a><br \/>\n<strong>Samples<\/strong>: <a href=\"https:\/\/github.com\/modelcontextprotocol\/csharp-sdk\/tree\/main\/samples\">MCP C# Samples<\/a><\/p>\n<h2>Summary<\/h2>\n<p>The MCP C# SDK\u2019s support for protocol version 2025-06-18 brings powerful new capabilities to .NET developers building AI applications. With the new authentication protocol, elicitation support, structured tool output, and support for resource links in tool results, you can create more sophisticated and secure AI integrations than ever before.<\/p>\n<p>Start exploring these new features today by updating your SDK and reviewing the updated documentation. The future of AI application development with .NET just got brighter!<\/p>\n\n<div class=\"d-flex justify-content-left\"><a class=\"cta_button_link btn-primary mb-24\" href=\"https:\/\/github.com\/modelcontextprotocol\/csharp-sdk\" target=\"_blank\">Get Started with MCP C# SDK<\/a><\/div>\n<p>The post <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/mcp-csharp-sdk-2025-06-18-update\/\">MCP C# SDK Gets Major Update: Support for Protocol Version 2025-06-18<\/a> appeared first on <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\">.NET Blog<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>The Model Context Protocol (MCP) continues to evolve, and we\u2019re excited to announce that the MCP C# SDK now supports [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[7],"tags":[],"class_list":["post-2273","post","type-post","status-publish","format-standard","hentry","category-dotnet"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=2273"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2273\/revisions"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=2273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=2273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=2273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}