#!/usr/bin/env node
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { VERSION } from './version.js';
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { tool_handler, list_of_tools } from './tool-handler.js';
import {
CallToolRequestSchema,
ListToolsRequestSchema,
ListPromptsRequestSchema,
GetPromptRequestSchema,
ListResourcesRequestSchema
} from "@modelcontextprotocol/sdk/types.js";
import { AsanaClientWrapper } from './asana-client-wrapper.js'
import { createPromptHandlers } from './prompt-handler.js';
async function main() {
const asanaToken = process.env.ASANA_ACCESS_TOKEN;
let defaultWorkspaceId = process.env.DEFAULT_WORKSPACE_ID;
// Verificăm dacă defaultWorkspaceId este valoarea placeholder și îl tratăm ca nesetat
if (defaultWorkspaceId === "your-default-workspace-id" || defaultWorkspaceId === "your-default-workspace-id-optional") {
console.error("DEFAULT_WORKSPACE_ID is set to placeholder value, treating as undefined");
defaultWorkspaceId = undefined;
}
if (!asanaToken) {
console.error("Please set ASANA_ACCESS_TOKEN environment variable");
process.exit(1);
}
console.error("Starting Asana MCP Server...");
const server = new Server(
{
name: "Asana MCP Server",
version: VERSION,
},
{
capabilities: {
tools: {},
prompts: {},
resources: {}
},
}
);
const asanaClient = new AsanaClientWrapper(asanaToken, defaultWorkspaceId);
server.setRequestHandler(
CallToolRequestSchema,
tool_handler(asanaClient)
);
server.setRequestHandler(ListToolsRequestSchema, async () => {
console.error("Received ListToolsRequest");
return {
tools: list_of_tools,
};
});
const promptHandlers = createPromptHandlers(asanaClient);
// Add prompt handlers
server.setRequestHandler(ListPromptsRequestSchema, promptHandlers.listPrompts);
server.setRequestHandler(GetPromptRequestSchema, promptHandlers.getPrompt);
// Add resources handler
server.setRequestHandler(ListResourcesRequestSchema, async () => {
console.error("Received ListResourcesRequest");
return {
resources: [] // Returnăm o listă goală deoarece nu folosim resurse în acest server
};
});
const transport = new StdioServerTransport();
console.error("Connecting server to transport...");
await server.connect(transport);
console.error("Asana MCP Server running on stdio");
}
main().catch((error) => {
console.error("Fatal error in main():", error);
process.exit(1);
});