> For the complete documentation index, see [llms.txt](https://docs.kinesis.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kinesis.network/mcp/tools/projects.md).

# Projects

Organize applications into projects and manage project lifecycle.

Organize applications into projects and manage project lifecycle.

These are action names. In default compact mode, call the indicated group tool with `{"action":"<action-name>","params":{...}}`; the arguments below go inside `params`. In `?mode=all`, call the action name directly with those arguments. `browse_github` and `read_docs` are direct tools in both modes. Expand each schema for nested fields, enum values and validation constraints. Successful results are JSON in both text content and `structuredContent`; failures use `isError` and `structuredContent.error`.

`update_project` replaces `rename_project` and can update the name or visibility. Projects belong to an organization. Admins and developers create them; admins or the creator manage access and delete them.

The [OpenAI profile](/mcp/openai-profile.md) calls individual actions, omits `get_byod_token`, and restricts credential inputs and environment outputs. The input schemas below describe the standard catalog; profile-specific schemas are included where they differ.

## `list_projects`

List projects accessible to the caller, oldest first, across reachable organizations unless org narrows the list

**Group:** `projects` · **Behavior:** Read

**Compact tool:** `projects` · **Action:** `list_projects`

**MCP annotations:** `readOnlyHint: true` · `destructiveHint: false` · `idempotentHint: true` · `openWorldHint: false`

### Permissions and REST equivalents

| Operation       | REST            | Required scopes |
| --------------- | --------------- | --------------- |
| `projects.list` | `GET /projects` | `projects:read` |

### Arguments

| Argument | Type      | Required | Description                                                                          |
| -------- | --------- | -------- | ------------------------------------------------------------------------------------ |
| `limit`  | `integer` | No       | Items per page, 1 to 200 (default 50)                                                |
| `cursor` | `string`  | No       | nextCursor from the previous page; omit for the first page                           |
| `org`    | `string`  | No       | Slug of an organization (see orgs.list) to list only what is in it or shared into it |

<details>

<summary>Complete input schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200,
      "description": "Items per page, 1 to 200 (default 50)"
    },
    "cursor": {
      "type": "string",
      "minLength": 1,
      "maxLength": 512,
      "description": "nextCursor from the previous page; omit for the first page"
    },
    "org": {
      "description": "Slug of an organization (see orgs.list) to list only what is in it or shared into it",
      "type": "string",
      "minLength": 3,
      "maxLength": 39
    }
  },
  "additionalProperties": false
}
```

</details>

### Result

* `projects` (`array<object>`): See the complete response schema below.
* `nextCursor` (`string or null`): Pass as cursor to fetch the next page; null on the last page

<details>

<summary>Response schema: projects.list</summary>

```json
{
  "type": "object",
  "properties": {
    "projects": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Project id"
          },
          "name": {
            "type": "string"
          },
          "org": {
            "type": "object",
            "properties": {
              "slug": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            },
            "required": [
              "slug",
              "name"
            ],
            "additionalProperties": false,
            "description": "The organization that owns it"
          },
          "visibility": {
            "type": "string",
            "enum": [
              "private",
              "org"
            ],
            "description": "private: admins, its creator and the people added; org: everyone in the organization"
          },
          "access": {
            "type": "object",
            "properties": {
              "role": {
                "type": "string",
                "enum": [
                  "admin",
                  "developer",
                  "viewer"
                ],
                "description": "The caller's role on it"
              },
              "outside": {
                "type": "boolean",
                "description": "Shared with the caller from another organization"
              },
              "isCreator": {
                "type": "boolean",
                "description": "The caller created it"
              }
            },
            "required": [
              "role",
              "outside",
              "isCreator"
            ],
            "additionalProperties": false
          },
          "appCount": {
            "type": "integer"
          },
          "createdBy": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "userId": {
                    "type": "string",
                    "description": "User id, as members.list and the sharing calls use it"
                  },
                  "name": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "email": {
                    "type": "string"
                  }
                },
                "required": [
                  "userId",
                  "name",
                  "email"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "description": "Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "ISO 8601 timestamp (UTC)"
          }
        },
        "required": [
          "id",
          "name",
          "org",
          "visibility",
          "access",
          "appCount",
          "createdBy",
          "createdAt"
        ],
        "additionalProperties": false
      }
    },
    "nextCursor": {
      "description": "Pass as cursor to fetch the next page; null on the last page",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "projects",
    "nextCursor"
  ],
  "additionalProperties": false
}
```

</details>

## `create_project`

Create an empty project. It is private unless visibility is org

**Group:** `projects` · **Behavior:** Write

**Compact tool:** `projects_write` · **Action:** `create_project`

**MCP annotations:** `readOnlyHint: false` · `destructiveHint: false` · `idempotentHint: false` · `openWorldHint: false`

### Permissions and REST equivalents

| Operation         | REST             | Required scopes  |
| ----------------- | ---------------- | ---------------- |
| `projects.create` | `POST /projects` | `projects:write` |

### Arguments

| Argument         | Type                | Required | Description                                                                                                                                                           |
| ---------------- | ------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`           | `string`            | Yes      | Project name                                                                                                                                                          |
| `visibility`     | `"private" / "org"` | No       | private: admins, its creator and the people added; org: everyone in the organization                                                                                  |
| `idempotencyKey` | `string`            | No       | Unique string without whitespace; send the same one with the same arguments when retrying after a timeout, and the original result comes back instead of acting twice |
| `org`            | `string`            | No       | Slug of the organization to act in (see orgs.list); needed when the caller reaches more than one                                                                      |

