155 lines
4.0 KiB
TypeScript
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
|
|
};
|
|
}
|
|
} |