tmcp 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ > [!WARNING]
2
+ > Unfortunately i published the 1.0 by mistake...this package is currently under heavy development so there will be breaking changes in minors...threat this `1.x` as the `0.x` of any other package. Sorry for the disservice, every breaking will be properly labeled in the PR name.
3
+
1
4
  # tmcp
2
5
 
3
6
  A lightweight, schema-agnostic Model Context Protocol (MCP) server implementation with unified API design.
package/package.json CHANGED
@@ -1,10 +1,15 @@
1
1
  {
2
2
  "name": "tmcp",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "The main tmcp library",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
7
7
  "keywords": [],
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/paoloricciuti/tmcp.git",
11
+ "directory": "packages/tmcp"
12
+ },
8
13
  "author": "Paolo Ricciuti",
9
14
  "license": "MIT",
10
15
  "files": [
@@ -34,7 +39,7 @@
34
39
  "scripts": {
35
40
  "test": "echo \"Error: no test specified\" && exit 1",
36
41
  "typecheck": "tsc --noEmit",
37
- "generate:types": "rm -f ./src/*.d.ts && tsc ./src/*.js --declaration --emitDeclarationOnly --target esnext --allowJs --moduleresolution nodenext --module nodenext && publint",
42
+ "generate:types": "find ./src -name \"*.d.ts\" -not -path \"./src/internal/*\" -delete && tsc ./src/*.js --declaration --emitDeclarationOnly --target esnext --allowJs --moduleresolution nodenext --module nodenext && publint",
38
43
  "prepublish": "pnpm generate:types"
39
44
  }
40
45
  }
package/src/index.d.ts CHANGED
@@ -17,43 +17,45 @@ export class McpServer<StandardSchema extends StandardSchemaV1> {
17
17
  /**
18
18
  * @template {StandardSchema | undefined} [TSchema=undefined]
19
19
  * @param {{ name: string; description: string; schema?: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema> extends Record<string, unknown> ? TSchema : never }} options
20
- * @param {TSchema extends undefined ? (()=>Promise<unknown> | unknown) : ((input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<unknown> | unknown)} execute
20
+ * @param {TSchema extends undefined ? (()=>Promise<CallToolResult> | CallToolResult) : ((input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<CallToolResult> | CallToolResult)} execute
21
21
  */
22
22
  tool<TSchema extends StandardSchema | undefined = undefined>({ name, description, schema }: {
23
23
  name: string;
24
24
  description: string;
25
25
  schema?: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema> extends Record<string, unknown> ? TSchema : never;
26
- }, execute: TSchema extends undefined ? (() => Promise<unknown> | unknown) : ((input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<unknown> | unknown)): void;
26
+ }, execute: TSchema extends undefined ? (() => Promise<CallToolResult> | CallToolResult) : ((input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<CallToolResult> | CallToolResult)): void;
27
27
  /**
28
28
  * @template {StandardSchema | undefined} [TSchema=undefined]
29
- * @param {{ name: string; description: string; schema?: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema> extends Record<string, unknown> ? TSchema : never; complete?: Completion }} options
30
- * @param {TSchema extends undefined ? (()=>Promise<unknown> | unknown) : (input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<unknown> | unknown} execute
29
+ * @param {{ name: string; description: string; schema?: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema> extends Record<string, unknown> ? TSchema : never; complete?: NoInfer<TSchema extends undefined ? never : Partial<Record<keyof (StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>), Completion>>> }} options
30
+ * @param {TSchema extends undefined ? (()=>Promise<GetPromptResult> | GetPromptResult) : (input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<GetPromptResult> | GetPromptResult} execute
31
31
  */
32
32
  prompt<TSchema extends StandardSchema | undefined = undefined>({ name, description, schema, complete }: {
33
33
  name: string;
34
34
  description: string;
35
35
  schema?: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema> extends Record<string, unknown> ? TSchema : never;
36
- complete?: Completion;
37
- }, execute: TSchema extends undefined ? (() => Promise<unknown> | unknown) : (input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<unknown> | unknown): void;
36
+ complete?: NoInfer<TSchema extends undefined ? never : Partial<Record<keyof StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>, Completion>>>;
37
+ }, execute: TSchema extends undefined ? (() => Promise<GetPromptResult> | GetPromptResult) : (input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<GetPromptResult> | GetPromptResult): void;
38
38
  /**
39
39
  * @param {{ name: string; description: string; uri: string }} options
40
- * @param {(uri: string, params?: unknown) => Promise<unknown> | unknown} execute
40
+ * @param {(uri: string) => Promise<ReadResourceResult> | ReadResourceResult} execute
41
41
  */
42
42
  resource({ name, description, uri }: {
43
43
  name: string;
44
44
  description: string;
45
45
  uri: string;
46
- }, execute: (uri: string, params?: unknown) => Promise<unknown> | unknown): void;
46
+ }, execute: (uri: string) => Promise<ReadResourceResult> | ReadResourceResult): void;
47
47
  /**
48
- * @param {{ name: string; description: string; uri: string; complete?: Completion }} options
49
- * @param {(uri: string, params?: unknown) => Promise<unknown> | unknown} execute
48
+ * @template {string} TUri
49
+ * @template {ExtractURITemplateVariables<TUri>} TVariables
50
+ * @param {{ name: string; description: string; uri: TUri; complete?: NoInfer<TVariables extends never ? never : Partial<Record<TVariables, Completion>>> }} options
51
+ * @param {(uri: string, params: Record<TVariables, string | string[]>) => Promise<ReadResourceResult> | ReadResourceResult} execute
50
52
  */