<details>

<summary>Complete input schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Project name"
    },
    "visibility": {
      "type": "string",
      "enum": [
        "private",
        "org"
      ],
      "description": "private: admins, its creator and the people added; org: everyone in the organization"
    },
    "idempotencyKey": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "pattern": "^\\S+$",
      "description": "Unique string without whitespace; send the same one with the same arguments when retrying after a timeout, and the original result comes back instead of acting twice"
    },
    "org": {
      "description": "Slug of the organization to act in (see orgs.list); needed when the caller reaches more than one",
      "type": "string",
      "minLength": 3,
      "maxLength": 39
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}
```

</details>

### Result

* `id` (`string`): Project id
* `name` (`string`): See the complete response schema below.
* `org` (`object`): The organization that owns it
* `visibility` (`"private" / "org"`): private: admins, its creator and the people added; org: everyone in the organization
* `access` (`object`): See the complete response schema below.
* `appCount` (`integer`): See the complete response schema below.
* `createdBy` (`object or null`): Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read
* `createdAt` (`string`): ISO 8601 timestamp (UTC)

<details>

<summary>Response schema: projects.create</summary>

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Project id"
    },
    "name": {
      "type": "string"
    },
    "org": {
      "type": "object",
      "properties": {
        "slug": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      },
      "required": [
        "slug",
        "name"
      ],
      "additionalProperties": false,
      "description": "The organization that owns it"
    },
    "visibility": {
      "type": "string",
      "enum": [
        "private",
        "org"
      ],
      "description": "private: admins, its creator and the people added; org: everyone in the organization"
    },
    "access": {
      "type": "object",
      "properties": {
        "role": {
          "type": "string",
          "enum": [
            "admin",
            "developer",
            "viewer"
          ],
          "description": "The caller's role on it"
        },
        "outside": {
          "type": "boolean",
          "description": "Shared with the caller from another organization"
        },
        "isCreator": {
          "type": "boolean",
          "description": "The caller created it"
        }
      },
      "required": [
        "role",
        "outside",
        "isCreator"
      ],
      "additionalProperties": false
    },
    "appCount": {
      "type": "integer"
    },
    "createdBy": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "userId": {
              "type": "string",
              "description": "User id, as members.list and the sharing calls use it"
            },
            "name": {
              "type": [
                "string",
                "null"
              ]
            },
            "email": {
              "type": "string"
            }
          },
          "required": [
            "userId",
            "name",
            "email"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "description": "ISO 8601 timestamp (UTC)"
    }
  },
  "required": [
    "id",
    "name",
    "org",
    "visibility",
    "access",
    "appCount",
    "createdBy",
    "createdAt"
  ],
  "additionalProperties": false
}
```

</details>

Operation-specific errors: `400 org_required`, `403 key_project_restricted`.

## `update_project`

Rename a project, or change who in its organization can see it. Visibility is for its creator or an admin: private is admins, its creator and the people added; org is everyone in the organization

**Group:** `projects` · **Behavior:** Write

**Compact tool:** `projects_write` · **Action:** `update_project`

**MCP annotations:** `readOnlyHint: false` · `destructiveHint: true` · `idempotentHint: true` · `openWorldHint: false`

### Permissions and REST equivalents

| Operation         | REST                          | Required scopes  |
| ----------------- | ----------------------------- | ---------------- |
| `projects.update` | `PATCH /projects/{projectId}` | `projects:write` |

### Arguments

