SafeMarkdownEditor MCP Server
Integrates with GitHub Copilot in VSCode, enabling AI-powered Markdown document editing with comprehensive section management and file operations through the Copilot interface.
Provides powerful Markdown document editing capabilities with thread-safe operations, atomic transactions, section management, and validation for Markdown files.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SafeMarkdownEditor MCP Serverinsert a new section titled 'Project Timeline' after the introduction"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SafeMarkdownEditor MCP Server
A Model Context Protocol (MCP) server that provides powerful Markdown document editing capabilities with thread-safe operations, atomic transactions, and comprehensive validation.
📦 Available on PyPI: quantalogic-markdown-mcp
🚀 Quick Start: Install with uv add quantalogic-markdown-mcp or pip install quantalogic-markdown-mcp
Current version: 0.1.2
Features
✨ Comprehensive Markdown Editing
Insert, update, delete, and move sections
Thread-safe operations with atomic transactions
Immutable section references that remain stable across edits
Comprehensive validation with configurable strictness levels
🔧 MCP Tools Available
File Operations:
load_document- Load a Markdown document from a file path (supports absolute, relative, and ~ expansion)save_document- Save the current document to a file pathget_file_info- Get information about the currently loaded filetest_path_resolution- Test and verify path resolution for different path formats
Document Editing:
insert_section- Insert new sections at specified positionsdelete_section- Remove sections by ID or headingupdate_section- Modify section content while preserving structuremove_section- Reorder sections within the documentget_section- Retrieve individual section content and metadatalist_sections- Get an overview of all document sectionsget_document- Export the complete Markdown documentundo- Rollback the last operation
📊 MCP Resources
document://current- Real-time access to the current documentdocument://history- Transaction history for undo/redo operationsdocument://metadata- Document metadata (title, author, timestamps)
🎯 MCP Prompts
summarize_section- Generate section summariesrewrite_section- Improve section clarity and concisenessgenerate_outline- Create document outlines
Related MCP server: Markdown Editor MCP Server
Installation
Prerequisites
Python 3.11 or higher
uv (recommended) or pip
Quick Install from PyPI (Recommended)
The package is available on PyPI! Install the latest version (0.1.2) directly:
# Install with uv (recommended)
uv add quantalogic-markdown-mcp@0.1.2
# Or install with pip
pip install quantalogic-markdown-mcp==0.1.2Run Directly with uvx (No Installation Required)
You can run the MCP server directly without installing it locally:
# Run directly with uvx
uvx --from quantalogic-markdown-mcp python -m quantalogic_markdown_mcp.mcp_serverDevelopment Installation
For development or to contribute to the project:
# Clone the repository
git clone https://github.com/raphaelmansuy/quantalogic-markdown-edit-mcp.git
cd quantalogic-markdown-edit-mcp
# Install with development dependencies
uv sync --group dev
# Install in development mode
uv pip install -e .Quick Start
Running the Server
Method 1: Direct Execution (PyPI Installation)
If you installed from PyPI:
# Run the MCP server directly (ensure version 0.1.2 is installed)
python -m quantalogic_markdown_mcp.mcp_server
# Or with uvx (no installation required)
uvx --from quantalogic-markdown-mcp python -m quantalogic_markdown_mcp.mcp_serverMethod 2: Development Installation
If you cloned the repository:
# Using uv
uv run python -m quantalogic_markdown_mcp.mcp_server
# Or with regular Python
python -m quantalogic_markdown_mcp.mcp_serverMethod 3: Using the Development Script
For development from source:
# Run the development server (dev mode)
python dev-scripts/run_mcp_server.pyConnecting to Claude Desktop
To use this MCP server with Claude Desktop, add the following configuration to your claude_desktop_config.json:
Option 1: Using PyPI Installation (Recommended)
macOS/Linux:
{
"mcpServers": {
"markdown-editor": {
"command": "python",
"args": [
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}Windows:
{
"mcpServers": {
"markdown-editor": {
"command": "python.exe",
"args": [
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}Option 2: Using uvx (No Installation Required)
macOS/Linux:
{
"mcpServers": {
"markdown-editor": {
"command": "uvx",
"args": [
"--from",
"quantalogic-markdown-mcp",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}Windows:
{
"mcpServers": {
"markdown-editor": {
"command": "uvx.exe",
"args": [
"--from",
"quantalogic-markdown-mcp",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}Option 3: Development Installation
For development from source:
macOS/Linux:
{
"mcpServers": {
"markdown-editor": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/quantalogic-markdown-edit-mcp",
"run",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}Windows:
{
"mcpServers": {
"markdown-editor": {
"command": "uv.exe",
"args": [
"--directory",
"C:\\ABSOLUTE\\PATH\\TO\\quantalogic-markdown-edit-mcp",
"run",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}Configuration file locations:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
After adding the configuration, restart Claude Desktop.
Connecting to VSCode
To use this MCP server with VSCode and GitHub Copilot, you have several configuration options depending on your needs.
Prerequisites:
VSCode 1.102 or later
GitHub Copilot extension installed and configured
MCP support enabled in your organization (if applicable)
Workspace Configuration (Recommended for Projects)
Create a .vscode/mcp.json file in your workspace root to share the configuration with your team:
Option 1: Development Installation (Recommended)
For this project, use the development setup since you're working with the source code:
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"${workspaceFolder}",
"run",
"python",
"-c",
"import sys; sys.path.insert(0, 'src'); from quantalogic_markdown_mcp.mcp_server import mcp; mcp.run()"
],
"cwd": "${workspaceFolder}"
}
}
}Option 2: Alternative Development Approach
Using environment variables for Python path:
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"${workspaceFolder}",
"run",
"--",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
],
"cwd": "${workspaceFolder}",
"env": {
"PYTHONPATH": "${workspaceFolder}/src"
}
}
}
}Option 3: Using PyPI Installation (If Installed Globally)
Only use this if you have installed the package globally:
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "python3",
"args": [
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}For Windows (adjust command names):
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "python.exe",
"args": [
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}User Configuration (Global Settings)
For system-wide access across all workspaces:
Open Command Palette (
Ctrl+Shift+P/Cmd+Shift+P)Run
MCP: Open User ConfigurationAdd the server configuration:
Option 1: Using PyPI Installation
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "python",
"args": [
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}Option 2: Using uvx
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"quantalogic-markdown-mcp",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}Option 3: Development Installation
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/quantalogic-markdown-edit-mcp",
"run",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}Development Container Support
For containerized development environments, add to your devcontainer.json:
{
"image": "mcr.microsoft.com/devcontainers/python:latest",
"customizations": {
"vscode": {
"mcp": {
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"${containerWorkspaceFolder}",
"run",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}
}
}
}Alternative Installation Methods
Command Line Installation:
code --add-mcp '{"name":"markdown-editor","command":"uv","args":["--directory","/ABSOLUTE/PATH/TO/quantalogic-markdown-edit-mcp","run","python","-m","quantalogic_markdown_mcp.mcp_server"]}'URL Installation: You can create installation links using the VSCode URL handler format:
vscode:mcp/install?%7B%22name%22%3A%22markdown-editor%22%2C%22command%22%3A%22uv%22%2C%22args%22%3A%5B%22--directory%22%2C%22%2FABSOLUTE%2FPATH%2FTO%2Fquantalogic-markdown-edit-mcp%22%2C%22run%22%2C%22python%22%2C%22-m%22%2C%22quantalogic_markdown_mcp.mcp_server%22%5D%7DUsing the MCP Server in VSCode
Once configured:
Open the Chat view (
Ctrl+Cmd+I/Ctrl+Alt+I)Select Agent mode from the dropdown
Click the Tools button to see available MCP tools
Enable the markdown-editor tools you want to use
Start chatting with commands like:
"Load the README.md file and show me all sections"
"Create a new section called 'Installation' with setup instructions"
"Move the 'Features' section to be the first section"
Managing MCP Servers:
View installed servers:
MCP: List ServersManage servers: Go to Extensions view (
Ctrl+Shift+X) → MCP SERVERS sectionView server logs: Right-click server → Show Output
Start/Stop servers: Right-click server → Start/Stop/Restart
Development and Debugging:
For development, you can enable watch mode and debugging in your .vscode/mcp.json:
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"${workspaceFolder}",
"run",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
],
"dev": {
"watch": "src/**/*.py",
"debug": { "type": "python" }
}
}
}
}Working with Files
The MCP server supports loading and saving Markdown documents from various file path formats:
Supported Path Formats
Absolute paths:
/Users/username/documents/file.mdRelative paths:
./documents/file.mdordocuments/file.mdHome directory expansion:
~/Documents/file.mdEnvironment variables:
$HOME/documents/file.md
File Operations Examples
"Load the document from ~/Documents/my-notes.md"
"Load the file at ./project-docs/README.md"
"Save this document to /Users/me/Desktop/backup.md"
"Get information about the current file"
"Test if the path ~/Documents/draft.md resolves correctly"Usage Examples
Basic Document Operations
Once connected to Claude Desktop (or another MCP client), you can use natural language commands:
"Load the document from ~/Documents/my-project.md"
"Create a new section called 'Getting Started' with some basic instructions"
"Move the 'Installation' section to be the second section"
"Update the 'Features' section to include the new functionality"
"Delete the 'Deprecated' section"
"Save the document to ./backups/project-backup.md"
"Show me all the sections in this document"
"Get the current document as Markdown"Working with Different Path Types
"Load /Users/me/Documents/important-notes.md"
"Load the file at ./project-docs/specification.md"
"Load ~/Desktop/meeting-notes.md"
"Test if the path $HOME/Documents/draft.md exists"
"Save to /tmp/quick-backup.md with backup enabled"Programmatic Usage
You can also use the server programmatically with FastMCP clients:
import asyncio
from fastmcp import Client
async def demo():
# Connect to the server (adjust command based on your installation)
# Option 1: If installed from PyPI
async with Client("python -m quantalogic_markdown_mcp.mcp_server") as client:
# ... rest of the code remains the same
# Option 2: If using development installation
# async with Client("src/quantalogic_markdown_mcp/mcp_server.py") as client:
# List available tools
tools = await client.list_tools()
print(f"Available tools: {[tool.name for tool in tools]}")
# Load a document from file
result = await client.call_tool("load_document", {
"file_path": "~/Documents/my-notes.md",
"validation_level": "NORMAL"
})
print(f"Load result: {result.content}")
# Get file information
file_info = await client.call_tool("get_file_info", {})
print(f"File info: {file_info.content}")
# Test path resolution
path_test = await client.call_tool("test_path_resolution", {
"path": "~/Documents/test.md"
})
print(f"Path resolution: {path_test.content}")
# Insert a new section
result = await client.call_tool("insert_section", {
"heading": "Introduction",
"content": "Welcome to our documentation!",
"position": 0
})
print(f"Insert result: {result.content}")
# List all sections
sections = await client.call_tool("list_sections", {})
print(f"Document sections: {sections.content}")
# Save the modified document
save_result = await client.call_tool("save_document", {
"file_path": "./modified-notes.md",
"backup": True
})
print(f"Save result: {save_result.content}")
# Run the demo
asyncio.run(demo())Tool Reference
File Operation Tools
load_document(file_path: str, validation_level: str = "NORMAL")
Load a Markdown document from a file path with support for various path formats.
Parameters:
file_path: Path to the Markdown file (supports absolute, relative, ~, and $ENV expansion)validation_level: Validation strictness - "STRICT", "NORMAL", or "PERMISSIVE"
Returns: Success status with file information and document statistics
Examples:
load_document("/Users/me/notes.md")load_document("./docs/README.md")load_document("~/Documents/project.md")
save_document(file_path?: str, backup: bool = True)
Save the current document to a file path.
Parameters:
file_path: Target path to save to (optional, uses current file if not provided)backup: Whether to create a .bak backup of existing files
Returns: Success status with save location information
get_file_info()
Get detailed information about the currently loaded file.
Returns: File metadata including path, size, permissions, and timestamps
test_path_resolution(path: str)
Test and validate path resolution for different path formats.
Parameters:
path: The path to test and resolve
Returns: Detailed path resolution information including expansion details
Document Editing Tools
insert_section(heading: str, content: str, position: int)
Insert a new section at the specified position.
Parameters:
heading: The section heading textcontent: The section content (can include Markdown)position: Where to insert (0 = beginning, or after existing section)
Returns: Success/failure status with section ID if successful
delete_section(section_id?: str, heading?: str)
Delete a section by ID or heading.
Parameters:
section_id: Unique section identifier (optional)heading: Section heading text (optional)
Note: Either section_id or heading must be provided.
update_section(section_id: str, content: str)
Update the content of an existing section.
Parameters:
section_id: Unique section identifiercontent: New content for the section
move_section(section_id: str, new_position: int)
Move a section to a new position in the document.
Parameters:
section_id: Unique section identifiernew_position: Target position (0-based)
get_section(section_id: str)
Retrieve detailed information about a specific section.
Returns: Section heading, content, position, level, and ID
list_sections()
Get metadata for all sections in the document.
Returns: Array of section metadata (ID, heading, position, level, path)
get_document()
Export the complete Markdown document.
Returns: Full document as Markdown text
undo()
Undo the last operation performed on the document.
Returns: Success/failure status
Configuration Options
The server supports several configuration options through environment variables:
# Validation level (STRICT, NORMAL, PERMISSIVE)
export MARKDOWN_VALIDATION_LEVEL=NORMAL
# Maximum transaction history size
export MAX_TRANSACTION_HISTORY=100
# Server name
export MCP_SERVER_NAME="SafeMarkdownEditor"Development
Running Tests
# Run all tests
uv run pytest
# Run with coverage
uv run pytest --cov=src --cov-report=html
# Run specific test files
uv run pytest tests/test_mcp_server.pyCode Quality
# Format code
uv run black src tests
# Lint code
uv run ruff check src tests
# Type checking
uv run mypy srcDevelopment Server
For development, you can run the server with additional debugging:
# In dev-scripts/run_mcp_server.py
from quantalogic_markdown_mcp.mcp_server import server
if __name__ == "__main__":
# Initialize with debug document
server.initialize_document(
markdown_text="""# Sample Document
## Introduction
This is a sample document for testing.
## Features
- Feature 1
- Feature 2
## Conclusion
Thank you for reading!
""",
validation_level=ValidationLevel.NORMAL
)
print("Starting SafeMarkdownEditor MCP Server...")
print("Debug mode enabled with sample document")
server.run()Troubleshooting
Common Issues
Server not appearing in Claude Desktop:
Check that the path in
claude_desktop_config.jsonis absoluteVerify that
uvis in your PATH (which uvon macOS/Linux,where uvon Windows)Restart Claude Desktop after configuration changes
Check Claude Desktop logs for error messages
Server not appearing in VSCode:
Ensure VSCode 1.102 or later is installed
Verify GitHub Copilot extension is installed and active
Check that MCP support is enabled in your organization settings
Confirm
.vscode/mcp.jsonfile exists in workspace root (for workspace config)Use
MCP: List Serverscommand to see if server is registeredCheck Extensions view → MCP SERVERS section for server status
Verify
uvis in your PATH and accessible from VSCode's integrated terminal
VSCode MCP server not starting:
Check the MCP server output: Right-click server → Show Output
For development setup: Ensure you're using the correct configuration:
{ "servers": { "markdown-editor": { "type": "stdio", "command": "uv", "args": [ "--directory", "${workspaceFolder}", "run", "--", "python", "-m", "quantalogic_markdown_mcp.mcp_server" ], "cwd": "${workspaceFolder}", "env": { "PYTHONPATH": "${workspaceFolder}/src" } } } }Verify the command path and arguments in your configuration
Test the command manually in a terminal from the correct working directory:
cd /path/to/quantalogic-markdown-edit-mcp uv run python -c "import sys; sys.path.insert(0, 'src'); from quantalogic_markdown_mcp.mcp_server import mcp; print('MCP server ready')"Ensure all required dependencies are installed:
uv syncCheck file permissions on the server executable
For dev containers, verify the container has access to required tools
VSCode agent mode not showing MCP tools:
Confirm you're in Agent mode (not Ask mode) in the Chat view
Click the Tools button to enable/disable specific MCP tools
Check if you have more than 128 tools enabled (VSCode limit)
Verify the MCP server is running (green indicator in Extensions view)
Try restarting the MCP server: Right-click → Restart
Tool execution errors:
Ensure the document is initialized (the server auto-initializes if needed)
Check section IDs are valid using
list_sectionsfirstVerify that section references haven't changed after edits
Performance issues:
Large documents may take time to process
Consider using section-level operations instead of full document operations
Monitor transaction history size
Debug Mode
Enable debug logging by setting:
export PYTHONPATH=$PWD/src
export MCP_DEBUG=1
python -m quantalogic_markdown_mcp.mcp_serverLogging
The server uses Python's logging module and writes to stderr to avoid interfering with MCP's stdio transport. To see debug logs:
# Run with debug logging
PYTHONPATH=$PWD/src python -m quantalogic_markdown_mcp.mcp_server 2>debug.logArchitecture
The server is built on several key components:
SafeMarkdownEditor: Core thread-safe editing engine with atomic operations
MarkdownMCPServer: MCP server wrapper that exposes editing capabilities
FastMCP: Modern MCP framework for Python with automatic schema generation
Transaction System: Atomic operations with rollback support
Validation Engine: Configurable document structure validation
Contributing
Contributions are welcome! Please read our contributing guidelines:
Fork the repository
Create a feature branch
Make your changes with tests
Ensure all tests pass and code is formatted
Submit a pull request
Development Setup
# Clone and setup
git clone https://github.com/raphaelmansuy/quantalogic-markdown-edit-mcp.git
cd quantalogic-markdown-edit-mcp
# Install with development dependencies
uv sync --group dev
# Install pre-commit hooks
uv run pre-commit installLicense
This project is licensed under the MIT License - see the LICENSE file for details.
Related Projects
Model Context Protocol - The protocol specification
FastMCP - Python framework for building MCP servers
Claude Desktop - AI assistant with MCP support
Need help? Open an issue on GitHub or check the documentation.
Available Tools
10 toolsanalyze_documentC
Analyze document structure and provide insights.
Args:
document_path: Path to the Markdown file
validation_level: Validation strictness - "STRICT", "NORMAL", or "PERMISSIVE"
| Name | Required | Description | Default |
|---|---|---|---|
| document_path | Yes | ||
| validation_level | No | NORMAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'analyze document structure and provide insights' but doesn't specify what kind of insights, whether this is a read-only operation, if it modifies the document, what permissions are required, or any rate limits. For an analysis tool with zero annotation coverage, this 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with a clear purpose statement followed by parameter documentation. The two-sentence structure is efficient with zero wasted words. The parameter documentation uses a clean Args: format that's easy to parse. It could be slightly more front-loaded by moving the parameter details to a separate section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description doesn't need to explain return values. However, for a 2-parameter analysis tool with no annotations, the description should provide more context about what 'analyze' means in practice, what kind of insights are provided, and how this differs from simply retrieving the document. The parameter documentation helps, but the overall context remains somewhat incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly documents both parameters with their purposes: 'document_path: Path to the Markdown file' and 'validation_level: Validation strictness - "STRICT", "NORMAL", or "PERMISSIVE"'. This adds substantial value beyond the input schema which has 0% description coverage. However, it doesn't explain the practical implications of different validation levels or provide examples of valid document paths.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Analyze document structure and provide insights' with a specific verb ('analyze') and resource ('document'). It distinguishes itself from siblings like 'get_document' (retrieval) or 'update_section' (modification) by focusing on analysis rather than basic CRUD operations. However, it doesn't explicitly differentiate from potential analysis-related siblings if they existed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. With siblings like 'get_document' (retrieval), 'load_document' (loading), and 'list_sections' (listing), there's no indication whether this tool should be used instead of or in conjunction with them. The description lacks any 'when-to-use' or 'when-not-to-use' context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_sectionC
Delete a section by ID or heading.
The document will be saved after the operation if successful and auto_save is True.
| Name | Required | Description | Default |
|---|---|---|---|
| document_path | Yes | ||
| section_id | No | ||
| heading | No | ||
| auto_save | No | ||
| backup | No | ||
| validation_level | No | NORMAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that the document will be saved if auto_save is True, which adds some context, but fails to disclose critical behavioral traits such as whether the deletion is permanent, what happens to nested sections, error conditions, or the impact of the backup and validation_level parameters. This leaves significant gaps for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences that are front-loaded with the core action. There is no wasted text, but it could be slightly more structured by explicitly listing key parameters or behaviors in a bullet-point format for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a destructive operation with 6 parameters, 0% schema description coverage, no annotations, and an output schema (which reduces the need to describe return values), the description is incomplete. It lacks details on parameter semantics, behavioral risks, and usage context, making it insufficient for safe and effective tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. It only mentions 'ID or heading' and 'auto_save', covering 2 out of 6 parameters (document_path, section_id, heading, auto_save, backup, validation_level). This partial coverage is inadequate, as key parameters like backup and validation_level are left unexplained, failing to add sufficient meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the resource 'a section by ID or heading', making the purpose unambiguous. However, it doesn't explicitly distinguish this tool from sibling tools like 'move_section' or 'update_section' in terms of destructive nature, which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'move_section' or 'update_section', nor does it mention prerequisites such as needing the document to be loaded first. It only mentions the auto_save condition, which is insufficient for comprehensive usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentB
Get the complete document content and structure.
Args:
document_path: Path to the Markdown file
validation_level: Validation strictness - "STRICT", "NORMAL", or "PERMISSIVE"
| Name | Required | Description | Default |
|---|---|---|---|
| document_path | Yes | ||
| validation_level | No | NORMAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'complete document content and structure' and validation levels, but lacks details on permissions, rate limits, error handling, or what 'complete' entails (e.g., metadata, formatting). This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with the core purpose stated first in a clear sentence, followed by parameter details in a structured format. Every sentence earns its place without redundancy or fluff, making it highly efficient for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is minimally adequate. It covers the basic purpose and parameters but lacks behavioral context and usage guidelines. The presence of an output schema means return values needn't be explained, but overall completeness is limited.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining 'document_path' as 'Path to the Markdown file' and 'validation_level' with its allowed values and default, which clarifies beyond the bare schema. However, it doesn't detail path format or validation effects, preventing a perfect score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with the verb 'Get' and resource 'complete document content and structure', making it specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_section' or 'load_document', which limits its score to 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as 'get_section' for partial content or 'load_document' which might have different semantics. Without any context or exclusions, the agent must infer usage from the name alone, which is insufficient for optimal tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sectionB
Get a specific section by ID.
Args:
document_path: Path to the Markdown file
section_id: The section ID to retrieve
validation_level: Validation strictness - "STRICT", "NORMAL", or "PERMISSIVE"
| Name | Required | Description | Default |
|---|---|---|---|
| document_path | Yes | ||
| section_id | Yes | ||
| validation_level | No | NORMAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic action ('Get a specific section by ID') without mentioning any behavioral traits such as error handling, permissions required, rate limits, or what happens if the section doesn't exist. For a tool with no annotations, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by a structured 'Args' section. There's no wasted text, and the information is organized efficiently. A 5 would require even more conciseness or bullet-point formatting, but this is very good.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there's an output schema (which handles return values), the description doesn't need to explain outputs. However, with 3 parameters, no annotations, and multiple sibling tools, the description is incomplete: it lacks usage guidelines and behavioral context. It's minimally adequate but has clear gaps, especially for a tool in a complex environment with many alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful semantics for all three parameters: it explains that 'document_path' is a 'Path to the Markdown file,' 'section_id' is 'The section ID to retrieve,' and 'validation_level' specifies 'Validation strictness' with enum values. Since schema description coverage is 0% (no schema descriptions), this fully compensates by providing clear parameter meanings beyond just the schema's titles and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a specific section by ID.' This is a specific verb+resource combination (get + section). However, it doesn't explicitly distinguish this tool from its siblings like 'get_document' or 'list_sections,' which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. There are multiple sibling tools for document/section operations (e.g., get_document, list_sections, update_section), but the description doesn't mention any of them or specify contexts where get_section is preferred. This leaves the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_sectionC
Insert a new section at a specified location.
The document will be saved after the operation if successful and auto_save is True.
| Name | Required | Description | Default |
|---|---|---|---|
| document_path | Yes | ||
| heading | Yes | ||
| content | Yes | ||
| position | Yes | ||
| auto_save | No | ||
| backup | No | ||
| validation_level | No | NORMAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the auto-save behavior, which is useful, but fails to cover critical aspects like required permissions, error handling, what happens if the position is invalid, or whether the operation is reversible. For a mutation tool with 7 parameters, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the main action, consisting of two sentences. However, the second sentence about auto-save could be more integrated, and overall it lacks the depth needed for a tool with 7 parameters, making it somewhat under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, no annotations, but with an output schema), the description is incomplete. It doesn't address key contextual elements like what a 'section' entails, how 'position' is determined, or the implications of 'validation_level'. The presence of an output schema mitigates the need to describe return values, but other gaps remain significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. It only references 'auto_save' indirectly, without detailing what it does or how it interacts with other parameters like 'backup' or 'validation_level'. The core parameters (document_path, heading, content, position) are not explained at all, leaving their purpose and format unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Insert a new section') and the target ('at a specified location'), which distinguishes it from sibling tools like 'delete_section' or 'update_section'. However, it doesn't specify what kind of document or system it operates on, leaving some ambiguity about the resource context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions that the document is saved if 'auto_save is True', which provides some operational context, but it doesn't explain when to use this tool versus alternatives like 'update_section' or 'move_section'. No explicit guidance on prerequisites or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sectionsC
List all sections in the document.
Args:
document_path: Path to the Markdown file
validation_level: Validation strictness - "STRICT", "NORMAL", or "PERMISSIVE"
| Name | Required | Description | Default |
|---|---|---|---|
| document_path | Yes | ||
| validation_level | No | NORMAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'validation_level' but doesn't explain what validation entails (e.g., checking document format, handling errors) or the tool's behavior (e.g., returns a list, potential errors). This leaves significant gaps in understanding how the tool operates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with a clear purpose statement followed by parameter explanations in a structured 'Args' section. It avoids unnecessary fluff, though the formatting with extra whitespace slightly reduces efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations) and the presence of an output schema (which handles return values), the description is minimally adequate. It covers the basics but lacks details on behavioral traits, usage context, and full parameter semantics, making it incomplete for optimal agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining 'document_path' as 'Path to the Markdown file' and 'validation_level' with its possible values, which clarifies beyond the bare schema. However, it doesn't detail the format of 'document_path' (e.g., relative/absolute) or the effects of different validation levels, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'all sections in the document', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_section' or 'analyze_document', which would require a more detailed comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'get_section' (for a single section) or 'analyze_document' (for broader analysis). It lacks context about prerequisites, such as whether the document must be loaded first, or exclusions for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_documentB
Load and analyze a Markdown document from a file path.
Args:
document_path: Path to the Markdown file (supports absolute, relative, and ~ expansion)
validation_level: Validation strictness - "STRICT", "NORMAL", or "PERMISSIVE"
| Name | Required | Description | Default |
|---|---|---|---|
| document_path | Yes | ||
| validation_level | No | NORMAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool loads and analyzes a document, implying read-only operations, but doesn't disclose critical behaviors such as error handling (e.g., what happens if the file doesn't exist), performance aspects (e.g., file size limits), or analysis specifics (e.g., what 'analyze' entails). This leaves significant gaps in understanding how the tool behaves beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose ('Load and analyze a Markdown document from a file path') followed by parameter details in a structured 'Args' section. Every sentence adds value without redundancy, making it efficient and easy to parse for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is partially complete. It covers the purpose and parameters well, but lacks behavioral context (e.g., error handling, analysis output) and usage guidelines. The presence of an output schema means return values are documented elsewhere, so the description doesn't need to explain them, but overall gaps in transparency and guidelines reduce completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful semantics beyond the input schema, which has 0% description coverage. It explains that 'document_path' supports 'absolute, relative, and ~ expansion', clarifying usage beyond the schema's generic 'string' type, and defines 'validation_level' options ('STRICT', 'NORMAL', 'PERMISSIVE') with a default implied by 'NORMAL' in the schema. This compensates well for the low schema coverage, though it doesn't detail what each validation level means.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('load and analyze') and resource ('Markdown document from a file path'), distinguishing it from siblings like 'get_document' (which likely retrieves without analysis) or 'analyze_document' (which may analyze without loading). However, it doesn't explicitly differentiate from 'get_document' in terms of loading vs. retrieving, 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.
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 like 'get_document' or 'analyze_document'. It mentions loading and analyzing, but doesn't specify prerequisites (e.g., file existence), exclusions, or comparative contexts with sibling tools, leaving the agent to infer usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_sectionC
Move a section to a different position.
The document will be saved after the operation if successful and auto_save is True.
| Name | Required | Description | Default |
|---|---|---|---|
| document_path | Yes | ||
| section_id | Yes | ||
| target_position | Yes | ||
| auto_save | No | ||
| backup | No | ||
| validation_level | No | NORMAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that the document is saved if successful and auto_save is True, which hints at mutation and persistence behavior. However, it fails to address critical aspects like permissions needed, whether the operation is reversible, error handling, or what 'successful' entails, leaving significant gaps for a tool with 6 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core action in the first sentence, followed by a conditional detail. It avoids unnecessary verbosity, but the second sentence could be integrated more smoothly for better flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, mutation operation) and the presence of an output schema, the description is incomplete. It lacks details on parameter semantics, behavioral traits like error handling or side effects, and does not leverage the output schema to explain return values. For a tool with no annotations and low schema coverage, this is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only references 'auto_save' implicitly, without explaining other parameters like 'document_path', 'section_id', 'target_position', 'backup', or 'validation_level'. This adds minimal value beyond the schema, failing to clarify parameter meanings or usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Move a section') and the resource ('section'), specifying the operation's goal ('to a different position'). It distinguishes from siblings like 'delete_section' or 'update_section' by focusing on repositioning, but does not explicitly contrast with 'insert_section' or 'list_sections' in terms of scope or function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'update_section' for content changes or 'insert_section' for adding new sections. It mentions auto-save behavior but lacks context on prerequisites, error conditions, or typical use cases relative to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_documentA
Save the document (mainly for validation purposes since auto_save handles most cases).
Args:
document_path: Path to the source Markdown file
target_path: Path to save to (if different from source)
backup: Whether to create a backup before saving
validation_level: Validation strictness - "STRICT", "NORMAL", or "PERMISSIVE"
| Name | Required | Description | Default |
|---|---|---|---|
| document_path | Yes | ||
| target_path | No | ||
| backup | No | ||
| validation_level | No | NORMAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 mentions validation purposes and backup behavior, which adds useful context. However, it lacks details on permissions needed, error handling, rate limits, or what happens if validation fails. The description doesn't contradict any annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: the first sentence states the purpose and context, followed by a clear Args section. Every sentence earns its place with no wasted words. It's appropriately sized for a 4-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown here), the description doesn't need to explain return values. It covers the purpose, usage context, and parameter semantics adequately. However, as a mutation tool with no annotations, it could benefit from more behavioral details like error conditions or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides clear explanations for all 4 parameters: 'document_path' (source), 'target_path' (save destination), 'backup' (create backup), and 'validation_level' (strictness with enum values). This adds significant meaning beyond the bare schema, though it could elaborate on default behaviors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Save') and resource ('the document'), and specifies it's 'mainly for validation purposes since auto_save handles most cases.' This distinguishes it from simple save operations. However, it doesn't explicitly differentiate from sibling tools like 'update_section' or 'move_section' in terms of scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: 'mainly for validation purposes since auto_save handles most cases.' This gives guidance on when to use this tool (for validation) versus relying on auto-save. However, it doesn't explicitly mention alternatives among sibling tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sectionC
Update the content of an existing section.
The document will be saved after the operation if successful and auto_save is True.
| Name | Required | Description | Default |
|---|---|---|---|
| document_path | Yes | ||
| section_id | Yes | ||
| content | Yes | ||
| auto_save | No | ||
| backup | No | ||
| validation_level | No | NORMAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that 'The document will be saved after the operation if successful and auto_save is True', which adds some context about saving behavior. However, it fails to disclose critical traits like whether this is a destructive mutation, what permissions are required, error handling, or rate limits, leaving significant gaps for a tool that modifies content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences that are front-loaded: the first states the core purpose, and the second adds behavioral context. There is no wasted text, and it avoids unnecessary elaboration, making it efficient and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a mutation tool with 6 parameters, 0% schema coverage, no annotations, and sibling tools, the description is incomplete. It lacks details on parameter usage, error conditions, permissions, and how it differs from alternatives. While an output schema exists (which might cover return values), the description does not provide enough context for safe and effective tool invocation in this environment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. It only mentions 'auto_save' implicitly in the context of saving behavior, but does not describe the purpose or usage of other parameters like 'document_path', 'section_id', 'content', 'backup', or 'validation_level'. This leaves most parameters undocumented, failing to add meaningful semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update' and the resource 'content of an existing section', making the purpose specific and understandable. It distinguishes from siblings like 'insert_section' (create new) and 'delete_section' (remove), though it doesn't explicitly name these alternatives. The purpose is not vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'insert_section' or 'move_section', nor does it mention prerequisites such as needing an existing document or section. It only implies usage through the phrase 'existing section', but lacks explicit context or exclusions for tool selection.
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.
10 tool updates
- First observed
analyze_document - First observed
delete_section - First observed
get_document - First observed
get_section - First observed
insert_section - First observed
list_sections - First observed
load_document - First observed
move_section - First observed
save_document - First observed
update_section
TDQS
Most tools have distinct purposes targeting different document operations, but there is some overlap between get_document and load_document where both retrieve document content. The descriptions clarify that load_document includes analysis while get_document focuses on content/structure, but an agent might initially confuse them.
All tools follow a consistent verb_noun pattern with snake_case naming (e.g., analyze_document, delete_section, get_document). The verbs are clear and appropriate for the actions, making the tool set predictable and readable.
With 10 tools, this is well-scoped for a Markdown editor server, covering core operations like loading, analyzing, reading, writing, and manipulating sections. Each tool has a clear role without unnecessary duplication, fitting typical server sizes.
The tool set provides comprehensive coverage for document management, including CRUD operations for sections (list, get, insert, update, delete, move) and full document handling (load, get, analyze, save). There are no obvious gaps for the domain of editing and analyzing Markdown files.
Maintenance
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
Create, edit, review, and explicitly publish Live or Snapshot Markdown Documents in mdedit.ai.
MCP-native collaborative markdown editor with real-time AI document editing
Markdown workspace for AI agents: read, write, organize, and share markdown documents.
Instant markdown sharing. Create, manage, and share documents with password protection.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables interaction with Tiptap collaborative document services through comprehensive document management, real-time statistics, markdown conversion, and batch operations. Supports creating, updating, searching, and managing collaborative documents with health monitoring and semantic search capabilities.1411MIT
- AlicenseCqualityNot gradedmaintenanceProvides semantic editing tools for Markdown files, allowing structured manipulation of document elements through hierarchical paths rather than raw text operations. Supports navigation, search, content replacement, element insertion/deletion, undo functionality, and YAML frontmatter management.152-
- AlicenseAqualityAmaintenanceProvides a single-writer MCP server for a governance-grade knowledge base of markdown documents with version control and query capabilities.923Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables sharing Markdown documents for collaborative review with inline annotations and structured change requests.14MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/quantalogic/quantalogic_markdown_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server