> 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/notifications.md).

# Notifications

Read notifications, mark them seen or dismiss them.

Read notifications, mark them seen or dismiss them.

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`.

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_notifications`

The caller's active notifications, newest first, with the unseen count. Dismissed ones are left out

**Group:** `account` · **Behavior:** Read

**Compact tool:** `account` · **Action:** `list_notifications`

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

### Permissions and REST equivalents

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

### Arguments

| Argument     | Type      | Required | Description                                                |
| ------------ | --------- | -------- | ---------------------------------------------------------- |
| `unseenOnly` | `boolean` | No       | Only notifications not marked seen                         |
| `limit`      | `integer` | No       | Items per page, 1 to 200 (default 50)                      |
| `cursor`     | `string`  | No       | nextCursor from the previous page; omit for the first page |

<details>

<summary>Complete input schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "unseenOnly": {
      "type": "boolean",
      "description": "Only notifications not marked seen"
    },
    "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"
    }
  },
  "additionalProperties": false
}
```

</details>

### Result

* `notifications` (`array<object>`): See the complete response schema below.
* `unseenCount` (`integer`): Active notifications not marked seen, across every page
* `nextCursor` (`string or null`): Pass as cursor to fetch the next page; null on the last page

<details>

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

```json
{
  "type": "object",
  "properties": {
    "notifications": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Notification id"
          },
          "type": {
            "type": "string",
            "description": "What happened, e.g. share_invitation_received, grid_machines_online"
          },
          "title": {
            "type": "string"
          },
          "message": {
            "type": [
              "string",
              "null"
            ]
          },
          "resourceType": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "project",
                  "app",
                  "grid"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "resourceId": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "description": "Dashboard page the notification points at",
            "type": [
              "string",
              "null"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "ISO 8601 timestamp (UTC)"
          },
          "seenAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "description": "ISO 8601 timestamp (UTC)"
              },
              {
                "type": "null"
              }
            ]
          },
          "resolved": {
            "type": "boolean",
            "description": "Its inline action (accept, decline) has been taken already"
          }
        },
        "required": [
          "id",
          "type",
          "title",
          "message",
          "resourceType",
          "resourceId",
          "url",
          "createdAt",
          "seenAt",
          "resolved"
        ],
        "additionalProperties": false
      }
    },
    "unseenCount": {
      "type": "integer",
      "description": "Active notifications not marked seen, across every page"
    },
    "nextCursor": {
      "description": "Pass as cursor to fetch the next page; null on the last page",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "notifications",
    "unseenCount",
    "nextCursor"
  ],
  "additionalProperties": false
}
```

</details>

## `mark_notifications_seen`

Mark one notification, or every active one, as seen

**Group:** `account` · **Behavior:** Write

**Compact tool:** `account_write` · **Action:** `mark_notifications_seen`

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

### Permissions and REST equivalents

| Operation                | REST                       | Required scopes |
| ------------------------ | -------------------------- | --------------- |
| `notifications.markSeen` | `POST /notifications/seen` | `account:write` |

### Arguments

| Argument | Type     | Required | Description                                 |
| -------- | -------- | -------- | ------------------------------------------- |
| `id`     | `string` | No       | One notification; omit for every active one |

<details>

<summary>Complete input schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{24}$",
      "description": "One notification; omit for every active one"
    }
  },
  "additionalProperties": false
}
```

</details>

### Result

* `updated` (`integer`): Notifications that changed

<details>

<summary>Response schema: notifications.markSeen</summary>

```json
{
  "type": "object",
  "properties": {
    "updated": {
      "type": "integer",
      "description": "Notifications that changed"
    }
  },
  "required": [
    "updated"
  ],
  "additionalProperties": false
}
```

</details>

## `dismiss_notifications`

Dismiss one notification, or every active one. A dismissed notification no longer lists

**Group:** `account` · **Behavior:** Write

**Compact tool:** `account_write` · **Action:** `dismiss_notifications`

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

### Permissions and REST equivalents

| Operation               | REST                    | Required scopes |
| ----------------------- | ----------------------- | --------------- |
| `notifications.dismiss` | `DELETE /notifications` | `account:write` |

### Arguments

| Argument | Type     | Required | Description                                 |
| -------- | -------- | -------- | ------------------------------------------- |
| `id`     | `string` | No       | One notification; omit for every active one |

<details>

<summary>Complete input schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{24}$",
      "description": "One notification; omit for every active one"
    }
  },
  "additionalProperties": false
}
```

</details>

### Result

* `dismissed` (`integer`): Notifications dismissed

<details>

<summary>Response schema: notifications.dismiss</summary>

```json
{
  "type": "object",
  "properties": {
    "dismissed": {
      "type": "integer",
      "description": "Notifications dismissed"
    }
  },
  "required": [
    "dismissed"
  ],
  "additionalProperties": false
}
```

</details>


---

# 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/notifications.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.
