#!/usr/bin/env node
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
CallToolRequestSchema,
ListResourcesRequestSchema,
ListToolsRequestSchema,
ReadResourceRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
import { salesforceTools } from "./tools/salesforce.js";
import { atlassianTools } from "./tools/atlassian.js";
import { analyticsTools } from "./tools/analytics.js";
import { documentTools } from "./tools/documents.js";
import { utilityTools } from "./tools/utilities.js";
import { documentResources } from "./resources/documents.js";
import { analyticsResources } from "./resources/analytics.js";
import { salesforceResources } from "./resources/salesforce.js";
import { atlassianResources } from "./resources/atlassian.js";
const server = new Server(
{
name: "mcp-integration-server",
version: "1.0.0",
},
{
capabilities: {
tools: {},
resources: {},
},
}
);
const allTools = [
...salesforceTools,
...atlassianTools,
...analyticsTools,
...documentTools,
...utilityTools,
];
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: allTools.map((tool) => ({
name: tool.name,
description: tool.description,
inputSchema: tool.inputSchema,
})),
};
});
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const tool = allTools.find((t) => t.name === request.params.name);
if (!tool) {
throw new Error(`Tool not found: ${request.params.name}`);
}
return await tool.handler(request.params.arguments || {});
});
server.setRequestHandler(ListResourcesRequestSchema, async () => {
const allResources = [
...(await documentResources.list()),
...(await analyticsResources.list()),
...(await salesforceResources.list()),
...(await atlassianResources.list()),
];
return {
resources: allResources,
};
});
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
const uri = request.params.uri;
if (uri.startsWith("document://")) {
return await documentResources.read(uri);
}
if (uri.startsWith("analytics://")) {
return await analyticsResources.read(uri);
}
if (uri.startsWith("salesforce://")) {
return await salesforceResources.read(uri);
}
if (uri.startsWith("jira://") || uri.startsWith("confluence://") || uri.startsWith("atlassian://")) {
return await atlassianResources.read(uri);
}
throw new Error(`Unknown resource type: ${uri}`);
});
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("MCP Integration Server running on stdio");
}
main().catch((error) => {
console.error("Server error:", error);
process.exit(1);
});