tmcp
Version:
The main tmcp library
142 lines (126 loc) • 5.13 kB
TypeScript
import { StandardSchemaV1 } from '@standard-schema/spec';
import { JSONRPCRequest } from 'json-rpc-2.0';
import { JsonSchemaAdapter } from '../adapter.js';
import {
GetPromptResult,
CallToolResult,
ReadResourceResult,
CompleteResult,
InitializeRequestParams,
Resource,
ServerCapabilities,
LoggingLevel,
ToolAnnotations,
Icons
} from '../validation/index.js';
import { ExtractURITemplateVariables } from './uri-template.js';
declare const created_tool: unique symbol;
declare const created_prompt: unique symbol;
declare const created_resource: unique symbol;
declare const created_template: unique symbol;
export type AllSame<T, U> = [T] extends [U] ? true : false;
export type PromptOptions<TSchema extends StandardSchemaV1 | undefined = undefined> = {
name: string;
description: string;
title?: string;
enabled?: ()=>boolean | Promise<boolean>;
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>>>
} & Icons
export type ToolOptions<TSchema extends StandardSchemaV1 | undefined = undefined, TOutputSchema extends StandardSchemaV1 | undefined = undefined> = {
name: string;
_meta?: Record<string, any>;
description: string;
title?: string;
enabled?: () => boolean | Promise<boolean>;
schema?: StandardSchemaV1.InferInput<TSchema extends undefined ? never : TSchema> extends Record<string, unknown> ? TSchema : never;
outputSchema?: StandardSchemaV1.InferOutput<TOutputSchema extends undefined ? never : TOutputSchema> extends Record<string, unknown> ? TOutputSchema : never;
annotations?: ToolAnnotations;
} & Icons;
export type ResourceOptions = {
name: string;
description: string;
title?: string;
uri: string;
mimeType?: string;
enabled?: ()=>boolean | Promise<boolean>;
} & Icons
export type TemplateOptions<TUri extends string = string, TVariables extends ExtractURITemplateVariables<TUri> = ExtractURITemplateVariables<TUri>> = {
name: string;
description: string;
title?: string;
mimeType?: string;
enabled?: ()=>boolean | Promise<boolean>;
uri: TUri;
complete?: NoInfer<TVariables extends never ? never : Partial<Record<TVariables, Completion>>>;
list?: () => Promise<Array<Resource>> | Array<Resource>
} & Icons
export type CreatedTool<TSchema extends StandardSchemaV1 | undefined = undefined, TOutputSchema extends StandardSchemaV1 | undefined = undefined> = ToolOptions<TSchema, TOutputSchema> & { [created_tool]: created_tool };
export type CreatedPrompt<TSchema extends StandardSchemaV1 | undefined = undefined> = PromptOptions<TSchema> & { [created_prompt]: created_prompt };
export type CreatedResource = ResourceOptions & { [created_resource]: created_resource };
export type CreatedTemplate<TUri extends string = string> = TemplateOptions<TUri> & { [created_template]: created_template };
export type Tool<TSchema extends StandardSchemaV1 = StandardSchemaV1<any>, TOutputSchema extends StandardSchemaV1 = StandardSchemaV1<any>> = ToolOptions<TSchema, TOutputSchema> & {
execute: (
input?: StandardSchemaV1.InferInput<TSchema>,
) => Promise<CallToolResult> | CallToolResult;
};
export type Completion = (
query: string,
context: { arguments: Record<string, string> },
) => CompleteResult | Promise<CompleteResult>;
export type Prompt<TSchema extends StandardSchemaV1 = StandardSchemaV1<any>> = PromptOptions<TSchema> & {
execute: (
input?: StandardSchemaV1.InferInput<TSchema>,
) => Promise<GetPromptResult> | GetPromptResult;
};
export type StoredResource =
| TemplateOptions<string, string> & {
template: true;
list_resources?: () =>
| Promise<Array<Resource>>
| Array<Resource>;
execute: (
uri: string,
params: Record<string, string | string[]>,
) => Promise<ReadResourceResult> | ReadResourceResult;
}
| ResourceOptions & {
template: false;
execute: (
uri: string,
) => Promise<ReadResourceResult> | ReadResourceResult;
};
export type ServerOptions<TSchema extends StandardSchemaV1 | undefined> = {
capabilities?: ServerCapabilities;
instructions?: string;
adapter: JsonSchemaAdapter<TSchema> | undefined;
pagination?: {
tools?: { size?: number };
resources?: { size?: number };
prompts?: { size?: number };
};
logging?: {
default: LoggingLevel;
}
};
export type ChangedArgs = {
'resource': [id: string];
'tools': [];
'prompts': [];
'resources': [];
}
type SubscriptionsKeysObj = {
[K in keyof ChangedArgs as ChangedArgs[K]["length"] extends 0 ? "without_args" : "with_args"]: K
};
export type SubscriptionsKeys = SubscriptionsKeysObj["with_args"];
export type McpEvents = {
send: (message: {
request: JSONRPCRequest;
}) => void;
broadcast: (message: {
request: JSONRPCRequest;
}) => void;
initialize: (initialize_request: InitializeRequestParams) => void;
subscription: (subscriptions_request: { uri: string, action?: "add" | "remove" }) => void;
loglevelchange: (change: { level: LoggingLevel }) => void;
};