@aashari/mcp-server-atlassian-bitbucket
Version:
Node.js/TypeScript MCP server for Atlassian Bitbucket. Enables AI systems (LLMs) to interact with workspaces, repositories, and pull requests via tools (list, get, comment, search). Connects AI directly to version control workflows through the standard MC
67 lines (66 loc) • 3.03 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleContentSearch = handleContentSearch;
const logger_util_js_1 = require("../utils/logger.util.js");
const defaults_util_js_1 = require("../utils/defaults.util.js");
const pagination_util_js_1 = require("../utils/pagination.util.js");
const formatter_util_js_1 = require("../utils/formatter.util.js");
const atlassian_search_formatter_js_1 = require("./atlassian.search.formatter.js");
const vendor_atlassian_search_service_js_1 = __importDefault(require("../services/vendor.atlassian.search.service.js"));
/**
* Handle search for content (PRs, Issues, Wiki, etc.)
*/
async function handleContentSearch(workspaceSlug, repoSlug, query, limit = defaults_util_js_1.DEFAULT_PAGE_SIZE, cursor, contentType) {
const methodLogger = logger_util_js_1.Logger.forContext('controllers/atlassian.search.content.controller.ts', 'handleContentSearch');
methodLogger.debug('Performing content search');
if (!query) {
return {
content: 'Please provide a search query for content search.',
};
}
try {
const params = {
workspaceSlug,
query,
limit,
page: cursor ? parseInt(cursor, 10) : 1,
};
// Add optional parameters if provided
if (repoSlug) {
params.repoSlug = repoSlug;
}
if (contentType) {
params.contentType = contentType;
}
methodLogger.debug('Content search params:', params);
const searchResult = await vendor_atlassian_search_service_js_1.default.searchContent(params);
methodLogger.debug(`Content search complete, found ${searchResult.size} matches`);
// Extract pagination information
const pagination = (0, pagination_util_js_1.extractPaginationInfo)({
...searchResult,
// For content search, the Bitbucket API returns values and size differently
// We need to map it to a format that extractPaginationInfo can understand
page: params.page,
pagelen: limit,
}, pagination_util_js_1.PaginationType.PAGE);
// Format the search results
const formattedResults = (0, atlassian_search_formatter_js_1.formatContentSearchResults)(searchResult, contentType);
// Add pagination information if available
let finalContent = formattedResults;
if (pagination &&
(pagination.hasMore || pagination.count !== undefined)) {
const paginationString = (0, formatter_util_js_1.formatPagination)(pagination);
finalContent += '\n\n' + paginationString;
}
return {
content: finalContent,
};
}
catch (searchError) {
methodLogger.error('Error performing content search:', searchError);
throw searchError;
}
}