Skip to main content
Glama

docx-mcp

A Node.js MCP server that lets clients create, query, edit, and save DOCX documents using a JSON schema, powered by the docx library.

Features

  • Complete DOCX operations: Create, edit, and save Word documents via Model Context Protocol (MCP)

  • JSON Schema validation: Structured document definition with comprehensive validation

  • Rich content blocks:

    • Text & Headings: 6 heading levels with advanced formatting

    • Lists: Ordered/unordered lists with multiple numbering styles and nesting

    • Code Blocks: Syntax highlighting for 180+ languages with themes and line numbers

    • Tables: Full table support with styling and cell formatting

    • Images: URL downloads with fallback, local files, and base64 embedding

    • Page Control: Page breaks and section breaks

  • Advanced text formatting:

    • Basic: Bold, italic, underline, strikethrough, colors

    • Enhanced: Superscript, subscript, font families, highlights, small caps

    • Spacing: Character spacing, paragraph alignment, indentation

  • Document management: In-memory registry with unique IDs

  • Metadata support: Complete document properties and custom metadata

  • File operations: Open existing DOCX files and save to disk

  • Error handling: Graceful fallbacks and comprehensive validation

Related MCP server: docx-mcp

JSON Schema

See src/schema.ts for the full schema. Key concepts:

  • meta: Document metadata (title, subject, creator, etc.)

  • pageSettings: Page size, orientation, margins, header/footer margins (NEW in v0.3.0)

  • headers: Page header configuration with default/first/even page support (NEW in v0.4.0)

  • footers: Page footer configuration with default/first/even page support (NEW in v0.4.0)

  • content: Array of blocks: heading, paragraph, table, image, codeBlock, list, pageBreak, horizontalRule, blockquote, infoBox, textBox

  • Enhanced blocks:

    • CodeBlock: { type: "codeBlock", language: "javascript", code: "...", showLineNumbers: true }

    • List: { type: "list", ordered: true, items: [...] } with nesting support

    • Table: Enhanced with backgroundColor, borders, verticalAlign, cell margins (NEW in v0.3.0)

    • HorizontalRule: { type: "horizontalRule", style: "single", color: "#666" } (NEW in v0.3.0)

    • Blockquote: { type: "blockquote", children: [...], borderColor: "#ccc" } (NEW in v0.3.0)

    • InfoBox: { type: "infoBox", boxType: "info", title: "Note", children: [...] } (NEW in v0.3.0)

    • TextBox: { type: "textBox", children: [...] } with border styling (NEW in v0.3.0)

    • Enhanced TextRun: Supports fontFamily, superScript, subScript, highlight, etc.

  • Each paragraph/heading uses inline runs (text, hyperlink) with rich formatting options

Headers & Footers Configuration (NEW in v0.4.0)

{
  "headers": {
    "default": {
      "alignment": "center",
      "children": [
        {
          "type": "documentTitle",
          "bold": true,
          "size": 14,
          "color": "#1f4788"
        }
      ]
    },
    "first": {
      "alignment": "right",
      "children": [
        {
          "type": "text",
          "text": "Confidential Document",
          "bold": true,
          "color": "#cc0000"
        }
      ]
    }
  },
  "footers": {
    "default": {
      "alignment": "center", 
      "children": [
        {
          "type": "text",
          "text": "Page "
        },
        {
          "type": "pageNumber",
          "format": "decimal"
        },
        {
          "type": "text",
          "text": " of "
        },
        {
          "type": "pageNumber",
          "format": "totalPages"
        }
      ]
    }
  }
}

Supported header/footer elements:

  • text: Static text with styling options

  • pageNumber: Auto page numbering (decimal, upperRoman, lowerRoman, upperLetter, lowerLetter)

  • currentDate: Auto-updating date with custom format strings

  • documentTitle: References document meta.title

  • image: Images in headers/footers (base64, path, url)

New in v0.4.0 - Document Structure & Headers/Footers

  • Headers & Footers System: Comprehensive page header and footer support

    • Default, first page, and even page headers/footers

    • Rich content: text, page numbers, dates, document title, images

    • Flexible alignment: left, center, right

    • Advanced styling: fonts, colors, sizes, bold/italic

  • Dynamic Content Elements:

    • pageNumber: Automatic page numbering with multiple formats (decimal, roman, letters)

    • currentDate: Auto-updating dates with custom formats

    • documentTitle: Reference document metadata

    • text: Static text with full styling options

    • image: Headers/footers images support

  • Professional Layout Control:

    • Different headers/footers for first page vs. rest of document

    • Odd/even page variations for book-style layouts

    • Precise margin control for headers and footers

    • Integration with existing page settings system

