clickup-mcp-server
Version:
A Model Context Protocol (MCP) server that provides a standardized interface for AI assistants to interact with the ClickUp API
77 lines • 3.3 kB
JavaScript
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
import { createClickUpClient } from '../clickup-client/index.js';
import { createDocsClient } from '../clickup-client/docs.js';
// Create clients
const clickUpClient = createClickUpClient();
const docsClient = createDocsClient(clickUpClient);
export function setupDocResources(server) {
// Register doc content resource
server.resource('doc-content', new ResourceTemplate('clickup://workspace/{workspace_id}/doc/{doc_id}', { list: undefined }), {
description: 'Get the content of a specific ClickUp doc, combining all pages into a single document.'
}, async (uri, params) => {
try {
const workspace_id = params.workspace_id;
const doc_id = params.doc_id;
console.log('[DocResources] Getting doc:', doc_id, 'from workspace:', workspace_id);
// Get the pages of the doc
const pages = await docsClient.getDocPages(workspace_id, doc_id);
// Combine the content of all pages
let combinedContent = '';
if (Array.isArray(pages)) {
for (const page of pages) {
if (page.content) {
combinedContent += page.content + '\n\n';
}
}
}
return {
contents: [
{
uri: uri.toString(),
mimeType: 'application/json',
text: combinedContent || 'No content found in this doc.',
},
],
};
}
catch (error) {
console.error('[DocResources] Error fetching doc:', error);
throw new Error(`Error fetching doc: ${error.message}`);
}
});
// Add some example static resources for discoverability
server.resource('example-doc', 'clickup://workspace/9011839976/doc/8cjbgz8-911', {
description: 'An example doc resource demonstrating the doc content format.'
}, async (uri) => {
try {
const workspace_id = '9011839976';
const doc_id = '8cjbgz8-911';
console.log('[DocResources] Getting example doc:', doc_id, 'from workspace:', workspace_id);
// Get the pages of the doc
const pages = await docsClient.getDocPages(workspace_id, doc_id);
// Combine the content of all pages
let combinedContent = '';
if (Array.isArray(pages)) {
for (const page of pages) {
if (page.content) {
combinedContent += page.content + '\n\n';
}
}
}
return {
contents: [
{
uri: uri.toString(),
mimeType: 'application/json',
text: combinedContent || 'No content found in this doc.',
},
],
};
}
catch (error) {
console.error('[DocResources] Error fetching example doc:', error);
throw new Error(`Error fetching example doc: ${error.message}`);
}
});
}
//# sourceMappingURL=doc-resources.js.map