---
title: MCP tools
description: "Current Thegram Cloud MCP tool list: 17 tools with input JSON Schemas and annotations from a dated tools/list capture; no output schemas are published."
url: https://docs.thegram.one/ko/reference/mcp-tools/
lang: en
requested_lang: ko
fallback_from: https://docs.thegram.one/reference/mcp-tools/
tier: current
status:
  component: Thegram Cloud MCP tool contract
  deployment: Cloud service https://vault.thegram.one/mcp
  applies_to_version: Latest
  status: GA
  last_verified: "2026-10-25"
  owner: thegram-one/thegram-vault
  public_evidence:
    - https://thegram.one/install/agents.md
    - https://docs.thegram.one/evidence/mcp/tools-list-2026-10-25.json
  rationale: The page is generated from an authenticated MCP tools/list capture published as site evidence; the server publishes input schemas and annotations only, no outputSchema.
source: https://docs.thegram.one/evidence/mcp/tools-list-2026-10-25.json
date_modified: "2026-10-25T00:01:00+00:00"
evidence:
  tools/list capture: "2026-10-25T00:01:00+00:00"
  Capture method: MCP initialize + tools/list through the installed thegram plugin stdio proxy
  Server: thegram ff13074
  Protocol: "2025-11-25"
---

# MCP tools

<div class="gram-doc-anchor" id="e0-portal-reference-mcp-tools"></div>

This page lists the tools that the latest Thegram Cloud MCP server at `https://vault.thegram.one/mcp` advertises in its MCP `tools/list` response. The capture behind it is published as [tools-list-2026-10-25.json](/evidence/mcp/tools-list-2026-10-25.json); its date and server build are in the evidence section at the end of this page.

Tool lists change between releases. Before calling tools, discover the live contract with `tools/list` and `gram_capabilities`.

**Output schemas:** none of the 17 tools declares an `outputSchema` in `tools/list`. This page therefore documents inputs and annotations only and does not describe result shapes. Historical request and output fixtures for an earlier 15-tool surface are kept in the [legacy archive](/archive/mcp-tools-15-tool-capture/).

## Tool list {#tool-list}