New in v0.3.0 - Styles & Layout

  • Page Settings: Page size (A4, Letter, etc.), orientation, margins control

  • Enhanced Tables: Background colors, border styles, vertical alignment, table templates

  • New Block Types: Horizontal rules, blockquotes, info boxes, text boxes

  • Advanced Styling: More comprehensive table and cell formatting options

Previous Updates

v0.2.0 - Enhanced Document Operations

  • Code Blocks: Syntax highlighting for 180+ programming languages

  • Lists: Ordered and unordered lists with multiple styles and nesting

  • Page Breaks: Control document pagination

  • Enhanced Text: Superscript, subscript, font families, highlights

  • Improved Schema: More comprehensive validation and type safety

Run locally

  1. Install deps

npm install
  1. Dev mode

npm run dev
  1. Build and start

npm run build
npm start

Tools

  • docx-getSchema { } // Get JSON schema - call this first!

  • docx-create { json }

  • docx-open { id?, path } // open .docx file from disk

  • docx-queryMeta { id }

  • docx-queryObjects { id }

  • docx-editMeta { id, patch }

  • docx-editContent { id, index, block }

  • docx-insertContent { id, index, block }

  • docx-removeContent { id, index }

  • docx-save { id, path }

  • docx-exportJson { id }

Example JSON

{
  "meta": { "title": "Demo", "creator": "DOCX MCP v0.2.0" },
  "content": [
    { "type": "heading", "level": 1, "children": [ { "type": "text", "text": "Title" } ] },
    { "type": "paragraph", "children": [ 
      { "type": "text", "text": "Hello ", "bold": true }, 
      { "type": "text", "text": "world", "color": "FF0000" } 
    ]},
    { 
      "type": "codeBlock", 
      "language": "javascript", 
      "showLineNumbers": true,
      "code": "console.log('Hello, World!');" 
    },
    {
      "type": "list",
      "ordered": false,
      "items": [
        { "children": [{ "type": "text", "text": "First item" }] },
        { "children": [{ "type": "text", "text": "Second item" }] }
      ]
    },
    { "type": "image", "url": "https://picsum.photos/300/200", "width": 300, "height": 200 },
    { "type": "pageBreak" },
    { "type": "table", "rows": [ { "cells": [ 
      { "children": [ { "type": "paragraph", "children": [ { "type": "text", "text": "A" } ] } ] }, 
      { "children": [ { "type": "paragraph", "children": [ { "type": "text", "text": "B" } ] } ] } 
    ] } ] }
  ]
}

Image Support

Images can be included in three ways:

  • URL: { "type": "image", "url": "https://example.com/image.png", "width": 300, "height": 200 }

  • Local file path: { "type": "image", "path": "/path/to/image.png", "width": 300, "height": 200 }

  • Base64 data: { "type": "image", "data": "base64string", "format": "png", "width": 150, "height": 100 }

URL Image Features:

  • Automatic download from HTTP/HTTPS URLs

  • Fallback to generated placeholder image if download fails

  • Placeholder shows original URL and dimensions

  • Support for common image formats (PNG, JPEG, JPG)

  • Note: Fontconfig warnings on Windows are harmless and can be ignored

Supported formats: PNG, JPEG, JPG

Notes

  • Hyperlinks are rendered visually as underlined blue text. Full hyperlink relationships can be added later.

  • Images support URL downloads, local file paths, and base64 data.

  • This server runs over stdio to be compatible with MCP hosts.

Available Tools

12 tools
docx-createA

Create a new docx from JSON, returns an id. Use docx-getSchema first to understand the required JSON structure. Supports images via 'data' (base64), 'path' (local file), or 'url' (remote image with fallback).

ParametersJSON Schema
NameRequiredDescriptionDefault
jsonYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations provided, and the description only mentions the tool returns an id. It does not disclose side effects, permissions, or limitations such as whether it overwrites existing files or where the document is stored.

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?

Two sentences: first states purpose and output, second gives prerequisite and a key detail. No unnecessary words, efficient for an AI agent.

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?

Given the complexity of the input schema and lack of output schema/annotations, the description is minimal. It relies heavily on docx-getSchema for full details, which is acceptable but leaves many aspects uncovered.

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

Parameters3/5

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

The single parameter 'json' is complex with no schema description (0% coverage). The description adds value by mentioning image support via data/path/url and directing to docx-getSchema, but it does not explain the rest of the JSON structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it creates a new docx from JSON and returns an id, which distinguishes it from sibling tools like docx-editContent or docx-insertContent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises using docx-getSchema first to understand the JSON structure, providing a clear prerequisite. However, it lacks guidance on when not to use this tool versus siblings for editing or querying.

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

docx-editContentB

