Skip to main content
Glama

Quarto MCP

CI CodeQL npm version npm downloads node-current license Contributor Covenant DOI

A thin Model Context Protocol server that wraps the Quarto CLI.

The server creates temporary Quarto projects, writes files into them, renders them, and inspects them. It does not copy Quarto configuration logic. Quarto stays the source of truth for configuration, formats, render behavior, and inspect output.

Tools

Tool

Purpose

quarto_create_project

Create a temporary Quarto project and write initial files.

quarto_render

Render the project or one input file.

quarto_inspect

Return Quarto's inspect JSON for the project or one input file.

quarto_defaults_get

Read the stored metadata defaults and the path of their file.

quarto_defaults_set

Store the metadata defaults for every new project.

Read SPECS.md for the full contract.

Related MCP server: Python REPL MCP Server

Requirements

  • Node.js 22 or later

  • Quarto on PATH

Use

The server speaks MCP over stdio. Add it to a client configuration:

{
  "mcpServers": {
    "quarto": {
      "command": "npx",
      "args": ["-y", "quarto-cli-mcp"]
    }
  }
}

To pin a version, write quarto-cli-mcp@0.2.0.

Develop

pnpm install
pnpm run build

Run the server from the clone with node /absolute/path/to/quarto-cli-mcp/dist/index.js.

A projectId is valid only while the server process runs. The server removes every temporary project when it stops.

Remember your author details

Store your name, your affiliation, and your ORCID one time. Call quarto_defaults_set:

{
  "metadata": {
    "author": [
      {
        "name": "Ada Lovelace",
        "orcid": "0000-0002-1825-0097",
        "affiliations": [{ "name": "University of Basel" }]
      }
    ],
    "lang": "en",
    "license": "CC BY 4.0"
  }
}

The server writes the value to ~/.config/quarto-cli-mcp/defaults.yml:

# Managed by quarto-cli-mcp. Written into new projects as _metadata.yml.
author:
  - name: Ada Lovelace
    orcid: 0000-0002-1825-0097
    affiliations:
      - name: University of Basel
lang: en
license: CC BY 4.0

Every later quarto_create_project call copies that file into the new project as _metadata.yml. Quarto merges _metadata.yml over _quarto.yml, so the author reaches each document.

The defaults survive a server restart. You can edit the file by hand.

To use other metadata for one project, pass metadata to quarto_create_project. The value replaces the defaults. To skip the defaults, pass useDefaults: false. To clear the defaults, call quarto_defaults_set with an empty metadata object.

Know these three limits

Quarto owns the merge. The server writes one file and changes nothing else.

  1. Keep format out of the defaults. A format key in the defaults drops the formats of the project. A project that asks for pdf then renders html only.

  2. An author in the defaults is additive. A project that names one other author still carries the author from the defaults. To get one author list, set useDefaults: false, or pass an explicit metadata. An author key in a document front matter does replace the inherited list, but the authors spelling does not.

  3. The defaults reach the project root only. A document in chapters/ gets nothing from them. This limits their value for a book or for a manuscript.

Read the Limits section of SPECS.md for the measured table.

Server limits

Set these environment variables to change the process limits. They are server configuration, never tool parameters.

Variable

Default

Meaning

QUARTO_MCP_RENDER_TIMEOUT_MS

120000

Stop a Quarto run after this time.

QUARTO_MCP_MAX_OUTPUT_BYTES

1048576

Cap stdout and stderr per run.

QUARTO_MCP_MAX_PROJECT_BYTES

268435456

Temporary storage budget.

QUARTO_MCP_LOG_LEVEL

info

Pino log level. Logs go to stderr.

QUARTO_MCP_DEFAULTS_FILE

see below

The metadata defaults file.

The server resolves the defaults file in this order. The first match wins: QUARTO_MCP_DEFAULTS_FILE, then $XDG_CONFIG_HOME/quarto-cli-mcp/defaults.yml, then ~/.config/quarto-cli-mcp/defaults.yml.

Status

Version 0.2.0 is released. Read CHANGELOG.md for the history.

Security

Document code execution is off by default. --no-execute is not a sandbox. Quarto configuration can start other programs, for example through render hooks or filters. Version 0.2 assumes trusted project input. Use an OS or container sandbox when project input is untrusted.

Read SECURITY.md to report a vulnerability.

License

AGPL-3.0-only

Available Tools

5 tools
quarto_create_projectCreate a Quarto projectA

