Skip to main content
Glama

Create project

gitlab_create_project

Create a new GitLab project with a name or repository path, then configure visibility, namespace, README initialization, templates, imports, and feature toggles.

Instructions

Create a new project.

Args: name: Project name (required unless path is given). path: Repository path. namespace_id: Group or user namespace id. visibility: 'private', 'internal' or 'public'. description: Project description. initialize_with_readme: Create an initial README. default_branch: Default branch name. topics: Project topics. issues_enabled: Enable issues. merge_requests_enabled: Enable merge requests. wiki_enabled: Enable the wiki. snippets_enabled: Enable snippets. container_registry_enabled: Enable the container registry. shared_runners_enabled: Enable shared runners. lfs_enabled: Enable Git LFS. only_allow_merge_if_pipeline_succeeds: Require a green pipeline to merge. squash_option: 'never', 'always', 'default_on' or 'default_off'. template_name: Instance template to start from. import_url: URL to import the repository from.

Returns: Response: A wrapper containing the original response and a Project model.

Raises: MissingParameterError: If neither name nor path is provided. ParameterError: If invalid parameters are provided.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "gitlab_create_project"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameNo
pathNo
topicsNo
import_urlNo
visibilityNo
descriptionNo
lfs_enabledNo
namespace_idNo
wiki_enabledNo
squash_optionNo
template_nameNo
default_branchNo
issues_enabledNo
snippets_enabledNo
initialize_with_readmeNo
merge_requests_enabledNo
shared_runners_enabledNo
container_registry_enabledNo
only_allow_merge_if_pipeline_succeedsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changedv27.3.20
    • addedInput schema / properties / container_registry_enabled
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / default_branch
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / import_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / issues_enabled
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / lfs_enabled
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / merge_requests_enabled
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / only_allow_merge_if_pipeline_succeeds
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • removedInput schema / properties / params_json
      Removed value: -{
      -  "default": "{}",
      -  "type": "string"
      -}
    • addedInput schema / properties / shared_runners_enabled
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / snippets_enabled
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / squash_option
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / template_name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / topics
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / wiki_enabled
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  2. First observedv27.3.13

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=false and openWorld=true, so the safety profile is covered. The description adds real value by disclosing the error contract (MissingParameterError when neither name nor path is supplied, ParameterError on invalid input) and the return wrapper containing a Project model. It omits permission requirements and side effects like namespace resolution.

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

Conciseness5/5

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

One-line purpose is front-loaded, followed by a compact Args list, then Returns and Raises. Given 19 undocumented parameters, the length is justified and there is no filler prose.

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

Completeness3/5

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

Covers parameters, return shape and error cases, which is most of what an agent needs for a 19-parameter creation tool with no output schema. It still leaves gaps on defaults (visibility, namespace_id), permission requirements, and what happens when both name and path are given.

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

Parameters4/5

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

Schema description coverage is 0% across 19 parameters, so the description carries the full burden and does so by annotating every parameter with a short meaning, including enum-like values for visibility and squash_option. Some entries are near-tautological ('Project topics', 'Enable issues'), but overall it substantially compensates for the empty schema.

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?

States a specific verb and resource ('Create a new project'), which cleanly separates it from gitlab_edit_project, gitlab_delete_project and gitlab_get_project. It does not explicitly name those siblings or scope the operation (e.g. personal vs group namespace), so it stops short of full 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?

There is no guidance on when to use this versus alternatives such as gitlab_import or template-based creation, and no prerequisites are stated (required token scopes, whether namespace_id defaults to the caller's personal namespace). The only conditional hint is the name/path requirement buried in the Raises section.

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

Deploy Server

Other Tools