Replace a block at index. Use docx-queryObjects first to see available blocks, and docx-getSchema to understand block structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
indexYes
blockYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must stand alone. It states 'Replace' implying mutation, but it does not disclose side effects (e.g., changes to block indices), error conditions, required permissions, or whether the replacement is in-place. The behavioral impact on the document is underdescribed.

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?

The description is two sentences with no wasted words. The primary action is front-loaded in the first sentence, and the second sentence provides essential prerequisites. It achieves maximum clarity with minimal length.

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?

For a mutation tool with 3 required parameters and no output schema, the description provides basic direction and references supplementary tools. However, it lacks details on expected return value, error handling, and behavioral guarantees, which are important for safe automated use. It is functional but not fully self-contained.

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

Parameters2/5

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

The input schema has 0% description coverage, so the description carries full responsibility. It mentions 'block' and references docx-getSchema for block structure, but does not explain the 'id' or 'index' parameters. The agent must infer that 'id' identifies the document and 'index' specifies the block position, which is not explicitly stated.

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?

The description clearly states the action 'Replace a block at index,' which is a specific verb and resource. It provides context by referencing prerequisite tools (docx-queryObjects, docx-getSchema), but it does not explicitly differentiate from sibling tools like docx-insertContent or docx-removeContent, leaving the agent to infer when replacement is preferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using docx-queryObjects and docx-getSchema first, which provides useful sequential guidance. However, it does not specify when to use this tool versus alternatives (e.g., insert or remove), nor does it give contraindications or examples of appropriate use cases.

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

docx-editMetaC

Patch metadata of a docx by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
patchYes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only states 'patch', implying partial update, but does not mention whether updates are idempotent, what happens on failure, or authentication requirements. Minimal transparency.

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

Conciseness3/5

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

The description is a single sentence, which is concise but lacks structure. It could be expanded to include purpose, usage, and parameter details without becoming overly long.

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

Completeness2/5

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

Given the complexity of a patch operation with a nested parameter and no output schema, the description is insufficient. It does not explain the behavior of the patch (e.g., merge vs replace), return values, or error conditions.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate. It mentions 'id' and 'patch' but does not explain that 'id' is the document identifier and 'patch' is a partial metadata object with nested fields. The nested properties are entirely undocumented.

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?

The description clearly states the action ('Patch metadata of a docx') and the required identifier ('by id'). It distinguishes from sibling tools like docx-editContent and docx-queryMeta, but could be more specific about the scope of metadata.

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?

No guidance on when to use this tool over alternatives (e.g., docx-editContent for content changes, docx-queryMeta for reading metadata). The description does not mention prerequisites or exclusions.

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

docx-exportJsonC

Return the current JSON model for a given id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden. It states the tool 'returns' the model, implying a read operation, but does not disclose any side effects, authorization needs, or how the 'current' model is determined.

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?

The description is a single, succinct sentence with no redundant information. It is well-structured and front-loaded.

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

Completeness2/5

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

Given the simple input schema and lack of output schema, the description is too brief. It does not explain the returned JSON model's structure or content, nor how it relates to sibling tools. The tool's role within the server is unclear.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain the parameter. It only mentions 'for a given id', adding minimal value beyond the schema. No details on id format, validity, or behavior when id is invalid.

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?

The description clearly states the action ('return') and resource ('JSON model'), and identifies the required parameter 'id'. It is specific enough to understand the tool's basic function, though it does not explicitly differentiate from the sibling tool 'docx-getSchema' which might return a schema instead of the model.

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?

The description provides no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The agent is left to infer the appropriate context from the name and siblings.

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

docx-getSchemaA

Get the JSON schema for DOCX document structure. IMPORTANT: Always call this first to understand the document format before using other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

The description implies a read-only operation returning a schema, which is accurate and sufficient given no annotations. Could explicitly state no side effects, but clear enough.

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?

Two sentences, no redundant information, front-loaded with purpose and important usage note. Highly efficient.

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

Completeness4/5

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

Explains the tool's output (schema for DOCX structure) but could provide more detail on the schema's scope or format. Still adequate for the tool's simplicity.

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?

No parameters exist, so no additional meaning needed. The description focuses on the output, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves the JSON schema for DOCX documents and positions it as a necessary first step, distinguishing it from sibling tools that operate on the document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs the agent to 'always call this first' before using other tools, providing clear guidance on prerequisite usage.

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

docx-insertContentA

Insert a block at index. Use docx-queryObjects first to see current structure, and docx-getSchema to understand block structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
indexYes
blockYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only states 'Insert a block at index' without disclosing side effects (e.g., mutation), error handling, or return behavior. This minimal disclosure leaves significant behavioral gaps.

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?

