WebMcpServer 类
import { WebMcpServer } from '@opentiny/next-sdk'
constructor()
WebMcpServer 类的构造函数和 MCP 官方的 McpServer 类保持一致,都包含 serverInfo 和 options 两个参数。
类型
constructor(serverInfo: Implementation, options?: ServerOptions)
参数
serverInfo.name?: string
:Server 名称,默认 'mcp-server'serverInfo.version?: string
:Server 版本号,默认 '1.0.0'options.capabilities?
:Server 能力配置
示例
const server = new WebMcpServer()
const capabilities: ServerCapabilities = {
prompts: { listChanged: true },
resources: { subscribe: true, listChanged: true },
tools: { listChanged: true },
completions: {},
logging: {}
}
const server = new WebMcpServer({ name: 'my-app-server', version: '1.0.0' }, { capabilities })
connect()
用于 Server 与 各种类型的 ServerTransport 的连接。
类型
async connect(options: Transport | string): Promise<Transport>
参数
options: Transport | string
:options 可以是一个 Transport,也可以是一个 endpoint 字符串
返回值
Promise<Transport>
- 已连接的传输层实例
示例
连接 serverTransport
const [serverTransport, clientTransport] = createMessageChannelPairTransport()
server.connect(serverTransport)
连接 MessageChannelServerTransport 端点
server.connect('endpoint')
oninitialized()
服务器初始化完成时的回调函数(即客户端发送initialized通知后)。
类型
oninitialized?: () => void
示例
server.oninitialized = () => {
console.log('服务器初始化完成');
};
onclose()
连接关闭时的回调函数。当调用close()方法或连接因其他原因关闭时都会触发。
类型
onclose?: () => void
示例
server.onclose = () => {
console.log('连接已关闭');
};
onerror()
发生错误时的回调函数。注意错误不一定是致命的,它用于报告任何异常情况。
类型
onerror?: (error: Error) => void
参数
error: Error
- 错误对象
示例
server.onerror = (error) => {
console.error('发生错误:', error.message);
};
close()
关闭服务器连接。
类型
async close(): Promise<void>
返回值
Promise<void>
示例
await server.close();
registerTool()
注册一个新的工具到服务器。
类型
registerTool<InputArgs extends ZodRawShape, OutputArgs extends ZodRawShape>(
name: string,
config: {
title?: string;
description?: string;
inputSchema?: InputArgs;
outputSchema?: OutputArgs;
annotations?: ToolAnnotations;
},
cb: ToolCallback<InputArgs>
): RegisteredTool
参数
name: string
- 工具名称config: object
- 工具配置对象title?: string
- 工具标题description?: string
- 工具描述inputSchema?: InputArgs
- 输入参数模式outputSchema?: OutputArgs
- 输出参数模式annotations?: ToolAnnotations
- 工具注解
cb: ToolCallback
- 工具回调函数
返回值
RegisteredTool
- 注册的工具实例
示例
const weatherTool = server.registerTool(
'getWeather',
{
title: '获取天气',
description: '获取指定城市的天气信息',
inputSchema: {
city: z.string()
},
outputSchema: {
temperature: z.number(),
condition: z.string()
}
},
async (params) => {
// 实现获取天气的逻辑
return { temperature: 25, condition: 'sunny' };
}
);
registerPrompt()
注册一个新的提示到服务器。
类型
registerPrompt<Args extends PromptArgsRawShape>(
name: string,
config: {
title?: string;
description?: string;
argsSchema?: Args;
},
cb: PromptCallback<Args>
): RegisteredPrompt
参数
name: string
- 提示名称config: object
- 提示配置对象title?: string
- 提示标题description?: string
- 提示描述argsSchema?: Args
- 参数模式
cb: PromptCallback
- 提示回调函数
返回值
RegisteredPrompt
- 注册的提示实例
示例
const confirmPrompt = server.registerPrompt(
'confirm',
{
title: '确认操作',
description: '请求用户确认某个操作',
argsSchema: {
message: z.string()
}
},
async (params) => {
// 实现确认逻辑
return { confirmed: true };
}
);
registerResource()
注册一个新的资源到服务器。支持静态资源和动态资源模板。
类型
registerResource(name: string, uriOrTemplate: string, config: ResourceMetadata, readCallback: ReadResourceCallback): RegisteredResource;
registerResource(name: string, uriOrTemplate: ResourceTemplate, config: ResourceMetadata, readCallback: ReadResourceTemplateCallback): RegisteredResourceTemplate;
参数
name: string
- 资源名称uriOrTemplate: string | ResourceTemplate
- 资源URI或资源模板config: ResourceMetadata
- 资源元数据配置readCallback: ReadResourceCallback | ReadResourceTemplateCallback
- 资源读取回调函数
返回值
RegisteredResource | RegisteredResourceTemplate
- 注册的资源实例
示例
// 注册静态资源
const staticResource = server.registerResource(
'config',
'file://config.json',
{ title: '配置文件' },
async () => {
return { content: '配置内容' };
}
);
// 注册动态资源模板
const dynamicResource = server.registerResource(
'userProfile',
{ pattern: 'users/:id' },
{ title: '用户信息' },
async (params) => {
return { content: `用户${params.id}的信息` };
}
);
isConnected()
检查服务器是否已连接到传输层。
类型
isConnected(): boolean
参数
返回值
boolean
- 如果已连接则返回true,否则返回false
示例
if (server.isConnected()) {
console.log('服务器已连接');
}
sendResourceListChanged()
向客户端发送资源列表变更事件。
类型
sendResourceListChanged(): void
示例
server.sendResourceListChanged();
sendToolListChanged()
向客户端发送工具列表变更事件。
类型
sendToolListChanged(): void
示例
server.sendToolListChanged();
sendPromptListChanged()
向客户端发送提示列表变更事件。
类型
sendPromptListChanged(): void
示例
server.sendPromptListChanged();
getClientCapabilities()
获取客户端报告的能力信息。仅在初始化完成后可用。
类型
getClientCapabilities(): ClientCapabilities | undefined
返回值
ClientCapabilities | undefined
- 客户端能力信息
示例
const capabilities = server.getClientCapabilities();
if (capabilities) {
console.log('客户端支持的功能:', capabilities);
}
getClientVersion()
获取客户端的名称和版本信息。仅在初始化完成后可用。
类型
getClientVersion(): Implementation | undefined
参数
返回值
Implementation | undefined
- 客户端版本信息
示例
const version = server.getClientVersion();
if (version) {
console.log('客户端版本:', version.version);
}
ping()
向客户端发送ping请求以检查连接状态。
类型
async ping(): Promise<void>
返回值
Promise<void>
示例
await server.ping();
createMessage()
创建要发送给客户端的LLM消息。
类型
async createMessage(params: CreateMessageRequest['params'], options?: RequestOptions)
参数
params: CreateMessageRequest['params']
- 消息参数options?: RequestOptions
- 请求选项
返回值
Promise<any>
- 创建消息的结果
示例
await server.createMessage({
content: '这是一条消息',
role: 'system'
});
elicitInput()
从客户端获取输入,比如提示或资源。
类型
async elicitInput(params: ElicitRequest['params'], options?: RequestOptions): Promise<ElicitResult>
参数
params: ElicitRequest['params']
- 请求参数options?: RequestOptions
- 请求选项
返回值
Promise<ElicitResult>
- 用户输入结果
示例
const result = await server.elicitInput({
prompt: '请输入您的名字',
type: 'text'
});
listRoots()
列出可供客户端使用的根资源。
类型
async listRoots(params?: ListRootsRequest['params'], options?: RequestOptions)
参数
params?: ListRootsRequest['params']
- 可选的请求参数options?: RequestOptions
- 请求选项
返回值
Promise<any>
- 根资源列表
示例
const roots = await server.listRoots();
sendLoggingMessage()
向客户端发送日志消息。
类型
async sendLoggingMessage(params: LoggingMessageNotification['params']): Promise<void>
参数
params: LoggingMessageNotification['params']
- 日志消息参数
返回值
Promise<void>
示例
await server.sendLoggingMessage({
level: 'info',
message: '操作已完成',
timestamp: new Date().toISOString()
});
sendResourceUpdated()
向客户端发送资源更新通知。
类型
async sendResourceUpdated(params: ResourceUpdatedNotification['params']): Promise<void>
参数
params: ResourceUpdatedNotification['params']
- 资源更新参数
返回值
Promise<void>
示例
await server.sendResourceUpdated({
uri: 'file://config.json',
reason: 'changed'
});
request()
发送请求并等待响应。不要用此方法发送通知,应使用 notification() 方法。
类型
request<T extends ZodType<object>>(request: SendRequestT, resultSchema: T, options?: RequestOptions): Promise<z.infer<T>>
参数
request: SendRequestT
- 请求对象resultSchema: T
- 结果验证模式options?: RequestOptions
- 请求选项
返回值
Promise<z.infer<T>>
- 请求响应结果
示例
const result = await server.request(
{ method: 'getData', params: { id: 1 } },
z.object({ data: z.string() })
);
notification()
发送通知,这是一个不需要响应的单向消息。
类型
async notification(notification: SendNotificationT, options?: NotificationOptions): Promise<void>
参数
notification: SendNotificationT
- 通知对象options?: NotificationOptions
- 通知选项
返回值
Promise<void>
示例
await server.notification({
method: 'status',
params: { status: 'ready' }
});
setRequestHandler()
注册一个处理特定方法请求的处理程序。注意:这将替换同一方法的任何现有处理程序。
类型
setRequestHandler<T extends ZodObject<{ method: ZodLiteral<string> }>>(
requestSchema: T,
handler: (request: z.infer<T>, extra: RequestHandlerExtra<SendRequestT, SendNotificationT>) => SendResultT | Promise<SendResultT>
): void
参数
requestSchema: T
- 请求验证模式handler: Function
- 请求处理函数
示例
server.setRequestHandler(
z.object({ method: z.literal('getData') }),
async (request) => {
return { result: '数据' };
}
);
removeRequestHandler()
移除指定方法的请求处理程序。
类型
removeRequestHandler(method: string): void
参数
method: string
- 要移除处理程序的方法名
示例
server.removeRequestHandler('getData');
setNotificationHandler()
注册一个处理特定方法通知的处理程序。注意:这将替换同一方法的任何现有处理程序。
类型
setNotificationHandler<T extends ZodObject<{ method: ZodLiteral<string> }>>(
notificationSchema: T,
handler: (notification: z.infer<T>) => void | Promise<void>
): void
参数
notificationSchema: T
- 通知验证模式handler: Function
- 通知处理函数
示例
server.setNotificationHandler(
z.object({ method: z.literal('statusChanged') }),
async (notification) => {
console.log('状态已改变');
}
);
removeNotificationHandler()
移除指定方法的通知处理程序。
类型
removeNotificationHandler(method: string): void
参数
method: string
- 要移除处理程序的方法名
示例
server.removeNotificationHandler('statusChanged');
onSubscribe()
注册订阅请求的处理程序。
类型
onSubscribe(
handler: (
request: z.infer<typeof SubscribeRequestSchema>,
extra: RequestHandlerExtra<SendRequestT, SendNotificationT>
) => SendResultT | Promise<SendResultT>
): void
参数
handler: Function
- 订阅请求处理函数
示例
server.onSubscribe(async (request, extra) => {
return { success: true };
});
onUnsubscribe()
注册取消订阅请求的处理程序。
类型
onUnsubscribe(
handler: (
request: z.infer<typeof UnsubscribeRequestSchema>,
extra: RequestHandlerExtra<SendRequestT, SendNotificationT>
) => SendResultT | Promise<SendResultT>
): void
参数
handler: Function
- 取消订阅请求处理函数
示例
server.onUnsubscribe(async (request, extra) => {
return { success: true };
});
onSetLogLevel()
注册设置日志级别请求的处理程序。
类型
onSetLogLevel(
handler: (
request: z.infer<typeof SetLevelRequestSchema>,
extra: RequestHandlerExtra<SendRequestT, SendNotificationT>
) => SendResultT | Promise<SendResultT>
): void
参数
handler: Function
- 设置日志级别请求处理函数
示例
server.onSetLogLevel(async (request, extra) => {
return { success: true };
});
onListResources()
注册列出资源请求的处理程序。
类型
onListResources(
handler: (
request: z.infer<typeof ListResourcesRequestSchema>,
extra: RequestHandlerExtra<SendRequestT, SendNotificationT>
) => SendResultT | Promise<SendResultT>
): void
参数
handler: Function
- 列出资源请求处理函数
示例
server.onListResources(async (request, extra) => {
return { resources: [] };
});
onRootsListChanged()
注册根资源列表变更通知的处理程序。
类型
onRootsListChanged(
handler: (notification: z.infer<typeof RootsListChangedNotificationSchema>) => void | Promise<void>
): void
参数
handler: Function
- 根资源列表变更通知处理函数
示例
server.onRootsListChanged(async (notification) => {
console.log('根资源列表已更新');
});