Skip to main content
Glama

Teamwork MCP

createComment.ts3.21 kB
/** * createComment tool * Creates a new comment for a specific resource in Teamwork */ import logger from "../../utils/logger.js"; import teamworkService from "../../services/index.js"; // Tool definition export const createCommentDefinition = { name: "createComment", description: "Creates a new comment for a specific resource (tasks, milestones, notebooks, links, fileversions) in Teamwork", inputSchema: { type: "object", properties: { resource: { type: "string", description: "The resource type (tasks, milestones, notebooks, links, fileversions)", enum: ["tasks", "milestones", "notebooks", "links", "fileversions"] }, resourceId: { type: "string", description: "The ID of the resource to add a comment to" }, body: { type: "string", description: "The content of the comment" }, notify: { type: "string", description: "Who to notify ('all' to notify all project users, 'true' to notify followers, specific user IDs, or empty for no notification)", default: "" }, isPrivate: { type: "boolean", description: "Whether the comment should be private", default: false }, pendingFileAttachments: { type: "string", description: "Comma-separated list of pending file references to attach to the comment" }, contentType: { type: "string", description: "Content type of the comment (html or plain text)", enum: ["html", "plaintext"], default: "plaintext" }, authorId: { type: "string", description: "ID of the user to post as (only for admins)" } }, required: ["resource", "resourceId", "body"] }, annotations: { title: "Create Comment", readOnlyHint: false, destructiveHint: false, openWorldHint: false } }; // Tool handler export async function handleCreateComment(input: any) { logger.info('Calling teamworkService.createComment()'); logger.info(`Resource: ${input?.resource}, Resource ID: ${input?.resourceId}`); try { const resource = input.resource; const resourceId = input.resourceId; const commentData: any = {}; // Set required fields commentData.body = input.body; // Set optional fields if provided if (input.notify !== undefined) commentData.notify = input.notify; if (input.isPrivate !== undefined) commentData['isprivate'] = input.isPrivate; if (input.pendingFileAttachments) commentData.pendingFileAttachments = input.pendingFileAttachments; if (input.contentType === 'html') commentData['content-type'] = 'html'; if (input.authorId) commentData['author-id'] = input.authorId; const result = await teamworkService.createComment(resource, resourceId, commentData); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } catch (error: any) { logger.error(`Error in createComment handler: ${error.message}`); return { content: [{ type: "text", text: `Error creating comment: ${error.message}` }] }; } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Vizioz/Teamwork-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server