The description consists of two concise sentences: the first states the purpose, the second provides usage guidance. No extraneous information; every sentence serves a clear function.

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?

Given 3 parameters, no output schema, and no annotations, the description provides the core purpose and prerequisite steps but lacks detail on parameter semantics and behavioral outcomes. It is adequate for understanding scope but leaves gaps for an agent to infer required information.

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

Parameters2/5

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

Schema description coverage is 0% (no parameter descriptions in schema). The description references docx-getSchema for block structure but does not explain the 'id' or 'index' parameters. It adds little meaning beyond the schema's type definitions, failing to compensate for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Insert a block at index', specifying the verb (insert) and resource (block at index). It distinguishes from sibling tools like docx-create (creates new document) and docx-removeContent (removes content) by implying insertion of new content into an existing structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises to use docx-queryObjects first to see current structure and docx-getSchema to understand block structure, providing clear context for when to use this tool. However, it does not include explicit exclusions or alternatives beyond referencing other tools as prerequisites.

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

docx-openC

Open a .docx file from disk into memory and return id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
pathYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description must disclose behavior. It only states the basic action without addressing file existence requirements, permission needs, or memory implications. The description is insufficient for understanding side effects or preconditions.

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?

The description is a single concise sentence that front-loads the core purpose. Every word contributes value with no redundancy.

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

Completeness2/5

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

Given the simple tool with two parameters and no output schema, the description is not complete. It lacks critical details like expected path format, optional parameter role, and return value structure. An agent cannot reliably invoke this tool without additional information.

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

Parameters1/5

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

The description does not explain the parameters 'id' and 'path'. Schema coverage is 0%, so the description should compensate, but it only mentions 'path' implicitly. The 'id' parameter is completely undocumented, leaving its purpose unclear.

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?

The description clearly states the verb 'Open' and the resource '.docx file', specifying the action of loading from disk into memory and returning an id. However, it does not differentiate from the sibling tool 'docx-openFile', which might have a similar purpose, leaving potential ambiguity.

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?

No guidance is provided on when to use this tool versus alternatives like docx-create or docx-openFile. The description lacks any contextual cues for tool selection.

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

docx-openFileC

Open a .docx file from disk into memory and return id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
pathYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It states the file is loaded into memory and an id is returned, but no details about side effects (e.g., file locking, memory management), error conditions, or whether the operation is read-only. Insufficient for safe invocation.

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

Conciseness3/5

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

The description is a single sentence, which is concise but lacks critical details. It earns its place but fails to provide necessary information, making it under-specified rather than optimally concise.

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

Completeness2/5

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

Given the tool's complexity (2 parameters, no output schema, no annotations), the description is incomplete. It doesn't explain file handling, supported formats, concurrency behavior, or error handling. A more descriptive explanation is needed for an agent to use it correctly.

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

Parameters1/5

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

The input schema has two parameters with 0% description coverage. The description mentions 'return id' but id is also an input parameter, causing ambiguity. No explanation of what the id parameter represents or how it relates to the return value. This confuses rather than clarifies.

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?

The description clearly states the tool opens a .docx file from disk into memory and returns an id. It uses specific verb 'Open' and resource '.docx file', and distinguishes from siblings like docx-create. However, it doesn't explicitly differentiate from the similar sibling docx-open, which could cause confusion.

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?

No guidance on when to use this tool versus alternatives. No prerequisites or conditions mentioned (e.g., file must exist, supported file paths). Agent receives no context for decision-making.

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

docx-queryMetaC

Get docx metadata by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations exist, so the description carries full burden. It states 'Get' implying read-only, but does not disclose idempotency, error behavior (e.g., missing id), authorization needs, or response characteristics.

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

Conciseness3/5

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

The description is very brief (one sentence), which is concise but underspecified. It lacks essential details without being verbose. It earns a middle score for efficiency but insufficient content.

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

Completeness2/5

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

Given the tool's simplicity (1 param, no output schema, no annotations), the description should provide enough context. It only mentions 'get metadata by id', omitting return format, field names, and error handling. Incomplete for reliable use.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no meaning beyond the schema. The 'id' parameter is documented only as a string with no format, source, or required encoding explained.

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?

The description uses a specific verb ('Get') and resource ('docx metadata by id'), clearly indicating the action and object. It distinguishes from sibling tools like docx-editMeta (edit) and docx-queryObjects (query objects), but lacks specificity on what metadata entails.

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?

No guidance is provided on when to use this tool versus alternatives such as docx-queryObjects or docx-getSchema. The description does not mention prerequisites, context, or exclusion scenarios.

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

docx-queryObjectsC

List top-level object info by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description must describe behavioral traits. It only indicates a read operation via 'List' but does not disclose any other behaviors such as side effects, authorization needs, error conditions, or output structure. The description is insufficient for an agent to know what happens when invoked.

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

