# Insert a library block into a trip

> The insert_library_entry MCP tool: insert a library block into a trip.

`insert_library_entry` · writes

MCP only (no REST operation).

## What the model reads

Copies a saved block from the agency's library (search_library) into a trip's itinerary, with everything inside it, under `parentId` (a ref or id; absent = the root) at `position`. A library block is a template, not a link: the copy is the trip's own. `overrides` changes the copy's `data` before it lands, by the node's position in the entry's snapshot (0 = the entry itself, then its children in order, as get_library_entry lists them).

Permissions: trips:write, catalog:read.
Set `dryRun: true` to preview the effect without writing anything.
Undo: the result names a change id; undo_change reverts it.

## Input

| Field | Type | Required | Description |
|---|---|---|---|
| `tripId` | uuid | yes |  |
| `entryId` | uuid | yes |  |
| `parentId` | string \| null |  |  |
| `position` | "start" \| "end" \| "after" \| "before" |  |  |
| `anchorId` | string |  | max 64 chars |
| `overrides` | object[] |  | max 50 items |
| `overrides[].index` | integer | yes | ≥ 0 |
| `overrides[].data` | object | yes |  |
| `dryRun` | boolean |  | Preview only: plan the change and return its effect without writing. |

## Input schema (JSON)

```json
{
  "type": "object",
  "properties": {
    "tripId": {
      "type": "string",
      "format": "uuid"
    },
    "entryId": {
      "type": "string",
      "format": "uuid"
    },
    "parentId": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 64
        },
        {
          "type": "null"
        }
      ]
    },
    "position": {
      "type": "string",
      "enum": [
        "start",
        "end",
        "after",
        "before"
      ]
    },
    "anchorId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "overrides": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "minimum": 0
          },
          "data": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "index",
          "data"
        ],
        "additionalProperties": false
      },
      "maxItems": 50
    },
    "dryRun": {
      "type": "boolean",
      "description": "Preview only: plan the change and return its effect without writing."
    }
  },
  "required": [
    "tripId",
    "entryId"
  ],
  "additionalProperties": false
}
```