Create a temporary Quarto project and write initial files into it. Returns an opaque projectId that is valid only while this server process runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoThe Quarto project type. Defaults to "default".default
filesNoInitial text files to write into the project.
configNoGeneric YAML data. When present it replaces the generated _quarto.yml.
metadataNoGeneric YAML data written to _metadata.yml. When present it replaces the stored defaults.
useDefaultsNoWrite the stored metadata defaults when metadata is absent. Defaults to true.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that the project is temporary, that the returned projectId is opaque and process-lifetime-bound, and that initial files are written. This is meaningful beyond the schema's static property descriptions.

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?

Two dense sentences with no filler: the core action, the lifespan caveat, and the return value are front-loaded. Every phrase earns its place.

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

Completeness4/5

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

For a creation tool with five parameters fully described in the schema, the description covers the essential operational context: temporary lifecycle, initial file writes, and a projectId handle. It could optionally specify the response shape or cleanup semantics, but the described contract is sufficient for correct invocation.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents every parameter. The description adds context around 'initial files' and return but does not need to restate parameter-level semantics.

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 states a specific verb ('Create'), a concrete resource ('Quarto project'), and clarifies behavior ('temporary', 'write initial files', returns an opaque projectId). This clearly distinguishes it from the sibling tools, which fetch defaults, render, inspect, or set defaults.

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

Usage Guidelines3/5

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

The description communicates what the tool does and that it is for creating a project, but it does not explicitly state when to choose it over siblings or when not to use it. The intended use is implied rather than directly contrasted with alternatives.

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

quarto_defaults_getRead the stored metadata defaultsA

Return the Quarto metadata that every new project receives as _metadata.yml, and the path of the file that holds it. An absent file returns empty metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full disclosure burden. It does this well by specifying what is returned (metadata plus file path) and disclosing the absent-file edge case ('returns empty metadata'). The only unstated aspect is potential failure modes beyond absence, but for a read tool this is strong coverage.

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?

Two tight sentences with no filler. The first sentence front-loads the core action and return values, and the second efficiently disposes of the no-file edge case. Every sentence earns its place.

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

Completeness4/5

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

For a zero-parameter read tool with no output schema and no annotations, the description covers the essentials: what is retured, the file involved, and behavior when absent. It could additionally point to quartz_defaults_set as the mutation counterpart, but that omission is minor given how self-contained the tool is.

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 tool has zero parameters, so the parameter-semantics burden is trivial. Per the baseline for 0-param tools this scores 4: there is nothing to document, and the description does not need to add parameter-level meaning.

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 names a specific verb ('Return'), a specific resource (the Quarto metadata defaults stored as _metadata.yml), and explicitly states the two return elements: the metadata and the path of the holding file.The resource and read-only nature clearly distinguish it from siblings like quartz_render, quartz_create_project, and the write-counterpart quartz_defaults_set.

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

Usage Guidelines3/5

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

The read behavior is implied by the name and description, so an agent can infer this tool is for reading defaults, but there is no explicit guidance about when to choose it over quartz_defaults_set or other siblings, and no exclusions or alternative routing are stated. Usage context is inferable but never made explicit.

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

quarto_defaults_setStore the metadata defaultsA

Store Quarto metadata, such as author, affiliation, and ORCID, for every new project. The call replaces the whole file. Send empty metadata to clear the defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
metadataYesGeneric YAML data, such as author, affiliation, and ORCID. It replaces the stored defaults. Send an empty object to clear them.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does well by stating that the call 'replaces the whole file' and that sending empty metadata clears the defaults, which communicates the destructive/overwriting nature. It could add more about scope or side effects, but the critical behaviors are disclosed.

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 two sentences with no filler. It front-loads the purpose and then gives the two most important behavioral details: whole-file replacement and clearing via empty metadata.

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

Completeness4/5

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

For a simple one-parameter setter with no output schema, the description covers purpose, replacement semantics, and clearing behavior. It is largely complete, though it does not explicitly state that existing projects are unaffected or describe any return value, but those are minor for this tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the metadata parameter and the replacement/clearing behavior. The description repeats the examples but does not add new semantic detail beyond what the schema provides, so a baseline 3 is appropriate.

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 clearly states a specific verb and resource: 'Store Quarto metadata... for every new project,' and adds the key behavioral detail that the call 'replaces the whole file.' This distinguishes it from the sibling get tool and other project/render tools.

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

Usage Guidelines3/5

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

The phrase 'for every new project' gives some context for when this tool applies, but the description does not explicitly state when to use this tool versus quarto_defaults_get or when not to use it. There are no exclusions or alternatives named.

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

