# 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](https://pypi.org/project/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 path
- `get_file_info` - Get information about the currently loaded file
- `test_path_resolution` - Test and verify path resolution for different path formats
**Document Editing:**
- `insert_section` - Insert new sections at specified positions
- `delete_section` - Remove sections by ID or heading
- `update_section` - Modify section content while preserving structure
- `move_section` - Reorder sections within the document
- `get_section` - Retrieve individual section content and metadata
- `list_sections` - Get an overview of all document sections
- `get_document` - Export the complete Markdown document
- `undo` - Rollback the last operation
📊 **MCP Resources**
- `document://current` - Real-time access to the current document
- `document://history` - Transaction history for undo/redo operations
- `document://metadata` - Document metadata (title, author, timestamps)
🎯 **MCP Prompts**
- `summarize_section` - Generate section summaries
- `rewrite_section` - Improve section clarity and conciseness
- `generate_outline` - Create document outlines
## Installation
### Prerequisites
- Python 3.11 or higher
- [uv](https://docs.astral.sh/uv/) (recommended) or pip
### Quick Install from PyPI (Recommended)
The package is available on PyPI! Install the latest version (`0.1.2`) directly:
```bash
# Install with uv (recommended)
uv add quantalogic-markdown-mcp@0.1.2
# Or install with pip
pip install quantalogic-markdown-mcp==0.1.2
```
### Run Directly with uvx (No Installation Required)
You can run the MCP server directly without installing it locally:
```bash
# Run directly with uvx
uvx --from quantalogic-markdown-mcp python -m quantalogic_markdown_mcp.mcp_server
```
### Development Installation
For development or to contribute to the project:
```bash
# 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:
```bash
# 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_server
```
#### Method 2: Development Installation
If you cloned the repository:
```bash
# Using uv
uv run python -m quantalogic_markdown_mcp.mcp_server
# Or with regular Python
python -m quantalogic_markdown_mcp.mcp_server
```
#### Method 3: Using the Development Script
For development from source:
```bash
# Run the development server (dev mode)
python dev-scripts/run_mcp_server.py
```
---
### Connecting 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:**
```json
{
"mcpServers": {
"markdown-editor": {
"command": "python",
"args": [
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}
```
**Windows:**
```json
{
"mcpServers": {
"markdown-editor": {
"command": "python.exe",
"args": [
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}
```
#### Option 2: Using uvx (No Installation Required)
**macOS/Linux:**
```json
{
"mcpServers": {
"markdown-editor": {
"command": "uvx",
"args": [
"--from",
"quantalogic-markdown-mcp",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}
```
**Windows:**
```json
{
"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:**
```json
{
"mcpServers": {
"markdown-editor": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/quantalogic-markdown-edit-mcp",
"run",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}
```
**Windows:**
```json
{
"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.json`
- **Windows:** `%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:
```json
{
"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:
```json
{
"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:
```json
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "python3",
"args": [
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}
```
**For Windows (adjust command names):**
```json
{
"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:
1. Open Command Palette (`Ctrl+Shift+P` / `Cmd+Shift+P`)
2. Run `MCP: Open User Configuration`
3. Add the server configuration:
**Option 1: Using PyPI Installation**
```json
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "python",
"args": [
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}
```
**Option 2: Using uvx**
```json
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"quantalogic-markdown-mcp",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
]
}
}
}
```
**Option 3: Development Installation**
```json
{
"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`:
```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:**
```bash
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:
```text
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%7D
```
#### Using the MCP Server in VSCode
Once configured:
1. Open the Chat view (`Ctrl+Cmd+I` / `Ctrl+Alt+I`)
2. Select **Agent mode** from the dropdown
3. Click the **Tools** button to see available MCP tools
4. Enable the markdown-editor tools you want to use
5. 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 Servers`
- Manage servers: Go to Extensions view (`Ctrl+Shift+X`) → MCP SERVERS section
- View 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`:
```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.md`
- **Relative paths**: `./documents/file.md` or `documents/file.md`
- **Home directory expansion**: `~/Documents/file.md`
- **Environment variables**: `$HOME/documents/file.md`
### File Operations Examples
```text
"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:
```text
"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
```text
"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:
```python
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 text
- `content`: 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 identifier
- `content`: 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 identifier
- `new_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:
```bash
# 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
```bash
# 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.py
```
### Code Quality
```bash
# Format code
uv run black src tests
# Lint code
uv run ruff check src tests
# Type checking
uv run mypy src
```
### Development Server
For development, you can run the server with additional debugging:
```python
# 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:**
1. Check that the path in `claude_desktop_config.json` is absolute
2. Verify that `uv` is in your PATH (`which uv` on macOS/Linux, `where uv` on Windows)
3. Restart Claude Desktop after configuration changes
4. Check Claude Desktop logs for error messages
**Server not appearing in VSCode:**
1. Ensure VSCode 1.102 or later is installed
2. Verify GitHub Copilot extension is installed and active
3. Check that MCP support is enabled in your organization settings
4. Confirm `.vscode/mcp.json` file exists in workspace root (for workspace config)
5. Use `MCP: List Servers` command to see if server is registered
6. Check Extensions view → MCP SERVERS section for server status
7. Verify `uv` is in your PATH and accessible from VSCode's integrated terminal
**VSCode MCP server not starting:**
1. **Check the MCP server output**: Right-click server → Show Output
2. **For development setup**: Ensure you're using the correct configuration:
```json
{
"servers": {
"markdown-editor": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"${workspaceFolder}",
"run",
"--",
"python",
"-m",
"quantalogic_markdown_mcp.mcp_server"
],
"cwd": "${workspaceFolder}",
"env": {
"PYTHONPATH": "${workspaceFolder}/src"
}
}
}
}
```
3. **Verify the command path and arguments** in your configuration
4. **Test the command manually** in a terminal from the correct working directory:
```bash
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')"
```
5. **Ensure all required dependencies are installed**: `uv sync`
6. **Check file permissions** on the server executable
7. **For dev containers**, verify the container has access to required tools
**VSCode agent mode not showing MCP tools:**
1. Confirm you're in Agent mode (not Ask mode) in the Chat view
2. Click the Tools button to enable/disable specific MCP tools
3. Check if you have more than 128 tools enabled (VSCode limit)
4. Verify the MCP server is running (green indicator in Extensions view)
5. Try restarting the MCP server: Right-click → Restart
**Tool execution errors:**
1. Ensure the document is initialized (the server auto-initializes if needed)
2. Check section IDs are valid using `list_sections` first
3. Verify that section references haven't changed after edits
**Performance issues:**
1. Large documents may take time to process
2. Consider using section-level operations instead of full document operations
3. Monitor transaction history size
### Debug Mode
Enable debug logging by setting:
```bash
export PYTHONPATH=$PWD/src
export MCP_DEBUG=1
python -m quantalogic_markdown_mcp.mcp_server
```
### Logging
The server uses Python's logging module and writes to stderr to avoid interfering with MCP's stdio transport. To see debug logs:
```bash
# Run with debug logging
PYTHONPATH=$PWD/src python -m quantalogic_markdown_mcp.mcp_server 2>debug.log
```
## Architecture
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:
1. Fork the repository
2. Create a feature branch
3. Make your changes with tests
4. Ensure all tests pass and code is formatted
5. Submit a pull request
### Development Setup
```bash
# 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 install
```
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Related Projects
- [Model Context Protocol](https://modelcontextprotocol.io/) - The protocol specification
- [FastMCP](https://gofastmcp.com/) - Python framework for building MCP servers
- [Claude Desktop](https://claude.ai/download) - AI assistant with MCP support
---
**Need help?** Open an issue on [GitHub](https://github.com/raphaelmansuy/quantalogic-markdown-edit-mcp/issues) or check the [documentation](docs/).
Raw data
{
"_id": null,
"home_page": null,
"name": "quantalogic-markdown-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "ast, commonmark, markdown, parser",
"author": null,
"author_email": "Raphael Mansuy <raphael.mansuy@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/0f/a1/994b91816c44271240f726a5a65a8667afa47b38b00a5575b04a91cfe99b/quantalogic_markdown_mcp-0.2.2.tar.gz",
"platform": null,
"description": "# SafeMarkdownEditor MCP Server\n\nA Model Context Protocol (MCP) server that provides powerful Markdown document editing capabilities with thread-safe operations, atomic transactions, and comprehensive validation.\n\n\n**\ud83d\udce6 Available on PyPI**: [quantalogic-markdown-mcp](https://pypi.org/project/quantalogic-markdown-mcp/)\n\n**\ud83d\ude80 Quick Start**: Install with `uv add quantalogic-markdown-mcp` or `pip install quantalogic-markdown-mcp`\n\n**Current version:** `0.1.2`\n\n## Features\n\n\u2728 **Comprehensive Markdown Editing**\n\n- Insert, update, delete, and move sections\n- Thread-safe operations with atomic transactions\n- Immutable section references that remain stable across edits\n- Comprehensive validation with configurable strictness levels\n\n\ud83d\udd27 **MCP Tools Available**\n\n**File Operations:**\n\n- `load_document` - Load a Markdown document from a file path (supports absolute, relative, and ~ expansion)\n- `save_document` - Save the current document to a file path\n- `get_file_info` - Get information about the currently loaded file\n- `test_path_resolution` - Test and verify path resolution for different path formats\n\n**Document Editing:**\n\n- `insert_section` - Insert new sections at specified positions\n- `delete_section` - Remove sections by ID or heading\n- `update_section` - Modify section content while preserving structure\n- `move_section` - Reorder sections within the document\n- `get_section` - Retrieve individual section content and metadata\n- `list_sections` - Get an overview of all document sections\n- `get_document` - Export the complete Markdown document\n- `undo` - Rollback the last operation\n\n\ud83d\udcca **MCP Resources**\n\n- `document://current` - Real-time access to the current document\n- `document://history` - Transaction history for undo/redo operations\n- `document://metadata` - Document metadata (title, author, timestamps)\n\n\ud83c\udfaf **MCP Prompts**\n\n- `summarize_section` - Generate section summaries\n- `rewrite_section` - Improve section clarity and conciseness\n- `generate_outline` - Create document outlines\n\n## Installation\n\n### Prerequisites\n\n- Python 3.11 or higher\n- [uv](https://docs.astral.sh/uv/) (recommended) or pip\n\n\n### Quick Install from PyPI (Recommended)\n\nThe package is available on PyPI! Install the latest version (`0.1.2`) directly:\n\n```bash\n# Install with uv (recommended)\nuv add quantalogic-markdown-mcp@0.1.2\n\n# Or install with pip\npip install quantalogic-markdown-mcp==0.1.2\n```\n\n### Run Directly with uvx (No Installation Required)\n\nYou can run the MCP server directly without installing it locally:\n\n```bash\n# Run directly with uvx\nuvx --from quantalogic-markdown-mcp python -m quantalogic_markdown_mcp.mcp_server\n```\n\n### Development Installation\n\nFor development or to contribute to the project:\n\n```bash\n# Clone the repository\ngit clone https://github.com/raphaelmansuy/quantalogic-markdown-edit-mcp.git\ncd quantalogic-markdown-edit-mcp\n\n# Install with development dependencies\nuv sync --group dev\n\n# Install in development mode\nuv pip install -e .\n```\n\n## Quick Start\n\n### Running the Server\n\n\n#### Method 1: Direct Execution (PyPI Installation)\n\nIf you installed from PyPI:\n\n```bash\n# Run the MCP server directly (ensure version 0.1.2 is installed)\npython -m quantalogic_markdown_mcp.mcp_server\n\n# Or with uvx (no installation required)\nuvx --from quantalogic-markdown-mcp python -m quantalogic_markdown_mcp.mcp_server\n```\n\n\n#### Method 2: Development Installation\n\nIf you cloned the repository:\n\n```bash\n# Using uv\nuv run python -m quantalogic_markdown_mcp.mcp_server\n\n# Or with regular Python\npython -m quantalogic_markdown_mcp.mcp_server\n```\n\n\n#### Method 3: Using the Development Script\n\nFor development from source:\n\n```bash\n# Run the development server (dev mode)\npython dev-scripts/run_mcp_server.py\n```\n\n\n---\n\n### Connecting to Claude Desktop\n\nTo use this MCP server with Claude Desktop, add the following configuration to your `claude_desktop_config.json`:\n\n#### Option 1: Using PyPI Installation (Recommended)\n\n**macOS/Linux:**\n\n```json\n{\n \"mcpServers\": {\n \"markdown-editor\": {\n \"command\": \"python\",\n \"args\": [\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n**Windows:**\n\n```json\n{\n \"mcpServers\": {\n \"markdown-editor\": {\n \"command\": \"python.exe\",\n \"args\": [\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n#### Option 2: Using uvx (No Installation Required)\n\n**macOS/Linux:**\n\n```json\n{\n \"mcpServers\": {\n \"markdown-editor\": {\n \"command\": \"uvx\",\n \"args\": [\n \"--from\",\n \"quantalogic-markdown-mcp\",\n \"python\",\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n**Windows:**\n\n```json\n{\n \"mcpServers\": {\n \"markdown-editor\": {\n \"command\": \"uvx.exe\",\n \"args\": [\n \"--from\",\n \"quantalogic-markdown-mcp\",\n \"python\",\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n#### Option 3: Development Installation\n\nFor development from source:\n\n**macOS/Linux:**\n\n```json\n{\n \"mcpServers\": {\n \"markdown-editor\": {\n \"command\": \"uv\",\n \"args\": [\n \"--directory\",\n \"/ABSOLUTE/PATH/TO/quantalogic-markdown-edit-mcp\",\n \"run\",\n \"python\",\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n**Windows:**\n\n```json\n{\n \"mcpServers\": {\n \"markdown-editor\": {\n \"command\": \"uv.exe\",\n \"args\": [\n \"--directory\",\n \"C:\\\\ABSOLUTE\\\\PATH\\\\TO\\\\quantalogic-markdown-edit-mcp\",\n \"run\",\n \"python\",\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n**Configuration file locations:**\n\n- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\nAfter adding the configuration, restart Claude Desktop.\n\n### Connecting to VSCode\n\nTo use this MCP server with VSCode and GitHub Copilot, you have several configuration options depending on your needs.\n\n**Prerequisites:**\n\n- VSCode 1.102 or later\n- GitHub Copilot extension installed and configured\n- MCP support enabled in your organization (if applicable)\n\n#### Workspace Configuration (Recommended for Projects)\n\nCreate a `.vscode/mcp.json` file in your workspace root to share the configuration with your team:\n\n**Option 1: Development Installation (Recommended)**\n\nFor this project, use the development setup since you're working with the source code:\n\n```json\n{\n \"servers\": {\n \"markdown-editor\": {\n \"type\": \"stdio\",\n \"command\": \"uv\",\n \"args\": [\n \"--directory\",\n \"${workspaceFolder}\",\n \"run\",\n \"python\",\n \"-c\",\n \"import sys; sys.path.insert(0, 'src'); from quantalogic_markdown_mcp.mcp_server import mcp; mcp.run()\"\n ],\n \"cwd\": \"${workspaceFolder}\"\n }\n }\n}\n```\n\n**Option 2: Alternative Development Approach**\n\nUsing environment variables for Python path:\n\n```json\n{\n \"servers\": {\n \"markdown-editor\": {\n \"type\": \"stdio\",\n \"command\": \"uv\",\n \"args\": [\n \"--directory\",\n \"${workspaceFolder}\",\n \"run\",\n \"--\",\n \"python\",\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ],\n \"cwd\": \"${workspaceFolder}\",\n \"env\": {\n \"PYTHONPATH\": \"${workspaceFolder}/src\"\n }\n }\n }\n}\n```\n\n**Option 3: Using PyPI Installation (If Installed Globally)**\n\nOnly use this if you have installed the package globally:\n\n```json\n{\n \"servers\": {\n \"markdown-editor\": {\n \"type\": \"stdio\",\n \"command\": \"python3\",\n \"args\": [\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n**For Windows (adjust command names):**\n\n```json\n{\n \"servers\": {\n \"markdown-editor\": {\n \"type\": \"stdio\", \n \"command\": \"python.exe\",\n \"args\": [\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n#### User Configuration (Global Settings)\n\nFor system-wide access across all workspaces:\n\n1. Open Command Palette (`Ctrl+Shift+P` / `Cmd+Shift+P`)\n2. Run `MCP: Open User Configuration`\n3. Add the server configuration:\n\n**Option 1: Using PyPI Installation**\n\n```json\n{\n \"servers\": {\n \"markdown-editor\": {\n \"type\": \"stdio\",\n \"command\": \"python\",\n \"args\": [\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n**Option 2: Using uvx**\n\n```json\n{\n \"servers\": {\n \"markdown-editor\": {\n \"type\": \"stdio\",\n \"command\": \"uvx\",\n \"args\": [\n \"--from\",\n \"quantalogic-markdown-mcp\",\n \"python\",\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n**Option 3: Development Installation**\n\n```json\n{\n \"servers\": {\n \"markdown-editor\": {\n \"type\": \"stdio\",\n \"command\": \"uv\",\n \"args\": [\n \"--directory\",\n \"/ABSOLUTE/PATH/TO/quantalogic-markdown-edit-mcp\",\n \"run\",\n \"python\",\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n}\n```\n\n#### Development Container Support\n\nFor containerized development environments, add to your `devcontainer.json`:\n\n```json\n{\n \"image\": \"mcr.microsoft.com/devcontainers/python:latest\",\n \"customizations\": {\n \"vscode\": {\n \"mcp\": {\n \"servers\": {\n \"markdown-editor\": {\n \"type\": \"stdio\",\n \"command\": \"uv\",\n \"args\": [\n \"--directory\", \n \"${containerWorkspaceFolder}\",\n \"run\",\n \"python\",\n \"-m\", \n \"quantalogic_markdown_mcp.mcp_server\"\n ]\n }\n }\n }\n }\n }\n}\n```\n\n#### Alternative Installation Methods\n\n**Command Line Installation:**\n\n```bash\ncode --add-mcp '{\"name\":\"markdown-editor\",\"command\":\"uv\",\"args\":[\"--directory\",\"/ABSOLUTE/PATH/TO/quantalogic-markdown-edit-mcp\",\"run\",\"python\",\"-m\",\"quantalogic_markdown_mcp.mcp_server\"]}'\n```\n\n**URL Installation:**\nYou can create installation links using the VSCode URL handler format:\n\n```text\nvscode: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%7D\n```\n\n#### Using the MCP Server in VSCode\n\nOnce configured:\n\n1. Open the Chat view (`Ctrl+Cmd+I` / `Ctrl+Alt+I`)\n2. Select **Agent mode** from the dropdown\n3. Click the **Tools** button to see available MCP tools\n4. Enable the markdown-editor tools you want to use\n5. Start chatting with commands like:\n - \"Load the README.md file and show me all sections\"\n - \"Create a new section called 'Installation' with setup instructions\"\n - \"Move the 'Features' section to be the first section\"\n\n**Managing MCP Servers:**\n\n- View installed servers: `MCP: List Servers`\n- Manage servers: Go to Extensions view (`Ctrl+Shift+X`) \u2192 MCP SERVERS section\n- View server logs: Right-click server \u2192 Show Output\n- Start/Stop servers: Right-click server \u2192 Start/Stop/Restart\n\n**Development and Debugging:**\n\nFor development, you can enable watch mode and debugging in your `.vscode/mcp.json`:\n\n```json\n{\n \"servers\": {\n \"markdown-editor\": {\n \"type\": \"stdio\",\n \"command\": \"uv\",\n \"args\": [\n \"--directory\",\n \"${workspaceFolder}\",\n \"run\", \n \"python\",\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ],\n \"dev\": {\n \"watch\": \"src/**/*.py\",\n \"debug\": { \"type\": \"python\" }\n }\n }\n }\n}\n```\n\n## Working with Files\n\nThe MCP server supports loading and saving Markdown documents from various file path formats:\n\n### Supported Path Formats\n\n- **Absolute paths**: `/Users/username/documents/file.md`\n- **Relative paths**: `./documents/file.md` or `documents/file.md`\n- **Home directory expansion**: `~/Documents/file.md`\n- **Environment variables**: `$HOME/documents/file.md`\n\n### File Operations Examples\n\n```text\n\"Load the document from ~/Documents/my-notes.md\"\n\"Load the file at ./project-docs/README.md\"\n\"Save this document to /Users/me/Desktop/backup.md\"\n\"Get information about the current file\"\n\"Test if the path ~/Documents/draft.md resolves correctly\"\n```\n\n## Usage Examples\n\n### Basic Document Operations\n\nOnce connected to Claude Desktop (or another MCP client), you can use natural language commands:\n\n```text\n\"Load the document from ~/Documents/my-project.md\"\n\"Create a new section called 'Getting Started' with some basic instructions\"\n\"Move the 'Installation' section to be the second section\"\n\"Update the 'Features' section to include the new functionality\"\n\"Delete the 'Deprecated' section\"\n\"Save the document to ./backups/project-backup.md\"\n\"Show me all the sections in this document\"\n\"Get the current document as Markdown\"\n```\n\n### Working with Different Path Types\n\n```text\n\"Load /Users/me/Documents/important-notes.md\"\n\"Load the file at ./project-docs/specification.md\"\n\"Load ~/Desktop/meeting-notes.md\"\n\"Test if the path $HOME/Documents/draft.md exists\"\n\"Save to /tmp/quick-backup.md with backup enabled\"\n```\n\n### Programmatic Usage\n\nYou can also use the server programmatically with FastMCP clients:\n\n```python\nimport asyncio\nfrom fastmcp import Client\n\nasync def demo():\n # Connect to the server (adjust command based on your installation)\n \n # Option 1: If installed from PyPI\n async with Client(\"python -m quantalogic_markdown_mcp.mcp_server\") as client:\n # ... rest of the code remains the same\n \n # Option 2: If using development installation\n # async with Client(\"src/quantalogic_markdown_mcp/mcp_server.py\") as client:\n \n # List available tools\n tools = await client.list_tools()\n print(f\"Available tools: {[tool.name for tool in tools]}\")\n \n # Load a document from file\n result = await client.call_tool(\"load_document\", {\n \"file_path\": \"~/Documents/my-notes.md\",\n \"validation_level\": \"NORMAL\"\n })\n print(f\"Load result: {result.content}\")\n \n # Get file information\n file_info = await client.call_tool(\"get_file_info\", {})\n print(f\"File info: {file_info.content}\")\n \n # Test path resolution\n path_test = await client.call_tool(\"test_path_resolution\", {\n \"path\": \"~/Documents/test.md\"\n })\n print(f\"Path resolution: {path_test.content}\")\n \n # Insert a new section\n result = await client.call_tool(\"insert_section\", {\n \"heading\": \"Introduction\",\n \"content\": \"Welcome to our documentation!\",\n \"position\": 0\n })\n print(f\"Insert result: {result.content}\")\n \n # List all sections\n sections = await client.call_tool(\"list_sections\", {})\n print(f\"Document sections: {sections.content}\")\n \n # Save the modified document\n save_result = await client.call_tool(\"save_document\", {\n \"file_path\": \"./modified-notes.md\",\n \"backup\": True\n })\n print(f\"Save result: {save_result.content}\")\n\n# Run the demo\nasyncio.run(demo())\n```\n\n## Tool Reference\n\n### File Operation Tools\n\n### `load_document(file_path: str, validation_level: str = \"NORMAL\")`\n\nLoad a Markdown document from a file path with support for various path formats.\n\n**Parameters:**\n\n- `file_path`: Path to the Markdown file (supports absolute, relative, ~, and $ENV expansion)\n- `validation_level`: Validation strictness - \"STRICT\", \"NORMAL\", or \"PERMISSIVE\"\n\n**Returns:** Success status with file information and document statistics\n\n**Examples:**\n\n- `load_document(\"/Users/me/notes.md\")`\n- `load_document(\"./docs/README.md\")`\n- `load_document(\"~/Documents/project.md\")`\n\n### `save_document(file_path?: str, backup: bool = True)`\n\nSave the current document to a file path.\n\n**Parameters:**\n\n- `file_path`: Target path to save to (optional, uses current file if not provided)\n- `backup`: Whether to create a .bak backup of existing files\n\n**Returns:** Success status with save location information\n\n### `get_file_info()`\n\nGet detailed information about the currently loaded file.\n\n**Returns:** File metadata including path, size, permissions, and timestamps\n\n### `test_path_resolution(path: str)`\n\nTest and validate path resolution for different path formats.\n\n**Parameters:**\n\n- `path`: The path to test and resolve\n\n**Returns:** Detailed path resolution information including expansion details\n\n### Document Editing Tools\n\n### `insert_section(heading: str, content: str, position: int)`\n\nInsert a new section at the specified position.\n\n**Parameters:**\n\n- `heading`: The section heading text\n- `content`: The section content (can include Markdown)\n- `position`: Where to insert (0 = beginning, or after existing section)\n\n**Returns:** Success/failure status with section ID if successful\n\n### `delete_section(section_id?: str, heading?: str)`\n\nDelete a section by ID or heading.\n\n**Parameters:**\n\n- `section_id`: Unique section identifier (optional)\n- `heading`: Section heading text (optional)\n\n**Note:** Either `section_id` or `heading` must be provided.\n\n### `update_section(section_id: str, content: str)`\n\nUpdate the content of an existing section.\n\n**Parameters:**\n\n- `section_id`: Unique section identifier\n- `content`: New content for the section\n\n### `move_section(section_id: str, new_position: int)`\n\nMove a section to a new position in the document.\n\n**Parameters:**\n\n- `section_id`: Unique section identifier\n- `new_position`: Target position (0-based)\n\n### `get_section(section_id: str)`\n\nRetrieve detailed information about a specific section.\n\n**Returns:** Section heading, content, position, level, and ID\n\n### `list_sections()`\n\nGet metadata for all sections in the document.\n\n**Returns:** Array of section metadata (ID, heading, position, level, path)\n\n### `get_document()`\n\nExport the complete Markdown document.\n\n**Returns:** Full document as Markdown text\n\n### `undo()`\n\nUndo the last operation performed on the document.\n\n**Returns:** Success/failure status\n\n## Configuration Options\n\nThe server supports several configuration options through environment variables:\n\n```bash\n# Validation level (STRICT, NORMAL, PERMISSIVE)\nexport MARKDOWN_VALIDATION_LEVEL=NORMAL\n\n# Maximum transaction history size\nexport MAX_TRANSACTION_HISTORY=100\n\n# Server name\nexport MCP_SERVER_NAME=\"SafeMarkdownEditor\"\n```\n\n## Development\n\n### Running Tests\n\n```bash\n# Run all tests\nuv run pytest\n\n# Run with coverage\nuv run pytest --cov=src --cov-report=html\n\n# Run specific test files\nuv run pytest tests/test_mcp_server.py\n```\n\n### Code Quality\n\n```bash\n# Format code\nuv run black src tests\n\n# Lint code\nuv run ruff check src tests\n\n# Type checking\nuv run mypy src\n```\n\n### Development Server\n\nFor development, you can run the server with additional debugging:\n\n```python\n# In dev-scripts/run_mcp_server.py\nfrom quantalogic_markdown_mcp.mcp_server import server\n\nif __name__ == \"__main__\":\n # Initialize with debug document\n server.initialize_document(\n markdown_text=\"\"\"# Sample Document\n\n## Introduction\nThis is a sample document for testing.\n\n## Features \n- Feature 1\n- Feature 2\n\n## Conclusion\nThank you for reading!\n\"\"\",\n validation_level=ValidationLevel.NORMAL\n )\n \n print(\"Starting SafeMarkdownEditor MCP Server...\")\n print(\"Debug mode enabled with sample document\")\n server.run()\n```\n\n## Troubleshooting\n\n### Common Issues\n\n**Server not appearing in Claude Desktop:**\n\n1. Check that the path in `claude_desktop_config.json` is absolute\n2. Verify that `uv` is in your PATH (`which uv` on macOS/Linux, `where uv` on Windows)\n3. Restart Claude Desktop after configuration changes\n4. Check Claude Desktop logs for error messages\n\n**Server not appearing in VSCode:**\n\n1. Ensure VSCode 1.102 or later is installed\n2. Verify GitHub Copilot extension is installed and active\n3. Check that MCP support is enabled in your organization settings\n4. Confirm `.vscode/mcp.json` file exists in workspace root (for workspace config)\n5. Use `MCP: List Servers` command to see if server is registered\n6. Check Extensions view \u2192 MCP SERVERS section for server status\n7. Verify `uv` is in your PATH and accessible from VSCode's integrated terminal\n\n**VSCode MCP server not starting:**\n\n1. **Check the MCP server output**: Right-click server \u2192 Show Output\n2. **For development setup**: Ensure you're using the correct configuration:\n ```json\n {\n \"servers\": {\n \"markdown-editor\": {\n \"type\": \"stdio\",\n \"command\": \"uv\",\n \"args\": [\n \"--directory\",\n \"${workspaceFolder}\",\n \"run\",\n \"--\",\n \"python\",\n \"-m\",\n \"quantalogic_markdown_mcp.mcp_server\"\n ],\n \"cwd\": \"${workspaceFolder}\",\n \"env\": {\n \"PYTHONPATH\": \"${workspaceFolder}/src\"\n }\n }\n }\n }\n ```\n3. **Verify the command path and arguments** in your configuration\n4. **Test the command manually** in a terminal from the correct working directory:\n\n ```bash\n cd /path/to/quantalogic-markdown-edit-mcp\n uv run python -c \"import sys; sys.path.insert(0, 'src'); from quantalogic_markdown_mcp.mcp_server import mcp; print('MCP server ready')\"\n ```\n5. **Ensure all required dependencies are installed**: `uv sync`\n6. **Check file permissions** on the server executable\n7. **For dev containers**, verify the container has access to required tools\n\n**VSCode agent mode not showing MCP tools:**\n\n1. Confirm you're in Agent mode (not Ask mode) in the Chat view\n2. Click the Tools button to enable/disable specific MCP tools\n3. Check if you have more than 128 tools enabled (VSCode limit)\n4. Verify the MCP server is running (green indicator in Extensions view)\n5. Try restarting the MCP server: Right-click \u2192 Restart\n\n**Tool execution errors:**\n\n1. Ensure the document is initialized (the server auto-initializes if needed)\n2. Check section IDs are valid using `list_sections` first\n3. Verify that section references haven't changed after edits\n\n**Performance issues:**\n\n1. Large documents may take time to process\n2. Consider using section-level operations instead of full document operations\n3. Monitor transaction history size\n\n### Debug Mode\n\nEnable debug logging by setting:\n\n```bash\nexport PYTHONPATH=$PWD/src\nexport MCP_DEBUG=1\npython -m quantalogic_markdown_mcp.mcp_server\n```\n\n### Logging\n\nThe server uses Python's logging module and writes to stderr to avoid interfering with MCP's stdio transport. To see debug logs:\n\n```bash\n# Run with debug logging\nPYTHONPATH=$PWD/src python -m quantalogic_markdown_mcp.mcp_server 2>debug.log\n```\n\n## Architecture\n\nThe server is built on several key components:\n\n- **SafeMarkdownEditor**: Core thread-safe editing engine with atomic operations\n- **MarkdownMCPServer**: MCP server wrapper that exposes editing capabilities\n- **FastMCP**: Modern MCP framework for Python with automatic schema generation\n- **Transaction System**: Atomic operations with rollback support\n- **Validation Engine**: Configurable document structure validation\n\n## Contributing\n\nContributions are welcome! Please read our contributing guidelines:\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes with tests\n4. Ensure all tests pass and code is formatted\n5. Submit a pull request\n\n### Development Setup\n\n```bash\n# Clone and setup\ngit clone https://github.com/raphaelmansuy/quantalogic-markdown-edit-mcp.git\ncd quantalogic-markdown-edit-mcp\n\n# Install with development dependencies\nuv sync --group dev\n\n# Install pre-commit hooks\nuv run pre-commit install\n```\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Related Projects\n\n- [Model Context Protocol](https://modelcontextprotocol.io/) - The protocol specification\n- [FastMCP](https://gofastmcp.com/) - Python framework for building MCP servers\n- [Claude Desktop](https://claude.ai/download) - AI assistant with MCP support\n\n---\n\n**Need help?** Open an issue on [GitHub](https://github.com/raphaelmansuy/quantalogic-markdown-edit-mcp/issues) or check the [documentation](docs/).\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A flexible and extensible Markdown parser with AST support",
"version": "0.2.2",
"project_urls": {
"Documentation": "https://github.com/raphaelmansuy/quantalogic-markdown-edit-mcp/docs",
"Homepage": "https://github.com/raphaelmansuy/quantalogic-markdown-edit-mcp",
"Issues": "https://github.com/raphaelmansuy/quantalogic-markdown-edit-mcp/issues",
"Repository": "https://github.com/raphaelmansuy/quantalogic-markdown-edit-mcp"
},
"split_keywords": [
"ast",
" commonmark",
" markdown",
" parser"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "b6e7c69cc57078e2f93614246effbc3f08c7cd977f0ebb79eb0ab6f419d3015e",
"md5": "2cbaeba264e2ca7de118acab8af451f1",
"sha256": "ef24708a794b892534e24394b292c5c32f31fd8c593ae6873126c1f4e93c60c4"
},
"downloads": -1,
"filename": "quantalogic_markdown_mcp-0.2.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2cbaeba264e2ca7de118acab8af451f1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 47648,
"upload_time": "2025-07-27T15:02:55",
"upload_time_iso_8601": "2025-07-27T15:02:55.416124Z",
"url": "https://files.pythonhosted.org/packages/b6/e7/c69cc57078e2f93614246effbc3f08c7cd977f0ebb79eb0ab6f419d3015e/quantalogic_markdown_mcp-0.2.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0fa1994b91816c44271240f726a5a65a8667afa47b38b00a5575b04a91cfe99b",
"md5": "34c47c8c134b50f4ae2fa2e9dd893a3c",
"sha256": "1cf39c958a8090ce1c18023850efe2a6321691e16dea338ce21ad841e5266ab0"
},
"downloads": -1,
"filename": "quantalogic_markdown_mcp-0.2.2.tar.gz",
"has_sig": false,
"md5_digest": "34c47c8c134b50f4ae2fa2e9dd893a3c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 234311,
"upload_time": "2025-07-27T15:02:57",
"upload_time_iso_8601": "2025-07-27T15:02:57.182184Z",
"url": "https://files.pythonhosted.org/packages/0f/a1/994b91816c44271240f726a5a65a8667afa47b38b00a5575b04a91cfe99b/quantalogic_markdown_mcp-0.2.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-27 15:02:57",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "raphaelmansuy",
"github_project": "quantalogic-markdown-edit-mcp",
"github_not_found": true,
"lcname": "quantalogic-markdown-mcp"
}