UNPKG

npmplus-mcp-server

Version:

Production-ready MCP server for intelligent JavaScript package management. Works with Claude, Windsurf, Cursor, VS Code, and any MCP-compatible AI editor.

61 lines 2.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handlers = exports.tools = void 0; const cache_js_1 = require("../cache.js"); const http_client_js_1 = require("../http-client.js"); const index_js_1 = require("../validators/index.js"); const index_js_2 = require("../utils/index.js"); // Export tools and handlers exports.tools = [ { name: "search_packages", description: "Search for packages in the npm registry", inputSchema: index_js_1.SearchPackagesSchema } ]; exports.handlers = new Map([ ["search_packages", handleSearchPackages] ]); async function handleSearchPackages(args) { const input = index_js_1.SearchPackagesSchema.parse(args); // Check cache first const cacheKey = cache_js_1.CacheManager.keys.searchResults(input.query, input.limit); const cached = await cache_js_1.cache.get(cacheKey); if (cached) { return (0, index_js_2.createSuccessResponse)(formatSearchResults(cached, input.query)); } try { const searchResults = await http_client_js_1.httpClient.npmSearch(input.query, { size: input.limit, from: input.from }); // Cache for 5 minutes await cache_js_1.cache.set(cacheKey, searchResults, 300); return (0, index_js_2.createSuccessResponse)(formatSearchResults(searchResults, input.query)); } catch (error) { return (0, index_js_2.createErrorResponse)(error, 'Failed to search packages'); } } function formatSearchResults(results, query) { const output = [ `🔍 Search results for "${query}":\n` ]; if (!results.objects || results.objects.length === 0) { output.push("No packages found matching your query."); return output.join("\n"); } results.objects.slice(0, 10).forEach((item, index) => { const pkg = item.package; output.push(`${index + 1}. 📦 **${pkg.name}**`); output.push(` Version: ${pkg.version}`); output.push(` Description: ${(0, index_js_2.truncateText)(pkg.description || 'No description', 100)}`); output.push(` Downloads: ${pkg.links?.npm ? '📊 Available' : 'N/A'}`); output.push(""); }); if (results.total > results.objects.length) { output.push(`Showing ${results.objects.length} of ${results.total} results`); } return output.join("\n"); } //# sourceMappingURL=search-tools.js.map