PostMD MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| POSTMD_DEBUG | No | Set to 1, true, or yes to enable extra stderr logging. | |
| POSTMD_API_KEY | No | API key (pmk_…) for management tools. Optional; needed for tools requiring authentication. Sign in at postmd.turink.com, open Account → API keys. | |
| POSTMD_BASE_URL | No | Base URL of the PostMD instance. Defaults to https://postmd.turink.com. Set for a self-hosted / local instance. Origin only, no trailing slash. | https://postmd.turink.com |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| postmd_create_documentA | Publish Markdown as a PostMD web page. No API key required — anyone can publish. Returns docCode and data.shareUrl; hand shareUrl to people. With an API key the document belongs to that member and can be updated later; groupId files it into that group instead of the default one (key with documents:write). |
| postmd_create_document_from_fileA | Same as postmd_create_document, but reads the Markdown from filePath on the machine running this MCP server — use it for large files instead of pasting the body. |
| postmd_create_documents_from_filesA | Publish several .md files in one call (bulk upload). Requires an API key with documents:write. The outer resultCode is 200 even if some files failed — check data.succeeded and each entry in data.results. |
| postmd_get_documentA | Get document metadata by docCode: title, fileName, hasPassword, shareEndDate, viewerStyle, timestamps. Public — no API key needed. Content is not included; use postmd_get_document_raw for the Markdown source. |
| postmd_get_document_rawA | Get the stored Markdown source of a document. Public — no API key needed. Password-protected documents need |
| postmd_update_documentA | Update a document you own. Requires an API key with documents:write. Include |
| postmd_update_document_from_fileA | Same as postmd_update_document, but reads the new Markdown from filePath on the machine running this MCP server. |
| postmd_delete_documentA | Delete a document you own (recoverable for 30 days, then purged). Requires an API key with documents:write. |
| postmd_upload_attachmentA | Upload an image or PDF to reference from a document. Requires an API key with documents:write. Allowed types: png, jpg, jpeg, gif, webp, svg, bmp, pdf. Use the returned data.url as the image/link target in your Markdown, then publish the Markdown with postmd_create_document. |
| postmd_list_notesA | List notes and highlights on a document: your own plus every SHARED one, newest first. Requires an API key with documents:read. Each note carries mine and manageable flags — trust them instead of re-deriving permissions. Pass |
| postmd_add_noteA | Attach a note or highlight to a document. Requires an API key with documents:write. Give |
| postmd_update_noteB | Edit a note you wrote. Requires an API key with documents:write. Omitting scope keeps the current one. The note must keep text or a colour. |
| postmd_resolve_noteA | Mark a note as settled, or undo it with resolved=false. Meaningful on SHARED notes; the author or the document owner may set it. Requires an API key with documents:write. |
| postmd_delete_noteA | Delete a note: your own, or a SHARED note on a document you own. Requires an API key with documents:write. |
| postmd_list_my_notesA | List every note the key's member wrote, across all documents, with docCode and documentTitle beside each one. Requires an API key with documents:read. |
| postmd_list_groupsA | List groups the key's member belongs to. Requires an API key with groups:read. Paged. |
| postmd_list_group_documentsA | List documents in a group. Requires an API key with groups:read and documents:read. Paged; q searches title and file name (substring, case-insensitive). |
| postmd_move_document_to_groupA | Move a document you own into a group you can use, optionally into a folder of that group. A document belongs to exactly one group, so this replaces its current group. Requires an API key with documents:write. |
| postmd_create_groupA | Create a group. Requires an API key with groups:write. Documents can then be filed into it and members invited from the web app. |
| postmd_update_groupA | Rename a group or change its expiry. Owner only. Requires an API key with groups:write. clearExpireDate removes the expiry. |
| postmd_delete_groupA | Delete a group. Owner only; the default group cannot be deleted. Documents in it are not deleted. Requires an API key with groups:write. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Each tool targets a distinct resource and action: document CRUD, note lifecycle, group management, and attachment upload are cleanly separated. The only near-overlaps (get_document vs get_document_raw, list_notes vs list_my_notes) are explicitly disambiguated in the descriptions.
All tools use the postmd_ prefix and a consistent snake_case verb_noun pattern such as list_, create_, update_, delete_, and resolve_. Minor variations like add_note or move_document_to_group are still readable and predictable.
At 21 tools the server is above the usual 3-15 sweet spot, but the count is justified by covering documents, groups, and notes as separate lifecycles. Each tool has a concrete job, so the set feels slightly heavy rather than bloated.
Document, group, and note create/read/update/delete flows are substantively covered, including file-based and raw-content variants. The main gaps are the lack of a direct list-my-documents or global search endpoint, and attachments only support upload with no management/delete tools.