51
- template({ name, description, uri, complete }: {
53
+ template<TUri extends string, TVariables extends ExtractURITemplateVariables<TUri>>({ name, description, uri, complete }: {
52
54
  name: string;
53
55
  description: string;
54
- uri: string;
55
- complete?: Completion;
56
- }, execute: (uri: string, params?: unknown) => Promise<unknown> | unknown): void;
56
+ uri: TUri;
57
+ complete?: NoInfer<TVariables extends never ? never : Partial<Record<TVariables, Completion>>>;
58
+ }, execute: (uri: string, params: Record<TVariables, string | string[]>) => Promise<ReadResourceResult> | ReadResourceResult): void;
57
59
  /**
58
60
  * @param {JSONRPCRequest} request
59
61
  * @returns {ReturnType<JSONRPCServer['receive']>}
@@ -69,7 +71,11 @@ export class McpServer<StandardSchema extends StandardSchemaV1> {
69
71
  }
70
72
  import type { StandardSchemaV1 } from "@standard-schema/spec";
71
73
  import type { McpEvents } from "./internal/internal.js";
74
+ import type { CallToolResult } from "./validation/index.js";
72
75
  import type { Completion } from "./internal/internal.js";
76
+ import type { GetPromptResult } from "./validation/index.js";
77
+ import type { ReadResourceResult } from "./validation/index.js";
78
+ import type { ExtractURITemplateVariables } from "./internal/uri-template.js";
73
79
  import type { JSONRPCRequest } from "json-rpc-2.0";
74
80
  import { JSONRPCServer } from 'json-rpc-2.0';
75
81
  import type { SubscriptionsKeys } from "./internal/internal.js";
package/src/index.js CHANGED
@@ -1,10 +1,19 @@
1
1
  /**
2
2
  * @import { StandardSchemaV1 } from "@standard-schema/spec";
3
3
  * @import { JSONRPCRequest, JSONRPCParams } from "json-rpc-2.0";
4
+ * @import { ExtractURITemplateVariables } from "./internal/uri-template.js";
5
+ * @import { CallToolResult, ReadResourceResult, GetPromptResult, CompleteResult } from "./validation/index.js";
4
6
  * @import { Tool, Completion, Prompt, Resource, ServerOptions, ServerInfo, SubscriptionsKeys, McpEvents } from "./internal/internal.js";
5
7
  */
6
8
  import { JSONRPCServer, JSONRPCClient } from 'json-rpc-2.0';
7
9
  import { UriTemplateMatcher } from 'uri-template-matcher';
10
+ import {
11
+ CallToolResultSchema,
12
+ ReadResourceResultSchema,
13
+ GetPromptResultSchema,
14
+ CompleteResultSchema,
15
+ } from './validation/index.js';
16
+ import * as v from 'valibot';
8
17
 
9
18
  /**
10
19
  * @template {StandardSchemaV1} StandardSchema
@@ -30,7 +39,7 @@ export class McpServer {
30
39
  #resources = new Map();
31
40
  #templates = new UriTemplateMatcher();
32
41
  /**
33
- * @type {{ [ref: string]: Map<string, Completion> }}
42
+ * @type {{ [ref: string]: Map<string, Partial<Record<string, Completion>>> }}
34
43
  */
35
44
  #completions = {
36
45
  'ref/prompt': new Map(),
@@ -138,7 +147,7 @@ export class McpServer {
138
147
  throw new Error(`Tool ${name} not found`);
139
148
  }
140
149
  if (!tool.schema) {
141
- return tool.execute();
150
+ return v.parse(CallToolResultSchema, await tool.execute());
142
151
  }
143
152
  let validated_args = tool.schema['~standard'].validate(args);
144
153
  if (validated_args instanceof Promise)
@@ -148,7 +157,10 @@ export class McpServer {
148
157
  `Invalid arguments for tool ${name}: ${JSON.stringify(validated_args.issues)}`,
149
158
  );
150
159
  }
151
- return tool.execute(validated_args.value);
160
+ return v.parse(
161
+ CallToolResultSchema,
162
+ await tool.execute(validated_args.value),
163
+ );
152
164
  },
153
165
  );
154
166
  }
@@ -203,7 +215,10 @@ export class McpServer {
203
215
  throw new Error(`Tool ${name} not found`);
204
216
  }
205
217
  if (!prompt.schema) {
206
- return prompt.execute();
218
+ return v.parse(
219
+ GetPromptResultSchema,
220
+ await prompt.execute(),
221
+ );
207
222
  }
208
223
  let validated_args = prompt.schema['~standard'].validate(args);
209
224
  if (validated_args instanceof Promise)
@@ -213,7 +228,10 @@ export class McpServer {
213
228
  `Invalid arguments for tool ${name}: ${JSON.stringify(validated_args.issues)}`,
214
229
  );
215
230
  }
216
- return prompt.execute(validated_args.value);
231
+ return v.parse(
232
+ GetPromptResultSchema,
233
+ await prompt.execute(validated_args.value),
234
+ );
217
235
  },
218
236
  );
219
237
  }
@@ -277,7 +295,18 @@ export class McpServer {
277
295
  throw new Error(`Resource ${uri} not found`);
278
296
  }
279
297
  }
280
- return resource.execute(uri, params);
298
+ if (resource.template) {
299
+ if (!params)
300
+ throw new Error('Missing parameters for template resource');
301
+ return v.parse(
302
+ ReadResourceResultSchema,
303
+ await resource.execute(uri, params),
304
+ );
305
+ }
306
+ return v.parse(
307
+ ReadResourceResultSchema,
308
+ await resource.execute(uri),
309
+ );
281
310
  });
282
311
  }
283
312
  /**
@@ -291,19 +320,19 @@ export class McpServer {
291
320
  if (!completions) return null;
292
321
  const complete = completions.get(ref.uri ?? ref.name);
293
322
  if (!complete) return null;
294
- return {
295
- completion: {
296
- values: complete(argument, context),
297
- hasMore: false,
298
- },
299
- };
323
+ const actual_complete = complete[argument.name];
324
+ if (!actual_complete) return null;
325
+ return v.parse(
326
+ CompleteResultSchema,
327
+ actual_complete(argument.value, context),
328
+ );
300
329
  },
301
330
  );
302
331
  }
303
332
  /**
304
333
  * @template {StandardSchema | undefined} [TSchema=undefined]
305
334
  * @param {{ name: string; description: string; schema?: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema> extends Record<string, unknown> ? TSchema : never }} options
306
- * @param {TSchema extends undefined ? (()=>Promise<unknown> | unknown) : ((input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<unknown> | unknown)} execute
335
+ * @param {TSchema extends undefined ? (()=>Promise<CallToolResult> | CallToolResult) : ((input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<CallToolResult> | CallToolResult)} execute
307
336
  */
