privco-data-mcp
Version:
This package provides MCP (Multi-Channel Protocol) handlers for accessing PrivCo's data services.
160 lines (159 loc) • 7.22 kB
JavaScript
#!/usr/bin/env node
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createServer = createServer;
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
const axios_1 = __importDefault(require("axios"));
const deals_1 = require("./handlers/deals");
const finance_1 = require("./handlers/finance");
const identification_1 = require("./handlers/identification");
const investment_1 = require("./handlers/investment");
const ma_1 = require("./handlers/ma");
const people_1 = require("./handlers/people");
const profile_1 = require("./handlers/profile");
const search_1 = require("./handlers/search");
const vc_1 = require("./handlers/vc");
const response_1 = require("./utils/response");
function createServer() {
const server = new mcp_js_1.McpServer({
name: "Privco Data MCP",
version: "1.0.0",
});
const apiKey = process.env.PRIVCO_API_KEY;
if (!apiKey) {
throw new Error("API key is not set");
}
axios_1.default.defaults.headers.common["x-api-key"] = apiKey;
// Register Search API
server.registerTool(search_1.searchApiConfig.name, {
title: search_1.searchApiConfig.title,
description: search_1.searchApiConfig.description,
inputSchema: search_1.searchApiConfig.inputSchema,
}, async (params) => {
if (!params.name && !params.website) {
return (0, response_1.formatErrorResponse)("Please provide a name or website");
}
const result = await search_1.searchApiConfig.handler(params);
return (0, response_1.formatSuccessResponse)(result.data);
});
// Register Profile API
server.registerTool(profile_1.profileApiConfig.name, {
title: profile_1.profileApiConfig.title,
description: profile_1.profileApiConfig.description,
inputSchema: profile_1.profileApiConfig.inputSchema,
}, async (params) => {
if (!params.profileId || !params.profileType) {
return (0, response_1.formatErrorResponse)("Please provide an ID");
}
const result = await profile_1.profileApiConfig.handler(params);
return (0, response_1.formatSuccessResponse)(result.data);
});
// Register Investment API
server.registerTool(investment_1.investmentApiConfig.name, {
title: investment_1.investmentApiConfig.title,
description: investment_1.investmentApiConfig.description,
inputSchema: investment_1.investmentApiConfig.inputSchema,
}, async (params) => {
if (!params.profileId || !params.profileType) {
return (0, response_1.formatErrorResponse)("Please provide a company ID");
}
const result = await investment_1.investmentApiConfig.handler(params);
return (0, response_1.formatSuccessResponse)(result.data);
});
// Register People API
server.registerTool(people_1.peopleApiConfig.name, {
title: people_1.peopleApiConfig.title,
description: people_1.peopleApiConfig.description,
inputSchema: people_1.peopleApiConfig.inputSchema,
}, async (params) => {
if (!params.profileId || !params.profileType) {
return (0, response_1.formatErrorResponse)("Please provide a company ID");
}
const result = await people_1.peopleApiConfig.handler(params);
return (0, response_1.formatSuccessResponse)(result.data);
});
// Register Financials APIs
server.registerTool(finance_1.financialsApiConfig.name, {
title: finance_1.financialsApiConfig.title,
description: finance_1.financialsApiConfig.description,
inputSchema: finance_1.financialsApiConfig.inputSchema,
}, async (params) => {
if (!params.companyId) {
return (0, response_1.formatErrorResponse)("Please provide a company ID");
}
const result = await finance_1.financialsApiConfig.handler(params);
return (0, response_1.formatSuccessResponse)(result.data);
});
server.registerTool(finance_1.revenueFinancialsApiConfig.name, {
title: finance_1.revenueFinancialsApiConfig.title,
description: finance_1.revenueFinancialsApiConfig.description,
inputSchema: finance_1.revenueFinancialsApiConfig.inputSchema,
}, async (params) => {
if (!params.companyId) {
return (0, response_1.formatErrorResponse)("Please provide a company ID");
}
const result = await finance_1.revenueFinancialsApiConfig.handler(params);
return (0, response_1.formatSuccessResponse)(result.data);
});
// Register Identification API
server.registerTool(identification_1.identificationApiConfig.name, {
title: identification_1.identificationApiConfig.title,
description: identification_1.identificationApiConfig.description,
inputSchema: identification_1.identificationApiConfig.inputSchema,
}, async (params) => {
if (!params.name) {
return (0, response_1.formatErrorResponse)("Please provide a company name");
}
const result = await identification_1.identificationApiConfig.handler(params);
return (0, response_1.formatSuccessResponse)(result.data);
});
// Register Deals API
server.registerTool(deals_1.dealsApiConfig.name, {
title: deals_1.dealsApiConfig.title,
description: deals_1.dealsApiConfig.description,
inputSchema: deals_1.dealsApiConfig.inputSchema,
}, async (params) => {
if (!params.profileId || !params.profileType) {
return (0, response_1.formatErrorResponse)("Please provide a company ID");
}
const result = await deals_1.dealsApiConfig.handler(params);
return (0, response_1.formatSuccessResponse)(result.data);
});
// Register M&A API
server.registerTool(ma_1.maApiConfig.name, {
title: ma_1.maApiConfig.title,
description: ma_1.maApiConfig.description,
inputSchema: ma_1.maApiConfig.inputSchema,
}, async (params) => {
if (!params.profileId) {
return (0, response_1.formatErrorResponse)("Please provide a company ID");
}
const result = await ma_1.maApiConfig.handler(params);
return (0, response_1.formatSuccessResponse)(result.data);
});
// Register VC API
server.registerTool(vc_1.vcApiConfig.name, {
title: vc_1.vcApiConfig.title,
description: vc_1.vcApiConfig.description,
inputSchema: vc_1.vcApiConfig.inputSchema,
}, async (params) => {
if (!params.profileId) {
return (0, response_1.formatErrorResponse)("Please provide a company ID");
}
const result = await vc_1.vcApiConfig.handler(params);
return (0, response_1.formatSuccessResponse)(result.data);
});
return server;
}
/**
* Entry point when running directly
*/
if (require.main === module) {
const server = createServer();
const transport = new stdio_js_1.StdioServerTransport();
server.connect(transport);
}