feat(mcp): 补齐服务导入与能力工作台链路

This commit is contained in:
2026-06-01 04:29:08 +08:00
parent 8596f5074b
commit 32925bad8e
27 changed files with 1096 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
import { beforeEach, describe, expect, it, vi } from 'vitest';
import {
getMcpWorkspace,
importMcpServer,
listMcpCapabilitiesByServerCode,
listMcpCapabilitiesByServerId,
listMcpServers,
saveMcpCapability,
} from '../mcp';
import { get, post } from '../request';
vi.mock('../request', () => ({
get: vi.fn(),
post: vi.fn(),
}));
describe('mcp api', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('maps mcp endpoints correctly', () => {
importMcpServer({
serverCode: 'jira_server',
serverName: 'Jira 服务',
importType: 'URL',
endpointUrl: 'https://mcp.example.com/sse',
manifestJson: '{"server":"jira"}',
});
listMcpServers();
listMcpCapabilitiesByServerId('1001');
listMcpCapabilitiesByServerCode('jira_server');
saveMcpCapability({
serverId: '1001',
capabilityCode: 'jira_issue_search',
capabilityName: '问题检索',
capabilityType: 'TOOL',
schemaJson: '{"type":"object"}',
enabled: true,
});
getMcpWorkspace('1001');
expect(post).toHaveBeenCalledWith('/mcp/import', {
serverCode: 'jira_server',
serverName: 'Jira 服务',
importType: 'URL',
endpointUrl: 'https://mcp.example.com/sse',
manifestJson: '{"server":"jira"}',
});
expect(get).toHaveBeenCalledWith('/mcp/servers');
expect(get).toHaveBeenCalledWith('/mcp/servers/1001/capabilities');
expect(get).toHaveBeenCalledWith('/mcp/servers/code/jira_server/capabilities');
expect(post).toHaveBeenCalledWith('/mcp/capabilities/save', {
serverId: '1001',
capabilityCode: 'jira_issue_search',
capabilityName: '问题检索',
capabilityType: 'TOOL',
schemaJson: '{"type":"object"}',
enabled: true,
});
expect(get).toHaveBeenCalledWith('/mcp/workspace', { params: { serverId: '1001' } });
});
});

74
frontend/src/api/mcp.ts Normal file
View File

@@ -0,0 +1,74 @@
import { get, post } from './request';
export interface McpImportRequest {
serverCode: string;
serverName: string;
importType: string;
endpointUrl?: string;
packageName?: string;
manifestJson: string;
authType?: string;
secretRef?: string;
remark?: string;
}
export interface McpServer {
id?: string;
serverCode: string;
serverName: string;
importType: string;
endpointUrl?: string;
packageName?: string;
manifestJson: string;
authType?: string;
secretRef?: string;
healthStatus?: string;
enabled?: boolean;
remark?: string;
}
export interface McpCapability {
id?: string;
serverId: string;
capabilityCode: string;
capabilityName: string;
capabilityType: string;
schemaJson: string;
enabled?: boolean;
remark?: string;
}
export interface McpWorkspace {
serverId: string;
serverCode: string;
serverName: string;
importType: string;
healthStatus: string;
enabled: boolean;
enabledCapabilityCount: number;
capabilities: McpCapability[];
}
export function importMcpServer(data: McpImportRequest) {
return post<boolean, McpImportRequest>('/mcp/import', data);
}
export function listMcpServers() {
return get<McpServer[]>('/mcp/servers');
}
export function listMcpCapabilitiesByServerId(serverId: string) {
return get<McpCapability[]>(`/mcp/servers/${serverId}/capabilities`);
}
export function listMcpCapabilitiesByServerCode(serverCode: string) {
return get<McpCapability[]>(`/mcp/servers/code/${serverCode}/capabilities`);
}
export function saveMcpCapability(data: McpCapability) {
return post<boolean, McpCapability>('/mcp/capabilities/save', data);
}
export function getMcpWorkspace(serverId: string) {
return get<McpWorkspace>('/mcp/workspace', { params: { serverId } });
}