308
337
  tool({ name, description, schema }, execute) {
309
338
  if (this.#options.capabilities?.tools?.listChanged) {
@@ -317,8 +346,8 @@ export class McpServer {
317
346
  }
318
347
  /**
319
348
  * @template {StandardSchema | undefined} [TSchema=undefined]
320
- * @param {{ name: string; description: string; schema?: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema> extends Record<string, unknown> ? TSchema : never; complete?: Completion }} options
321
- * @param {TSchema extends undefined ? (()=>Promise<unknown> | unknown) : (input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<unknown> | unknown} execute
349
+ * @param {{ name: string; description: string; schema?: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema> extends Record<string, unknown> ? TSchema : never; complete?: NoInfer<TSchema extends undefined ? never : Partial<Record<keyof (StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>), Completion>>> }} options
350
+ * @param {TSchema extends undefined ? (()=>Promise<GetPromptResult> | GetPromptResult) : (input: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema>) => Promise<GetPromptResult> | GetPromptResult} execute
322
351
  */
323
352
  prompt({ name, description, schema, complete }, execute) {
324
353
  if (complete) {
@@ -334,43 +363,48 @@ export class McpServer {
334
363
  });
335
364
  }
336
365
  /**
337
- * @param {string} name
338
- * @param {string} description
339
- * @param {string} uri
340
- * @param {(uri: string, params?: unknown) => Promise<unknown> | unknown} execute
341
- * @param {Completion} [complete]
342
- * @param {boolean} [template=false]
366
+ * @type {(resource: Resource & {complete?: Partial<Record<string,Completion>>, uri: string})=> void}
343
367
  */
344
- #resource(name, description, uri, execute, complete, template = false) {
368
+ #resource({ uri, complete, ...resource }) {
345
369
  if (complete) {
346
370
  this.#completions['ref/resource'].set(uri, complete);
347
371
  }
348
- if (template) {
372
+ if (resource.template) {
349
373
  this.#templates.add(uri);
350
374
  }
351
375
  if (this.#options.capabilities?.resources?.listChanged) {
352
376
  this.#notify('notifications/resources/list_changed', {});
353
377
  }
354
- this.#resources.set(uri, {
355
- description,
356
- name,
357
- execute,
358
- template,
359
- });
378
+ this.#resources.set(uri, resource);
360
379
  }
361
380
  /**
362
381
  * @param {{ name: string; description: string; uri: string }} options
363
- * @param {(uri: string, params?: unknown) => Promise<unknown> | unknown} execute
382
+ * @param {(uri: string) => Promise<ReadResourceResult> | ReadResourceResult} execute
364
383
  */
365
384
  resource({ name, description, uri }, execute) {
366
- this.#resource(name, description, uri, execute, undefined, false);
385
+ this.#resource({
386
+ name,
387
+ description,
388
+ uri,
389
+ execute,
390
+ template: false,
391
+ });
367
392
  }
368
393
  /**
369
- * @param {{ name: string; description: string; uri: string; complete?: Completion }} options
370
- * @param {(uri: string, params?: unknown) => Promise<unknown> | unknown} execute
394
+ * @template {string} TUri
395
+ * @template {ExtractURITemplateVariables<TUri>} TVariables
396
+ * @param {{ name: string; description: string; uri: TUri; complete?: NoInfer<TVariables extends never ? never : Partial<Record<TVariables, Completion>>> }} options
397
+ * @param {(uri: string, params: Record<TVariables, string | string[]>) => Promise<ReadResourceResult> | ReadResourceResult} execute
371
398
  */
372
399
  template({ name, description, uri, complete }, execute) {
373
- this.#resource(name, description, uri, execute, complete, true);
400
+ this.#resource({
401
+ name,
402
+ description,
403
+ uri,
404
+ execute,
405
+ complete,
406
+ template: true,
407
+ });
374
408
  }
