MCP TypeScript SDK (V2)
    Preparing search index...

    High-level MCP server that provides a simpler API for working with resources, tools, and prompts. For advanced usage (like sending notifications or setting custom request handlers), use the underlying Server instance available via the server property.

    const server = new McpServer({
    name: 'my-server',
    version: '1.0.0'
    });
    Index

    Constructors

    • Parameters

      • serverInfo: {
            description?: string;
            icons?: {
                mimeType?: string;
                sizes?: string[];
                src: string;
                theme?: "light" | "dark";
            }[];
            name: string;
            title?: string;
            version: string;
            websiteUrl?: string;
        }
        • Optionaldescription?: string

          An optional human-readable description of what this implementation does.

          This can be used by clients or servers to provide context about their purpose and capabilities. For example, a server might describe the types of resources or tools it provides, while a client might describe its intended use case.

        • Optionalicons?: { mimeType?: string; sizes?: string[]; src: string; theme?: "light" | "dark" }[]

          Optional set of sized icons that the client can display in a user interface.

          Clients that support rendering icons MUST support at least the following MIME types:

          • image/png - PNG images (safe, universal compatibility)
          • image/jpeg (and image/jpg) - JPEG images (safe, universal compatibility)

          Clients that support rendering icons SHOULD also support:

          • image/svg+xml - SVG images (scalable but requires security precautions)
          • image/webp - WebP images (modern, efficient format)
        • name: string

          Intended for programmatic or logical use, but used as a display name in past specs or fallback

        • Optionaltitle?: string

          Intended for UI and end-user contexts — optimized to be human-readable and easily understood, even by those unfamiliar with domain-specific terminology.

          If not provided, the name should be used for display (except for Tool, where annotations.title should be given precedence over using name, if present).

        • version: string
        • OptionalwebsiteUrl?: string

          An optional URL of the website for this implementation.

      • Optionaloptions: ServerOptions

      Returns McpServer

    Properties

    server: Server

    The underlying Server instance, useful for advanced operations like sending notifications.

    Accessors

    Methods

    • Attaches to the given transport, starts it, and starts listening for messages.

      The server object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.

      Parameters

      Returns Promise<void>

      const server = new McpServer({ name: 'my-server', version: '1.0.0' });
      const transport = new StdioServerTransport();
      await server.connect(transport);
    • Registers a prompt with a config object and callback.

      Type Parameters

      Parameters

      Returns RegisteredPrompt

      server.registerPrompt(
      'review-code',
      {
      title: 'Code Review',
      description: 'Review code for best practices',
      argsSchema: z.object({ code: z.string() })
      },
      ({ code }) => ({
      messages: [
      {
      role: 'user' as const,
      content: {
      type: 'text' as const,
      text: `Please review this code:\n\n${code}`
      }
      }
      ]
      })
      );
    • Registers a tool with a config object and callback.

      Type Parameters

      Parameters

      • name: string
      • config: {
            _meta?: Record<string, unknown>;
            annotations?: {
                destructiveHint?: boolean;
                idempotentHint?: boolean;
                openWorldHint?: boolean;
                readOnlyHint?: boolean;
                title?: string;
            };
            description?: string;
            inputSchema?: InputArgs;
            outputSchema?: OutputArgs;
            title?: string;
        }
      • cb: BaseToolCallback<
            {
                _meta?: {
                    "io.modelcontextprotocol/related-task"?: { taskId: string };
                    progressToken?: string | number;
                    [key: string]: unknown;
                };
                content: (
                    | {
                        _meta?: { [key: string]: unknown };
                        annotations?: {
                            audience?: ("user" | "assistant")[];
                            lastModified?: string;
                            priority?: number;
                        };
                        text: string;
                        type: "text";
                    }
                    | {
                        _meta?: { [key: string]: unknown };
                        annotations?: {
                            audience?: ("user" | "assistant")[];
                            lastModified?: string;
                            priority?: number;
                        };
                        data: string;
                        mimeType: string;
                        type: "image";
                    }
                    | {
                        _meta?: { [key: string]: unknown };
                        annotations?: {
                            audience?: ("user" | "assistant")[];
                            lastModified?: string;
                            priority?: number;
                        };
                        data: string;
                        mimeType: string;
                        type: "audio";
                    }
                    | {
                        _meta?: { [key: string]: unknown };
                        annotations?: {
                            audience?: ("user" | "assistant")[];
                            lastModified?: string;
                            priority?: number;
                        };
                        resource: | {
                            _meta?: { [key: string]: unknown };
                            mimeType?: string;
                            text: string;
                            uri: string;
                        }
                        | {
                            _meta?: { [key: string]: unknown };
                            blob: string;
                            mimeType?: string;
                            uri: string;
                        };
                        type: "resource";
                    }
                    | {
                        _meta?: { [key: string]: unknown };
                        annotations?: {
                            audience?: ("user" | "assistant")[];
                            lastModified?: string;
                            priority?: number;
                        };
                        description?: string;
                        icons?: {
                            mimeType?: string;
                            sizes?: string[];
                            src: string;
                            theme?: "light"
                            | "dark";
                        }[];
                        mimeType?: string;
                        name: string;
                        title?: string;
                        type: "resource_link";
                        uri: string;
                    }
                )[];
                isError?: boolean;
                structuredContent?: { [key: string]: unknown };
                [key: string]: unknown;
            },
        >

      Returns RegisteredTool

      server.registerTool(
      'calculate-bmi',
      {
      title: 'BMI Calculator',
      description: 'Calculate Body Mass Index',
      inputSchema: z.object({
      weightKg: z.number(),
      heightM: z.number()
      }),
      outputSchema: z.object({ bmi: z.number() })
      },
      async ({ weightKg, heightM }) => {
      const output = { bmi: weightKg / (heightM * heightM) };
      return {
      content: [{ type: 'text', text: JSON.stringify(output) }],
      structuredContent: output
      };
      }
      );
    • Sends a logging message to the client, if connected. Note: You only need to send the parameters object, not the entire JSON-RPC message.

      Parameters

      • params: {
            _meta?: {
                "io.modelcontextprotocol/related-task"?: { taskId: string };
                progressToken?: string | number;
                [key: string]: unknown;
            };
            data: unknown;
            level: | "debug"
            | "error"
            | "info"
            | "notice"
            | "warning"
            | "critical"
            | "alert"
            | "emergency";
            logger?: string;
        }
        • Optional_meta?: {
              "io.modelcontextprotocol/related-task"?: { taskId: string };
              progressToken?: string | number;
              [key: string]: unknown;
          }

          See MCP specification for notes on _meta usage.

          • Optionalio.modelcontextprotocol/related-task?: { taskId: string }

            If specified, this request is related to the provided task.

          • OptionalprogressToken?: string | number

            If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.

        • data: unknown

          The data to be logged, such as a string message or an object. Any JSON serializable type is allowed here.

        • level:
              | "debug"
              | "error"
              | "info"
              | "notice"
              | "warning"
              | "critical"
              | "alert"
              | "emergency"

          The severity of this log message.

        • Optionallogger?: string

          An optional name of the logger issuing this message.

      • OptionalsessionId: string

        Optional for stateless transports and backward compatibility.

      Returns Promise<void>

      await server.sendLoggingMessage({
      level: 'info',
      data: 'Processing complete'
      });