Conciseness3/5

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

The description is extremely concise at 4 words, which is front-loaded and efficient. However, it sacrifices necessary detail, making it under-specified for a tool that likely requires more context about its behavior and output.

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

Completeness2/5

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

The tool is simple with one parameter and no output schema, but the description fails to specify what 'object info' includes or what the return value looks like. Given the lack of annotations and schema coverage, the description is not complete enough for an agent to reliably use the tool without additional knowledge.

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

Parameters1/5

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

With 0% schema description coverage and no parameter descriptions, the description must explain the 'id' parameter. However, it only mentions 'by id' in the description without clarifying the expected format, type constraints, or what the id represents. The agent gets no additional meaning beyond the schema's bare 'string' type.

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?

The description uses a specific verb 'List' and identifies the resource 'top-level object info' with a key parameter 'by id'. It clearly states the tool's function, but lacks detail on what constitutes 'top-level object info', which could be clearer. It differentiates from siblings like 'docx-queryMeta' and 'docx-getSchema' by focusing on objects rather than metadata or schema.

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?

The description provides no guidance on when to use this tool versus the numerous sibling tools. There is no mention of prerequisites, context, or alternatives. The agent receives no help in deciding between, e.g., 'docx-queryObjects' and 'docx-queryMeta'.

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

docx-removeContentC

Remove a block at index.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
indexYes

TDQS

C2.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states 'Remove' indicating mutation, but fails to disclose whether the operation is destructive, whether indices shift after removal, if undo is supported, or any error conditions. This is insufficient for an agent to assess side effects.

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

Conciseness2/5

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

The description is extremely short (one sentence) but omits critical information. It achieves conciseness at the cost of clarity and completeness, leaving the agent underinformed. A better balance is needed.

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

Completeness1/5

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

Given two required parameters, no output schema, and no annotations, the description is grossly incomplete. It does not explain return values, error handling, expected behavior if index is out of bounds, or any operational context (e.g., document loaded). The agent cannot use this tool reliably.

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

Parameters1/5

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

With 0% schema description coverage, the description adds no meaning beyond the schema. It does not explain what 'id' refers to (e.g., document ID) or what 'index' means (e.g., 0-based position, valid range). The agent has no clue how to populate these parameters correctly.

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?

The description states the verb 'Remove' and the resource 'a block', with a qualifier 'at index', making the basic purpose clear. However, it does not specify what a 'block' refers to (e.g., a paragraph, table, or other element), which could cause ambiguity in a docx context. It is distinct from sibling tools like docx-insertContent or docx-editContent, but the lack of specificity prevents a perfect score.

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?

No guidance is provided on when to use this tool versus alternatives, prerequisites (e.g., document must be open), or conditions (e.g., index must exist). The agent receives no context about expected usage, making it unclear how to integrate this tool into a workflow.

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

docx-saveC

Persist the docx to disk path by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
pathYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description bears full burden. It only says 'persist', implying a write operation, but lacks details on overwrite behavior, directory creation, or validation. This is insufficient for safe usage.

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

Conciseness3/5

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

The description is a single sentence, which is concise but omits critical details. It is front-loaded but incomplete, undermining its effectiveness.

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

Completeness2/5

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

Given the complexity of docx manipulation and the presence of many sibling tools, this description fails to provide enough context. No output schema, no parameter descriptions, and no behavioral details leave the agent guessing.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It adds minimal meaning: 'id' identifies the docx, 'path' is the disk location. However, it does not specify formats or constraints, leaving the agent to infer.

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?

The description clearly states the tool persists a docx to disk using an id and path, which distinguishes it from creation and editing tools. However, it does not explain what 'id' refers to, leaving some ambiguity.

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?

