mkdshare.DEV
Publish and share access-controlled Markdown documents from any MCP-enabled AI tool.
Should I use this
Quality & Safety
Findings (1)
- LOWin archive_document
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mkdshare": {
"url": "https://mkdshare.dev/mcp"
}
}
}Remote endpoints
https://mkdshare.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (11)
🟢list_documents
List all mkdshare.DEV documents owned by or shared with the authenticated user.
Input Schema
{
"type": "object",
"properties": {},
"required": []
}🟢get_document(slug)
Read the full markdown content of a document by its slug.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "8-character document slug from the URL"
}
},
"required": [
"slug"
]
}🟡create_document(title, content, visibility, allowed_emails, allowed_domain, ...)
Create a new mkdshare.DEV document. If visibility is omitted the document is owner-only (login_required, restricted to your email).
Input Schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Document title"
},
"content": {
"type": "string",
"description": "Markdown content"
},
"visibility": {
"type": "string",
"enum": [
"public",
"login_required",
"domain_restricted"
],
"description": "Who can view the document. If the user didn't specify who should see it, ask them. Omitted = owner-only (login_required, restricted to your email)."
},
"allowed_emails": {
"type": "string",
"description": "Comma-separated emails allowed to view (login_required visibility)"
},
"allowed_domain": {
"type": "string",
"description": "Domain allowed to view, e.g. company.com (domain_restricted visibility)"
},
"domain_can_edit": {
"type": "boolean",
"description": "When true, all users in allowed_domain can edit (not just view)"
},
"editor_emails": {
"type": "string",
"description": "Comma-separated emails that can edit this document (in addition to the owner)"
},
"expires_at": {
"type": "string",
"description": "ISO 8601 datetime after which the document expires, e.g. 2026-06-01T00:00:00Z"
}
},
"required": [
"title",
"content"
]
}🟡update_document(slug, title, content, visibility, allowed_emails, ...)
Update an existing document you own. Omit any field to keep its current value.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Document slug"
},
"title": {
"type": "string",
"description": "New title"
},
"content": {
"type": "string",
"description": "New markdown content"
},
"visibility": {
"type": "string",
"enum": [
"public",
"login_required",
"domain_restricted"
],
"description": "New visibility level"
},
"allowed_emails": {
"type": "string",
"description": "Comma-separated emails allowed to view; pass empty string to clear"
},
"allowed_domain": {
"type": "string",
"description": "Domain allowed to view, e.g. company.com; required for domain_restricted"
},
"domain_can_edit": {
"type": "boolean",
"description": "When true, all users in allowed_domain can edit (not just view)"
},
"editor_emails": {
"type": "string",
"description": "Comma-separated emails that can edit; pass empty string to clear"
},
"expires_at": {
"type": "string",
"description": "ISO 8601 expiry datetime; omit to keep current"
}
},
"required": [
"slug"
]
}🟢list_annotations(slug)
List all annotations (comments) on a document.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Document slug"
}
},
"required": [
"slug"
]
}🟡create_annotation(slug, body, quoted_text, start_offset, end_offset)
Add an annotation (comment) to a document. Pass quoted_text with the exact passage you want to annotate — the server will locate it automatically. Omit quoted_text to attach to the whole document. You can also provide start_offset + end_offset explicitly if needed.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Document slug"
},
"body": {
"type": "string",
"description": "Annotation text"
},
"quoted_text": {
"type": "string",
"description": "The exact text being annotated"
},
"start_offset": {
"type": "integer",
"description": "Character offset where annotation starts"
},
"end_offset": {
"type": "integer",
"description": "Character offset where annotation ends"
}
},
"required": [
"slug",
"body"
]
}⚪archive_document(slug)
Archive a document. For documents you own, archives it for everyone. For shared documents, archives it only for you.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Document slug"
}
},
"required": [
"slug"
]
}🟢search_documents(query)
Search mkdshare.DEV documents by title and content. Returns documents owned by or shared with the authenticated user that match the query.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search string matched case-insensitively against document title and content"
}
},
"required": [
"query"
]
}🟡upload_image(filename, data)
Upload an image (png, jpeg, gif, webp; max 1MB) for embedding in documents. Returns a URL and a ready-to-paste markdown snippet. Images are served at an unguessable URL — anyone with the exact link can view.
Input Schema
{
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "Original filename, e.g. screenshot.png"
},
"data": {
"type": "string",
"description": "Base64-encoded image bytes (standard alphabet, no data: URI prefix)"
}
},
"required": [
"filename",
"data"
]
}⚪request_device_auth
Start a headless Google sign-in. Call this FIRST if you don't have an API token yet. Returns a user_code and verification_url for the user to visit, plus a device_code to use with poll_device_auth. No Bearer token required.
Input Schema
{
"type": "object",
"properties": {},
"required": []
}🟡poll_device_auth(device_code)
Check whether the user has approved the device authorization. Call every 5 seconds (or the interval returned by a slow_down response) until status is 'complete'. Save the returned api_token to your MCP server config.
Input Schema
{
"type": "object",
"properties": {
"device_code": {
"type": "string",
"description": "device_code returned by request_device_auth"
}
},
"required": [
"device_code"
]
}Community
Evidence