hedgedoc-mcp-server
# HedgeDoc MCP Server
[MCP](https://modelcontextprotocol.io/) server for **HedgeDoc 1.x** — the open-source collaborative markdown editor.
Create notes and Mermaid diagrams from OpenCode and other MCP-compatible AI agents.
> **Note:** This is built for HedgeDoc **1.x** (formerly CodiMD).
> It uses the [HedgeDoc 1.x API](https://docs.hedgedoc.org/dev/api/), which differs from HedgeDoc 2.
## Tools
| Tool | Description |
|---|---|
| `hedgedoc_create_blank` | Create a blank note with the instance's default template |
| `hedgedoc_create` | Create a new note with a random ID |
| `hedgedoc_create_with_alias` | Create a new note with a custom URL alias (requires [FreeURL mode](https://docs.hedgedoc.org/references/url-scheme/#freeurl-mode)) |
| `hedgedoc_create_diagram` | Create a note with a [Mermaid](https://mermaid.js.org/) diagram |
| `hedgedoc_read` | Read the raw markdown content of a note |
| `hedgedoc_info` | Get note metadata (title, description, timestamps, viewcount) |
| `hedgedoc_list_revisions` | List all available revisions of a note |
| `hedgedoc_get_revision` | Get the full content of a specific revision |
| `hedgedoc_publish_url` | Get the published (read-only) URL of a note |
| `hedgedoc_slide_url` | Get the slide presentation URL of a note |
| `hedgedoc_status` | Get the current status of the HedgeDoc instance |
## Usage
```bash
export HEDGEDOC_URL="https://hedgedoc.your-instance.com"
uvx hedgedoc-mcp-server stdio
```
HedgeDoc 1.x does **not** use API tokens for note operations. Authentication is handled via
session cookies (browser) or instance configuration
([see Production Ready guide](https://docs.hedgedoc.org/guides/production-ready/)).
### OpenCode config
```jsonc
{
"mcp": {
"hedgedoc": {
"type": "local",
"enabled": true,
"command": ["uvx", "hedgedoc-mcp-server", "stdio"],
"environment": {
"HEDGEDOC_URL": "https://hedgedoc.your-instance.com"
}
}
}
}
```
### Requirements
| Requirement | Notes |
|---|---|
| HedgeDoc 1.x instance | Tested on 1.x. Not compatible with HedgeDoc 2. |
| Python 3.11+ | |
| `uv` (recommended) | Or `pip install hedgedoc-mcp-server` |
## API Endpoints Used
This server uses the following [HedgeDoc 1.x API](https://docs.hedgedoc.org/dev/api/) endpoints:
| Method | Endpoint | Used by |
|---|---|---|
| `GET` | `/new` | Create a blank note |
| `POST` | `/new` | Create a note (random ID) |
| `POST` | `/new/{alias}` | Create a note (custom alias) |
| `GET` | `/{id}/download` | Read raw markdown |
| `GET` | `/{id}/info` | Read metadata |
| `GET` | `/{id}/revision` | List revisions |
| `GET` | `/{id}/revision/{rev}` | Get specific revision |
| `GET` | `/{id}/publish` | Published URL |
| `GET` | `/{id}/slide` | Slide URL |
| `GET` | `/status` | Instance status |
For more details, see the [official API docs](https://docs.hedgedoc.org/dev/api/).
## Instance Configuration
Your HedgeDoc administrator may need to configure these settings:
| Setting | Impact | Docs |
|---|---|---|
| `CMD_ALLOW_ANONYMOUS=true` | Allows note creation without login | [Users and Privileges](https://docs.hedgedoc.org/configuration/#users-and-privileges) |
| `CMD_ALLOW_FREEURL=true` | Enables custom URL aliases | [Users and Privileges](https://docs.hedgedoc.org/configuration/#users-and-privileges) |
| `CMD_RATE_LIMIT_NEW_NOTES=20` | Max new notes per 5 minutes (default: 20) | [Web Security](https://docs.hedgedoc.org/configuration/#web-security-aspects) |
| `CMD_DOCUMENT_MAX_LENGTH=100000` | Max note length in chars (default: 100k) | [HedgeDoc basics](https://docs.hedgedoc.org/configuration/#hedgedoc-basics) |
| `CMD_DISABLE_NOTE_CREATION=false` | If true, no notes can be created | [Users and Privileges](https://docs.hedgedoc.org/configuration/#users-and-privileges) |
## Development
```bash
git clone https://github.com/Jyzus/kaymer-hedgedoc-mcp
cd kaymer-hedgedoc-mcp
uv venv && uv pip install -e .
HEDGEDOC_URL="https://hedgedoc.your-instance.com" uv run hedgedoc-mcp-server
```
## License
MIT
TDQS
Scored across 11 tools
The four create variants are distinct in their parameters (blank, content, alias, diagram), but create and create_with_alias are nearly identical except for the alias parameter, which could cause confusion. The remaining tools (read, info, status, revisions, URLs) are clearly differentiated by action.
All tools share the hedgedoc_ prefix, and most follow a verb-based pattern. However, there is inconsistency: some are plain verbs (create, read), some are nouns (info, status), some are verb_noun (publish_url, list_revisions), and the create variants use a create_<variant> pattern. This is mostly predictable but not perfectly uniform.
With 11 tools, the server is well-scoped for its purpose. Each tool covers a distinct aspect of note management, and the count is within the ideal range for a domain-specific MCP server.
The server provides strong coverage for creating and reading notes, but lacks update and delete operations, making it impossible to modify or remove notes. Additionally, there is no list-notes tool, so agents must know note IDs in advance, leaving significant gaps in the note lifecycle.