Skip to main content
Glama

create_project

Initiate new projects with structured organization, Git-trackable data, and comprehensive documentation to enhance collaboration and task management in your development workflow.

Instructions

Launch new projects with structured organization and detailed documentation. Establishes a solid foundation for task management with Git-trackable project data, enabling seamless collaboration and progress tracking across your development workflow.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
descriptionYesA detailed description of the project
nameYesThe name of the new project
workingDirectoryYesThe full absolute path to the working directory where data is stored. MUST be an absolute path, never relative. Windows: "C:\Users\username\project" or "D:\projects\my-app". Unix/Linux/macOS: "/home/username/project" or "/Users/username/project". Do NOT use: ".", "..", "~", "./folder", "../folder" or any relative paths. Ensure the path exists and is accessible before calling this tool. NOTE: When server is started with --claude flag, this parameter is ignored and a global user directory is used instead.

Implementation Reference

  • The main handler function that executes the create_project tool logic: validates inputs, checks for unique name, creates Project object with UUID, calls storage.createProject, and returns success/error response.
        handler: async ({ name, description }: { name: string; description: string }) => {
          try {
            // Validate inputs
            if (!name || name.trim().length === 0) {
              return {
                content: [{
                  type: 'text' as const,
                  text: 'Error: Project name is required.'
                }],
                isError: true
              };
            }
    
            if (name.trim().length > 100) {
              return {
                content: [{
                  type: 'text' as const,
                  text: 'Error: Project name must be 100 characters or less.'
                }],
                isError: true
              };
            }
    
            if (!description || description.trim().length === 0) {
              return {
                content: [{
                  type: 'text' as const,
                  text: 'Error: Project description is required.'
                }],
                isError: true
              };
            }
    
            if (description.trim().length > 1000) {
              return {
                content: [{
                  type: 'text' as const,
                  text: 'Error: Project description must be 1000 characters or less.'
                }],
                isError: true
              };
            }
    
            // Validate that project name is unique
            const existingProjects = await storage.getProjects();
            const nameExists = existingProjects.some(p => p.name.toLowerCase() === name.trim().toLowerCase());
    
            if (nameExists) {
              return {
                content: [{
                  type: 'text' as const,
                  text: `Error: A project with the name "${name.trim()}" already exists. Please choose a different name.`
                }],
                isError: true
              };
            }
    
            const now = new Date().toISOString();
            const project: Project = {
              id: randomUUID(),
              name: name.trim(),
              description: description.trim(),
              createdAt: now,
              updatedAt: now
            };
    
            const createdProject = await storage.createProject(project);
    
            return {
              content: [{
                type: 'text' as const,
                text: `βœ… Project created successfully!
    
    **${createdProject.name}** (ID: ${createdProject.id})
    Description: ${createdProject.description}
    Created: ${new Date(createdProject.createdAt).toLocaleString()}
    
    You can now add tasks to this project using the create_task tool.`
              }]
            };
          } catch (error) {
            return {
              content: [{
                type: 'text' as const,
                text: `Error creating project: ${error instanceof Error ? error.message : 'Unknown error'}`
              }],
              isError: true
            };
          }
        }
  • src/server.ts:99-122 (registration)
    MCP server registration of the 'create_project' tool using server.tool(), including description, Zod input schema, and wrapper handler that creates storage and delegates to the tool handler from createCreateProjectTool.
    server.tool(
      'create_project',
      'Launch new projects with structured organization and detailed documentation. Establishes a solid foundation for task management with Git-trackable project data, enabling seamless collaboration and progress tracking across your development workflow.',
      {
        workingDirectory: z.string().describe(getWorkingDirectoryDescription(config)),
        name: z.string().describe('The name of the new project'),
        description: z.string().describe('A detailed description of the project')
      },
      async ({ workingDirectory, name, description }: { workingDirectory: string; name: string; description: string }) => {
        try {
          const storage = await createStorage(workingDirectory, config);
          const tool = createCreateProjectTool(storage);
          return await tool.handler({ name, description });
        } catch (error) {
          return {
            content: [{
              type: 'text' as const,
              text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`
            }],
            isError: true
          };
        }
      }
    );
  • Zod input schema for the create_project tool registered in MCP server, defining parameters: workingDirectory, name, description.
    {
      workingDirectory: z.string().describe(getWorkingDirectoryDescription(config)),
      name: z.string().describe('The name of the new project'),
      description: z.string().describe('A detailed description of the project')
    },
  • Implementation of storage.createProject in FileStorage class: appends project to data.projects array, saves to JSON file, returns the project.
    async createProject(project: Project): Promise<Project> {
      this.data.projects.push(project);
      await this.save();
      return project;
    }
  • TypeScript interface defining input for creating a project, matching the tool parameters.
    export interface CreateProjectInput {
      /** Project name */
      name: string;
      /** Project description/overview */
      description: string;
    }
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 that the tool 'establishes a solid foundation for task management with Git-trackable project data,' hinting at integration with Git and collaboration features, but fails to specify critical behaviors like required permissions, whether it's idempotent, error handling, or what happens if the project already exists. For a creation tool with zero annotation coverage, this leaves significant gaps.

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

Conciseness3/5

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

The description is two sentences long and front-loaded with the core purpose, but it includes verbose phrases like 'enabling seamless collaboration and progress tracking across your development workflow' that don't add actionable information. While not overly long, some content feels promotional rather than informative, reducing efficiency.

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?

Given the complexity of a project creation tool with no annotations and no output schema, the description is incomplete. It lacks details on what the tool returns (e.g., a project ID or confirmation), error conditions, or how it integrates with sibling tools like 'list_projects'. For a mutation tool with rich sibling context, more guidance is needed to ensure proper agent usage.

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?

The schema description coverage is 100%, so the schema already documents all three parameters (name, description, workingDirectory) thoroughly. The description adds no additional meaning beyond what's in the schemaβ€”it doesn't explain parameter interactions, constraints, or provide examples. Given the high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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 tool's purpose: 'Launch new projects with structured organization and detailed documentation.' It specifies the verb ('launch') and resource ('projects'), and distinguishes it from siblings like 'update_project' or 'get_project' by focusing on creation. However, it doesn't explicitly contrast with 'create_task' or 'create_subtask', missing full sibling differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'create_project' over 'create_task' or 'create_subtask', nor does it specify prerequisites like needing an existing project structure. Usage is implied through the action of 'launching' projects, but no explicit context or exclusions are provided.

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/Pimzino/agentic-tools-mcp'

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