# io.github.sathya-sankaran/mdshare (npm · mdshare-mcp)

Free markdown sharing. Upload, get links, collaborate. No login needed.

- Trust score: 64/100 (medium)
- Change this week: +20
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `mdshare-mcp`: 64/100 (this document), [markdown](https://verifymcp.io/servers/sathya-sankaran-mdshare/mdshare-mcp.md), [page](https://verifymcp.io/servers/sathya-sankaran-mdshare/mdshare-mcp)

## Channel facts

- Registry: `npm`
- Package: `mdshare-mcp`
- Version: `1.4.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 68 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 73/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2119 tokens (~151/item across 14 items; 14 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add sathya-sankaran-mdshare -- npx -y mdshare-mcp
```

### Codex

```bash
codex mcp add sathya-sankaran-mdshare -- npx -y mdshare-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sathya-sankaran-mdshare": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mdshare-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add sathya-sankaran-mdshare --command npx --arg -y --arg mdshare-mcp
```

### Hermes

```yaml
mcp_servers:
  sathya-sankaran-mdshare:
    command: "npx"
    args: ["-y", "mdshare-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "sathya-sankaran-mdshare": {
      "command": "npx",
      "args": [
        "-y",
        "mdshare-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 64, +40)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Security disclosure: fail → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] License: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional] First check of Schema quality: unverified
- [functional] Licence: MIT

### 2026-08-01 (score 24, +5)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass

### 2026-07-31 (score 19, −25)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-27 (score 44)

First indexed and scored.

## MCP tools (14)

### `upload_markdown` (~231 tokens)

Upload markdown to mdshare and receive a shareable link. The response contains a read/comment/edit share link (default permission: comment) that the user can share with others. The admin credential (full control) is stored locally in ~/.mdshare-mcp/documents.json and is NOT returned in this response — if the user explicitly asks to see or save the admin URL, call get_admin_url. PREFER file_path over content for files already on disk — reads directly from disk without transmitting content through this conversation, which is dramatically faster for files larger than ~1KB.

Input parameters:

- `content` (string): Inline markdown content. Only use this for short snippets composed in the conversation. For files on disk, use file_path instead.
- `file_path` (string): Absolute path to a local markdown file. PREFERRED for any file already on disk — bypasses inline content transmission entirely.
- `share_permission` (string): Permission level for the share link returned to the user. Default 'comment' — recipients can read and comment. Use 'view' for read-only, 'edit' for full write access.

### `read_document` (~175 tokens)

Read a markdown document from mdshare. Returns the content. If the document was uploaded via this MCP server, 'key' is optional — the admin key will be loaded from local storage. PREFER output_path over inline reading for large documents — writes directly to disk and returns a small summary, dramatically faster than echoing content through the conversation.

Input parameters:

- `document_id` (string, required): Document ID
- `key` (string): Access key (admin, edit, comment, or view). Optional if the document is in this MCP server's local store.
- `output_path` (string): Optional. Absolute local file path to write the document content to. PREFERRED for documents larger than ~10KB — bypasses inline content transmission. When provided, the response is a small summary (…

### `update_document` (~210 tokens)

Update the content of an existing mdshare document (full replace). Requires edit or admin permission. If the document is in this MCP server's local store, 'key' is optional. PREFER file_path over content for files already on disk — reads directly from disk without transmitting content through this conversation. If both file_path and content are provided, file_path wins. For small edits to large documents, consider patch_document instead — keeps version history granular.

Input parameters:

- `author` (string): Your name (for edit attribution)
- `content` (string): Inline markdown content (full document body). Only use for short content composed in the conversation. For files on disk, use file_path instead.
- `document_id` (string, required): Document ID
- `file_path` (string): Absolute path to a local markdown file. PREFERRED for any file already on disk — bypasses inline content transmission entirely.
- `key` (string): Edit or admin key. Optional if the document is in this MCP server's local store.

### `patch_document` (~212 tokens)

Apply find/replace operations to a document without rewriting the full content. More efficient than update_document for small edits to large documents. Each find string must be unique unless replace_all is set. If the document is in this MCP server's local store, 'key' is optional. PREFER file_path over operations for batches of operations stored in a JSON file on disk — bypasses inline transmission. If both file_path and operations are provided, file_path wins.

Input parameters:

- `author` (string): Your name (for edit attribution)
- `document_id` (string, required): Document ID
- `file_path` (string): Absolute path to a local JSON file containing an array of {find, replace, replace_all?} operations. PREFERRED when the operations are already prepared on disk.
- `key` (string): Edit or admin key. Optional if the document is in this MCP server's local store.
- `operations` (array): Find/replace operations to apply sequentially. Use file_path instead for operations stored on disk.

### `generate_link` (~97 tokens)

Generate a share link for a document with specific permissions. Requires admin access. If the document is in this MCP server's local store, 'key' is optional.

Input parameters:

- `document_id` (string, required): Document ID
- `key` (string): Admin key. Optional if the document is in this MCP server's local store.
- `label` (string): Optional label for the link
- `permission` (string, required): Permission level for the link

### `list_links` (~83 tokens)

List all share links for a document, including status (active/revoked), permission, and label. Requires admin access. If the document is in this MCP server's local store, 'key' is optional.

Input parameters:

- `document_id` (string, required): Document ID
- `key` (string): Admin key. Optional if the document is in this MCP server's local store.

### `revoke_link` (~120 tokens)

Revoke a share link, making it permanently inactive. Use list_links first to find the token of the link to revoke. Requires admin access. If the document is in this MCP server's local store, 'key' is optional.

Input parameters:

- `document_id` (string, required): Document ID (used to look up the admin key when 'key' is omitted)
- `key` (string): Admin key. Optional if the document is in this MCP server's local store.
- `link_token` (string, required): The token of the link to revoke (from list_links)

### `list_comments` (~73 tokens)

List all comments on a document, including replies and resolution status. If the document is in this MCP server's local store, 'key' is optional.

Input parameters:

- `document_id` (string, required): Document ID
- `key` (string): Any valid access key. Optional if the document is in this MCP server's local store.

### `post_comment` (~138 tokens)

Post a comment on a document, optionally anchored to specific text. Can also reply to an existing comment. If the document is in this MCP server's local store, 'key' is optional.

Input parameters:

- `anchor_text` (string): Text in the document this comment refers to
- `author_name` (string): Your name
- `content` (string, required): Comment text
- `document_id` (string, required): Document ID
- `key` (string): Comment, edit, or admin key. Optional if the document is in this MCP server's local store.
- `parent_id` (string): ID of the comment to reply to (one level nesting)

### `resolve_comment` (~85 tokens)

Resolve or unresolve a comment. Requires edit or admin permission. Key must be provided explicitly because comments are addressed by comment_id — the MCP server can't look up the parent document.

Input parameters:

- `comment_id` (string, required): Comment ID to resolve
- `key` (string, required): Edit or admin key for the document
- `resolved` (boolean, required): true to resolve, false to unresolve

### `get_versions` (~77 tokens)

Get the edit history of a document — who edited, when, and via what. If the document is in this MCP server's local store, 'key' is optional.

Input parameters:

- `document_id` (string, required): Document ID
- `key` (string): Any valid access key. Optional if the document is in this MCP server's local store.

### `list_my_documents` (~113 tokens)

List documents you've previously uploaded via this MCP server on this machine. Returns document_id, title, share_url, share_permission, created_at, and expires_at for each — does NOT return the admin credential. Use this to help the user find and resume older documents without re-pasting admin URLs. Does NOT include documents created via the mdshare web UI or via direct API calls from other clients — only those created by this MCP server. Returns an empty array on a fresh install or after the local store has been cleared.

### `get_admin_url` (~132 tokens)

Retrieve the admin URL for a document previously uploaded via this MCP server. The admin URL grants full control and is equivalent to a password. ONLY call this tool when the user explicitly asks to see, save, or copy the admin URL — for example: 'give me the admin URL', 'save the admin link to my notes', 'what's the owner credential'. DO NOT call this as part of normal upload, share, or collaboration flows; the admin URL should never be surfaced to the user unless directly requested.

Input parameters:

- `document_id` (string, required): Document ID (from upload_markdown response or list_my_documents)

### `register_document` (~162 tokens)

Register an mdshare admin URL you already have saved (in notes, chat history, emails, etc.) so it can be resumed without re-pasting the key every time. Takes an admin URL of the form https://mdshare.live/d/{id}?key=adm_..., verifies it against the live API, and stores it in ~/.mdshare-mcp/documents.json. Only accepts admin URLs (adm_ prefix) — view/comment/edit share links will be rejected. For bulk registration across many files, use the LLM's built-in file reading and search tools to find admin URLs, then call this tool once per URL found.

Input parameters:

- `admin_url` (string, required): Full admin URL: https://mdshare.live/d/{id}?key=adm_{token}

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/sathya-sankaran-mdshare/mdshare-mcp#diagnostics

## Score history

- 2026-08-03: 64
- 2026-08-02: 64
- 2026-08-01: 24
- 2026-07-31: 19
- 2026-07-30: 44
- 2026-07-28: 44
- 2026-07-27: 44

## Links

- npm package: https://www.npmjs.com/package/mdshare-mcp
- Socket report: https://socket.dev/npm/package/mdshare-mcp
- Repository: https://github.com/urbanmorph/mdshare
- Changelog RSS feed: https://verifymcp.io/servers/sathya-sankaran-mdshare/mdshare-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/sathya-sankaran-mdshare/mdshare-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/sathya-sankaran-mdshare/mdshare-mcp