375
409
  /**
376
410
  * @param {JSONRPCRequest} request
@@ -1,34 +1,52 @@
1
1
  import { StandardSchemaV1 } from '@standard-schema/spec';
2
2
  import { JSONRPCRequest } from 'json-rpc-2.0';
3
3
  import { JsonSchemaAdapter } from '../adapter.js';
4
+ import {
5
+ GetPromptResult,
6
+ CallToolResult,
7
+ ReadResourceResult,
8
+ CompleteResult,
9
+ } from '../validation/index.js';
4
10
 
5
11
  export type Tool<TSchema extends StandardSchemaV1 = StandardSchemaV1<any>> = {
6
12
  description: string;
7
13
  schema: TSchema;
8
14
  execute: (
9
15
  input?: StandardSchemaV1.InferInput<TSchema>,
10
- ) => Promise<unknown> | unknown;
16
+ ) => Promise<CallToolResult> | CallToolResult;
11
17
  };
12
18
 
13
19
  export type Completion = (
14
- argument: { name: string; value: string },
20
+ query: string,
15
21
  context: { arguments: Record<string, string> },
16
- ) => string[];
22
+ ) => CompleteResult;
17
23
 
18
24
  export type Prompt<TSchema extends StandardSchemaV1 = StandardSchemaV1<any>> = {
19
25
  description: string;
20
26
  schema: TSchema;
21
27
  execute: (
22
28
  input?: StandardSchemaV1.InferInput<TSchema>,
23
- ) => Promise<unknown> | unknown;
29
+ ) => Promise<GetPromptResult> | GetPromptResult;
24
30
  };
25
31
 
26
- export type Resource = {
27
- description: string;
28
- name: string;
29
- template: boolean;
30
- execute: (uri: string, params?: unknown) => Promise<unknown> | unknown;
31
- };
32
+ export type Resource =
33
+ | {
34
+ description: string;
35
+ name: string;
36
+ template: true;
37
+ execute: (
38
+ uri: string,
39
+ params: Record<string, string | string[]>,
40
+ ) => Promise<ReadResourceResult> | ReadResourceResult;
41
+ }
42
+ | {
43
+ description: string;
44
+ name: string;
45
+ template: false;
46
+ execute: (
47
+ uri: string,
48
+ ) => Promise<ReadResourceResult> | ReadResourceResult;
49
+ };
32
50
 
33
51
  export type ServerOptions<TSchema extends StandardSchemaV1> = {
34
52
  capabilities?: {
@@ -0,0 +1,45 @@
1
+ // Helper type to remove whitespace
2
+ type Trim<S extends string> = S extends ` ${infer R}`
3
+ ? Trim<R>
4
+ : S extends `${infer L} `
5
+ ? Trim<L>
6
+ : S;
7
+
8
+ // Helper type to extract variable name, removing modifiers
9
+ type ExtractVarName<S extends string> = S extends `${infer Name}:${string}`
10
+ ? Trim<Name> // Remove prefix modifier
11
+ : S extends `${infer Name}*`
12
+ ? Trim<Name> // Remove explode modifier
13
+ : Trim<S>;
14
+
15
+ // Helper type to split comma-separated variables
16
+ type SplitVariables<S extends string> = S extends `${infer First},${infer Rest}`
17
+ ? ExtractVarName<First> | SplitVariables<Rest>
18
+ : ExtractVarName<S>;
19
+
20
+ // Helper type to extract content from braces and handle operators
21
+ type ExtractFromExpression<S extends string> = S extends `+${infer Vars}`
22
+ ? SplitVariables<Vars> // Reserved {+var}
23
+ : S extends `#${infer Vars}`
24
+ ? SplitVariables<Vars> // Fragment {#var}
25
+ : S extends `.${infer Vars}`
26
+ ? SplitVariables<Vars> // Label {.var}
27
+ : S extends `/${infer Vars}`
28
+ ? SplitVariables<Vars> // Path {/var}
29
+ : S extends `;${infer Vars}`
30
+ ? SplitVariables<Vars> // Path-style {;var}
31
+ : S extends `?${infer Vars}`
32
+ ? SplitVariables<Vars> // Query {?var}
33
+ : S extends `&${infer Vars}`
34
+ ? SplitVariables<Vars> // Query continuation {&var}
35
+ : SplitVariables<S>; // Simple {var}
36
+
37
+ // Main recursive type to extract all variables from URI template
38
+ type ExtractVariablesFromTemplate<S extends string> =
39
+ S extends `${string}{${infer Expression}}${infer Rest}`
40
+ ? ExtractFromExpression<Expression> | ExtractVariablesFromTemplate<Rest>
41
+ : never;
42
+
43
+ // Main exported type
44
+ export type ExtractURITemplateVariables<T extends string> =
45
+ ExtractVariablesFromTemplate<T>;
@@ -0,0 +1,682 @@
1
+ /**
2
+ * Text provided to or from an LLM.
3
+ */
4
+ export const TextContentSchema: v.LooseObjectSchema<{
5
+ readonly type: v.LiteralSchema<"text", undefined>;
6
+ /**
7
+ * The text content of the message.
8
+ */
9
+ readonly text: v.StringSchema<undefined>;
10
+ /**
11
+ * See [MCP specification] for notes on _meta usage.
12
+ */
13
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
14
+ }, undefined>;
15
+ /**
16
+ * An image provided to or from an LLM.
17
+ */
18
+ export const ImageContentSchema: v.LooseObjectSchema<{
19
+ readonly type: v.LiteralSchema<"image", undefined>;
20
+ /**
21
+ * The base64-encoded image data.
22
+ */
23
+ readonly data: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
24
+ /**
25
+ * The MIME type of the image. Different providers may support different image types.
26
+ */
27
+ readonly mimeType: v.StringSchema<undefined>;
28
+ /**
29
+ * See [MCP specification] for notes on _meta usage.
30
+ */
31
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
32
+ }, undefined>;
33
+ /**
34
+ * An Audio provided to or from an LLM.
35
+ */
36
+ export const AudioContentSchema: v.LooseObjectSchema<{
37
+ readonly type: v.LiteralSchema<"audio", undefined>;
38
+ /**
39
+ * The base64-encoded audio data.
40
+ */
41
+ readonly data: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
42
+ /**
43
+ * The MIME type of the audio. Different providers may support different audio types.
44
+ */
45
+ readonly mimeType: v.StringSchema<undefined>;
46
+ /**
47
+ * See [MCP specification] for notes on _meta usage.
48
+ */
49
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
50
+ }, undefined>;
51
+ /**
52
+ * The contents of a specific resource or sub-resource.
53
+ */
54
+ export const ResourceContentsSchema: v.LooseObjectSchema<{
55
+ /**
56
+ * The URI of this resource.
57
+ */
58
+ readonly uri: v.StringSchema<undefined>;
59
+ /**
60
+ * The MIME type of this resource, if known.
61
+ */
62
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
63
+ /**
64
+ * See [MCP specification] for notes on _meta usage.
65
+ */
66
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
67
+ }, undefined>;
68
+ export const TextResourceContentsSchema: v.LooseObjectSchema<{
69
+ /**
70
+ * The URI of this resource.
71
+ */
72
+ readonly uri: v.StringSchema<undefined>;
73
+ /**
74
+ * The MIME type of this resource, if known.
75
+ */
76
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
77
+ /**
78
+ * The text of the item. This must only be set if the item can actually be represented as text (not binary data).
79
+ */
80
+ readonly text: v.StringSchema<undefined>;
81
+ /**
82
+ * See [MCP specification] for notes on _meta usage.
83
+ */
84
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
85
+ }, undefined>;
86
+ export const BlobResourceContentsSchema: v.LooseObjectSchema<{
87
+ /**
88
+ * The URI of this resource.
89
+ */
90
+ readonly uri: v.StringSchema<undefined>;
91
+ /**
92
+ * The MIME type of this resource, if known.
93
+ */
94
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
95
+ /**
96
+ * A base64-encoded string representing the binary data of the item.
97
+ */
98
+ readonly blob: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
99
+ /**
100
+ * See [MCP specification] for notes on _meta usage.
101
+ */
102
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
103
+ }, undefined>;
104
+ /**
105
+ * The contents of a resource, embedded into a prompt or tool call result.
106
+ */
107
+ export const EmbeddedResourceSchema: v.LooseObjectSchema<{
108
+ readonly type: v.LiteralSchema<"resource", undefined>;
109
+ readonly resource: v.UnionSchema<[v.LooseObjectSchema<{
110
+ /**
111
+ * The URI of this resource.
112
+ */
113
+ readonly uri: v.StringSchema<undefined>;
114
+ /**
115
+ * The MIME type of this resource, if known.
116
+ */
117
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
118
+ /**
119
+ * The text of the item. This must only be set if the item can actually be represented as text (not binary data).
120
+ */
121
+ readonly text: v.StringSchema<undefined>;
122
+ /**
123
+ * See [MCP specification] for notes on _meta usage.
124
+ */
125
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
126
+ }, undefined>, v.LooseObjectSchema<{
127
+ /**
128
+ * The URI of this resource.
129
+ */
130
+ readonly uri: v.StringSchema<undefined>;
131
+ /**
132
+ * The MIME type of this resource, if known.
133
+ */
134
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
135
+ /**
136
+ * A base64-encoded string representing the binary data of the item.
137
+ */
138
+ readonly blob: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
139
+ /**
140
+ * See [MCP specification] for notes on _meta usage.
141
+ */
142
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
143
+ }, undefined>], undefined>;
144
+ /**
145
+ * See [MCP specification] for notes on _meta usage.
146
+ */
147
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
148
+ }, undefined>;
149
+ /**
150
+ * A resource that the server is capable of reading, included in a prompt or tool call result.
151
+ */
152
+ export const ResourceLinkSchema: v.LooseObjectSchema<{
153
+ /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */
154
+ readonly name: v.StringSchema<undefined>;
155
+ readonly title: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
156
+ /**
157
+ * The URI of this resource.
158
+ */
159
+ readonly uri: v.StringSchema<undefined>;
160
+ /**
161
+ * A description of what this resource represents.
162
+ */
163
+ readonly description: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
164
+ /**
165
+ * The MIME type of this resource, if known.
166
+ */
167
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
168
+ readonly type: v.LiteralSchema<"resource_link", undefined>;
169
+ /**
170
+ * See [MCP specification] for notes on _meta usage.
171
+ */
172
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
173
+ }, undefined>;
174
+ /**
175
+ * A content block that can be used in prompts and tool results.
176
+ */
177
+ export const ContentBlockSchema: v.UnionSchema<[v.LooseObjectSchema<{
178
+ readonly type: v.LiteralSchema<"text", undefined>;
179
+ /**
180
+ * The text content of the message.
181
+ */
182
+ readonly text: v.StringSchema<undefined>;
183
+ /**
184
+ * See [MCP specification] for notes on _meta usage.
185
+ */
186
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
187
+ }, undefined>, v.LooseObjectSchema<{
188
+ readonly type: v.LiteralSchema<"image", undefined>;
189
+ /**
190
+ * The base64-encoded image data.
191
+ */
192
+ readonly data: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
193
+ /**
194
+ * The MIME type of the image. Different providers may support different image types.
195
+ */
196
+ readonly mimeType: v.StringSchema<undefined>;
197
+ /**
198
+ * See [MCP specification] for notes on _meta usage.
199
+ */
200
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
201
+ }, undefined>, v.LooseObjectSchema<{
202
+ readonly type: v.LiteralSchema<"audio", undefined>;
203
+ /**
204
+ * The base64-encoded audio data.
205
+ */
206
+ readonly data: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
207
+ /**
208
+ * The MIME type of the audio. Different providers may support different audio types.
209
+ */
210
+ readonly mimeType: v.StringSchema<undefined>;
211
+ /**
212
+ * See [MCP specification] for notes on _meta usage.
213
+ */
214
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
215
+ }, undefined>, v.LooseObjectSchema<{
216
+ /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */
217
+ readonly name: v.StringSchema<undefined>;
218
+ readonly title: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
219
+ /**
220
+ * The URI of this resource.
221
+ */
222
+ readonly uri: v.StringSchema<undefined>;
223
+ /**
224
+ * A description of what this resource represents.
225
+ */
226
+ readonly description: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
227
+ /**
228
+ * The MIME type of this resource, if known.
229
+ */
230
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
231
+ readonly type: v.LiteralSchema<"resource_link", undefined>;
232
+ /**
233
+ * See [MCP specification] for notes on _meta usage.
234
+ */
235
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
236
+ }, undefined>, v.LooseObjectSchema<{
237
+ readonly type: v.LiteralSchema<"resource", undefined>;
238
+ readonly resource: v.UnionSchema<[v.LooseObjectSchema<{
239
+ /**
240
+ * The URI of this resource.
241
+ */
242
+ readonly uri: v.StringSchema<undefined>;
243
+ /**
244
+ * The MIME type of this resource, if known.
245
+ */
246
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
247
+ /**
248
+ * The text of the item. This must only be set if the item can actually be represented as text (not binary data).
249
+ */
250
+ readonly text: v.StringSchema<undefined>;
251
+ /**
252
+ * See [MCP specification] for notes on _meta usage.
253
+ */
254
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
255
+ }, undefined>, v.LooseObjectSchema<{
256
+ /**
257
+ * The URI of this resource.
258
+ */
259
+ readonly uri: v.StringSchema<undefined>;
260
+ /**
261
+ * The MIME type of this resource, if known.
262
+ */
263
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
264
+ /**
265
+ * A base64-encoded string representing the binary data of the item.
266
+ */
267
+ readonly blob: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
268
+ /**
269
+ * See [MCP specification] for notes on _meta usage.
270
+ */
271
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
272
+ }, undefined>], undefined>;
273
+ /**
274
+ * See [MCP specification] for notes on _meta usage.
275
+ */
276
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
277
+ }, undefined>], undefined>;
278
+ /**
279
+ * Describes a message returned as part of a prompt.
280
+ */
281
+ export const PromptMessageSchema: v.LooseObjectSchema<{
282
+ readonly role: v.PicklistSchema<["user", "assistant"], undefined>;
283
+ readonly content: v.UnionSchema<[v.LooseObjectSchema<{
284
+ readonly type: v.LiteralSchema<"text", undefined>;
285
+ /**
286
+ * The text content of the message.
287
+ */
288
+ readonly text: v.StringSchema<undefined>;
289
+ /**
290
+ * See [MCP specification] for notes on _meta usage.
291
+ */
292
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
293
+ }, undefined>, v.LooseObjectSchema<{
294
+ readonly type: v.LiteralSchema<"image", undefined>;
295
+ /**
296
+ * The base64-encoded image data.
297
+ */
298
+ readonly data: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
299
+ /**
300
+ * The MIME type of the image. Different providers may support different image types.
301
+ */
302
+ readonly mimeType: v.StringSchema<undefined>;
303
+ /**
304
+ * See [MCP specification] for notes on _meta usage.
305
+ */
306
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
307
+ }, undefined>, v.LooseObjectSchema<{
308
+ readonly type: v.LiteralSchema<"audio", undefined>;
309
+ /**
310
+ * The base64-encoded audio data.
311
+ */
312
+ readonly data: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
313
+ /**
314
+ * The MIME type of the audio. Different providers may support different audio types.
315
+ */
316
+ readonly mimeType: v.StringSchema<undefined>;
317
+ /**
318
+ * See [MCP specification] for notes on _meta usage.
319
+ */
320
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
321
+ }, undefined>, v.LooseObjectSchema<{
322
+ /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */
323
+ readonly name: v.StringSchema<undefined>;
324
+ readonly title: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
325
+ /**
326
+ * The URI of this resource.
327
+ */
328
+ readonly uri: v.StringSchema<undefined>;
329
+ /**
330
+ * A description of what this resource represents.
331
+ */
332
+ readonly description: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
333
+ /**
334
+ * The MIME type of this resource, if known.
335
+ */
336
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
337
+ readonly type: v.LiteralSchema<"resource_link", undefined>;
338
+ /**
339
+ * See [MCP specification] for notes on _meta usage.
340
+ */
341
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
342
+ }, undefined>, v.LooseObjectSchema<{
343
+ readonly type: v.LiteralSchema<"resource", undefined>;
344
+ readonly resource: v.UnionSchema<[v.LooseObjectSchema<{
345
+ /**
346
+ * The URI of this resource.
347
+ */
348
+ readonly uri: v.StringSchema<undefined>;
349
+ /**
350
+ * The MIME type of this resource, if known.
351
+ */
352
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
353
+ /**
354
+ * The text of the item. This must only be set if the item can actually be represented as text (not binary data).
355
+ */
356
+ readonly text: v.StringSchema<undefined>;
357
+ /**
358
+ * See [MCP specification] for notes on _meta usage.
359
+ */
360
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
361
+ }, undefined>, v.LooseObjectSchema<{
362
+ /**
363
+ * The URI of this resource.
364
+ */
365
+ readonly uri: v.StringSchema<undefined>;
366
+ /**
367
+ * The MIME type of this resource, if known.
368
+ */
369
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
370
+ /**
371
+ * A base64-encoded string representing the binary data of the item.
372
+ */
373
+ readonly blob: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
374
+ /**
375
+ * See [MCP specification] for notes on _meta usage.
376
+ */
377
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
378
+ }, undefined>], undefined>;
379
+ /**
380
+ * See [MCP specification] for notes on _meta usage.
381
+ */
382
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
383
+ }, undefined>], undefined>;
384
+ }, undefined>;
385
+ /**
386
+ * The server's response to a tool call.
387
+ */
388
+ export const CallToolResultSchema: v.LooseObjectSchema<{
389
+ /**
390
+ * A list of content objects that represent the result of the tool call.
391
+ */
392
+ readonly content: v.OptionalSchema<v.ArraySchema<v.UnionSchema<[v.LooseObjectSchema<{
393
+ readonly type: v.LiteralSchema<"text", undefined>;
394
+ /**
395
+ * The text content of the message.
396
+ */
397
+ readonly text: v.StringSchema<undefined>;
398
+ /**
399
+ * See [MCP specification] for notes on _meta usage.
400
+ */
401
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
402
+ }, undefined>, v.LooseObjectSchema<{
403
+ readonly type: v.LiteralSchema<"image", undefined>;
404
+ /**
405
+ * The base64-encoded image data.
406
+ */
407
+ readonly data: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
408
+ /**
409
+ * The MIME type of the image. Different providers may support different image types.
410
+ */
411
+ readonly mimeType: v.StringSchema<undefined>;
412
+ /**
413
+ * See [MCP specification] for notes on _meta usage.
414
+ */
415
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
416
+ }, undefined>, v.LooseObjectSchema<{
417
+ readonly type: v.LiteralSchema<"audio", undefined>;
418
+ /**
419
+ * The base64-encoded audio data.
420
+ */
421
+ readonly data: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
422
+ /**
423
+ * The MIME type of the audio. Different providers may support different audio types.
424
+ */
425
+ readonly mimeType: v.StringSchema<undefined>;
426
+ /**
427
+ * See [MCP specification] for notes on _meta usage.
428
+ */
429
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
430
+ }, undefined>, v.LooseObjectSchema<{
431
+ /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */
432
+ readonly name: v.StringSchema<undefined>;
433
+ readonly title: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
434
+ /**
435
+ * The URI of this resource.
436
+ */
437
+ readonly uri: v.StringSchema<undefined>;
438
+ /**
439
+ * A description of what this resource represents.
440
+ */
441
+ readonly description: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
442
+ /**
443
+ * The MIME type of this resource, if known.
444
+ */
445
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
446
+ readonly type: v.LiteralSchema<"resource_link", undefined>;
447
+ /**
448
+ * See [MCP specification] for notes on _meta usage.
449
+ */
450
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
451
+ }, undefined>, v.LooseObjectSchema<{
452
+ readonly type: v.LiteralSchema<"resource", undefined>;
453
+ readonly resource: v.UnionSchema<[v.LooseObjectSchema<{
454
+ /**
455
+ * The URI of this resource.
456
+ */
457
+ readonly uri: v.StringSchema<undefined>;
458
+ /**
459
+ * The MIME type of this resource, if known.
460
+ */
461
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
462
+ /**
463
+ * The text of the item. This must only be set if the item can actually be represented as text (not binary data).
464
+ */
465
+ readonly text: v.StringSchema<undefined>;
466
+ /**
467
+ * See [MCP specification] for notes on _meta usage.
468
+ */
469
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
470
+ }, undefined>, v.LooseObjectSchema<{
471
+ /**
472
+ * The URI of this resource.
473
+ */
474
+ readonly uri: v.StringSchema<undefined>;
475
+ /**
476
+ * The MIME type of this resource, if known.
477
+ */
478
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
479
+ /**
480
+ * A base64-encoded string representing the binary data of the item.
481
+ */
482
+ readonly blob: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
483
+ /**
484
+ * See [MCP specification] for notes on _meta usage.
485
+ */
486
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
487
+ }, undefined>], undefined>;
488
+ /**
489
+ * See [MCP specification] for notes on _meta usage.
490
+ */
491
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
492
+ }, undefined>], undefined>, undefined>, readonly []>;
493
+ /**
494
+ * An object containing structured tool output.
495
+ */
496
+ readonly structuredContent: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
497
+ /**
498
+ * Whether the tool call ended in an error.
499
+ */
500
+ readonly isError: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
501
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
502
+ }, undefined>;
503
+ /**
504
+ * The server's response to a resources/read request from the client.
505
+ */
506
+ export const ReadResourceResultSchema: v.LooseObjectSchema<{
507
+ readonly contents: v.ArraySchema<v.UnionSchema<[v.LooseObjectSchema<{
508
+ /**
509
+ * The URI of this resource.
510
+ */
511
+ readonly uri: v.StringSchema<undefined>;
512
+ /**
513
+ * The MIME type of this resource, if known.
514
+ */
515
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
516
+ /**
517
+ * The text of the item. This must only be set if the item can actually be represented as text (not binary data).
518
+ */
519
+ readonly text: v.StringSchema<undefined>;
520
+ /**
521
+ * See [MCP specification] for notes on _meta usage.
522
+ */
523
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
524
+ }, undefined>, v.LooseObjectSchema<{
525
+ /**
526
+ * The URI of this resource.
527
+ */
528
+ readonly uri: v.StringSchema<undefined>;
529
+ /**
530
+ * The MIME type of this resource, if known.
531
+ */
532
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
533
+ /**
534
+ * A base64-encoded string representing the binary data of the item.
535
+ */
536
+ readonly blob: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
537
+ /**
538
+ * See [MCP specification] for notes on _meta usage.
539
+ */
540
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
541
+ }, undefined>], undefined>, undefined>;
542
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
543
+ }, undefined>;
544
+ /**
545
+ * The server's response to a prompts/get request from the client.
546
+ */
547
+ export const GetPromptResultSchema: v.LooseObjectSchema<{
548
+ /**
549
+ * An optional description for the prompt.
550
+ */
551
+ readonly description: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
552
+ readonly messages: v.ArraySchema<v.LooseObjectSchema<{
553
+ readonly role: v.PicklistSchema<["user", "assistant"], undefined>;
554
+ readonly content: v.UnionSchema<[v.LooseObjectSchema<{
555
+ readonly type: v.LiteralSchema<"text", undefined>;
556
+ /**
557
+ * The text content of the message.
558
+ */
559
+ readonly text: v.StringSchema<undefined>;
560
+ /**
561
+ * See [MCP specification] for notes on _meta usage.
562
+ */
563
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
564
+ }, undefined>, v.LooseObjectSchema<{
565
+ readonly type: v.LiteralSchema<"image", undefined>;
566
+ /**
567
+ * The base64-encoded image data.
568
+ */
569
+ readonly data: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
570
+ /**
571
+ * The MIME type of the image. Different providers may support different image types.
572
+ */
573
+ readonly mimeType: v.StringSchema<undefined>;
574
+ /**
575
+ * See [MCP specification] for notes on _meta usage.
576
+ */
577
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
578
+ }, undefined>, v.LooseObjectSchema<{
579
+ readonly type: v.LiteralSchema<"audio", undefined>;
580
+ /**
581
+ * The base64-encoded audio data.
582
+ */
583
+ readonly data: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
584
+ /**
585
+ * The MIME type of the audio. Different providers may support different audio types.
586
+ */
587
+ readonly mimeType: v.StringSchema<undefined>;
588
+ /**
589
+ * See [MCP specification] for notes on _meta usage.
590
+ */
591
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
592
+ }, undefined>, v.LooseObjectSchema<{
593
+ /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */
594
+ readonly name: v.StringSchema<undefined>;
595
+ readonly title: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
596
+ /**
597
+ * The URI of this resource.
598
+ */
599
+ readonly uri: v.StringSchema<undefined>;
600
+ /**
601
+ * A description of what this resource represents.
602
+ */
603
+ readonly description: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
604
+ /**
605
+ * The MIME type of this resource, if known.
606
+ */
607
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
608
+ readonly type: v.LiteralSchema<"resource_link", undefined>;
609
+ /**
610
+ * See [MCP specification] for notes on _meta usage.
611
+ */
612
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
613
+ }, undefined>, v.LooseObjectSchema<{
614
+ readonly type: v.LiteralSchema<"resource", undefined>;
615
+ readonly resource: v.UnionSchema<[v.LooseObjectSchema<{
616
+ /**
617
+ * The URI of this resource.
618
+ */
619
+ readonly uri: v.StringSchema<undefined>;
620
+ /**
621
+ * The MIME type of this resource, if known.
622
+ */
623
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
624
+ /**
625
+ * The text of the item. This must only be set if the item can actually be represented as text (not binary data).
626
+ */
627
+ readonly text: v.StringSchema<undefined>;
628
+ /**
629
+ * See [MCP specification] for notes on _meta usage.
630
+ */
631
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
632
+ }, undefined>, v.LooseObjectSchema<{
633
+ /**
634
+ * The URI of this resource.
635
+ */
636
+ readonly uri: v.StringSchema<undefined>;
637
+ /**
638
+ * The MIME type of this resource, if known.
639
+ */
640
+ readonly mimeType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
641
+ /**
642
+ * A base64-encoded string representing the binary data of the item.
643
+ */
644
+ readonly blob: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.Base64Action<string, undefined>]>;
645
+ /**
646
+ * See [MCP specification] for notes on _meta usage.
647
+ */
648
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
649
+ }, undefined>], undefined>;
650
+ /**
651
+ * See [MCP specification] for notes on _meta usage.
652
+ */
653
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
654
+ }, undefined>], undefined>;
655
+ }, undefined>, undefined>;
656
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
657
+ }, undefined>;
658
+ /**
659
+ * The server's response to a completion/complete request
660
+ */
661
+ export const CompleteResultSchema: v.LooseObjectSchema<{
662
+ readonly completion: v.LooseObjectSchema<{
663
+ /**
664
+ * An array of completion values. Must not exceed 100 items.
665
+ */
666
+ readonly values: v.SchemaWithPipe<readonly [v.ArraySchema<v.StringSchema<undefined>, undefined>, v.MaxLengthAction<string[], 100, undefined>]>;
667
+ /**
668
+ * The total number of completion options available. This can exceed the number of values actually sent in the response.
669
+ */
670
+ readonly total: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>]>, undefined>;
671
+ /**
672
+ * Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown.
673
+ */
674
+ readonly hasMore: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
675
+ }, undefined>;
676
+ readonly _meta: v.OptionalSchema<v.LooseObjectSchema<{}, undefined>, undefined>;
677
+ }, undefined>;
678
+ export type CallToolResult = v.InferInput<typeof CallToolResultSchema>;
679
+ export type ReadResourceResult = v.InferInput<typeof ReadResourceResultSchema>;
680
+ export type GetPromptResult = v.InferInput<typeof GetPromptResultSchema>;
681
+ export type CompleteResult = v.InferInput<typeof CompleteResultSchema>;
682
+ import * as v from 'valibot';
@@ -0,0 +1,248 @@
1
+ /* eslint-disable jsdoc/no-undefined-types */
2
+ import * as v from 'valibot';
3
+
4
+ /**
5
+ * Text provided to or from an LLM.
6
+ */
7
+ export const TextContentSchema = v.looseObject({
8
+ type: v.literal('text'),
9
+ /**
10
+ * The text content of the message.
11
+ */
12
+ text: v.string(),
13
+ /**
14
+ * See [MCP specification] for notes on _meta usage.
15
+ */
16
+ _meta: v.optional(v.looseObject({})),
17
+ });
18
+
19
+ /**
20
+ * An image provided to or from an LLM.
21
+ */
22
+ export const ImageContentSchema = v.looseObject({
23
+ type: v.literal('image'),
24
+ /**
25
+ * The base64-encoded image data.
26
+ */
27
+ data: v.pipe(v.string(), v.base64()),
28
+ /**
29
+ * The MIME type of the image. Different providers may support different image types.
30
+ */
31
+ mimeType: v.string(),
32
+ /**
33
+ * See [MCP specification] for notes on _meta usage.
34
+ */
35
+ _meta: v.optional(v.looseObject({})),
36
+ });
37
+
38
+ /**
39
+ * An Audio provided to or from an LLM.
40
+ */
41
+ export const AudioContentSchema = v.looseObject({
42
+ type: v.literal('audio'),
43
+ /**
44
+ * The base64-encoded audio data.
45
+ */
46
+ data: v.pipe(v.string(), v.base64()),
47
+ /**
48
+ * The MIME type of the audio. Different providers may support different audio types.
49
+ */
50
+ mimeType: v.string(),
51
+ /**
52
+ * See [MCP specification] for notes on _meta usage.
53
+ */
54
+ _meta: v.optional(v.looseObject({})),
55
+ });
56
+
57
+ /**
58
+ * The contents of a specific resource or sub-resource.
59
+ */
60
+ export const ResourceContentsSchema = v.looseObject({
61
+ /**
62
+ * The URI of this resource.
63
+ */
64
+ uri: v.string(),
65
+ /**
66
+ * The MIME type of this resource, if known.
67
+ */
68
+ mimeType: v.optional(v.string()),
69
+ /**
70
+ * See [MCP specification] for notes on _meta usage.
71
+ */
72
+ _meta: v.optional(v.looseObject({})),
73
+ });
74
+
75
+ export const TextResourceContentsSchema = v.looseObject({
76
+ /**
77
+ * The URI of this resource.
78
+ */
79
+ uri: v.string(),
80
+ /**
81
+ * The MIME type of this resource, if known.
82
+ */
83
+ mimeType: v.optional(v.string()),
84
+ /**
85
+ * The text of the item. This must only be set if the item can actually be represented as text (not binary data).
86
+ */
87
+ text: v.string(),
88
+ /**
89
+ * See [MCP specification] for notes on _meta usage.
90
+ */
91
+ _meta: v.optional(v.looseObject({})),
92
+ });
93
+
94
+ export const BlobResourceContentsSchema = v.looseObject({
95
+ /**
96
+ * The URI of this resource.
97
+ */
98
+ uri: v.string(),
99
+ /**
100
+ * The MIME type of this resource, if known.
101
+ */
102
+ mimeType: v.optional(v.string()),
103
+ /**
104
+ * A base64-encoded string representing the binary data of the item.
105
+ */
106
+ blob: v.pipe(v.string(), v.base64()),
107
+ /**
108
+ * See [MCP specification] for notes on _meta usage.
109
+ */
110
+ _meta: v.optional(v.looseObject({})),
111
+ });
112
+
113
+ /**
114
+ * The contents of a resource, embedded into a prompt or tool call result.
115
+ */
116
+ export const EmbeddedResourceSchema = v.looseObject({
117
+ type: v.literal('resource'),
118
+ resource: v.union([TextResourceContentsSchema, BlobResourceContentsSchema]),
119
+ /**
120
+ * See [MCP specification] for notes on _meta usage.
121
+ */
122
+ _meta: v.optional(v.looseObject({})),
123
+ });
124
+
125
+ /**
126
+ * A resource that the server is capable of reading, included in a prompt or tool call result.
127
+ */
128
+ export const ResourceLinkSchema = v.looseObject({
129
+ /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */
130
+ name: v.string(),
131
+ title: v.optional(v.string()),
132
+ /**
133
+ * The URI of this resource.
134
+ */
135
+ uri: v.string(),
136
+ /**
137
+ * A description of what this resource represents.
138
+ */
139
+ description: v.optional(v.string()),
140
+ /**
141
+ * The MIME type of this resource, if known.
142
+ */
143
+ mimeType: v.optional(v.string()),
144
+ type: v.literal('resource_link'),
145
+ /**
146
+ * See [MCP specification] for notes on _meta usage.
147
+ */
148
+ _meta: v.optional(v.looseObject({})),
149
+ });
150
+
151
+ /**
152
+ * A content block that can be used in prompts and tool results.
153
+ */
154
+ export const ContentBlockSchema = v.union([
155
+ TextContentSchema,
156
+ ImageContentSchema,
157
+ AudioContentSchema,
158
+ ResourceLinkSchema,
159
+ EmbeddedResourceSchema,
160
+ ]);
161
+
162
+ /**
163
+ * Describes a message returned as part of a prompt.
164
+ */
165
+ export const PromptMessageSchema = v.looseObject({
166
+ role: v.picklist(['user', 'assistant']),
167
+ content: ContentBlockSchema,
168
+ });
169
+
170
+ /**
171
+ * The server's response to a tool call.
172
+ */
173
+ export const CallToolResultSchema = v.looseObject({
174
+ /**
175
+ * A list of content objects that represent the result of the tool call.
176
+ */
177
+ content: v.optional(v.array(ContentBlockSchema), []),
178
+
179
+ /**
180
+ * An object containing structured tool output.
181
+ */
182
+ structuredContent: v.optional(v.looseObject({})),
183
+
184
+ /**
185
+ * Whether the tool call ended in an error.
186
+ */
187
+ isError: v.optional(v.boolean()),
188
+ _meta: v.optional(v.looseObject({})),
189
+ });
190
+
191
+ /**
192
+ * The server's response to a resources/read request from the client.
193
+ */
194
+ export const ReadResourceResultSchema = v.looseObject({
195
+ contents: v.array(
196
+ v.union([TextResourceContentsSchema, BlobResourceContentsSchema]),
197
+ ),
198
+ _meta: v.optional(v.looseObject({})),
199
+ });
200
+
201
+ /**
202
+ * The server's response to a prompts/get request from the client.
203
+ */
204
+ export const GetPromptResultSchema = v.looseObject({
205
+ /**
206
+ * An optional description for the prompt.
207
+ */
208
+ description: v.optional(v.string()),
209
+ messages: v.array(PromptMessageSchema),
210
+ _meta: v.optional(v.looseObject({})),
211
+ });
212
+
213
+ /**
214
+ * The server's response to a completion/complete request
215
+ */
216
+ export const CompleteResultSchema = v.looseObject({
217
+ completion: v.looseObject({
218
+ /**
219
+ * An array of completion values. Must not exceed 100 items.
220
+ */
221
+ values: v.pipe(v.array(v.string()), v.maxLength(100)),
222
+ /**
223
+ * The total number of completion options available. This can exceed the number of values actually sent in the response.
224
+ */
225
+ total: v.optional(v.pipe(v.number(), v.integer())),
226
+ /**
227
+ * Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown.
228
+ */
229
+ hasMore: v.optional(v.boolean()),
230
+ }),
231
+ _meta: v.optional(v.looseObject({})),
232
+ });
233
+
234
+ /**
235
+ * @typedef {v.InferInput<typeof CallToolResultSchema>} CallToolResult
236
+ */
237
+
238
+ /**
239
+ * @typedef {v.InferInput<typeof ReadResourceResultSchema>} ReadResourceResult
240
+ */
241
+
242
+ /**
243
+ * @typedef {v.InferInput<typeof GetPromptResultSchema>} GetPromptResult
244
+ */
245
+
246
+ /**
247
+ * @typedef {v.InferInput<typeof CompleteResultSchema>} CompleteResult
248
+ */