Skip to main content
Glama
create-task.v1.ts3.93 kB
/** * Create Task v1 Prompt * * Create a task linked to record(s); natural-language due date; priority/owner. */ import { z } from 'zod'; import { PromptV1Definition, PromptMessage, PromptArgument } from './types.js'; import { DryRunArg } from './types.js'; /** * Argument schema for create_task.v1 */ export const CreateTaskArgs = z.object({ title: z.string().min(3).describe('Task title/subject'), content: z.string().min(5).describe('Task description/details'), target: z .string() .optional() .describe( 'Optional: Attio URL, record ID, or "search:<query>" to link task to' ), due_date: z .string() .optional() .describe('Natural language due date (e.g., "tomorrow", "next Friday")'), priority: z .enum(['low', 'medium', 'high']) .optional() .default('medium') .describe('Task priority'), owner: z .string() .optional() .default('@me') .describe('Task assignee (default @me)'), dry_run: DryRunArg, }); export type CreateTaskArgsType = z.infer<typeof CreateTaskArgs>; /** * Argument definitions for registration */ export const createTaskArguments: PromptArgument[] = [ { name: 'title', description: 'Task title/subject', required: true, schema: z.string().min(3), }, { name: 'content', description: 'Task description/details', required: true, schema: z.string().min(5), }, { name: 'target', description: 'Optional: Record to link task to', required: false, schema: z.string(), }, { name: 'due_date', description: 'Natural language due date', required: false, schema: z.string(), }, { name: 'priority', description: 'low | medium | high (default medium)', required: false, schema: z.enum(['low', 'medium', 'high']), default: 'medium', }, { name: 'owner', description: 'Task assignee (default @me)', required: false, schema: z.string(), default: '@me', }, { name: 'dry_run', description: "Only propose, don't execute (default false)", required: false, schema: z.boolean(), default: false, }, ]; /** * Build prompt messages for creating task */ export function buildCreateTaskMessages( args: Record<string, unknown> ): PromptMessage[] { const validated = CreateTaskArgs.parse(args); const targetResolution = validated.target ? `\n1. Resolve target: If target="${validated.target}" starts with "search:", call \`records_query\` to find one record. If multiple matches, disambiguate.` : ''; const dueDateParsing = validated.due_date ? `\n- Parse due_date="${validated.due_date}" into ISO date format` : ''; const instructions = `You are a CRM assistant. Create a task with: - Title: "${validated.title}" - Content: "${validated.content}" - Priority: ${validated.priority} - Owner: ${validated.owner}${dueDateParsing}${targetResolution} ${targetResolution ? '2' : '1'}. Call \`tasks.create\` with: - title, content (required) - assignees: [owner] - deadline: parsed due_date (if provided) - linked_records: [resolved target] (if provided) ${validated.dry_run ? 'DRY RUN MODE: Output proposed tool call as JSON only. Do NOT execute write.' : 'Execute the task creation after showing proposed action.'} Confirm completion or show proposed task.`; return [ { role: 'user', content: { type: 'text', text: instructions, }, }, ]; } /** * Complete prompt definition */ export const createTaskPrompt: PromptV1Definition = { metadata: { name: 'create_task.v1', title: 'Create follow-up task', description: 'Create a task linked to record(s); natural-language due date; priority/owner.', category: 'activity', version: 'v1', }, arguments: createTaskArguments, buildMessages: buildCreateTaskMessages, tokenBudget: 300, // Per spec }; export default createTaskPrompt;

Latest Blog Posts

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/kesslerio/attio-mcp-server'

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