openmcp-client/service/src/mcp/client.controller.ts
2025-05-18 21:05:49 +08:00

155 lines
4.0 KiB
TypeScript

import { Controller } from "../common";
import { RequestData } from "../common/index.dto";
import { PostMessageble } from "../hook/adapter";
import { postProcessMcpToolcallResponse } from "./client.service";
import { getClient } from "./connect.service";
export class ClientController {
@Controller('server/version')
async getServerVersion(data: RequestData, webview: PostMessageble) {
const client = getClient(data.clientId);
if (!client) {
return {
code: 501,
msg:'mcp client 尚未连接'
};
}
const version = client.getServerVersion();
return {
code: 200,
msg: version
};
}
@Controller('prompts/list')
async listPrompts(data: RequestData, webview: PostMessageble) {
const client = getClient(data.clientId);
if (!client) {
const connectResult = {
code: 501,
msg: 'mcp client 尚未连接'
};
return connectResult;
}
const prompts = await client.listPrompts();
const result = {
code: 200,
msg: prompts
};
return result;
}
@Controller('prompts/get')
async getPrompt(data: RequestData, webview: PostMessageble) {
const client = getClient(data.clientId);
if (!client) {
return {
code: 501,
msg: 'mcp client 尚未连接'
};
}
const prompt = await client.getPrompt(data.promptId, data.args || {});
return {
code: 200,
msg: prompt
};
}
@Controller('resources/list')
async listResources(data: RequestData, webview: PostMessageble) {
const client = getClient(data.clientId);
if (!client) {
return {
code: 501,
msg: 'mcp client 尚未连接'
};
}
const resources = await client.listResources();
return {
code: 200,
msg: resources
};
}
@Controller('resources/templates/list')
async listResourceTemplates(data: RequestData, webview: PostMessageble) {
const client = getClient(data.clientId);
if (!client) {
return {
code: 501,
msg: 'mcp client 尚未连接'
};
}
const resources = await client.listResourceTemplates();
return {
code: 200,
msg: resources
};
}
@Controller('resources/read')
async readResource(data: RequestData, webview: PostMessageble) {
const client = getClient(data.clientId);
if (!client) {
return {
code: 501,
msg: 'mcp client 尚未连接'
};
}
const resource = await client.readResource(data.resourceUri);
console.log(resource);
return {
code: 200,
msg: resource
};
}
@Controller('tools/list')
async listTools(data: RequestData, webview: PostMessageble) {
const client = getClient(data.clientId);
if (!client) {
return {
code: 501,
msg: 'mcp client 尚未连接'
};
}
const tools = await client.listTools();
return {
code: 200,
msg: tools
};
}
@Controller('tools/call')
async callTool(data: RequestData, webview: PostMessageble) {
const client = getClient(data.clientId);
if (!client) {
return {
code: 501,
msg: 'mcp client 尚未连接'
};
}
const toolResult = await client.callTool({
name: data.toolName,
arguments: data.toolArgs,
callToolOption: data.callToolOption
});
postProcessMcpToolcallResponse(toolResult, webview);
return {
code: 200,
msg: toolResult
};
}
}