Skip to main content
Glama

create_project

Initiate a new project by defining an initial prompt and organizing tasks. Streamline workflows by setting task details, tool recommendations, and optional auto-approval settings for efficient task management.

Instructions

Create a new project with an initial prompt and a list of tasks. This is typically the first step in any workflow.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
autoApproveNoIf true, tasks will be automatically approved when marked as done. If false or not provided, tasks require manual approval.
initialPromptYesThe initial prompt or goal for the project.
projectPlanNoA more detailed plan for the project. If not provided, the initial prompt will be used.
tasksYesAn array of task objects.

Implementation Reference

  • MCP tool handler/executor: validates inputs (initialPrompt, tasks, projectPlan, autoApprove) and calls TaskManager.createProject to create the project.
    const createProjectToolExecutor: ToolExecutor = {
      name: "create_project",
      async execute(taskManager, args) {
        const initialPrompt = validateRequiredStringParam(args.initialPrompt, "initialPrompt");
        const validatedTasks = validateTaskObjects(args.tasks);
        const projectPlan = args.projectPlan !== undefined ? String(args.projectPlan) : undefined;
        const autoApprove = args.autoApprove as boolean | undefined;
    
        if (args.projectPlan !== undefined && typeof args.projectPlan !== 'string') {
          throw new AppError(
            "Invalid type for optional parameter 'projectPlan' (Expected string)",
            AppErrorCode.InvalidArgument
          );
        }
        if (args.autoApprove !== undefined && typeof args.autoApprove !== 'boolean') {
          throw new AppError(
            "Invalid type for optional parameter 'autoApprove' (Expected boolean)",
            AppErrorCode.InvalidArgument
          );
        }
    
        const resultData = await taskManager.createProject(
          initialPrompt,
          validatedTasks,
          projectPlan,
          autoApprove
        );
    
        return resultData;
      },
    };
  • Tool definition with name, description, and detailed input schema for create_project.
    const createProjectTool: Tool = {
      name: "create_project",
      description: "Create a new project with an initial prompt and a list of tasks. This is typically the first step in any workflow.",
      inputSchema: {
        type: "object",
        properties: {
          initialPrompt: {
            type: "string",
            description: "The initial prompt or goal for the project.",
          },
          projectPlan: {
            type: "string",
            description: "A more detailed plan for the project. If not provided, the initial prompt will be used.",
          },
          tasks: {
            type: "array",
            description: "An array of task objects.",
            items: {
              type: "object",
              properties: {
                title: {
                  type: "string",
                  description: "The title of the task.",
                },
                description: {
                  type: "string",
                  description: "A detailed description of the task.",
                },
                toolRecommendations: {
                  type: "string",
                  description: "Recommendations for tools to use to complete the task.",
                },
                ruleRecommendations: {
                  type: "string",
                  description: "Recommendations for relevant rules to review when completing the task.",
                },
              },
              required: ["title", "description"],
            },
          },
          autoApprove: {
            type: "boolean",
            description: "If true, tasks will be automatically approved when marked as done. If false or not provided, tasks require manual approval.",
          },
        },
        required: ["initialPrompt", "tasks"],
      },
    };
  • Core logic: generates project/task IDs, initializes project data structure, persists to JSON file, returns success data.
    public async createProject(
      initialPrompt: string,
      tasks: { title: string; description: string; toolRecommendations?: string; ruleRecommendations?: string }[],
      projectPlan?: string,
      autoApprove?: boolean
    ): Promise<ProjectCreationSuccessData> {
      await this.ensureInitialized();
      await this.reloadFromDisk();
      
      this.projectCounter += 1;
      const projectId = `proj-${this.projectCounter}`;
    
      const newTasks: Task[] = [];
      for (const taskDef of tasks) {
        this.taskCounter += 1;
        newTasks.push({
          id: `task-${this.taskCounter}`,
          title: taskDef.title,
          description: taskDef.description,
          status: "not started",
          approved: false,
          completedDetails: "",
          toolRecommendations: taskDef.toolRecommendations,
          ruleRecommendations: taskDef.ruleRecommendations,
        });
      }
    
      const newProject: Project = {
        projectId,
        initialPrompt,
        projectPlan: projectPlan || initialPrompt,
        tasks: newTasks,
        completed: false,
        autoApprove: autoApprove === false ? false : true,
      };
    
      this.data.projects.push(newProject);
      await this.saveTasks();
    
      return {
        projectId,
        totalTasks: newTasks.length,
        tasks: newTasks.map((t) => ({
          id: t.id,
          title: t.title,
          description: t.description,
        })),
        message: `Project ${projectId} created with ${newTasks.length} tasks.`,
      };
    }
  • Registers the create_project executor in the global toolExecutorMap used by executeToolAndHandleErrors.
    toolExecutorMap.set(createProjectToolExecutor.name, createProjectToolExecutor);
  • Includes createProjectTool in the exported ALL_TOOLS array, used for MCP tools/listing.
    export const ALL_TOOLS: Tool[] = [
      listProjectsTool,
      readProjectTool,
      createProjectTool,
      deleteProjectTool,
      addTasksToProjectTool,
      finalizeProjectTool,
      generateProjectPlanTool,
    
      listTasksTool,
      readTaskTool,
      createTaskTool,
      updateTaskTool,
      deleteTaskTool,
      approveTaskTool,
      getNextTaskTool,
    ];
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions creation but fails to detail critical aspects like permissions required, whether the project is mutable after creation, error handling, or what happens if tasks fail. This is inadequate for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the core purpose in the first sentence, followed by contextual guidance. Both sentences earn their place, though it could be slightly more structured for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is insufficient. It lacks details on behavioral traits, error conditions, return values, and how it integrates with sibling tools, making it incomplete for effective agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds minimal value by mentioning 'initial prompt and a list of tasks,' which aligns with the schema but doesn't provide additional semantics or usage examples beyond what's already structured.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a new project') and specifies key components ('with an initial prompt and a list of tasks'), which distinguishes it from basic creation tools. However, it doesn't explicitly differentiate from sibling tools like 'create_task' or 'generate_project_plan' beyond mentioning it's 'typically the first step'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implied guidance by stating this is 'typically the first step in any workflow,' which suggests a temporal context for usage. However, it lacks explicit when-to-use rules, alternatives (e.g., vs. 'create_task'), or prerequisites, leaving gaps in operational clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Related Tools

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/chriscarrollsmith/taskqueue-mcp'

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