UIFlowchartCreator
by umshere
import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
import { AxiosInstance } from 'axios';
import {
ToolCallResponse,
ToolDefinition,
ToolHandler,
} from '../../../types/index.js';
import { BasePostmanTool } from '../base.js';
import { TOOL_DEFINITIONS } from './definitions.js';
/**
* Handles Postman Mock Server API operations
*/
export class MockTools extends BasePostmanTool implements ToolHandler {
constructor(existingClient: AxiosInstance) {
super(null, {}, existingClient);
}
getToolDefinitions(): ToolDefinition[] {
return TOOL_DEFINITIONS;
}
private createResponse(data: any): ToolCallResponse {
return {
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }]
};
}
async handleToolCall(name: string, args: any): Promise<ToolCallResponse> {
try {
switch (name) {
case 'list_mocks':
return await this.listMocks(args);
case 'create_mock':
return await this.createMock(args);
case 'get_mock':
return await this.getMock(args.mockId);
case 'update_mock':
return await this.updateMock(args);
case 'delete_mock':
return await this.deleteMock(args.mockId);
case 'get_mock_call_logs':
return await this.getMockCallLogs(args);
case 'publish_mock':
return await this.publishMock(args.mockId);
case 'unpublish_mock':
return await this.unpublishMock(args.mockId);
case 'list_server_responses':
return await this.listServerResponses(args.mockId);
case 'create_server_response':
return await this.createServerResponse(args);
case 'get_server_response':
return await this.getServerResponse(args);
case 'update_server_response':
return await this.updateServerResponse(args);
case 'delete_server_response':
return await this.deleteServerResponse(args);
default:
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
}
} catch (error) {
// Let base class interceptor handle API errors
throw error;
}
}
/**
* List all mock servers
* @param args Optional filters: teamId, workspace
*/
async listMocks(args: any): Promise<ToolCallResponse> {
const params: any = {};
if (args.teamId) params.teamId = args.teamId;
if (args.workspace) params.workspace = args.workspace;
const response = await this.client.get('/mocks', { params });
return this.createResponse(response.data);
}
/**
* Create a new mock server
* @param args.workspace Optional workspace ID
* @param args.mock Mock server configuration
*/
async createMock(args: any): Promise<ToolCallResponse> {
const params: any = {};
if (args.workspace) params.workspaceId = args.workspace;
const response = await this.client.post('/mocks', { mock: args.mock }, { params });
return this.createResponse(response.data);
}
/**
* Get details of a specific mock server
* @param mockId Mock server ID
*/
async getMock(mockId: string): Promise<ToolCallResponse> {
const response = await this.client.get(`/mocks/${mockId}`);
return this.createResponse(response.data);
}
/**
* Update an existing mock server
* @param args.mockId Mock server ID
* @param args.mock Updated mock server configuration
*/
async updateMock(args: any): Promise<ToolCallResponse> {
const response = await this.client.put(
`/mocks/${args.mockId}`,
{ mock: args.mock }
);
return this.createResponse(response.data);
}
/**
* Delete a mock server
* @param mockId Mock server ID
*/
async deleteMock(mockId: string): Promise<ToolCallResponse> {
const response = await this.client.delete(`/mocks/${mockId}`);
return this.createResponse(response.data);
}
/**
* Get mock server call logs
* @param args.mockId Mock server ID
* @param args Optional filters and pagination
*/
async getMockCallLogs(args: any): Promise<ToolCallResponse> {
const params: any = {};
const optionalParams = [
'limit', 'cursor', 'until', 'since', 'responseStatusCode',
'responseType', 'requestMethod', 'requestPath', 'sort',
'direction', 'include'
];
optionalParams.forEach(param => {
if (args[param] !== undefined) params[param] = args[param];
});
const response = await this.client.get(
`/mocks/${args.mockId}/call-logs`,
{ params }
);
return this.createResponse(response.data);
}
/**
* Publish a mock server (set to public)
* @param mockId Mock server ID
*/
async publishMock(mockId: string): Promise<ToolCallResponse> {
const response = await this.client.post(`/mocks/${mockId}/publish`);
return this.createResponse(response.data);
}
/**
* Unpublish a mock server (set to private)
* @param mockId Mock server ID
*/
async unpublishMock(mockId: string): Promise<ToolCallResponse> {
const response = await this.client.delete(`/mocks/${mockId}/unpublish`);
return this.createResponse(response.data);
}
/**
* List all server responses for a mock
* @param mockId Mock server ID
*/
async listServerResponses(mockId: string): Promise<ToolCallResponse> {
const response = await this.client.get(`/mocks/${mockId}/server-responses`);
return this.createResponse(response.data);
}
/**
* Create a new server response
* @param args.mockId Mock server ID
* @param args.serverResponse Server response configuration
*/
async createServerResponse(args: any): Promise<ToolCallResponse> {
const response = await this.client.post(
`/mocks/${args.mockId}/server-responses`,
{ serverResponse: args.serverResponse }
);
return this.createResponse(response.data);
}
/**
* Get a specific server response
* @param args.mockId Mock server ID
* @param args.serverResponseId Server response ID
*/
async getServerResponse(args: any): Promise<ToolCallResponse> {
const response = await this.client.get(
`/mocks/${args.mockId}/server-responses/${args.serverResponseId}`
);
return this.createResponse(response.data);
}
/**
* Update a server response
* @param args.mockId Mock server ID
* @param args.serverResponseId Server response ID
* @param args.serverResponse Updated server response configuration
*/
async updateServerResponse(args: any): Promise<ToolCallResponse> {
const response = await this.client.put(
`/mocks/${args.mockId}/server-responses/${args.serverResponseId}`,
{ serverResponse: args.serverResponse }
);
return this.createResponse(response.data);
}
/**
* Delete a server response
* @param args.mockId Mock server ID
* @param args.serverResponseId Server response ID
*/
async deleteServerResponse(args: any): Promise<ToolCallResponse> {
const response = await this.client.delete(
`/mocks/${args.mockId}/server-responses/${args.serverResponseId}`
);
return this.createResponse(response.data);
}
}