businessmap-mcp
Version:
MCP server for Businessmap Kanbanize, exposing tools for managing business entities like boards, cards, and columns, facilitating LLM interaction.
376 lines (375 loc) • 11.8 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.apiServices = void 0;
const request_1 = __importDefault(require("../utils/request"));
const DEFAULT_ERROR = "UNKNOWN_ERROR";
const DEFAULT_MESSAGE_ERROR = "An unknown mistake occurred";
const DEFAULT_REFERENCE_MESSAGE_ERROR = "Check the logs for more details";
class ApiServices extends request_1.default {
handleError(error) {
let errorMessage = DEFAULT_MESSAGE_ERROR;
if (error instanceof Error) {
errorMessage = error.message;
}
return {
error: {
code: DEFAULT_ERROR,
message: errorMessage,
reference: DEFAULT_REFERENCE_MESSAGE_ERROR,
},
};
}
async getMe() {
try {
const data = await this.get("/me");
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getApiLimits() {
try {
const data = await this.get("/apiLimits");
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getCard(cardId) {
try {
const data = await this.get(`/cards/${cardId}`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async createCard(cardData) {
try {
const queryParams = new URLSearchParams();
if (cardData.board_id) {
queryParams.append('board_id', cardData.board_id.toString());
}
if (cardData.workflow_id) {
queryParams.append('workflow_id', cardData.workflow_id.toString());
}
const requestBody = {
column_id: cardData.column_id,
lane_id: cardData.lane_id,
title: cardData.title,
description: cardData.description,
priority: cardData.priority,
...(cardData.owner_user_id && { owner_user_id: cardData.owner_user_id }),
};
const url = queryParams.toString() ? `/cards?${queryParams.toString()}` : '/cards';
const data = await this.post(url, requestBody);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async updateCard(card_id, title, description, assignee_ids, priority, column_id, lane_id) {
try {
const data = await this.patch(`/cards/${card_id}`, {
title,
description,
assignee_ids,
priority,
column_id,
lane_id,
});
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async deleteCard(cardId) {
try {
await this.delete(`/cards/${cardId}`);
return { data: "The card has been deleted" };
}
catch (error) {
return this.handleError(error);
}
}
async getCards(props) {
try {
const cardIds = props.card_ids ? `&card_ids=${props.card_ids}` : "";
const boardIds = props.board_ids ? `&board_ids=${props.board_ids}` : "";
const ownerUserIds = props.owner_user_ids
? `&owner_user_ids=${props.owner_user_ids}`
: "";
const data = await this.get(`/cards?state=${props.state}&is_blocked=${props.is_blocked}&expand=linked_cards,co_owner_ids,subtasks${cardIds}${boardIds}${ownerUserIds}`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getCardComments(cardId) {
try {
const data = await this.get(`/cards/${cardId}/comments`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async addCardComment(cardId, comment) {
try {
const data = await this.post(`/cards/${cardId}/comments`, {
text: comment,
});
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getCardComment(cardId, commentId) {
try {
const data = await this.get(`/cards/${cardId}/comments/${commentId}`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async updateCardComment(cardId, commentId, comment) {
try {
const data = await this.patch(`/cards/${cardId}/comments/${commentId}`, {
text: comment,
});
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async deleteCardComment(cardId, commentId) {
try {
const data = await this.delete(`/cards/${cardId}/comments/${commentId}`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getCardCoOwners(cardId) {
try {
const data = await this.get(`/cards/${cardId}/coOwners`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async checkCardCoOwner(cardId, userId) {
try {
await this.get(`/cards/${cardId}/coOwners/${userId}`);
return { data: true };
}
catch (error) {
return this.handleError(error);
}
}
async addCardCoOwner(cardId, userId) {
try {
await this.put(`/cards/${cardId}/coOwners/${userId}`);
return { data: "Add a user as a co-owner of a card." };
}
catch (error) {
return this.handleError(error);
}
}
async removeCardCoOwner(cardId, userId) {
try {
await this.delete(`/cards/${cardId}/coOwners/${userId}`);
return { data: "Remove a user as a co-owner of a card." };
}
catch (error) {
return this.handleError(error);
}
}
async getLinkedCards(cardId) {
try {
const data = await this.get(`/cards/${cardId}/linkedCards`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getCardSubtasks(cardId) {
try {
const data = await this.get(`/cards/${cardId}/subtasks`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getCardSubtask(cardId, subtaskId) {
try {
const data = await this.get(`/cards/${cardId}/subtasks/${subtaskId}`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async addCardSubtask(cardId, description, owner_user_id, is_finished, deadline, position) {
try {
const requestBody = { description };
if (owner_user_id !== undefined)
requestBody.owner_user_id = owner_user_id;
if (is_finished !== undefined)
requestBody.is_finished = is_finished;
if (deadline !== undefined)
requestBody.deadline = deadline;
if (position !== undefined)
requestBody.position = position;
const data = await this.post(`/cards/${cardId}/subtasks`, requestBody);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async updateCardSubtask(cardId, subtaskId, description, isFinished, owner_user_id, deadline, position) {
try {
const requestBody = {};
if (description !== undefined)
requestBody.description = description;
if (isFinished !== undefined)
requestBody.is_finished = isFinished;
if (owner_user_id !== undefined)
requestBody.owner_user_id = owner_user_id;
if (deadline !== undefined)
requestBody.deadline = deadline;
if (position !== undefined)
requestBody.position = position;
const data = await this.patch(`/cards/${cardId}/subtasks/${subtaskId}`, requestBody);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async deleteCardSubtask(cardId, subtaskId) {
try {
await this.delete(`/cards/${cardId}/subtasks/${subtaskId}`);
return { data: "The card subtask has been deleted." };
}
catch (error) {
return this.handleError(error);
}
}
async getBoards() {
try {
const data = await this.get(`/boards?if_assigned=1`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getBoard(boardId) {
try {
const data = await this.get(`/boards/${boardId}`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getUser(user_id) {
try {
const data = await this.get(`/users/${user_id}`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getColumns(boardId) {
try {
const data = await this.get(`/boards/${boardId}/columns`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getColumn(boardId, columnId) {
try {
const data = await this.get(`/boards/${boardId}/columns/${columnId}`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getWorkspace(workspaceId) {
try {
const data = await this.get(`/workspace/${workspaceId}`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getLanes(boardId) {
try {
const data = await this.get(`/boards/${boardId}/lanes`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async getLane(laneId) {
try {
const data = await this.get(`/lanes/${laneId}`);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async createLane(boardId, params) {
try {
const data = await this.post(`/boards/${boardId}/lanes`, params);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async updateLane(laneId, params) {
try {
const data = await this.patch(`/lanes/${laneId}`, params);
return { data };
}
catch (error) {
return this.handleError(error);
}
}
async deleteLane(laneId) {
try {
await this.delete(`/lanes/${laneId}`);
return { data: "The lane has been deleted" };
}
catch (error) {
return this.handleError(error);
}
}
}
exports.apiServices = new ApiServices();