Jake Shore 8e9d1ffb87 calendly: Complete MCP server with 27 tools and 12 React apps
- Calendly API v2 client with auth, pagination, error handling
- 27 MCP tools across 6 categories (events, event types, scheduling, users, orgs, webhooks)
- 12 React MCP apps with dark theme and client-side state
- Both stdio and HTTP modes supported
- Full TypeScript types and documentation
2026-02-12 17:08:15 -05:00

88 lines
2.1 KiB
TypeScript

// Users Tools
import { CalendlyClient } from '../clients/calendly.js';
export function createUsersTools(client: CalendlyClient) {
return {
calendly_get_current_user: {
description: 'Get the currently authenticated user information',
parameters: {
type: 'object',
properties: {},
},
handler: async (args: any) => {
const result = await client.getCurrentUser();
return {
content: [
{
type: 'text',
text: JSON.stringify(result, null, 2),
},
],
};
},
},
calendly_get_user: {
description: 'Get user information by URI',
parameters: {
type: 'object',
properties: {
uri: {
type: 'string',
description: 'User URI',
},
},
required: ['uri'],
},
handler: async (args: any) => {
const result = await client.getUserByUri(args.uri);
return {
content: [
{
type: 'text',
text: JSON.stringify(result, null, 2),
},
],
};
},
},
calendly_list_user_busy_times: {
description: 'List busy time blocks for a user within a date range',
parameters: {
type: 'object',
properties: {
user_uri: {
type: 'string',
description: 'User URI',
},
start_time: {
type: 'string',
description: 'Start of range (ISO 8601)',
},
end_time: {
type: 'string',
description: 'End of range (ISO 8601)',
},
},
required: ['user_uri', 'start_time', 'end_time'],
},
handler: async (args: any) => {
const result = await client.getUserBusyTimes(args.user_uri, {
start_time: args.start_time,
end_time: args.end_time,
});
return {
content: [
{
type: 'text',
text: JSON.stringify(result, null, 2),
},
],
};
},
},
};
}