| Argument     | Type                | Required | Description                                                                          |
| ------------ | ------------------- | -------- | ------------------------------------------------------------------------------------ |
| `name`       | `string`            | No       | New project name                                                                     |
| `visibility` | `"private" / "org"` | No       | private: admins, its creator and the people added; org: everyone in the organization |
| `projectId`  | `string`            | Yes      | Project id                                                                           |

<details>

<summary>Complete input schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "New project name"
    },
    "visibility": {
      "type": "string",
      "enum": [
        "private",
        "org"
      ],
      "description": "private: admins, its creator and the people added; org: everyone in the organization"
    },
    "projectId": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{24}$",
      "description": "Project id"
    }
  },
  "required": [
    "projectId"
  ],
  "additionalProperties": false
}
```

</details>

### Result

* `id` (`string`): Project id
* `name` (`string`): See the complete response schema below.
* `org` (`object`): The organization that owns it
* `visibility` (`"private" / "org"`): private: admins, its creator and the people added; org: everyone in the organization
* `access` (`object`): See the complete response schema below.
* `appCount` (`integer`): See the complete response schema below.
* `createdBy` (`object or null`): Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read
* `createdAt` (`string`): ISO 8601 timestamp (UTC)

<details>

<summary>Response schema: projects.update</summary>

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Project id"
    },
    "name": {
      "type": "string"
    },
    "org": {
      "type": "object",
      "properties": {
        "slug": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      },
      "required": [
        "slug",
        "name"
      ],
      "additionalProperties": false,
      "description": "The organization that owns it"
    },
    "visibility": {
      "type": "string",
      "enum": [
        "private",
        "org"
      ],
      "description": "private: admins, its creator and the people added; org: everyone in the organization"
    },
    "access": {
      "type": "object",
      "properties": {
        "role": {
          "type": "string",
          "enum": [
            "admin",
            "developer",
            "viewer"
          ],
          "description": "The caller's role on it"
        },
        "outside": {
          "type": "boolean",
          "description": "Shared with the caller from another organization"
        },
        "isCreator": {
          "type": "boolean",
          "description": "The caller created it"
        }
      },
      "required": [
        "role",
        "outside",
        "isCreator"
      ],
      "additionalProperties": false
    },
    "appCount": {
      "type": "integer"
    },
    "createdBy": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "userId": {
              "type": "string",
              "description": "User id, as members.list and the sharing calls use it"
            },
            "name": {
              "type": [
                "string",
                "null"
              ]
            },
            "email": {
              "type": "string"
            }
          },
          "required": [
            "userId",
            "name",
            "email"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "description": "ISO 8601 timestamp (UTC)"
    }
  },
  "required": [
    "id",
    "name",
    "org",
    "visibility",
    "access",
    "appCount",
    "createdBy",
    "createdAt"
  ],
  "additionalProperties": false
}
```

</details>

## `delete_project`

Delete a project and every app in it. Admins may, and so may its creator when they created every app in it. Fails with project\_has\_running\_apps while any app is live. Irreversible.

**Group:** `projects` · **Behavior:** Write

**Compact tool:** `projects_write` · **Action:** `delete_project`

**MCP annotations:** `readOnlyHint: false` · `destructiveHint: true` · `idempotentHint: false` · `openWorldHint: false`

Requires `confirm: true` for this irreversible action.

### Permissions and REST equivalents

| Operation         | REST                           | Required scopes  |
| ----------------- | ------------------------------ | ---------------- |
| `projects.delete` | `DELETE /projects/{projectId}` | `projects:admin` |

### Arguments

| Argument    | Type     | Required | Description                                |
| ----------- | -------- | -------- | ------------------------------------------ |
| `projectId` | `string` | Yes      | Project id                                 |
| `confirm`   | `true`   | Yes      | Must be true: this action cannot be undone |

<details>

<summary>Complete input schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{24}$",
      "description": "Project id"
    },
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "Must be true: this action cannot be undone"
    }
  },
  "required": [
    "projectId",
    "confirm"
  ],
  "additionalProperties": false
}
```

</details>

### Result

* `id` (`string`): Id of the deleted project
* `deleted` (`true`): See the complete response schema below.

<details>

<summary>Response schema: projects.delete</summary>

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id of the deleted project"
    },
    "deleted": {
      "type": "boolean",
      "const": true
    }
  },
  "required": [
    "id",
    "deleted"
  ],
  "additionalProperties": false
}
```

</details>

Operation-specific errors: `409 project_has_running_apps`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.kinesis.network/mcp/tools/projects.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
