MCP TypeScript SDK (V2) / @modelcontextprotocol/server / server/mcp
server/mcp
Classes
McpServer
Defined in: packages/server/src/server/mcp.ts:66
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.
Example
const server = new McpServer({
name: 'my-server',
version: '1.0.0'
});Constructors
Constructor
new McpServer(
serverInfo,options?):McpServer
Defined in: packages/server/src/server/mcp.ts:117
Parameters
serverInfo
description?
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.
icons?
object[] = ...
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(andimage/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
title?
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 = ...
websiteUrl?
string = ...
An optional URL of the website for this implementation.
options?
Returns
Properties
server
readonlyserver:Server
Defined in: packages/server/src/server/mcp.ts:70
The underlying Server instance, useful for advanced operations like sending notifications.
Methods
close()
close():
Promise<void>
Defined in: packages/server/src/server/mcp.ts:155
Closes the connection.
Returns
Promise<void>
connect()
connect(
transport):Promise<void>
Defined in: packages/server/src/server/mcp.ts:148
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
transport
Returns
Promise<void>
Example
const server = new McpServer({ name: 'my-server', version: '1.0.0' });
const transport = new StdioServerTransport();
await server.connect(transport);isConnected()
isConnected():
boolean
Defined in: packages/server/src/server/mcp.ts:1099
Checks if the server is connected to a transport.
Returns
boolean
true if the server is connected
registerPrompt()
Call Signature
registerPrompt<
Args>(name,config,cb):RegisteredPrompt
Defined in: packages/server/src/server/mcp.ts:1039
Registers a prompt with a config object and callback.
Type Parameters
Args
Args extends StandardSchemaWithJSON<unknown, unknown>
Parameters
name
string
config
_meta?
Record<string, unknown>
argsSchema?
Args
description?
string
icons?
object[]
title?
string
cb
PromptCallback<Args>
Returns
Example
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}`
}
}
]
})
);Call Signature
registerPrompt<
Args>(name,config,cb):RegisteredPrompt
Defined in: packages/server/src/server/mcp.ts:1051
Type Parameters
Args
Args extends ZodRawShape
Parameters
name
string
config
_meta?
Record<string, unknown>
argsSchema?
Args
description?
string
icons?
object[]
title?
string
cb
LegacyPromptCallback<Args>
Returns
Deprecated
Wrap with z.object({...}) instead. Raw-shape form: argsSchema may be a plain { field: z.string() } record; it is auto-wrapped with z.object().
registerResource()
Call Signature
registerResource(
name,uriOrTemplate,config,readCallback):RegisteredResource
Defined in: packages/server/src/server/mcp.ts:588
Registers a resource with a config object and callback. For static resources, use a URI string. For dynamic resources, use a ResourceTemplate.
Parameters
name
string
uriOrTemplate
string
config
ResourceMetadata & object
readCallback
Returns
Example
server.registerResource(
'config',
'config://app',
{
title: 'Application Config',
mimeType: 'text/plain'
},
async uri => ({
contents: [{ uri: uri.href, text: 'App configuration here' }]
})
);Call Signature
registerResource(
name,uriOrTemplate,config,readCallback):RegisteredResourceTemplate
Defined in: packages/server/src/server/mcp.ts:594
Registers a resource with a config object and callback. For static resources, use a URI string. For dynamic resources, use a ResourceTemplate.
Parameters
name
string
uriOrTemplate
config
ResourceMetadata & object
readCallback
Returns
Example
server.registerResource(
'config',
'config://app',
{
title: 'Application Config',
mimeType: 'text/plain'
},
async uri => ({
contents: [{ uri: uri.href, text: 'App configuration here' }]
})
);registerTool()
Call Signature
registerTool<
OutputArgs,InputArgs>(name,config,cb):RegisteredTool
Defined in: packages/server/src/server/mcp.ts:953
Registers a tool with a config object and callback.
Type Parameters
OutputArgs
OutputArgs extends StandardSchemaWithJSON<unknown, unknown>
InputArgs
InputArgs extends StandardSchemaWithJSON<unknown, unknown> | undefined = undefined
Parameters
name
string
config
_meta?
Record<string, unknown>
annotations?
{ destructiveHint?: boolean; idempotentHint?: boolean; openWorldHint?: boolean; readOnlyHint?: boolean; title?: string; }
annotations.destructiveHint?
boolean = ...
If true, the tool may perform destructive updates to its environment. If false, the tool performs only additive updates.
(This property is meaningful only when readOnlyHint == false)
Default: true
annotations.idempotentHint?
boolean = ...
If true, calling the tool repeatedly with the same arguments will have no additional effect on its environment.
(This property is meaningful only when readOnlyHint == false)
Default: false
annotations.openWorldHint?
boolean = ...
If true, this tool may interact with an "open world" of external entities. If false, the tool's domain of interaction is closed. For example, the world of a web search tool is open, whereas that of a memory tool is not.
Default: true
annotations.readOnlyHint?
boolean = ...
If true, the tool does not modify its environment.
Default: false
annotations.title?
string = ...
A human-readable title for the tool.
description?
string
icons?
object[]
inputSchema?
InputArgs
outputSchema?
OutputArgs
title?
string
cb
BaseToolCallback<{[key: string]: unknown; _meta?: {[key: string]: unknown; io.modelcontextprotocol/related-task?: { taskId: string; }; progressToken?: string | number; }; content: ({ _meta?: {[key: string]: unknown; }; annotations?: { audience?: (... | ...)[]; lastModified?: string; priority?: number; }; text: string; type: "text"; } | { _meta?: {[key: string]: unknown; }; annotations?: { audience?: (... | ...)[]; lastModified?: string; priority?: number; }; data: string; mimeType: string; type: "image"; } | { _meta?: {[key: string]: unknown; }; annotations?: { audience?: (... | ...)[]; lastModified?: string; priority?: number; }; data: string; mimeType: string; type: "audio"; } | { _meta?: {[key: string]: unknown; }; annotations?: { audience?: (... | ...)[]; 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?: (... | ...)[]; lastModified?: string; priority?: number; }; description?: string; icons?: object[]; mimeType?: string; name: string; size?: number; title?: string; type: "resource_link"; uri: string; })[]; isError?: boolean; structuredContent?: unknown; } | InputRequiredResult>
Returns
Example
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
};
}
);Call Signature
registerTool<
InputArgs,OutputArgs>(name,config,cb):RegisteredTool
Defined in: packages/server/src/server/mcp.ts:967
Type Parameters
InputArgs
InputArgs extends ZodRawShape
OutputArgs
OutputArgs extends StandardSchemaWithJSON<unknown, unknown> | ZodRawShape | undefined = undefined
Parameters
name
string
config
_meta?
Record<string, unknown>
annotations?
{ destructiveHint?: boolean; idempotentHint?: boolean; openWorldHint?: boolean; readOnlyHint?: boolean; title?: string; }
annotations.destructiveHint?
boolean = ...
If true, the tool may perform destructive updates to its environment. If false, the tool performs only additive updates.
(This property is meaningful only when readOnlyHint == false)
Default: true
annotations.idempotentHint?
boolean = ...
If true, calling the tool repeatedly with the same arguments will have no additional effect on its environment.
(This property is meaningful only when readOnlyHint == false)
Default: false
annotations.openWorldHint?
boolean = ...
If true, this tool may interact with an "open world" of external entities. If false, the tool's domain of interaction is closed. For example, the world of a web search tool is open, whereas that of a memory tool is not.
Default: true
annotations.readOnlyHint?
boolean = ...
If true, the tool does not modify its environment.
Default: false
annotations.title?
string = ...
A human-readable title for the tool.
description?
string
icons?
object[]
inputSchema?
InputArgs
outputSchema?
OutputArgs
title?
string
cb
LegacyToolCallback<InputArgs>
Returns
Deprecated
Wrap with z.object({...}) instead. Raw-shape form: inputSchema/outputSchema may be a plain { field: z.string() } record; it is auto-wrapped with z.object().
sendLoggingMessage()
sendLoggingMessage(
params,sessionId?):Promise<void>
Defined in: packages/server/src/server/mcp.ts:1122
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?
{[key: string]: unknown; io.modelcontextprotocol/related-task?: { taskId: string; }; progressToken?: string | number; } = ...
See MCP specification for notes on _meta usage.
_meta.io.modelcontextprotocol/related-task?
{ taskId: string; } = ...
If specified, this request is related to the provided task.
_meta.io.modelcontextprotocol/related-task.taskId
string = ...
_meta.progressToken?
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" = LoggingLevelSchema
The severity of this log message.
logger?
string = ...
An optional name of the logger issuing this message.
sessionId?
string
Optional for stateless transports and backward compatibility.
Returns
Promise<void>
See
Example
await server.sendLoggingMessage({
level: 'info',
data: 'Processing complete'
});Deprecated
Deprecated as of protocol version 2026-07-28 (SEP-2577). Remains functional during the deprecation window (at least twelve months). Migrate to stderr logging (STDIO servers) or OpenTelemetry.
sendPromptListChanged()
sendPromptListChanged():
void
Defined in: packages/server/src/server/mcp.ts:1146
Sends a prompt list changed event to the client, if connected.
Returns
void
sendResourceListChanged()
sendResourceListChanged():
void
Defined in: packages/server/src/server/mcp.ts:1128
Sends a resource list changed event to the client, if connected.
Returns
void
sendToolListChanged()
sendToolListChanged():
void
Defined in: packages/server/src/server/mcp.ts:1137
Sends a tool list changed event to the client, if connected.
Returns
void
toolInputSchemaJson()
toolInputSchemaJson(
name):Record<string,unknown> |undefined
Defined in: packages/server/src/server/mcp.ts:94
Internal
The JSON-serialized inputSchema of a registered tool, or undefined when no such tool is registered. Used by the HTTP entry's pre-dispatch SEP-2243 Mcp-Param-* validation step (which needs the same JSON Schema tools/list would emit, before dispatch reaches the handler).
Parameters
name
string
Returns
Record<string, unknown> | undefined
ResourceTemplate
Defined in: packages/server/src/server/mcp.ts:1167
A resource template combines a URI pattern with optional functionality to enumerate all resources matching that pattern.
Constructors
Constructor
new ResourceTemplate(
uriTemplate,_callbacks):ResourceTemplate
Defined in: packages/server/src/server/mcp.ts:1170
Parameters
uriTemplate
string | UriTemplate
_callbacks
complete?
{[variable: string]: CompleteResourceTemplateCallback; }
An optional callback to autocomplete variables within the URI template. Useful for clients and users to discover possible values.
list
ListResourcesCallback | undefined
A callback to list all resources matching this template. This is required to be specified, even if undefined, to avoid accidentally forgetting resource listing.
Returns
Accessors
listCallback
Get Signature
get listCallback():
ListResourcesCallback|undefined
Defined in: packages/server/src/server/mcp.ts:1199
Gets the list callback, if one was provided.
Returns
ListResourcesCallback | undefined
uriTemplate
Get Signature
get uriTemplate():
UriTemplate
Defined in: packages/server/src/server/mcp.ts:1192
Gets the URI template pattern.
Returns
Methods
completeCallback()
completeCallback(
variable):CompleteResourceTemplateCallback|undefined
Defined in: packages/server/src/server/mcp.ts:1206
Gets the callback for completing a specific URI template variable, if one was provided.
Parameters
variable
string
Returns
CompleteResourceTemplateCallback | undefined
Type Aliases
AnyToolHandler
AnyToolHandler<
Args> =ToolCallback<Args>
Defined in: packages/server/src/server/mcp.ts:1257
Tool handler callback type.
Type Parameters
Args
Args extends StandardSchemaWithJSON | undefined = undefined
BaseToolCallback
BaseToolCallback<
SendResultT,Ctx,Args> =ArgsextendsStandardSchemaWithJSON? (args,ctx) =>SendResultT|Promise<SendResultT> : (ctx) =>SendResultT|Promise<SendResultT>
Defined in: packages/server/src/server/mcp.ts:1237
Type Parameters
SendResultT
SendResultT extends Result
Ctx
Ctx extends ServerContext
Args
Args extends StandardSchemaWithJSON | undefined
CompleteResourceTemplateCallback
CompleteResourceTemplateCallback = (
value,context?) =>string[] |Promise<string[]>
Defined in: packages/server/src/server/mcp.ts:1156
A callback to complete one variable within a resource template's URI template.
Parameters
value
string
context?
arguments?
Record<string, string>
Returns
string[] | Promise<string[]>
InferRawShape
InferRawShape<
S> =z.infer<z.ZodObject<S>>
Defined in: packages/server/src/server/mcp.ts:1219
Infers the parsed-output type of a ZodRawShape.
Type Parameters
S
S extends ZodRawShape
LegacyPromptCallback
LegacyPromptCallback<
Args> =ArgsextendsZodRawShape? (args,ctx) =>GetPromptResult|InputRequiredResult|Promise<GetPromptResult|InputRequiredResult> : (ctx) =>GetPromptResult|InputRequiredResult|Promise<GetPromptResult|InputRequiredResult>
Defined in: packages/server/src/server/mcp.ts:1230
PromptCallback variant used when argsSchema is a ZodRawShape.
Type Parameters
Args
Args extends ZodRawShape | undefined
LegacyToolCallback
LegacyToolCallback<
Args> =ArgsextendsZodRawShape? (args,ctx) =>CallToolResult|InputRequiredResult|Promise<CallToolResult|InputRequiredResult> : (ctx) =>CallToolResult|InputRequiredResult|Promise<CallToolResult|InputRequiredResult>
Defined in: packages/server/src/server/mcp.ts:1222
ToolCallback variant used when inputSchema is a ZodRawShape.
Type Parameters
Args
Args extends ZodRawShape | undefined
ListResourcesCallback
ListResourcesCallback = (
ctx) =>ListResourcesResult|Promise<ListResourcesResult>
Defined in: packages/server/src/server/mcp.ts:1352
Callback to list all resources matching a given template.
Parameters
ctx
Returns
ListResourcesResult | Promise<ListResourcesResult>
PromptCallback
PromptCallback<
Args> =ArgsextendsStandardSchemaWithJSON? (args,ctx) =>GetPromptResult|InputRequiredResult|Promise<GetPromptResult|InputRequiredResult> : (ctx) =>GetPromptResult|InputRequiredResult|Promise<GetPromptResult|InputRequiredResult>
Defined in: packages/server/src/server/mcp.ts:1413
Type Parameters
Args
Args extends StandardSchemaWithJSON | undefined = undefined
ReadResourceCallback
ReadResourceCallback = (
uri,ctx) =>ReadResourceResult|InputRequiredResult|Promise<ReadResourceResult|InputRequiredResult>
Defined in: packages/server/src/server/mcp.ts:1357
Callback to read a resource at a given URI.
Parameters
uri
URL
ctx
Returns
ReadResourceResult | InputRequiredResult | Promise<ReadResourceResult | InputRequiredResult>
ReadResourceTemplateCallback
ReadResourceTemplateCallback = (
uri,variables,ctx) =>ReadResourceResult|InputRequiredResult|Promise<ReadResourceResult|InputRequiredResult>
Defined in: packages/server/src/server/mcp.ts:1386
Callback to read a resource at a given URI, following a filled-in URI template.
Parameters
uri
URL
variables
ctx
Returns
ReadResourceResult | InputRequiredResult | Promise<ReadResourceResult | InputRequiredResult>
RegisteredPrompt
RegisteredPrompt =
object
Defined in: packages/server/src/server/mcp.ts:1431
Properties
_meta?
optional_meta?:Record<string,unknown>
Defined in: packages/server/src/server/mcp.ts:1436
argsSchema?
optionalargsSchema?:StandardSchemaWithJSON
Defined in: packages/server/src/server/mcp.ts:1434
description?
optionaldescription?:string
Defined in: packages/server/src/server/mcp.ts:1433
enabled
enabled:
boolean
Defined in: packages/server/src/server/mcp.ts:1439
icons?
optionalicons?:Icon[]
Defined in: packages/server/src/server/mcp.ts:1435
title?
optionaltitle?:string
Defined in: packages/server/src/server/mcp.ts:1432
Methods
disable()
disable():
void
Defined in: packages/server/src/server/mcp.ts:1441
Returns
void
enable()
enable():
void
Defined in: packages/server/src/server/mcp.ts:1440
Returns
void
remove()
remove():
void
Defined in: packages/server/src/server/mcp.ts:1452
Returns
void
update()
update<
Args>(updates):void
Defined in: packages/server/src/server/mcp.ts:1442
Type Parameters
Args
Args extends StandardSchemaWithJSON<unknown, unknown>
Parameters
updates
_meta?
Record<string, unknown>
argsSchema?
Args
callback?
PromptCallback<Args>
description?
string
enabled?
boolean
icons?
Icon[]
name?
string | null
title?
string
Returns
void
RegisteredResource
RegisteredResource =
object
Defined in: packages/server/src/server/mcp.ts:1362
Properties
cacheHint?
optionalcacheHint?:CacheHint
Defined in: packages/server/src/server/mcp.ts:1367
Cache hint applied to this resource's resources/read results on the 2026-07-28 revision.
enabled
enabled:
boolean
Defined in: packages/server/src/server/mcp.ts:1369
metadata?
optionalmetadata?:ResourceMetadata
Defined in: packages/server/src/server/mcp.ts:1365
name
name:
string
Defined in: packages/server/src/server/mcp.ts:1363
readCallback
readCallback:
ReadResourceCallback
Defined in: packages/server/src/server/mcp.ts:1368
title?
optionaltitle?:string
Defined in: packages/server/src/server/mcp.ts:1364
Methods
disable()
disable():
void
Defined in: packages/server/src/server/mcp.ts:1371
Returns
void
enable()
enable():
void
Defined in: packages/server/src/server/mcp.ts:1370
Returns
void
remove()
remove():
void
Defined in: packages/server/src/server/mcp.ts:1380
Returns
void
update()
update(
updates):void
Defined in: packages/server/src/server/mcp.ts:1372
Parameters
updates
callback?
enabled?
boolean
metadata?
name?
string
title?
string
uri?
string | null
Returns
void
RegisteredResourceTemplate
RegisteredResourceTemplate =
object
Defined in: packages/server/src/server/mcp.ts:1392
Properties
cacheHint?
optionalcacheHint?:CacheHint
Defined in: packages/server/src/server/mcp.ts:1397
Cache hint applied to this template's resources/read results on the 2026-07-28 revision.
enabled
enabled:
boolean
Defined in: packages/server/src/server/mcp.ts:1399
metadata?
optionalmetadata?:ResourceMetadata
Defined in: packages/server/src/server/mcp.ts:1395
readCallback
readCallback:
ReadResourceTemplateCallback
Defined in: packages/server/src/server/mcp.ts:1398
resourceTemplate
resourceTemplate:
ResourceTemplate
Defined in: packages/server/src/server/mcp.ts:1393
title?
optionaltitle?:string
Defined in: packages/server/src/server/mcp.ts:1394
Methods
disable()
disable():
void
Defined in: packages/server/src/server/mcp.ts:1401
Returns
void
enable()
enable():
void
Defined in: packages/server/src/server/mcp.ts:1400
Returns
void
remove()
remove():
void
Defined in: packages/server/src/server/mcp.ts:1410
Returns
void
update()
update(
updates):void
Defined in: packages/server/src/server/mcp.ts:1402
Parameters
updates
callback?
enabled?
boolean
metadata?
name?
string | null
template?
title?
string
Returns
void
RegisteredTool
RegisteredTool =
object
Defined in: packages/server/src/server/mcp.ts:1264
Properties
_meta?
optional_meta?:Record<string,unknown>
Defined in: packages/server/src/server/mcp.ts:1281
annotations?
optionalannotations?:ToolAnnotations
Defined in: packages/server/src/server/mcp.ts:1278
description?
optionaldescription?:string
Defined in: packages/server/src/server/mcp.ts:1266
enabled
enabled:
boolean
Defined in: packages/server/src/server/mcp.ts:1285
execution?
optionalexecution?:ToolExecution
Defined in: packages/server/src/server/mcp.ts:1280
handler
handler:
AnyToolHandler<StandardSchemaWithJSON|undefined>
Defined in: packages/server/src/server/mcp.ts:1282
icons?
optionalicons?:Icon[]
Defined in: packages/server/src/server/mcp.ts:1279
inputSchema?
optionalinputSchema?:StandardSchemaWithJSON
Defined in: packages/server/src/server/mcp.ts:1267
outputSchema?
optionaloutputSchema?:StandardSchemaWithJSON
Defined in: packages/server/src/server/mcp.ts:1268
title?
optionaltitle?:string
Defined in: packages/server/src/server/mcp.ts:1265
Methods
disable()
disable():
void
Defined in: packages/server/src/server/mcp.ts:1287
Returns
void
enable()
enable():
void
Defined in: packages/server/src/server/mcp.ts:1286
Returns
void
remove()
remove():
void
Defined in: packages/server/src/server/mcp.ts:1300
Returns
void
update()
update(
updates):void
Defined in: packages/server/src/server/mcp.ts:1288
Parameters
updates
_meta?
Record<string, unknown>
annotations?
callback?
ToolCallback<StandardSchemaWithJSON>
description?
string
enabled?
boolean
icons?
Icon[]
name?
string | null
outputSchema?
paramsSchema?
title?
string
Returns
void
ResourceMetadata
ResourceMetadata =
Omit<Resource,"uri"|"name">
Defined in: packages/server/src/server/mcp.ts:1347
Additional, optional information for annotating a resource.
ToolCallback
ToolCallback<
Args> =BaseToolCallback<CallToolResult|InputRequiredResult,ServerContext,Args>
Defined in: packages/server/src/server/mcp.ts:1248
Callback for a tool handler registered with McpServer.registerTool.
Type Parameters
Args
Args extends StandardSchemaWithJSON | undefined = undefined
ZodRawShape
ZodRawShape =
Record<string,z.ZodType>
Defined in: packages/server/src/server/mcp.ts:1216
A plain record of Zod field schemas, e.g. { name: z.string() }. Accepted by registerTool/registerPrompt as a shorthand; auto-wrapped with z.object(). Zod schemas only — z.object() cannot wrap other Standard Schema libraries.