Skip to main content
Glama
pvliesdonk

markdown-vault-mcp

by pvliesdonk

Fetch to Vault

fetch
Idempotent

Download a file from any HTTP/HTTPS URL and save it to the vault as a markdown note or attachment, enabling MCP-to-MCP transfer for content too large to pass through the LLM context.

Instructions

Download a file from a URL and save it to the vault.

Fetches content from an HTTP/HTTPS URL and writes it as a note or attachment. Designed for MCP-to-MCP file transfer when content is too large to pass through the LLM context window.

Context cost: zero for the bytes themselves — the file is downloaded server-side and saved to the vault. After a successful fetch, reference the file by its path (call read(path) only for small results, otherwise pass the path to other tools).

For .md paths: the response is decoded as UTF-8 text and saved as a markdown note with optional frontmatter. The search index is updated immediately.

For other paths: the response is saved as a binary attachment. The existing attachment size limit applies.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesSource URL to download from. Only http:// and https:// schemes are allowed. SSRF protection (via pvl-core's hardened ``fetch_url``, #862): the host is resolved and rejected unless every address is publicly routable (private, loopback, link-local, CGNAT/shared, and reserved ranges are all blocked), the validated IP is pinned for the connection (closing DNS rebinding), and ambient HTTP(S)_PROXY / .netrc settings are ignored. Redirects ARE followed (changed in #1116; through v3.1.0 a redirect was refused), and every hop repeats the whole chain above — a ``Location`` pointing at an internal target is refused exactly as a directly supplied one is. Because of that, the bytes need not come from the host in *url*: check the returned ``final_url`` when the source host matters.
pathYesDestination path in the vault (e.g. "notes/report.md" or "assets/diagram.png"). Extension determines handling: .md for notes, anything else for attachments.
if_matchNoOptional etag from a previous 'read' call for optimistic concurrency. Omit to write unconditionally.
timeout_sNoDownload timeout in seconds (default 30). Increase for large files on slow connections.
frontmatterNoOptional YAML frontmatter dict for .md files, e.g. {"title": "Report", "source": "http://..."}. Ignored for attachments.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses key behavioral traits: the download happens server-side so the bytes cost zero context, the search index is updated immediately for .md files, and non-.md files are saved as binary attachments subject to the existing size limit. It also clarifies that after a successful fetch the agent should use the returned path rather than expecting content in the response, which is genuinely useful behavior not covered by the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, then moves to context cost, then to path-specific behavior, with each sentence earning its place. It is detailed but not redundant, and the use of short labeled paragraphs makes it easy for an agent to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 5-parameter schema with 100% coverage, the annotations, and the presence of an output schema, the description is complete: it covers the intended use case, when not to use read, how path determines handling, the zero-context-cost property, and the attached security-relevant redirect behavior in the URL parameter. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all parameters at 100% with detailed descriptions, so the baseline is 3. The tool description adds extra semantic value by explaining how the path extension changes the behavior (.md becomes UTF-8 markdown with frontmatter, other paths become binary attachments) and by clarifying the practical meaning of the path parameter in the post-fetch workflow.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair, 'Download a file from a URL and save it to the vault,' and immediately clarifies scope: HTTP/HTTPS URLs, saved as a note or attachment. This clearly differentiates it from sibling file-writing tools like write and edit, whose input would be literal content rather than a remote URL.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: for MCP-to-MCP file transfer when content is too large to pass through the LLM context window. It also gives post-fetch guidance, telling the agent to reference the file by path and to only call read(path) for small results, which is actionable and distinguishes the intended workflow from plain read/write usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pvliesdonk/markdown-vault-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server