Publish and share access-controlled Markdown documents from any MCP-enabled AI tool.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer token from your mkdshare.DEV account (sign in at mkdshare.dev → API & MCP)
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Archive a document. For documents you own, archives it for everyone. For shared documents, archives it only for you.
Document slug
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Archive a document. For documents you own, archives it for everyone. For shared documents, archives it only for you.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Document slug |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Document slug"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| body* |
| string |
| Annotation text |
| slug* | string | Document slug |
| end_offset | integer | Character offset where annotation ends |
| quoted_text | string | The exact text being annotated |
| start_offset | integer | Character offset where annotation starts |
{
"type": "object",
"required": [
"slug",
"body"
],
"properties": {
"body": {
"type": "string",
"description": "Annotation text"
},
"slug": {
"type": "string",
"description": "Document slug"
},
"end_offset": {
"type": "integer",
"description": "Character offset where annotation ends"
},
"quoted_text": {
"type": "string",
"description": "The exact text being annotated"
},
"start_offset": {
"type": "integer",
"description": "Character offset where annotation starts"
}
}
}Create a new mkdshare.DEV document. If visibility is omitted the document is owner-only (login_required, restricted to your email).
| Argument | Type | Description |
|---|---|---|
| title* | string | Document title |
| content* | string | Markdown content |
| expires_at | string | ISO 8601 datetime after which the document expires, e.g. 2026-06-01T00:00:00Z |
| visibility | string | 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). |
| editor_emails | string | Comma-separated emails that can edit this document (in addition to the owner) |
| allowed_domain | string | Domain allowed to view, e.g. company.com (domain_restricted visibility) |
| allowed_emails | string | Comma-separated emails allowed to view (login_required visibility) |
| domain_can_edit | boolean | When true, all users in allowed_domain can edit (not just view) |
{
"type": "object",
"required": [
"title",
"content"
],
"properties": {
"title": {
"type": "string",
"description": "Document title"
},
"content": {
"type": "string",
"description": "Markdown content"
},
"expires_at": {
"type": "string",
"description": "ISO 8601 datetime after which the document expires, e.g. 2026-06-01T00:00:00Z"
},
"visibility": {
"enum": [
"public",
"login_required",
"domain_restricted"
],
"type": "string",
"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)."
},
"editor_emails": {
"type": "string",
"description": "Comma-separated emails that can edit this document (in addition to the owner)"
},
"allowed_domain": {
"type": "string",
"description": "Domain allowed to view, e.g. company.com (domain_restricted visibility)"
},
"allowed_emails": {
"type": "string",
"description": "Comma-separated emails allowed to view (login_required visibility)"
},
"domain_can_edit": {
"type": "boolean",
"description": "When true, all users in allowed_domain can edit (not just view)"
}
}
}Read the full markdown content of a document by its slug.
| Argument | Type | Description |
|---|---|---|
| slug* | string | 8-character document slug from the URL |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "8-character document slug from the URL"
}
}
}List all annotations (comments) on a document.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Document slug |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Document slug"
}
}
}List all mkdshare.DEV documents owned by or shared with the authenticated user.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| device_code* | string | device_code returned by request_device_auth |
{
"type": "object",
"required": [
"device_code"
],
"properties": {
"device_code": {
"type": "string",
"description": "device_code returned by 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.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Search mkdshare.DEV documents by title and content. Returns documents owned by or shared with the authenticated user that match the query.
| Argument | Type | Description |
|---|---|---|
| query* | string | Search string matched case-insensitively against document title and content |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "Search string matched case-insensitively against document title and content"
}
}
}Update an existing document you own. Omit any field to keep its current value.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Document slug |
| title | string | New title |
| content | string | New markdown content |
| expires_at | string | ISO 8601 expiry datetime; omit to keep current |
| visibility | string | New visibility level |
| editor_emails | string | Comma-separated emails that can edit; pass empty string to clear |
| allowed_domain | string | Domain allowed to view, e.g. company.com; required for domain_restricted |
| allowed_emails | string | Comma-separated emails allowed to view; pass empty string to clear |
| domain_can_edit | boolean | When true, all users in allowed_domain can edit (not just view) |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Document slug"
},
"title": {
"type": "string",
"description": "New title"
},
"content": {
"type": "string",
"description": "New markdown content"
},
"expires_at": {
"type": "string",
"description": "ISO 8601 expiry datetime; omit to keep current"
},
"visibility": {
"enum": [
"public",
"login_required",
"domain_restricted"
],
"type": "string",
"description": "New visibility level"
},
"editor_emails": {
"type": "string",
"description": "Comma-separated emails that can edit; pass empty string to clear"
},
"allowed_domain": {
"type": "string",
"description": "Domain allowed to view, e.g. company.com; required for domain_restricted"
},
"allowed_emails": {
"type": "string",
"description": "Comma-separated emails allowed to view; pass empty string to clear"
},
"domain_can_edit": {
"type": "boolean",
"description": "When true, all users in allowed_domain can edit (not just view)"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| data* | string | Base64-encoded image bytes (standard alphabet, no data: URI prefix) |
| filename* | string | Original filename, e.g. screenshot.png |
{
"type": "object",
"required": [
"filename",
"data"
],
"properties": {
"data": {
"type": "string",
"description": "Base64-encoded image bytes (standard alphabet, no data: URI prefix)"
},
"filename": {
"type": "string",
"description": "Original filename, e.g. screenshot.png"
}
}
}