| Tool | Title | Read-only | Destructive | Idempotent | Open world |
| --- | --- | --- | --- | --- | --- |
| [`gram_projects`](#gram_projects) | List projects and mounts | yes | no | not declared | no |
| [`gram_brief`](#gram_brief) | Summarize a project or document | yes | no | not declared | no |
| [`gram_list`](#gram_list) | List documents and records | yes | no | not declared | no |
| [`gram_read`](#gram_read) | Read a document section | yes | no | not declared | no |
| [`gram_recall`](#gram_recall) | Search memory records | yes | no | not declared | no |
| [`gram_context`](#gram_context) | Read multiple records | yes | no | not declared | no |
| [`gram_relations`](#gram_relations) | Explore record links | yes | no | not declared | no |
| [`gram_changes`](#gram_changes) | Read document changes | yes | no | not declared | no |
| [`gram_comments`](#gram_comments) | Read document comments | yes | no | not declared | no |
| [`gram_profile`](#gram_profile) | Read and write contract | yes | no | not declared | no |
| [`gram_capabilities`](#gram_capabilities) | Inspect tool capabilities | yes | no | not declared | no |
| [`gram_create`](#gram_create) | Create a document | no | no | not declared | no |
| [`gram_patch`](#gram_patch) | Patch a document | no | yes | not declared | no |
| [`gram_comment`](#gram_comment) | Write a document comment | no | no | not declared | no |
| [`gram_move`](#gram_move) | Move or rename | no | yes | not declared | no |
| [`gram_delete`](#gram_delete) | Move to trash | no | yes | not declared | no |
| [`gram_restore`](#gram_restore) | Restore from trash | no | no | not declared | no |

<div class="legacy-anchor" id="h0-5"></div>

## Tool contracts {#tool-contracts}

<div class="legacy-anchor" id="h0-22"></div>

### gram_projects {#gram_projects}

**Title:** List projects and mounts

Lists the project folders and mounted collections this connection can reach as {key, id, kind, name, count, access}. A mount key such as @mounts/\<id\> is the prefix of every document path.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-26"></div>

#### Input schema {#gram_projects-input}

```json
{
  "additionalProperties": false,
  "properties": {},
  "required": [],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-28"></div>

<div class="legacy-anchor" id="h0-31"></div>

<div class="legacy-anchor" id="h0-34"></div>

#### Output {#gram_projects-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_projects`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_projects in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-22).

<div class="legacy-anchor" id="h0-208"></div>

### gram_brief {#gram_brief}

**Title:** Summarize a project or document

Summarizes one document (path) or project folder (folder): documents with rev and hash (the write preconditions), record counts by type, open records, recent revisions, and next, the time to pass as since to gram_changes later.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-212"></div>

#### Input schema {#gram_brief-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "folder": {
      "type": "string"
    },
    "limit": {
      "maximum": 50,
      "minimum": 1,
      "type": "integer"
    },
    "path": {
      "type": "string"
    }
  },
  "required": [],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-214"></div>

<div class="legacy-anchor" id="h0-217"></div>

<div class="legacy-anchor" id="h0-220"></div>

#### Output {#gram_brief-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_brief`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_brief in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-208).

<div class="legacy-anchor" id="h0-86"></div>

### gram_list {#gram_list}

**Title:** List documents and records

Lists documents and folders (all, or under a folder path); with trash true, trashed items; with select {type, status, tag, from, to, date}, matching records as \[path#id, type, title, status, date\]; with a .gram path, its entity ids. revision, recorded_at or effective_at select a past state.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-90"></div>

#### Input schema {#gram_list-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "type": "string"
    },
    "effective_at": {
      "type": "string"
    },
    "limit": {
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "path": {
      "type": "string"
    },
    "recorded_at": {
      "type": "string"
    },
    "revision": {
      "minimum": 0,
      "type": "integer"
    },
    "select": {
      "additionalProperties": false,
      "properties": {
        "date": {
          "type": "string"
        },
        "from": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "tag": {
          "type": "string"
        },
        "to": {
          "type": "string"
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "trash": {
      "type": "boolean"
    }
  },
  "required": [],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-92"></div>

<div class="legacy-anchor" id="h0-95"></div>

<div class="legacy-anchor" id="h0-98"></div>

#### Output {#gram_list-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_list`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_list in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-86).

<div class="legacy-anchor" id="h0-236"></div>

### gram_read {#gram_read}

**Title:** Read a document section

Reads a document: without section, its outline \[level, label, node id, chars\] and open-comment counts; with section (a heading, node id, @preamble or @text), that section as Markdown for reading. source true returns the section's stored Markdown instead (tables, list markers, mentions and \[\[id\]\] lines intact); edit that and send it back with gram_patch section. A long section continues with cursor. revision, recorded_at or effective_at read a past state.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-240"></div>

#### Input schema {#gram_read-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "type": "string"
    },
    "effective_at": {
      "type": "string"
    },
    "path": {
      "type": "string"
    },
    "recorded_at": {
      "type": "string"
    },
    "revision": {
      "minimum": 0,
      "type": "integer"
    },
    "section": {
      "type": "string"
    },
    "source": {
      "description": "true: the stored Markdown of the section (current revision only), to edit and send back with gram_patch section.",
      "type": "boolean"
    }
  },
  "required": [
    "path"
  ],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-242"></div>

<div class="legacy-anchor" id="h0-245"></div>

<div class="legacy-anchor" id="h0-248"></div>

#### Output {#gram_read-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_read`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_read in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-236).

<div class="legacy-anchor" id="h0-58"></div>

### gram_recall {#gram_recall}

**Title:** Search memory records

Searches records by relevance in documents or a folder. mode auto (default) and hybrid rank by meaning and by any matching words together, so ask in plain sentences; semantic uses meaning only; keyword needs every word in the record; exact takes one record id. Filters: type, status (an x value or open/done/closed), scope (exact s tag), from/to dates (inclusive; YYYY-MM or YYYY is a span) and date (which field). as_of searches a past state. Hits are \[id, type, title, status, summary, score\]; duplicates counts hits left out as repeats of an earlier one.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-62"></div>

#### Input schema {#gram_recall-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "as_of": {
      "additionalProperties": false,
      "properties": {
        "recorded_at": {
          "type": "string"
        },
        "revision": {
          "minimum": 0,
          "type": "integer"
        }
      },
      "type": "object"
    },
    "cursor": {
      "type": "string"
    },
    "date": {
      "type": "string"
    },
    "documents": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "folder": {
      "type": "string"
    },
    "from": {
      "type": "string"
    },
    "mode": {
      "description": "auto (default) and hybrid rank by meaning and by any matching words together, so ask in plain sentences; semantic uses meaning only; keyword needs every word of query in the record; exact takes one record id, not a phrase.",
      "enum": [
        "exact",
        "keyword",
        "semantic",
        "hybrid",
        "auto"
      ],
      "type": "string"
    },
    "query": {
      "type": "string"
    },
    "scope": {
      "type": "string"
    },
    "status": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      ]
    },
    "to": {
      "type": "string"
    },
    "top_k": {
      "minimum": 1,
      "type": "integer"
    },
    "type": {
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-64"></div>

<div class="legacy-anchor" id="h0-67"></div>

<div class="legacy-anchor" id="h0-70"></div>

#### Output {#gram_recall-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_recall`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_recall in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-58).

<div class="legacy-anchor" id="h0-150"></div>

### gram_context {#gram_context}

**Title:** Read multiple records

Reads several records at once: for each {path, entity} in ids, the requested fields (default t d x p owner tag due at value unit source ref), links and bounded rich text. An item may select a past state with revision, recorded_at or effective_at.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-154"></div>

#### Input schema {#gram_context-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "type": "string"
    },
    "fields": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "ids": {
      "items": {
        "properties": {
          "effective_at": {
            "type": "string"
          },
          "entity": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "recorded_at": {
            "type": "string"
          },
          "revision": {
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "path",
          "entity"
        ],
        "type": "object"
      },
      "minItems": 1,
      "type": "array"
    }
  },
  "required": [
    "ids"
  ],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-156"></div>

<div class="legacy-anchor" id="h0-159"></div>

<div class="legacy-anchor" id="h0-162"></div>

#### Output {#gram_context-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_context`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_context in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-150).

<div class="legacy-anchor" id="h0-180"></div>

### gram_relations {#gram_relations}

**Title:** Explore record links

Lists explicit links and REL edges from one record (from {path, entity}), optionally filtered by direction, predicates, depth and paths.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-184"></div>

#### Input schema {#gram_relations-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "type": "string"
    },
    "depth": {
      "maximum": 3,
      "minimum": 1,
      "type": "integer"
    },
    "direction": {
      "enum": [
        "out",
        "in",
        "both"
      ],
      "type": "string"
    },
    "from": {
      "properties": {
        "entity": {
          "type": "string"
        },
        "path": {
          "type": "string"
        }
      },
      "required": [
        "path",
        "entity"
      ],
      "type": "object"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "paths": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "predicates": {
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "from"
  ],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-186"></div>

<div class="legacy-anchor" id="h0-189"></div>

<div class="legacy-anchor" id="h0-192"></div>

#### Output {#gram_relations-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_relations`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_relations in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-180).

<div class="legacy-anchor" id="h0-268"></div>

### gram_changes {#gram_changes}

**Title:** Read document changes

Lists revisions after since (ISO time, exclusive) in a folder or document, or after since_revision in one document, with the records each added, changed or removed. next is the time to pass as since later; more continues the page.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-272"></div>

#### Input schema {#gram_changes-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "type": "string"
    },
    "folder": {
      "type": "string"
    },
    "limit": {
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "path": {
      "type": "string"
    },
    "since": {
      "type": "string"
    },
    "since_revision": {
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-274"></div>

<div class="legacy-anchor" id="h0-277"></div>

<div class="legacy-anchor" id="h0-280"></div>

#### Output {#gram_changes-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_changes`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_changes in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-268).

### gram_comments {#gram_comments}

**Title:** Read document comments

Reads the comment threads on one Vault document (status open by default, resolved or all): each thread's anchor, section, whether the quoted text is still there, and its comments.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

#### Input schema {#gram_comments-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "path": {
      "type": "string"
    },
    "status": {
      "enum": [
        "open",
        "resolved",
        "all"
      ],
      "type": "string"
    }
  },
  "required": [
    "path"
  ],
  "type": "object"
}
```

#### Output {#gram_comments-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_comments`. This tool was not part of the 15-tool capture, so no historical fixtures exist.

<div class="legacy-anchor" id="h0-6"></div>

### gram_profile {#gram_profile}

**Title:** Read and write contract

Returns the read/write contract for a task (memory, read, create, edit or rich). topic templates returns the record vocabulary: each type's required fields and status values with their open/done/closed class; topic presentation with path returns a saved layout's data requirements.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-10"></div>

#### Input schema {#gram_profile-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "path": {
      "type": "string"
    },
    "task": {
      "enum": [
        "create",
        "edit",
        "rich",
        "read",
        "memory"
      ],
      "type": "string"
    },
    "topic": {
      "enum": [
        "templates",
        "presentation"
      ],
      "type": "string"
    }
  },
  "required": [],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-12"></div>

<div class="legacy-anchor" id="h0-15"></div>

<div class="legacy-anchor" id="h0-18"></div>

#### Output {#gram_profile-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_profile`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_profile in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-6).

<div class="legacy-anchor" id="h0-42"></div>

### gram_capabilities {#gram_capabilities}

**Title:** Inspect tool capabilities

Returns the available tools, the response size budget, and semantic-search and index status.

Annotations: read-only yes; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-46"></div>

#### Input schema {#gram_capabilities-input}

```json
{
  "additionalProperties": false,
  "properties": {},
  "required": [],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-48"></div>

<div class="legacy-anchor" id="h0-51"></div>

<div class="legacy-anchor" id="h0-54"></div>

#### Output {#gram_capabilities-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_capabilities`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_capabilities in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-42).

<div class="legacy-anchor" id="h0-362"></div>

### gram_create {#gram_create}

**Title:** Create a document

Creates a .gram document at path (base_revision null). content is Markdown text or {text\|rich, records, fields, blocks}; a line containing only \[\[id\]\] places that record. Records need a short descriptive t title; times go in at, observed or due. For a long document, create it with the title heading and overview, then add each section with gram_patch section.

Annotations: read-only no; destructive no; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-366"></div>

#### Input schema {#gram_create-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "base_revision": {
      "type": "null"
    },
    "content": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "additionalProperties": false,
          "properties": {
            "blocks": {
              "items": {
                "type": "object"
              },
              "type": "array"
            },
            "fields": {
              "additionalProperties": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "type": "object"
            },
            "records": {
              "items": {
                "properties": {
                  "blocks": {
                    "items": {
                      "properties": {
                        "arg": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string"
                        },
                        "text": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind",
                        "text"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "fields": {
                    "additionalProperties": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "description": "Field key to its values, e.g. {\"t\": [\"Title\"], \"d\": [\"One-sentence outcome\"], \"x\": [\"open\"], \"due\": [\"2026-10-20\"]}.",
                    "type": "object"
                  },
                  "id": {
                    "description": "Optional; Core assigns e_<uuid> when left out.",
                    "type": "string"
                  },
                  "links": {
                    "items": {
                      "anyOf": [
                        {
                          "properties": {
                            "predicate": {
                              "description": "Link from entity to target.",
                              "enum": [
                                "related",
                                "supports",
                                "contradicts",
                                "depends",
                                "implements",
                                "replaces",
                                "derives",
                                "blocks",
                                "enables",
                                "part-of"
                              ],
                              "type": "string"
                            },
                            "target": {
                              "description": "A record id in this document, or document-id/entity-id in another document.",
                              "type": "string"
                            }
                          },
                          "required": [
                            "predicate",
                            "target"
                          ],
                          "type": "object"
                        },
                        {
                          "description": "[predicate, target]",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "type": {
                    "description": "Record type, e.g. task, decision, risk, event, note, metric, person, source.",
                    "type": "string"
                  }
                },
                "required": [
                  "type"
                ],
                "type": "object"
              },
              "type": "array"
            },
            "rich": {
              "type": "object"
            },
            "text": {
              "type": "string"
            }
          },
          "type": "object"
        }
      ]
    },
    "effective_at": {
      "type": "string"
    },
    "path": {
      "type": "string"
    },
    "request_id": {
      "maxLength": 128,
      "minLength": 1,
      "type": "string"
    },
    "title": {
      "type": "string"
    }
  },
  "required": [
    "path",
    "base_revision",
    "title"
  ],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-368"></div>

<div class="legacy-anchor" id="h0-371"></div>

<div class="legacy-anchor" id="h0-374"></div>

#### Output {#gram_create-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_create`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_create in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-362).

<div class="legacy-anchor" id="h0-410"></div>

### gram_patch {#gram_patch}

**Title:** Patch a document

Changes one document in one revision with operations: set or unset a field (old is the current value, null if empty), link or unlink records, add a record (place: end, none, {after} or {section}), remove a record, write a whole section with section {heading, text} (replaces it, or adds it at the end when missing), or edit the body with edit-text, text, drop-text or rich. remove and whole-body changes require base_revision and expected_hash. Growing an existing paragraph past 1,000 characters is refused.

Annotations: read-only no; destructive yes; idempotent not declared; open world no.

<div class="legacy-anchor" id="h0-414"></div>

#### Input schema {#gram_patch-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "base_revision": {
      "minimum": 0,
      "type": "integer"
    },
    "effective_at": {
      "type": "string"
    },
    "expected_hash": {
      "minLength": 1,
      "type": "string"
    },
    "operations": {
      "items": {
        "properties": {
          "arg": {
            "description": "text and drop-text: the block argument, when the block has one.",
            "type": "string"
          },
          "changes": {
            "description": "rich: node-level changes of the body tree; gram_profile task rich lists them.",
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "entity": {
            "description": "The record id, or doc for the document itself.",
            "type": "string"
          },
          "heading": {
            "description": "section: one Markdown heading line, e.g. \"## Storage\". The section is that heading through the next heading of the same or a higher level; it is added at the end of the body when the document does not have it yet.",
            "type": "string"
          },
          "key": {
            "description": "Field key, e.g. t title, d description, x status, p priority, due, at, owner, tag.",
            "type": "string"
          },
          "kind": {
            "description": "edit-text, text and drop-text: the block kind; rich is the md body.",
            "type": "string"
          },
          "new": {
            "description": "edit-text: the text that replaces old.",
            "type": "string"
          },
          "old": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "set and unset: the value you read, null if the field was empty. edit-text: the exact text to replace, occurring once."
          },
          "op": {
            "description": "set {entity, key, value or values, old}; unset {entity, key, old}; link and unlink {entity, predicate, target}; add {record, place?}; remove {entity}; section {heading, text}; edit-text {entity: doc, kind: rich, old, new}; text and drop-text {entity, kind, arg?, text}; rich {entity, changes}.",
            "enum": [
              "set",
              "unset",
              "link",
              "unlink",
              "add",
              "remove",
              "section",
              "edit-text",
              "text",
              "drop-text",
              "rich"
            ],
            "type": "string"
          },
          "place": {
            "anyOf": [
              {
                "enum": [
                  "end",
                  "none"
                ],
                "type": "string"
              },
              {
                "properties": {
                  "after": {
                    "type": "string"
                  }
                },
                "required": [
                  "after"
                ],
                "type": "object"
              },
              {
                "properties": {
                  "section": {
                    "type": "string"
                  }
                },
                "required": [
                  "section"
                ],
                "type": "object"
              }
            ],
            "description": "add: where the record appears in the body: end, none, {after: record id} or {section: heading or node id}. A record already placed in the body is not placed again."
          },
          "predicate": {
            "description": "Link from entity to target.",
            "enum": [
              "related",
              "supports",
              "contradicts",
              "depends",
              "implements",
              "replaces",
              "derives",
              "blocks",
              "enables",
              "part-of"
            ],
            "type": "string"
          },
          "record": {
            "properties": {
              "blocks": {
                "items": {
                  "properties": {
                    "arg": {
                      "type": "string"
                    },
                    "kind": {
                      "type": "string"
                    },
                    "text": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "kind",
                    "text"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "fields": {
                "additionalProperties": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "description": "Field key to its values, e.g. {\"t\": [\"Title\"], \"d\": [\"One-sentence outcome\"], \"x\": [\"open\"], \"due\": [\"2026-10-20\"]}.",
                "type": "object"
              },
              "id": {
                "description": "Optional; Core assigns e_<uuid> when left out.",
                "type": "string"
              },
              "links": {
                "items": {
                  "anyOf": [
                    {
                      "properties": {
                        "predicate": {
                          "description": "Link from entity to target.",
                          "enum": [
                            "related",
                            "supports",
                            "contradicts",
                            "depends",
                            "implements",
                            "replaces",
                            "derives",
                            "blocks",
                            "enables",
                            "part-of"
                          ],
                          "type": "string"
                        },
                        "target": {
                          "description": "A record id in this document, or document-id/entity-id in another document.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "predicate",
                        "target"
                      ],
                      "type": "object"
                    },
                    {
                      "description": "[predicate, target]",
                      "items": {
                        "type": "string"
                      },
                      "maxItems": 2,
                      "minItems": 2,
                      "type": "array"
                    }
                  ]
                },
                "type": "array"
              },
              "type": {
                "description": "Record type, e.g. task, decision, risk, event, note, metric, person, source.",
                "type": "string"
              }
            },
            "required": [
              "type"
            ],
            "type": "object"
          },
          "target": {
            "description": "A record id in this document, or document-id/entity-id in another document.",
            "type": "string"
          },
          "text": {
            "description": "section: the Markdown under the heading, replacing what was there. text: the new block text (the whole md body when kind is rich).",
            "type": "string"
          },
          "value": {
            "description": "set: the one single-line value.",
            "type": "string"
          },
          "values": {
            "description": "set: every value of a repeated field, in order (instead of value).",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "op"
        ],
        "type": "object"
      },
      "minItems": 1,
      "type": "array"
    },
    "path": {
      "type": "string"
    },
    "presentation_digest": {
      "description": "Optional uiRequirements.digest from gram_profile topic presentation. Requires base_revision and expected_hash; rejects stale presentation profiles atomically.",
      "type": "string"
    },
    "request_id": {
      "description": "Stable per intended change; reuse only to retry the same change.",
      "maxLength": 128,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "path",
    "request_id",
    "operations"
  ],
  "type": "object"
}
```

<div class="legacy-anchor" id="h0-416"></div>

<div class="legacy-anchor" id="h0-419"></div>

<div class="legacy-anchor" id="h0-422"></div>

#### Output {#gram_patch-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_patch`. Historical request examples, output fixtures and source-backed errors from the 15-tool capture: [gram_patch in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-410).

### gram_comment {#gram_comment}

**Title:** Write a document comment

Writes a comment on a Vault document without changing the document: action open starts a thread on quoted text (block narrows where) or on a record, reply answers a thread, and resolve or reopen changes a thread's status.

Annotations: read-only no; destructive no; idempotent not declared; open world no.

#### Input schema {#gram_comment-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "enum": [
        "open",
        "reply",
        "resolve",
        "reopen"
      ],
      "type": "string"
    },
    "block": {
      "type": "string"
    },
    "path": {
      "type": "string"
    },
    "quote": {
      "maxLength": 2000,
      "minLength": 1,
      "type": "string"
    },
    "record": {
      "type": "string"
    },
    "request_id": {
      "maxLength": 128,
      "minLength": 1,
      "type": "string"
    },
    "text": {
      "maxLength": 4000,
      "minLength": 1,
      "type": "string"
    },
    "thread": {
      "type": "string"
    }
  },
  "required": [
    "path",
    "action"
  ],
  "type": "object"
}
```

#### Output {#gram_comment-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_comment`. This tool was not part of the 15-tool capture, so no historical fixtures exist.

### gram_move {#gram_move}

**Title:** Move or rename

Moves or renames a document or folder with its contents within the same mount, from path to to. Missing destination folders are created; a document keeps its history and records.

Annotations: read-only no; destructive yes; idempotent not declared; open world no.

#### Input schema {#gram_move-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "path": {
      "type": "string"
    },
    "to": {
      "type": "string"
    }
  },
  "required": [
    "path",
    "to"
  ],
  "type": "object"
}
```

#### Output {#gram_move-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_move`. This tool was not part of the 15-tool capture, so no historical fixtures exist.

### gram_delete {#gram_delete}

**Title:** Move to trash

Moves a document or folder with its contents to the mount's trash, from which gram_restore can bring it back.

Annotations: read-only no; destructive yes; idempotent not declared; open world no.

#### Input schema {#gram_delete-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "path": {
      "type": "string"
    }
  },
  "required": [
    "path"
  ],
  "type": "object"
}
```

#### Output {#gram_delete-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_delete`. This tool was not part of the 15-tool capture, so no historical fixtures exist.

### gram_restore {#gram_restore}

**Title:** Restore from trash

Restores a trashed document or folder to its original path, or to the mount root when that folder is gone; a name clash gets a (1) suffix. path is the original path, or the mount key with id from the trash listing.

Annotations: read-only no; destructive no; idempotent not declared; open world no.

#### Input schema {#gram_restore-input}

```json
{
  "additionalProperties": false,
  "properties": {
    "id": {
      "type": "string"
    },
    "path": {
      "type": "string"
    }
  },
  "required": [
    "path"
  ],
  "type": "object"
}
```

#### Output {#gram_restore-output}

Not declared: `tools/list` publishes no `outputSchema` for `gram_restore`. This tool was not part of the 15-tool capture, so no historical fixtures exist.

## Tools from the 15-tool capture that are not in the current list {#not-in-current-list}

The capture documented these tools; the 2026-10-25T00:01:00+00:00 `tools/list` response does not include them. Their recorded schemas and fixtures remain in the [legacy archive](/archive/mcp-tools-15-tool-capture/).

<div class="legacy-anchor" id="h0-120"></div>

<div class="legacy-anchor" id="h0-124"></div>

<div class="legacy-anchor" id="h0-126"></div>

<div class="legacy-anchor" id="h0-129"></div>

<div class="legacy-anchor" id="h0-132"></div>

### gram_get {#gram_get}

Not advertised by `tools/list` on 2026-10-25. See [gram_get in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-120).

<div class="legacy-anchor" id="h0-300"></div>

<div class="legacy-anchor" id="h0-304"></div>

<div class="legacy-anchor" id="h0-306"></div>

<div class="legacy-anchor" id="h0-309"></div>

<div class="legacy-anchor" id="h0-312"></div>

### gram_range {#gram_range}

Not advertised by `tools/list` on 2026-10-25. See [gram_range in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-300).

<div class="legacy-anchor" id="h0-328"></div>

<div class="legacy-anchor" id="h0-332"></div>

<div class="legacy-anchor" id="h0-334"></div>

<div class="legacy-anchor" id="h0-337"></div>

<div class="legacy-anchor" id="h0-340"></div>

### gram_state {#gram_state}

Not advertised by `tools/list` on 2026-10-25. See [gram_state in the legacy archive](/archive/mcp-tools-15-tool-capture/#h0-328).

## Sources of the retained capture {#capture-sources}

<div class="legacy-anchor" id="e0-format-language"></div>

<div class="legacy-anchor" id="e0-format-rich"></div>

<div class="legacy-anchor" id="e0-format-history6"></div>

The 15-tool capture cited these sources; they describe that capture, not the current server: [.gram language specification](/archive/mcp-tools-15-tool-capture/#e0-format-language) · [Current rich document specification](/archive/mcp-tools-15-tool-capture/#e0-format-rich) · [Current History/6 specification](/archive/mcp-tools-15-tool-capture/#e0-format-history6).