No guidance is provided on when to use this tool versus alternatives like docx-open or docx-create. The description does not mention prerequisites, context, or scenarios.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev1.0.0
    • Changeddocx-create31 fields changed
      • changedInput schema / properties / json / $defs / Block / oneOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/Paragraph"
        -  },
        -  {
        -    "$ref": "#/$defs/Table"
        -  },
        -  {
        -    "$ref": "#/$defs/Image"
        -  },
        -  {
        -    "$ref": "#/$defs/Heading"
        -  },
        -  {
        -    "$ref": "#/$defs/CodeBlock"
        -  },
        -  {
        -    "$ref": "#/$defs/List"
        -  },
        -  {
        -    "$ref": "#/$defs/PageBreak"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/Paragraph"
        +  },
        +  {
        +    "$ref": "#/$defs/Table"
        +  },
        +  {
        +    "$ref": "#/$defs/Image"
        +  },
        +  {
        +    "$ref": "#/$defs/Heading"
        +  },
        +  {
        +    "$ref": "#/$defs/CodeBlock"
        +  },
        +  {
        +    "$ref": "#/$defs/List"
        +  },
        +  {
        +    "$ref": "#/$defs/PageBreak"
        +  },
        +  {
        +    "$ref": "#/$defs/HorizontalRule"
        +  },
        +  {
        +    "$ref": "#/$defs/Blockquote"
        +  },
        +  {
        +    "$ref": "#/$defs/InfoBox"
        +  },
        +  {
        +    "$ref": "#/$defs/TextBox"
        +  }
        +]
      • addedInput schema / properties / json / $defs / Blockquote
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "backgroundColor": {
        +      "type": "string"
        +    },
        +    "borderColor": {
        +      "default": "#cccccc",
        +      "type": "string"
        +    },
        +    "children": {
        +      "items": {
        +        "$ref": "#/$defs/Block"
        +      },
        +      "type": "array"
        +    },
        +    "leftIndent": {
        +      "default": 720,
        +      "type": "number"
        +    },
        +    "style": {
        +      "default": "default",
        +      "enum": [
        +        "default",
        +        "emphasized",
        +        "minimal"
        +      ],
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "blockquote"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "children"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / CurrentDate
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "bold": {
        +      "default": false,
        +      "type": "boolean"
        +    },
        +    "color": {
        +      "default": "#000000",
        +      "type": "string"
        +    },
        +    "format": {
        +      "default": "MM/dd/yyyy",
        +      "description": "Date format string",
        +      "type": "string"
        +    },
        +    "italics": {
        +      "default": false,
        +      "type": "boolean"
        +    },
        +    "size": {
        +      "default": 12,
        +      "type": "number"
        +    },
        +    "type": {
        +      "const": "currentDate"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / DocumentTitle
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "bold": {
        +      "default": false,
        +      "type": "boolean"
        +    },
        +    "color": {
        +      "default": "#000000",
        +      "type": "string"
        +    },
        +    "italics": {
        +      "default": false,
        +      "type": "boolean"
        +    },
        +    "size": {
        +      "default": 12,
        +      "type": "number"
        +    },
        +    "type": {
        +      "const": "documentTitle"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / FootnoteReference
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "customMark": {
        +      "description": "Custom reference mark (overrides numberFormat)",
        +      "type": "string"
        +    },
        +    "footnoteId": {
        +      "type": "string"
        +    },
        +    "numberFormat": {
        +      "default": "decimal",
        +      "enum": [
        +        "decimal",
        +        "upperRoman",
        +        "lowerRoman",
        +        "upperLetter",
        +        "lowerLetter",
        +        "symbol"
        +      ]
        +    },
        +    "type": {
        +      "const": "footnoteReference"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "footnoteId"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / HeaderFooterContent
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "alignment": {
        +      "default": "left",
        +      "enum": [
        +        "left",
        +        "center",
        +        "right"
        +      ]
        +    },
        +    "children": {
        +      "items": {
        +        "$ref": "#/$defs/HeaderFooterElement"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / HeaderFooterElement
        Added value: +{
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/HeaderFooterText"
        +    },
        +    {
        +      "$ref": "#/$defs/PageNumber"
        +    },
        +    {
        +      "$ref": "#/$defs/HeaderFooterImage"
        +    },
        +    {
        +      "$ref": "#/$defs/CurrentDate"
        +    },
        +    {
        +      "$ref": "#/$defs/DocumentTitle"
        +    }
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / HeaderFooterImage
        Added value: +{
        +  "additionalProperties": false,
        +  "oneOf": [
        +    {
        +      "required": [
        +        "data",
        +        "format"
        +      ]
        +    },
        +    {
        +      "required": [
        +        "path"
        +      ]
        +    },
        +    {
        +      "required": [
        +        "url"
        +      ]
        +    }
        +  ],
        +  "properties": {
        +    "data": {
        +      "description": "base64-encoded image data",
        +      "type": "string"
        +    },
        +    "format": {
        +      "enum": [
        +        "png",
        +        "jpeg",
        +        "jpg"
        +      ]
        +    },
        +    "height": {
        +      "type": "number"
        +    },
        +    "path": {
        +      "description": "local file path to image",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "image"
        +    },
        +    "url": {
        +      "description": "URL to download image from",
        +      "type": "string"
        +    },
        +    "width": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / HeaderFooterText
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "bold": {
        +      "default": false,
        +      "type": "boolean"
        +    },
        +    "color": {
        +      "default": "#000000",
        +      "type": "string"
        +    },
        +    "fontFamily": {
        +      "default": "Arial",
        +      "type": "string"
        +    },
        +    "italics": {
        +      "default": false,
        +      "type": "boolean"
        +    },
        +    "size": {
        +      "default": 12,
        +      "type": "number"
        +    },
        +    "text": {
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "text"
        +    },
        +    "underline": {
        +      "default": false,
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "text"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / HorizontalRule
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "alignment": {
        +      "default": "center",
        +      "enum": [
        +        "left",
        +        "center",
        +        "right"
        +      ],
        +      "type": "string"
        +    },
        +    "color": {
        +      "default": "#000000",
        +      "type": "string"
        +    },
        +    "size": {
        +      "default": 1,
        +      "type": "number"
        +    },
        +    "style": {
        +      "default": "single",
        +      "enum": [
        +        "single",
        +        "double",
        +        "thick",
        +        "thin",
        +        "dotted",
        +        "dashed"
        +      ],
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "horizontalRule"
        +    },
        +    "width": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / InfoBox
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "boxType": {
        +      "default": "info",
        +      "enum": [
        +        "info",
        +        "warning",
        +        "error",
        +        "success",
        +        "note"
        +      ],
        +      "type": "string"
        +    },
        +    "children": {
        +      "items": {
        +        "$ref": "#/$defs/Block"
        +      },
        +      "type": "array"
        +    },
        +    "customColors": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "backgroundColor": {
        +          "type": "string"
        +        },
        +        "borderColor": {
        +          "type": "string"
        +        },
        +        "textColor": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "icon": {
        +      "default": true,
        +      "type": "boolean"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "infoBox"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "boxType",
        +    "children"
        +  ],
        +  "type": "object"
        +}
      • changedInput schema / properties / json / $defs / Inline / oneOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/TextRun"
        -  },
        -  {
        -    "$ref": "#/$defs/Hyperlink"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/TextRun"
        +  },
        +  {
        +    "$ref": "#/$defs/Hyperlink"
        +  },
        +  {
        +    "$ref": "#/$defs/FootnoteReference"
        +  }
        +]
      • addedInput schema / properties / json / $defs / NoteContent
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "children": {
        +      "items": {
        +        "$ref": "#/$defs/Block"
        +      },
        +      "type": "array"
        +    },
        +    "separator": {
        +      "default": "line",
        +      "description": "Separator style before the note",
        +      "enum": [
        +        "line",
        +        "none",
        +        "continuation"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "children"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / PageNumber
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "bold": {
        +      "default": false,
        +      "type": "boolean"
        +    },
        +    "color": {
        +      "default": "#000000",
        +      "type": "string"
        +    },
        +    "format": {
        +      "default": "decimal",
        +      "enum": [
        +        "decimal",
        +        "upperRoman",
        +        "lowerRoman",
        +        "upperLetter",
        +        "lowerLetter"
        +      ]
        +    },
        +    "italics": {
        +      "default": false,
        +      "type": "boolean"
        +    },
        +    "size": {
        +      "default": 12,
        +      "type": "number"
        +    },
        +    "start": {
        +      "default": 1,
        +      "type": "number"
        +    },
        +    "type": {
        +      "const": "pageNumber"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / Table / properties / alignment
        Added value: +{
        +  "default": "left",
        +  "enum": [
        +    "left",
        +    "center",
        +    "right"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / json / $defs / Table / properties / borderColor
        Added value: +{
        +  "default": "#000000",
        +  "type": "string"
        +}
      • addedInput schema / properties / json / $defs / Table / properties / borderSize
        Added value: +{
        +  "default": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / json / $defs / Table / properties / borderStyle
        Added value: +{
        +  "default": "single",
        +  "enum": [
        +    "single",
        +    "double",
        +    "thick",
        +    "thin",
        +    "dotted",
        +    "dashed"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / json / $defs / Table / properties / style
        Added value: +{
        +  "default": "none",
        +  "enum": [
        +    "none",
        +    "table-grid",
        +    "table-list",
        +    "table-colorful"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / json / $defs / TableCell / properties / backgroundColor
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / json / $defs / TableCell / properties / borders
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "bottom": {
        +      "default": true,
        +      "type": "boolean"
        +    },
        +    "left": {
        +      "default": true,
        +      "type": "boolean"
        +    },
        +    "right": {
        +      "default": true,
        +      "type": "boolean"
        +    },
        +    "top": {
        +      "default": true,
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / TableCell / properties / margins
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "bottom": {
        +      "default": 0,
        +      "type": "number"
        +    },
        +    "left": {
        +      "default": 108,
        +      "type": "number"
        +    },
        +    "right": {
        +      "default": 108,
        +      "type": "number"
        +    },
        +    "top": {
        +      "default": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / json / $defs / TableCell / properties / verticalAlign
        Added value: +{
        +  "default": "top",
        +  "enum": [
        +    "top",
        +    "center",
        +    "bottom"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / json / $defs / TableRow / properties / cantSplit
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / json / $defs / TableRow / properties / height
        Added value: +{
        +  "type": "number"
        +}
      • addedInput schema / properties / json / $defs / TableRow / properties / isHeader
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / json / $defs / TextBox
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "borders": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "color": {
        +          "default": "#000000",
        +          "type": "string"
        +        },
        +        "size": {
        +          "default": 1,
        +          "type": "number"
        +        },
        +        "style": {
        +          "default": "single",
        +          "enum": [
        +            "single",
        +            "double",
        +            "thick",
        +            "thin",
        +            "dotted",
        +            "dashed",
        +            "none"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "children": {
        +      "items": {
        +        "$ref": "#/$defs/Block"
        +      },
        +      "type": "array"
        +    },
        +    "fill": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "color": {
        +          "type": "string"
        +        },
        +        "transparency": {
        +          "default": 0,
        +          "maximum": 100,
        +          "minimum": 0,
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "height": {
        +      "type": "number"
        +    },
        +    "position": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anchor": {
        +          "default": "paragraph",
        +          "enum": [
        +            "page",
        +            "margin",
        +            "paragraph"
        +          ],
        +          "type": "string"
        +        },
        +        "x": {
        +          "type": "number"
        +        },
        +        "y": {
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": {
        +      "const": "textBox"
        +    },
        +    "width": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "children"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / json / properties / footers
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "default": {
        +      "$ref": "#/$defs/HeaderFooterContent"
        +    },
        +    "even": {
        +      "$ref": "#/$defs/HeaderFooterContent"
        +    },
        +    "first": {
        +      "$ref": "#/$defs/HeaderFooterContent"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / json / properties / footnotes
        Added value: +{
        +  "additionalProperties": false,
        +  "patternProperties": {
        +    "^[a-zA-Z0-9_-]+$": {
        +      "$ref": "#/$defs/NoteContent"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / json / properties / headers
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "default": {
        +      "$ref": "#/$defs/HeaderFooterContent"
        +    },
        +    "even": {
        +      "$ref": "#/$defs/HeaderFooterContent"
        +    },
        +    "first": {
        +      "$ref": "#/$defs/HeaderFooterContent"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / json / properties / pageSettings
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "footerMargin": {
        +      "default": 720,
        +      "type": "number"
        +    },
        +    "headerMargin": {
        +      "default": 720,
        +      "type": "number"
        +    },
        +    "margins": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "bottom": {
        +          "default": 1440,
        +          "type": "number"
        +        },
        +        "left": {
        +          "default": 1440,
        +          "type": "number"
        +        },
        +        "right": {
        +          "default": 1440,
        +          "type": "number"
        +        },
        +        "top": {
        +          "default": 1440,
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "orientation": {
        +      "default": "portrait",
        +      "enum": [
        +        "portrait",
        +        "landscape"
        +      ],
        +      "type": "string"
        +    },
        +    "pageSize": {
        +      "default": "A4",
        +      "enum": [
        +        "A4",
        +        "A3",
        +        "A5",
        +        "Letter",
        +        "Legal",
        +        "Tabloid",
        +        "Executive"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
  2. 12 tool updates
    • First observeddocx-create
    • First observeddocx-editContent
    • First observeddocx-editMeta
    • First observeddocx-exportJson
    • First observeddocx-getSchema
    • First observeddocx-insertContent
    • First observeddocx-open
    • First observeddocx-openFile
    • First observeddocx-queryMeta
    • First observeddocx-queryObjects
    • First observeddocx-removeContent
    • First observeddocx-save

TDQS

C2.9/5.0
Disambiguation1/5

Two tools (docx-open and docx-openFile) have identical descriptions, making them indistinguishable. This creates confusion for agents.

Naming Consistency5/5

All tools follow a consistent docx-<verb><Noun> pattern with camelCase verbs. No naming convention violations.

Tool Count5/5

12 tools cover the core DOCX operations reasonably well without being excessive or insufficient.

Completeness3/5

Basic CRUD is present but missing a delete/close operation for documents. Also lacks a way to create an empty document directly.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    B
    quality
    Not graded
    maintenance
    Enables AI assistants to create, read, and manipulate Microsoft Word documents with comprehensive formatting, table creation, content management, and document protection capabilities. Supports advanced operations like merging documents, PDF conversion, and rich text formatting through a standardized interface.
    32
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to create, edit, and extract data from Microsoft Word documents programmatically, supporting document creation, content editing, table manipulation, parameter extraction, and template generation.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lihongjie0209/docx-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server