{"id":496804,"date":"2026-09-30T19:08:33","date_gmt":"2026-09-30T19:08:33","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=496804"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=496804","title":{"rendered":"\u041a\u0430\u0436\u0434\u044b\u0439 LLM-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u0430\u0442\u044c LLM \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u043a\u043e\u0434\u0443, \u043f\u0438\u0448\u0443\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (tools). \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0435\u0451 \u0432\u044b\u0437\u0432\u0430\u0442\u044c: \u0438\u043c\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0441\u0445\u0435\u043c\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c \u0442\u0435 \u0436\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0449\u0451 \u0440\u0430\u0437. \u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u043d\u0430 <code>tool()<\/code> \u0438\u0437 AI SDK. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f MCP-\u0441\u0435\u0440\u0432\u0435\u0440, \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0434 <code>registerTool<\/code>. \u0421\u043e\u0441\u0435\u0434\u043d\u044f\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Genkit, \u0438 \u0442\u0435 \u0436\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0438\u0448\u0443\u0442 \u0432 \u0442\u0440\u0435\u0442\u0438\u0439 \u0440\u0430\u0437, \u0447\u0435\u0440\u0435\u0437 <code>defineTool<\/code>. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c\u0438, \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0451\u0440\u0442\u043a\u0430.<\/p>\n<p>\u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443. <code>tool()<\/code> \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 <code>ai<\/code>, <code>defineTool<\/code> \u2014 \u043c\u0435\u0442\u043e\u0434 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 Genkit, <code>registerTool<\/code> \u2014 \u043c\u0435\u0442\u043e\u0434 <code>McpServer<\/code> \u0438\u0437 MCP SDK. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0438 \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442.<\/p>\n<p>\u0411\u0435\u0437 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u0430 \u0441\u0435\u0431\u044f: \u043a\u043e\u0434, \u0438\u043c\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0441\u0445\u0435\u043c\u044b \u0432\u0445\u043e\u0434\u0430 \u0438 \u0432\u044b\u0445\u043e\u0434\u0430. \u041c\u043e\u0434\u0435\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0438 \u043a\u0430\u043a \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u042d\u0442\u043e\u0433\u043e \u0436\u0435 \u0445\u0432\u0430\u0442\u0438\u0442, \u0447\u0442\u043e\u0431\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 CLI. \u0415\u0441\u043b\u0438 \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, \u043e\u043d \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u2014 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f.<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0432 \u044d\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u2014 \u0441\u0445\u0435\u043c\u044b, \u0438 \u043e\u043d\u0438 \u0443\u0436\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Standard Schema<\/h3>\n<p><a href=\"https:\/\/standardschema.dev\" rel=\"noopener nofollow\">Standard Schema<\/a> \u2014 TypeScript-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u0415\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0430\u0432\u0442\u043e\u0440\u044b Zod, Valibot \u0438 ArkType. \u041a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 Standard Schema, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0439 \u0438\u0437 \u043b\u044e\u0431\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<p>\u0412\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u2014 \u043e\u0434\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, <code>~standard<\/code>. \u0412 \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"typescript\">interface StandardSchemaV1&lt;Input = unknown, Output = Input&gt; {  readonly '~standard': {    readonly version: 1;    readonly vendor: string;    readonly validate: (value: unknown) =&gt; Result&lt;Output&gt; | Promise&lt;Result&lt;Output&gt;&gt;;    readonly types?: { readonly input: Input; readonly output: Output };  };}\/\/ Result&lt;Output&gt; \u2014 \u044d\u0442\u043e { value: Output } \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0445\u0435 \u0438 { issues: Issue[] } \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u041a\u043e\u0434 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"typescript\">const result = await schema['~standard'].validate(data);if (result.issues) throw new Error(result.issues.map((issue) =&gt; issue.message).join('; '));const value = result.value; \/\/ \u0442\u0438\u043f \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 output \u0441\u0445\u0435\u043c\u044b<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 30 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 Zod, Valibot, ArkType, yup \u0438 joi. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0435\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 60 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 tRPC, TanStack Form \u0438 Router, Hono, Elysia, oRPC \u0438 React Hook Form.<\/p>\n<p>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0442\u0438\u043f\u043e\u0432. \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 <code>@standard-schema\/spec<\/code> \u043d\u0435\u0442 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u043a\u043e\u0434\u0430, \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u0441\u0435\u0431\u0435, \u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Standard JSON Schema<\/h3>\n<p>\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443 \u043d\u0443\u0436\u043d\u043e \u043e\u0442 \u0441\u0445\u0435\u043c. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u2014 JSON Schema: \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c JSON Schema \u0435\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p><a href=\"https:\/\/standardschema.dev\/json-schema\" rel=\"noopener nofollow\">Standard JSON Schema<\/a> \u2014 \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0442\u0435\u0445 \u0436\u0435 \u0430\u0432\u0442\u043e\u0440\u043e\u0432. \u041e\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0442\u043e \u0436\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>~standard<\/code> \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0432 JSON Schema:<\/p>\n<pre><code class=\"typescript\">schema['~standard'].jsonSchema.input({ target: 'draft-2020-12' });schema['~standard'].jsonSchema.output({ target: 'openapi-3.0' });<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code>target<\/code> \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0438\u0430\u043b\u0435\u043a\u0442 JSON Schema, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c \u043d\u0443\u0436\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435. OpenAI, Anthropic \u0438 MCP \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 JSON Schema draft 2020-12, \u0430 \u043f\u043e\u043b\u0435 <code>parameters<\/code> \u0443 Gemini \u2014 \u0444\u043e\u0440\u043c\u0430\u0442 OpenAPI 3.0.<\/p>\n<p><code>input<\/code> \u0438 <code>output<\/code> \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0445\u0435\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0441\u0445\u0435\u043c\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>\"42\"<\/code> \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>42<\/code>, \u0443 \u0435\u0451 \u0432\u0445\u043e\u0434\u0430 \u043e\u0434\u043d\u0430 JSON Schema, \u0430 \u0443 \u0432\u044b\u0445\u043e\u0434\u0430 \u2014 \u0434\u0440\u0443\u0433\u0430\u044f.<\/p>\n<p>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b: \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0438\u0437 \u043d\u0438\u0445 \u0438\u043b\u0438 \u043e\u0431\u0435. \u0421\u0445\u0435\u043c\u044b Zod 4.2+ \u0438 ArkType 2.1.28+ \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043e\u0431\u0435. \u0412 Valibot 1.2+ \u0441\u0445\u0435\u043c\u0443 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0432 <code>toStandardJsonSchema()<\/code> \u0438\u0437 <code>@valibot\/to-json-schema<\/code>, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0442\u043e\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0431\u0435.<\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Standard Tool<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0441\u0445\u0435\u043c\u044b \u0441\u0430\u043c\u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0432\u044b\u0434\u0430\u044e\u0442 JSON Schema, \u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0438\u043c\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043b\u044f \u043d\u0435\u0451 \u0441\u0432\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<p><code>StandardToolV0<\/code> \u2014 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u0430\u043a\u0438\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442:<\/p>\n<pre><code class=\"typescript\">import type { StandardSchemaV1, StandardJSONSchemaV1 } from '@standard-schema\/spec';interface StandardToolV0&lt;  Input = unknown, Output = unknown, FormattedOutput = Output, Context = unknown,&gt; {  name: string;  title?: string;  description: string;  inputSchema?: StandardSchemaV1&lt;Input, unknown&gt; &amp; StandardJSONSchemaV1&lt;Input, unknown&gt;;  outputSchema?: StandardSchemaV1&lt;unknown, Output&gt; &amp; StandardJSONSchemaV1&lt;unknown, Output&gt;;  meta?: Record&lt;string, unknown&gt;;  execute(input: Input, context?: Context): FormattedOutput | Promise&lt;FormattedOutput&gt;;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<ul>\n<li>\n<p><code>name<\/code> \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442.<\/p>\n<\/li>\n<li>\n<p><code>description<\/code> \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u043a\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><code>title<\/code> \u2014 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439. MCP-\u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><code>inputSchema<\/code> \u0438 <code>outputSchema<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c JSON Schema. <code>Input<\/code> \u2014 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0438\u043f <code>inputSchema<\/code>, \u0430 <code>Output<\/code> \u2014 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0438\u043f <code>outputSchema<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0438 \u0441\u0445\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><code>meta<\/code> \u2014 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>{ destructive: true }<\/code>. \u0418\u0445 \u0447\u0438\u0442\u0430\u044e\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438, \u0430 <code>execute<\/code> \u0438\u0445 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><code>execute<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, <code>context<\/code>, \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043b\u043e\u043a\u0430\u043b\u044c \u0438\u043b\u0438 \u0442\u043e\u043a\u0435\u043d \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. <code>context<\/code> \u043d\u0435 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 JSON Schema.<\/p>\n<\/li>\n<li>\n<p><code>FormattedOutput<\/code> \u2014 \u0442\u043e, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>execute<\/code>, \u0435\u0441\u043b\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e <code>Output<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u043a \u0438 \u043e\u0431\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, <code>StandardToolV0<\/code> \u2014 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f. \u041f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u044d\u0442\u0438\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438:<\/p>\n<pre><code class=\"typescript\">import { z } from 'zod'; \/\/ \u0438\u043b\u0438 ArkType, \u0438\u043b\u0438 Valibotimport type { StandardToolV0 } from 'standard-tool';export const getWeather: StandardToolV0&lt;{ city: string }, { tempC: number }&gt; = {  name: 'get_weather',  description: 'Current temperature for a city',  inputSchema: z.object({ city: z.string() }),  outputSchema: z.object({ tempC: z.number() }),  execute: async ({ city }) =&gt; ({ tempC: await fetchTemperature(city) }),};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442 \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432, \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<p>\u0412 \u043f\u0430\u043a\u0435\u0442\u0435 <code>standard-tool<\/code> \u0435\u0441\u0442\u044c \u0438 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043e\u043a\u043e\u043b\u043e 90 \u0441\u0442\u0440\u043e\u043a. <code>standardTool()<\/code> \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e <code>execute<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0432\u0445\u043e\u0434 \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e\u0441\u043b\u0435, \u0430 \u043f\u0440\u0438 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0431\u0440\u043e\u0441\u0430\u0435\u0442 <code>StandardToolValidationError<\/code>. <code>withFormattedOutput()<\/code> \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0445 \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a.<\/p>\n<h3>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438<\/h3>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0435\u0441\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435. \u041e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0430\u043a\u0435\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0445\u0435\u043c\u0430 \u0432\u0445\u043e\u0434\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0445\u0435\u043c\u0430 \u0432\u044b\u0445\u043e\u0434\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">AI SDK<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>ai<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043a\u043b\u044e\u0447 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>tools<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>inputSchema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>outputSchema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>execute<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Mastra<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>@mastra\/core<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>id<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>inputSchema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>outputSchema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>execute<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Genkit<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>genkit<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>name<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>inputSchema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>outputSchema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2-\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>defineTool<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">LangChain<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>@langchain\/core<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>name<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>schema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">1-\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>tool<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">MCP SDK<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>@modelcontextprotocol\/sdk<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1-\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>registerTool<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>inputSchema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>outputSchema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">3-\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>registerTool<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>StandardToolV0<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442, \u044d\u0442\u043e \u0442\u0438\u043f<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>name<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>inputSchema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>outputSchema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>execute<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0421\u0438\u043b\u044c\u043d\u0435\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0445\u0435\u043c\u044b:<\/p>\n<ul>\n<li>\n<p><strong>AI SDK:<\/strong> Standard Schema, Zod \u0438\u043b\u0438 JSON Schema<\/p>\n<\/li>\n<li>\n<p><strong>Mastra:<\/strong> Standard Schema \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e Standard JSON Schema, Zod \u0438\u043b\u0438 JSON Schema<\/p>\n<\/li>\n<li>\n<p><strong>Genkit:<\/strong> Zod \u0438\u043b\u0438 JSON Schema<\/p>\n<\/li>\n<li>\n<p><strong>LangChain:<\/strong> Zod \u0438\u043b\u0438 JSON Schema<\/p>\n<\/li>\n<li>\n<p><strong>MCP SDK:<\/strong> \u0442\u043e\u043b\u044c\u043a\u043e Zod<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 <code>ai<\/code> 7.0, <code>@mastra\/core<\/code> 1.72, <code>genkit<\/code> 1.42, <code>@langchain\/core<\/code> 1.2 \u0438 <code>@modelcontextprotocol\/sdk<\/code> 1.31.<\/p>\n<p>\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0445\u043e\u0436\u0438, \u043d\u043e \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u044b, \u0438 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u043f\u0430\u043a\u0435\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043e\u0431\u0451\u0440\u0442\u043a\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c. Mastra \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0438 \u0442\u043e \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443: \u0435\u0451 \u0430\u0433\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0437 AI SDK. \u0410 \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a.<\/p>\n<p>\u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435. \u041e\u0431\u044a\u0435\u043a\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0441\u0432\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a. \u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0451 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438\u043b\u0438 \u0442\u0435\u0441\u0442\u0430, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0448 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0435 \u0441\u0442\u0430\u0432\u044f\u0442.<\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<\/h3>\n<p>\u0423 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0435 \u043e\u0434\u0438\u043d \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<p><strong>\u0412\u044b\u0437\u0432\u0430\u0442\u044c.<\/strong> <code>execute<\/code> \u2014 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"typescript\">const { tempC } = await getWeather.execute({ city: 'Paris' });<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><strong>\u041e\u0442\u0434\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438.<\/strong> <code>name<\/code>, <code>description<\/code> \u0438 JSON Schema, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0434\u0430\u0451\u0442 <code>inputSchema<\/code>, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430. \u041a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0435\u0451 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0443\u0445\u043e\u0434\u044f\u0442 \u0432 <code>execute<\/code>. \u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u2014 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435.<\/p>\n<p><strong>\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c.<\/strong> \u041f\u043e\u043b\u0435\u0439 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435, \u0444\u043e\u0440\u043c\u044b \u043f\u043e <code>inputSchema<\/code> \u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b CLI:<\/p>\n<pre><code class=\"typescript\">function describeTools(tools: StandardToolV0[]) {  return tools.map((tool) =&gt; ({    name: tool.name,    description: tool.description,    input: tool.inputSchema?.['~standard'].jsonSchema.input({ target: 'draft-2020-12' }),    output: tool.outputSchema?.['~standard'].jsonSchema.output({ target: 'draft-2020-12' }),  }));}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><strong>\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/strong> \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0438\u0445 \u043a\u0430\u043a \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435:<\/p>\n<pre><code class=\"typescript\">export const getOrders: StandardToolV0&lt;{ userId: string }, Order[]&gt; = {  name: 'get_orders',  description: \"List a user's orders\",  inputSchema: z.object({ userId: z.string() }),  execute: ({ userId }) =&gt; api.get(`\/orders\/${userId}`),};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u043b\u0438 \u043e\u0442\u0434\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u0441\u0430\u043c\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0438 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e AI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430.<\/p>\n<p><strong>\u0412\u0437\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 RPC-\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b.<\/strong> \u0423 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b tRPC \u0438\u043b\u0438 oRPC \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0445\u0435\u043c\u044b \u0432\u0445\u043e\u0434\u0430 \u0438 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0415\u0441\u043b\u0438 \u0441\u0445\u0435\u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 Standard JSON Schema, \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u0430 <code>execute<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 (\u0432 tRPC \u044d\u0442\u043e <code>createCaller<\/code>). <a href=\"https:\/\/standard-tool.js.org\/why.html#from-procedures-you-already-have\" rel=\"noopener nofollow\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0441 tRPC<\/a>.<\/p>\n<h3>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043c\u043e\u0434\u0435\u043b\u044f\u043c \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c<\/h3>\n<p>\u041b\u044e\u0431\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u0432\u0435 \u0432\u0435\u0449\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438\u0437 <code>name<\/code>, <code>description<\/code> \u0438 JSON Schema. \u041f\u043e\u0442\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 <code>execute<\/code> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u041e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043a \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438 \u0434\u0438\u0430\u043b\u0435\u043a\u0442 JSON Schema:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u043b\u0435 \u0441\u0445\u0435\u043c\u044b<\/p>\n<\/th>\n<th>\n<p align=\"left\"><code>target<\/code><\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u0430\u043a \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">OpenAI Responses API<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>parameters<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>draft-2020-12<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>function_call_output<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Anthropic<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>input_schema<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>draft-2020-12<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u043b\u043e\u043a <code>tool_result<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Gemini<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>parameters<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>openapi-3.0<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0447\u0430\u0441\u0442\u044c <code>functionResponse<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">MCP<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>inputSchema<\/code> \u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>draft-2020-12<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>{ content, structuredContent?, isError? }<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">AI SDK<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>inputSchema<\/code>, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 Standard Schema \u043a\u0430\u043a \u0435\u0441\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435 \u043d\u0443\u0436\u0435\u043d<\/p>\n<\/td>\n<td>\n<p align=\"left\">SDK \u0441\u0430\u043c \u0432\u0435\u0434\u0451\u0442 \u0446\u0438\u043a\u043b<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0431\u0435 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Anthropic:<\/p>\n<pre><code class=\"typescript\">import type Anthropic from '@anthropic-ai\/sdk';import type { StandardToolV0 } from 'standard-tool';export function toAnthropicTool(tool: StandardToolV0): Anthropic.Tool {  const schema = tool.inputSchema?.['~standard'].jsonSchema.input({ target: 'draft-2020-12' });  return {    name: tool.name,    description: tool.description,    input_schema: (schema ?? { type: 'object', properties: {} }) as Anthropic.Tool.InputSchema,  };}export async function runToolUse(  tools: StandardToolV0[],  block: Anthropic.ToolUseBlock,): Promise&lt;Anthropic.ToolResultBlockParam&gt; {  try {    const tool = tools.find((t) =&gt; t.name === block.name);    if (!tool) throw new Error(`Unknown tool: ${block.name}`);    const result = await tool.execute(block.input);    return { type: 'tool_result', tool_use_id: block.id, content: JSON.stringify(result) };  } catch (error) {    const message = error instanceof Error ? error.message : String(error);    return { type: 'tool_result', tool_use_id: block.id, content: message, is_error: true };  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code>execute<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438\u0437 <code>standardTool()<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u0445 \u043f\u043e <code>inputSchema<\/code>, \u0430 \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443.<\/p>\n<p>\u0414\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043f\u043e\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u043f\u043e\u043b\u0435 \u0438 <code>target<\/code> \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0410\u0434\u0430\u043f\u0442\u0435\u0440 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0438 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0440\u0430\u0432\u043e\u043a \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445.<\/p>\n<h3>\u0418\u0442\u043e\u0433<\/h3>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u0430 \u0441\u0435\u0431\u044f, \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c, \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043e\u0442\u0434\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u043b\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443, \u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0451 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<p><code>StandardToolV0<\/code> \u2014 \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435: \u043e\u0434\u0438\u043d TypeScript-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0435\u0437 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430. \u0424\u043e\u0440\u043c\u0430 <code>V0<\/code> \u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0451 \u043c\u0435\u043d\u044f\u044e\u0442, \u043f\u043e\u0439\u0434\u0443\u0442 \u0432 \u043d\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u2014 <code>StandardToolV1<\/code>. \u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f, \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043d\u0430 <a href=\"https:\/\/standard-tool.js.org\" rel=\"noopener nofollow\">standard-tool.js.org<\/a>.<\/p>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u0432\u043e\u0437\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 <a href=\"https:\/\/xkcd.com\/927\/\" rel=\"noopener nofollow\">XKCD 927<\/a>: \u043f\u043e\u043a\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0438 \u043d\u0435 \u0447\u0438\u0442\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442. Standard Schema \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0435\u0437 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f, \u043d\u043e \u0437\u0430 \u043d\u0435\u0439 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u043e\u044f\u043b\u0438 \u0430\u0432\u0442\u043e\u0440\u044b Zod, Valibot \u0438 ArkType. \u0423 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0434\u0438\u043d \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0438 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u0435\u0442.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1088768\/\">https:\/\/habr.com\/ru\/articles\/1088768\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0427\u0442\u043e\u0431\u044b \u0434\u0430\u0442\u044c LLM \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u043a\u043e\u0434\u0443, \u043f\u0438\u0448\u0443\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b (tools). \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0435\u0451 \u0432\u044b\u0437\u0432\u0430\u0442\u044c: \u0438\u043c\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0441\u0445\u0435\u043c\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.\u041f\u043e\u0442\u043e\u043c \u0442\u0435 \u0436\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0449\u0451 \u0440\u0430\u0437. \u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u043d\u0430 tool() \u0438\u0437 AI SDK. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f MCP-\u0441\u0435\u0440\u0432\u0435\u0440, \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0434 registerTool. \u0421\u043e\u0441\u0435\u0434\u043d\u044f\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Genkit, \u0438 \u0442\u0435 \u0436\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0438\u0448\u0443\u0442 \u0432 \u0442\u0440\u0435\u0442\u0438\u0439 \u0440\u0430\u0437, \u0447\u0435\u0440\u0435\u0437 defineTool. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c\u0438, \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0451\u0440\u0442\u043a\u0430.\u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443. tool() \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 ai, defineTool \u2014 \u043c\u0435\u0442\u043e\u0434 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 Genkit, registerTool \u2014 \u043c\u0435\u0442\u043e\u0434 McpServer \u0438\u0437 MCP SDK. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0438 \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442.\u0411\u0435\u0437 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u0430 \u0441\u0435\u0431\u044f: \u043a\u043e\u0434, \u0438\u043c\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0441\u0445\u0435\u043c\u044b \u0432\u0445\u043e\u0434\u0430 \u0438 \u0432\u044b\u0445\u043e\u0434\u0430. \u041c\u043e\u0434\u0435\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0438 \u043a\u0430\u043a \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u042d\u0442\u043e\u0433\u043e \u0436\u0435 \u0445\u0432\u0430\u0442\u0438\u0442, \u0447\u0442\u043e\u0431\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 CLI. \u0415\u0441\u043b\u0438 \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, \u043e\u043d \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u2014 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f.\u0421\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0432 \u044d\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u2014 \u0441\u0445\u0435\u043c\u044b, \u0438 \u043e\u043d\u0438 \u0443\u0436\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b.\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Standard SchemaStandard Schema \u2014 TypeScript-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u0415\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0430\u0432\u0442\u043e\u0440\u044b Zod, Valibot \u0438 ArkType. \u041a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 Standard Schema, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0439 \u0438\u0437 \u043b\u044e\u0431\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.\u0412\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u2014 \u043e\u0434\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, ~standard. \u0412 \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435:interface StandardSchemaV1&lt;Input = unknown, Output = Input&gt; {  readonly &#8216;~standard&#8217;: {    readonly version: 1;    readonly vendor: string;    readonly validate: (value: unknown) =&gt; Result&lt;Output&gt; | Promise&lt;Result&lt;Output&gt;&gt;;    readonly types?: { readonly input: Input; readonly output: Output };  };}\/\/ Result&lt;Output&gt; \u2014 \u044d\u0442\u043e { value: Output } \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0445\u0435 \u0438 { issues: Issue[] } \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435.\u041a\u043e\u0434 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:const result = await schema[&#8216;~standard&#8217;].validate(data);if (result.issues) throw new Error(result.issues.map((issue) =&gt; issue.message).join(&#8216;; &#8216;));const value = result.value; \/\/ \u0442\u0438\u043f \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 output \u0441\u0445\u0435\u043c\u044b\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 30 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 Zod, Valibot, ArkType, yup \u0438 joi. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0435\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 60 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 tRPC, TanStack Form \u0438 Router, Hono, Elysia, oRPC \u0438 React Hook Form.\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0442\u0438\u043f\u043e\u0432. \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 @standard-schema\/spec \u043d\u0435\u0442 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u043a\u043e\u0434\u0430, \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u0441\u0435\u0431\u0435, \u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043f\u0430\u043a\u0435\u0442\u0430.\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Standard JSON Schema\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443 \u043d\u0443\u0436\u043d\u043e \u043e\u0442 \u0441\u0445\u0435\u043c. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u2014 JSON Schema: \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c JSON Schema \u0435\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.Standard JSON Schema \u2014 \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0442\u0435\u0445 \u0436\u0435 \u0430\u0432\u0442\u043e\u0440\u043e\u0432. \u041e\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0442\u043e \u0436\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e ~standard \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0432 JSON Schema:schema[&#8216;~standard&#8217;].jsonSchema.input({ target: &#8216;draft-2020-12&#8217; });schema[&#8216;~standard&#8217;].jsonSchema.output({ target: &#8216;openapi-3.0&#8217; });target \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0438\u0430\u043b\u0435\u043a\u0442 JSON Schema, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c \u043d\u0443\u0436\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435. OpenAI, Anthropic \u0438 MCP \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 JSON Schema draft 2020-12, \u0430 \u043f\u043e\u043b\u0435 parameters \u0443 Gemini \u2014 \u0444\u043e\u0440\u043c\u0430\u0442 OpenAPI 3.0.input \u0438 output \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0445\u0435\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0441\u0445\u0435\u043c\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 &#171;42&#187; \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 42, \u0443 \u0435\u0451 \u0432\u0445\u043e\u0434\u0430 \u043e\u0434\u043d\u0430 JSON Schema, \u0430 \u0443 \u0432\u044b\u0445\u043e\u0434\u0430 \u2014 \u0434\u0440\u0443\u0433\u0430\u044f.\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b: \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0438\u0437 \u043d\u0438\u0445 \u0438\u043b\u0438 \u043e\u0431\u0435. \u0421\u0445\u0435\u043c\u044b Zod 4.2+ \u0438 ArkType 2.1.28+ \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043e\u0431\u0435. \u0412 Valibot 1.2+ \u0441\u0445\u0435\u043c\u0443 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0432 toStandardJsonSchema() \u0438\u0437 @valibot\/to-json-schema, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0442\u043e\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0431\u0435.\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Standard Tool\u041a\u043e\u0433\u0434\u0430 \u0441\u0445\u0435\u043c\u044b \u0441\u0430\u043c\u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0432\u044b\u0434\u0430\u044e\u0442 JSON Schema, \u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0438\u043c\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043b\u044f \u043d\u0435\u0451 \u0441\u0432\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442.StandardToolV0 \u2014 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u0430\u043a\u0438\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442:import type { StandardSchemaV1, StandardJSONSchemaV1 } from &#8216;@standard-schema\/spec&#8217;;interface StandardToolV0&lt;  Input = unknown, Output = unknown, FormattedOutput = Output, Context = unknown,&gt; {  name: string;  title?: string;  description: string;  inputSchema?: StandardSchemaV1&lt;Input, unknown&gt; &amp; StandardJSONSchemaV1&lt;Input, unknown&gt;;  outputSchema?: StandardSchemaV1&lt;unknown, Output&gt; &amp; StandardJSONSchemaV1&lt;unknown, Output&gt;;  meta?: Record&lt;string, unknown&gt;;  execute(input: Input, context?: Context): FormattedOutput | Promise&lt;FormattedOutput&gt;;}name \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442.description \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u043a\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c.title \u2014 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439. MCP-\u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432.inputSchema \u0438 outputSchema \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c JSON Schema. Input \u2014 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0438\u043f inputSchema, \u0430 Output \u2014 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0438\u043f outputSchema, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0438 \u0441\u0445\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.meta \u2014 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 { destructive: true }. \u0418\u0445 \u0447\u0438\u0442\u0430\u044e\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438, \u0430 execute \u0438\u0445 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442.execute \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, context, \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043b\u043e\u043a\u0430\u043b\u044c \u0438\u043b\u0438 \u0442\u043e\u043a\u0435\u043d \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. context \u043d\u0435 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 JSON Schema.FormattedOutput \u2014 \u0442\u043e, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 execute, \u0435\u0441\u043b\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e Output.\u041a\u0430\u043a \u0438 \u043e\u0431\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, StandardToolV0 \u2014 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f. \u041f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u044d\u0442\u0438\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438:import { z } from &#8216;zod&#8217;; \/\/ \u0438\u043b\u0438 ArkType, \u0438\u043b\u0438 Valibotimport type { StandardToolV0 } from &#8216;standard-tool&#8217;;export const getWeather: StandardToolV0&lt;{ city: string }, { tempC: number }&gt; = {  name: &#8216;get_weather&#8217;,  description: &#8216;Current temperature for a city&#8217;,  inputSchema: z.object({ city: z.string() }),  outputSchema: z.object({ tempC: z.number() }),  execute: async ({ city }) =&gt; ({ tempC: await fetchTemperature(city) }),};\u0418\u043c\u043f\u043e\u0440\u0442 \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432, \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442.\u0412 \u043f\u0430\u043a\u0435\u0442\u0435 standard-tool \u0435\u0441\u0442\u044c \u0438 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043e\u043a\u043e\u043b\u043e 90 \u0441\u0442\u0440\u043e\u043a. standardTool() \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e execute \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0432\u0445\u043e\u0434 \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e\u0441\u043b\u0435, \u0430 \u043f\u0440\u0438 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0431\u0440\u043e\u0441\u0430\u0435\u0442 StandardToolValidationError. withFormattedOutput() \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0445 \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a.\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438\u0422\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0435\u0441\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435. \u041e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432:\u041f\u0430\u043a\u0435\u0442\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0421\u0445\u0435\u043c\u0430 \u0432\u0445\u043e\u0434\u0430\u0421\u0445\u0435\u043c\u0430 \u0432\u044b\u0445\u043e\u0434\u0430\u0424\u0443\u043d\u043a\u0446\u0438\u044fAI SDKai\u043a\u043b\u044e\u0447 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 toolsinputSchemaoutputSchemaexecuteMastra@mastra\/coreidinputSchemaoutputSchemaexecuteGenkitgenkitnameinputSchemaoutputSchema2-\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 defineToolLangChain@langchain\/corenameschema\u043d\u0435\u04421-\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 toolMCP SDK@modelcontextprotocol\/sdk1-\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 registerToolinputSchemaoutputSchema3-\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 registerToolStandardToolV0\u043d\u0435\u0442, \u044d\u0442\u043e \u0442\u0438\u043fnameinputSchemaoutputSchemaexecute\u0421\u0438\u043b\u044c\u043d\u0435\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0445\u0435\u043c\u044b:AI SDK: Standard Schema, Zod \u0438\u043b\u0438 JSON SchemaMastra: Standard Schema \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e Standard JSON Schema, Zod \u0438\u043b\u0438 JSON SchemaGenkit: Zod \u0438\u043b\u0438 JSON SchemaLangChain: Zod \u0438\u043b\u0438 JSON SchemaMCP SDK: \u0442\u043e\u043b\u044c\u043a\u043e Zod\u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 ai 7.0, @mastra\/core 1.72, genkit 1.42, @langchain\/core 1.2 \u0438 @modelcontextprotocol\/sdk 1.31.\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0445\u043e\u0436\u0438, \u043d\u043e \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u044b, \u0438 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u043f\u0430\u043a\u0435\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043e\u0431\u0451\u0440\u0442\u043a\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c. Mastra \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0438 \u0442\u043e \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443: \u0435\u0451 \u0430\u0433\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0437 AI SDK. \u0410 \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a.\u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435. \u041e\u0431\u044a\u0435\u043a\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0441\u0432\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a. \u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0451 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438\u043b\u0438 \u0442\u0435\u0441\u0442\u0430, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0448 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0435 \u0441\u0442\u0430\u0432\u044f\u0442.\u041a\u0430\u043a \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0423 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0435 \u043e\u0434\u0438\u043d \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445.\u0412\u044b\u0437\u0432\u0430\u0442\u044c. execute \u2014 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:const { tempC } = await getWeather.execute({ city: &#8216;Paris&#8217; });\u041e\u0442\u0434\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438. name, description \u0438 JSON Schema, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0434\u0430\u0451\u0442 inputSchema, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430. \u041a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0435\u0451 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0443\u0445\u043e\u0434\u044f\u0442 \u0432 execute. \u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u2014 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435.\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c. \u041f\u043e\u043b\u0435\u0439 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435, \u0444\u043e\u0440\u043c\u044b \u043f\u043e inputSchema \u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b CLI:function describeTools(tools: StandardToolV0[]) {  return tools.map((tool) =&gt; ({    name: tool.name,    description: tool.description,    input: tool.inputSchema?.[&#8216;~standard&#8217;].jsonSchema.input({ target: &#8216;draft-2020-12&#8217; }),    output: tool.outputSchema?.[&#8216;~standard&#8217;].jsonSchema.output({ target: &#8216;draft-2020-12&#8217; }),  }));}\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0438\u0445 \u043a\u0430\u043a \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435:export const getOrders: StandardToolV0&lt;{ userId: string }, Order[]&gt; = {  name: &#8216;get_orders&#8217;,  description: &#171;List a user&#8217;s orders&#187;,  inputSchema: z.object({ userId: z.string() }),  execute: ({ userId }) =&gt; api.get(`\/orders\/${userId}`),};\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u043b\u0438 \u043e\u0442\u0434\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u0441\u0430\u043c\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0438 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e AI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430.\u0412\u0437\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 RPC-\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b. \u0423 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b tRPC \u0438\u043b\u0438 oRPC \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0445\u0435\u043c\u044b \u0432\u0445\u043e\u0434\u0430 \u0438 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0415\u0441\u043b\u0438 \u0441\u0445\u0435\u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 Standard JSON Schema, \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u0430 execute \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 (\u0432 tRPC \u044d\u0442\u043e createCaller). \u041f\u0440\u0438\u043c\u0435\u0440 \u0441 tRPC.\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043c\u043e\u0434\u0435\u043b\u044f\u043c \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u041b\u044e\u0431\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u0432\u0435 \u0432\u0435\u0449\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438\u0437 name, description \u0438 JSON Schema. \u041f\u043e\u0442\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 execute \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-496804","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/496804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=496804"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/496804\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=496804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=496804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=496804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}