quarto_inspectInspect a Quarto projectA

Return Quarto's inspect JSON for the project, or for one input file. The output is passed through without field changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputNoA file relative to the project root. When absent the project is inspected.
projectIdYesThe id returned by quarto_create_project.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It adds a useful behavioral guarantee: 'The output is passed through without field changes,' and clarifies the project-versus-file scope distinction. It does not explicitly say 'read-only' or 'no side effects,' but 'Return ... inspect JSON' plus the passthrough guarantee strongly imply a non-mutating inspection operation.

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?

Two short, front-loaded sentences deliver the primary action and scope first, then a precise output behavior guarantee. Every sentence earns its place with no redundancy or filler.

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

Completeness4/5

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

For a simple, read-style tool with fully documented parameters, the description covers what the tool returns, its scope, and pass-through behavior. Without annotations or an output schema, it could go further by explicitly stating that no project modifications occur, but the inspect semantics and passthrough statement make the behavior sufficiently clear.

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

Parameters3/5

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

The input schema already provides 100% parameter documentation, including descriptions for projectId and input. The description adds no further parameter-level detail beyond the project-versus-file distinction, so the schema carries the weight and the description meets the baseline.

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 states a specific verb ('Return') and resource (

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

Usage Guidelines4/5

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

The description makes the use case clear by indicating the tool returns Quarto's inspect JSON for either a project or a specific input file, which distinguishes it from siblings like quarto_create_project, quarto_render, and quarto_defaults_get/set. It does not explicitly name alternatives or state when not to use it, but the context is unambiguous enough for an agent to select it.

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

quarto_renderRender a Quarto projectA

Render the project, or one input file. Code execution is off unless execute is true. A Quarto failure is reported as success: false, with stdout and stderr preserved.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoAn output format, for example "html" or "pdf".
inputNoA file relative to the project root. When absent the project is rendered.
outputNoAn output file relative to the project root.
executeNoExecute code in documents. Off by default. This is not a sandbox.
projectIdYesThe id returned by quarto_create_project.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It usefully discloses that code execution is off unless 'execute' is true and that Quarto failures are reported as success:false while preserving stdout and stderr. These are material behavioral details that go beyond the schema, though it does not cover every possible side effect of rendering.

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 two sentences with no filler. The core action is front-loaded, and the two most important caveats (execution off by default, failure behavior) are stated directly and efficiently.

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

Completeness4/5

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

For a rendering tool with five parameters, the description covers the main choices an agent needs to make: what to render, whether to execute code, and how failures surface. Since there is no output schema, more return-value detail could be helpful, but the failure semantics are disclosed and the invocation context is sufficiently complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents each parameter. The description adds little beyond echoing the 'input' file vs project distinction already present in the schema, so the baseline of 3 is appropriate.

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 states a specific verb ('Render') and a clear resource ('the project, or one input file'), making the tool's action unambiguous. It is clearly distinguishable from the sibling tools, which cover creation, inspection, and defaults handling rather than rendering.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: render either the whole project or a single input file. It does not explicitly name alternatives or state when not to use it, but the sibling tools are semantically distinct enough that an agent can infer the appropriate selection.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.0
    • First observedquarto_create_project
    • First observedquarto_defaults_get
    • First observedquarto_defaults_set
    • First observedquarto_inspect
    • First observedquarto_render

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: default metadata retrieval/set, project creation, rendering, and inspecting Quarto metadata. There is no overlap or ambiguity between the tools.

Naming Consistency3/5

The naming pattern is mixed: defaults_get/defaults_set use noun_verb order, while create_project, render, and inspect use verb or verb_noun order. Despite the inconsistency, the names are still readable and somewhat predictable.

Tool Count5/5

With 5 tools, the server is well-scoped for Quarto project management. Each tool covers a distinct necessary action without redundancy or excessive surface area.

Completeness4/5

The tool surface covers the core workflows: creating projects, rendering, inspecting metadata, and managing defaults. Minor gaps exist, such as no way to list or delete projects, but projects are temporary and the main workflow is supported.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides project management capabilities through terminal, web UI, or MCP stdio, including plans, code analysis, and filesystem-safe operations.
    20
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a persistent Python REPL session as a tool for executing code, managing files, installing packages, and initializing projects via the MCP protocol.
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides coding agents with a durable, revision-aware project workspace for semantic context, governed source changes, verification, task checkpoints, and observability through an MCP interface.
    1
    -

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/maehr/quarto-cli-mcp'

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