Skip to main content
Glama
ariedotme

obsidian-writer-mcp

by ariedotme

obsidian-writer-mcp

MCP server for writing to Obsidian through the obsidian-writer HTTP service.

This project was originally created for personal use in my homelab. I later decided to publish it in case it is useful to other people building similar local-first Obsidian automation.

Related project: obsidian-writer, the HTTP service this MCP server calls to write into Obsidian vaults.

Configuration

The server reads environment variables from the process and from .env files. Existing process variables take precedence over .env values.

Load order:

  1. .env next to obsidian_writer_mcp.py

  2. .env in the current working directory

Create a local .env from the example:

cp .env.example .env

Variables:

  • OBSIDIAN_WRITER_BASE_URL: base URL for the HTTP writer. Default: http://obsidian-writer:3000.

  • OBSIDIAN_DEFAULT_VAULT: default vault used when a tool does not receive vault. Default: default.

Example:

OBSIDIAN_WRITER_BASE_URL=http://obsidian-writer:3000
OBSIDIAN_DEFAULT_VAULT=my-vault

The .env file is ignored by Git; publish .env.example and keep local values private.

Related MCP server: Obsidian MCP Tool Server

Hermes registration

If this repository is mounted inside the Hermes container at /srv/apps/obsidian-writer-mcp, register it without hardcoded vault values; the MCP will read .env itself:

docker exec -it hermes hermes -p <profile> mcp remove obsidian-writer || true

docker exec -it hermes hermes -p <profile> mcp add obsidian-writer \
  --command sh \
  --args -lc 'exec uv run --with fastmcp --with httpx python /srv/apps/obsidian-writer-mcp/obsidian_writer_mcp.py'

docker exec -it hermes hermes -p <profile> mcp test obsidian-writer

If your obsidian-writer service is not reachable as http://obsidian-writer:3000 from inside Hermes, change OBSIDIAN_WRITER_BASE_URL in .env.

Tools

Inbox

  • obsidian_append_inbox: append one line to today's inbox file in the configured default vault.

  • obsidian_read_inbox: read inbox items for a specific day. The date argument is optional; when omitted, obsidian-writer uses today's date.

Lists

  • obsidian_list_lists: list existing Obsidian checklist files.

  • obsidian_list_add: add unchecked items to a named list.

  • obsidian_list_remove: remove items from a named list.

  • obsidian_list_update: update/rename items in a named list.

Notes

  • obsidian_list_notes: list existing notes.

  • obsidian_read_note: read a note by slug.

  • obsidian_create_note: create a new standalone Markdown note.

  • obsidian_append_note: append Markdown content to an existing note.

  • obsidian_create_or_append_note: create a note or append to an existing compatible note.

Tasks

Task creation keeps its existing tool name: obsidian_create_task.

Task listing is available as obsidian_list_tasks and reads structured tasks through GET /tasks.

Creation sends structured JSON to POST /tasks; it does not format Obsidian Tasks Markdown itself. The canonical formatter is the obsidian-writer service.

Supported creation fields include:

  • vault

  • title

  • content (legacy fallback for title)

  • status: todo, done, cancelled

  • due, scheduled, start, done, cancelled: dates as YYYY-MM-DD

  • priority: highest, high, medium, low, lowest, none

  • recurrence

  • tags

  • source

  • due_text (legacy; ignored when due is provided)

  • depends_on (accepted by the MCP for compatibility, but not sent yet)

Dependencies are reserved for phase 2 if/when obsidian-writer supports them.

Listing supports:

  • status: todo (default), done, cancelled, or all

  • limit: optional positive integer

  • vault: optional vault override

Examples

Read today's inbox:

obsidian_read_inbox()

Read a specific inbox day:

obsidian_read_inbox(date="2026-06-24")

Create a task using the configured default vault:

obsidian_create_task(
    title="Pay electricity bill",
    due="2026-06-25",
    priority="high",
    tags=["home", "bills"],
    source="assistant",
)

List pending tasks:

obsidian_list_tasks(status="todo", limit=20)

Create or append a note:

obsidian_create_or_append_note(
    title="Project ideas",
    content="- Try a simpler publishing flow",
)

Local development

Run the server over stdio:

uv run --with fastmcp --with httpx python obsidian_writer_mcp.py

The process will wait for MCP stdio messages; that is expected.

Available Tools

13 tools
obsidian_append_inboxA

Append one line to today's inbox file in the user's Obsidian vault. Use when the user asks to add/save/capture something to inbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYes
tagsNo
timestampNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It only states the basic append action and fails to mention whether the file is created if missing, how tags/timestamp are handled, or any side effects. This is a significant gap for a write 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 sentences, front-loaded with the action and resource. Every word is informative, with no filler or redundancy.

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

Completeness2/5

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

With 3 parameters, no annotations, and no parameter descriptions, the description is under-specified. It lacks details on tag/timestamp formatting, file creation behavior, and edge cases, making it insufficient for reliable invocation.

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

Parameters2/5

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

Schema description coverage is 0% and the description adds no explanation for the 'tags' or 'timestamp' parameters; 'line' is only implied by 'append one line.' The description does not compensate for the complete lack of parameter documentation.

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 the specific action ('Append one line') and resource ('today's inbox file'), making it distinct from siblings like obsidian_append_note or obsidian_create_note. The scope is explicit and unambiguous.

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?

Provides a clear usage trigger: 'Use when the user asks to add/save/capture something to inbox.' It does not explicitly mention when not to use it or alternatives, but the inbox focus differentiates it from note-related siblings.

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

obsidian_append_noteA

Append Markdown content to an existing note in the configured default vault. Use when the user asks to add content to an existing note. Before using, prefer calling obsidian_list_notes to discover the correct slug. If needed, use obsidian_read_note to understand the note before adding content.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden of explaining behavior. It discloses that the tool appends (not overwrites), requires an existing note, and uses the default vault, but it doesn't discuss failure modes, authentication, or return values. This is sufficient but not rich.

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

Conciseness4/5

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

The description is four sentences with no fluff. It front-loads the purpose, then gives usage guidance and helpful pre-steps. Slightly longer than strictly necessary but every clause adds value.

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 two-parameter append tool, the description provides purpose, usage context, and pre-requisite discovery steps. It omits explicit error/return behavior, but the output schema likely covers that, and the description is adequate for correct invocation.

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?

Despite 0% schema coverage, the description indirectly defines both parameters: 'content' is Markdown to append, and 'slug' is a note identifier that should be discovered via list_notes. It gives functional meaning beyond the bare parameter names.

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

Purpose4/5

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

The description clearly states the tool appends Markdown to an existing note in the default vault, which is a specific verb and resource. It distinguishes from create_note by specifying 'existing note', though it doesn't explicitly contrast with the sibling create_or_append_note.

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 explicitly says when to use ('when the user asks to add content to an existing note') and gives helpful pre-steps (list notes first, read note if needed). It doesn't mention alternatives or when not to use it, so it stops short of a 5.

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

obsidian_create_noteA

Create a new standalone Markdown note in the configured default vault. Use when the user asks to create a new note. mode=create always creates a new note; if the same slug already exists, obsidian-writer creates _2, _3, etc. Content should be well-formatted Markdown. Do not repeat the title as a heading inside content when title is already provided separately.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/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 burden. It discloses key behaviors: always creates a new note, suffixes _2/_3 on slug conflicts, and provides content formatting guidance (well-formatted Markdown, don't repeat title). This is substantial but does not cover auth or return details beyond the output schema.

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 concise, front-loaded with the primary purpose, and every sentence provides useful information. No filler or repetition of schema fields.

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 two-parameter create tool with an output schema present, the description covers purpose, usage, slug conflict behavior, and content expectations. It could explicitly mention return behavior but the output schema covers that, making it largely complete.

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?

Schema has 0% description coverage, so the description compensates by explaining that content should be well-formatted Markdown and not repeat the title. It implies title is the note title and content is the body, adding meaning beyond the raw schema.

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 it creates a new standalone Markdown note in the default vault, with a specific verb and resource. It also differentiates from siblings by mentioning mode=create and slug conflict handling, which distinguishes it from append/create_or_append tools.

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?

It explicitly says 'Use when the user asks to create a new note' and describes behavior for existing slugs, implying it is for new notes rather than appending. It does not explicitly name alternative sibling tools, but the context makes the distinction clear.

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

obsidian_create_or_append_noteA

Create a note or append to an existing compatible note in the configured default vault. Use for ambiguous requests like "put this in note X" or "save this in a note about X". If a compatible note exists, use its slug and append. If not, let obsidian-writer create the note. Before using, prefer calling obsidian_list_notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNo
titleYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations exist, so the description is the only source of behavioral disclosure. It explains the conditional append-vs-create behavior and slug reuse, which is valuable, but it omits details about failure modes, what 'compatible' means, permission requirements, or output/return behavior.

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

Conciseness4/5

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

The description is moderately concise and front-loaded with the main purpose; the conditional and pre-step guidance earn their place. It has some redundancy between the first sentence and the 'If compatible... If not...' restatement.

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

Completeness3/5

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

For a 3-parameter mutation tool with no annotations and 0% schema coverage, the description covers purpose, usage, and a precondition but leaves key gaps such as parameter semantics, the definition of 'compatible note', and error handling. The output schema mitigates return-value uncertainty but not these gaps.

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

Parameters2/5

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

The schema provides no property descriptions (0% coverage), and the description only implicitly references 'slug' as the identifier for an existing compatible note. It does not clarify the meaning of 'title' or 'content', nor how they interact with the slug, leaving the agent to infer parameter 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 opens with a specific action ('Create a note or append to an existing compatible note') tied to a named resource ('configured default vault') and explicitly positions itself for ambiguous requests, distinguishing it from sibling tools like obsidian_create_note and obsidian_append_note.

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?

It gives explicit when-to-use signals ('Use for ambiguous requests like...') and a clear prerequisite ('Before using, prefer calling obsidian_list_notes'). However, it does not explicitly state when not to use it or name alternative tools for unambiguous cases.

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

obsidian_create_taskA

Create a structured Obsidian Tasks-compatible task in a vault. Use when the user asks for a task, todo, manual reminder, or pending action. Pass semantic fields only; obsidian-writer formats the final Markdown line. Dependencies are accepted for future compatibility but are not sent yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
dueNo
doneNo
tagsNo
startNo
titleNo
vaultNo
sourceNohermes
statusNo
contentNo
due_textNo
priorityNo
cancelledNo
scheduledNo
depends_onNo
recurrenceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The description discloses non-obvious behaviors: semantic fields are passed to obsidian-writer for final Markdown formatting, and dependencies are accepted but not sent. This goes beyond a simple 'create task'. However, it does not describe return values, failure modes, or vault prerequisites.

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 four concise sentences with purpose first, usage guidance second, and technical caveats last. No redundant or filler content.

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

Completeness2/5

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

With 15 parameters, no annotations, and no schema descriptions, the description is too sparse to fully guide invocation. It omits parameter meanings, date formats, vault targeting, and expected output, making it incomplete for correct usage.

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

Parameters2/5

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

The schema has 0% description coverage and the description does not explain individual parameters. It only generalizes that semantic fields should be passed and notes depends_on is ignored, leaving 14 other parameters unspecified.

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 first sentence clearly states 'Create a structured Obsidian Tasks-compatible task in a vault', specifying the verb, resource, and format. This distinguishes it from sibling tools like obsidian_create_note and obsidian_list_tasks.

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 explicitly states when to use it: 'Use when the user asks for a task, todo, manual reminder, or pending action.' It provides clear trigger conditions, though it does not mention alternatives or exclusion cases.

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

obsidian_list_addA

Add one or more unchecked items to an Obsidian list in the configured default vault. Use when the user asks to add items to a named list. Before using this tool, call obsidian_list_lists when there is doubt about the exact list name.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
list_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that items are added as 'unchecked' and that it operates on a 'configured default vault,' which adds some context. However, it omits important behaviors like whether the list must already exist, whether it appends to the end, and any idempotency or side-effect details. The description is not egregiously opaque but lacks depth.

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 the core purpose in the first sentence and usage guidance in the second. It is front-loaded and free of unnecessary detail, making it easy for an agent to quickly grasp the tool's function and prerequisite actions.

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 tool with 2 parameters and an output schema, the description provides adequate context: it states what the tool does, when to use it, and how to resolve ambiguity about list names. It does not detail edge cases like duplicate handling or list creation, but the output schema likely covers return values. Slight gaps remain around behavioral specifics, but overall it is sufficiently complete.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only vaguely references the parameters: 'items' are 'unchecked items' and 'list_name' is a 'named list' in the default vault. It does not clarify the expected format of list_name (exact name vs. path) or items (e.g., markdown formatting). The little information provided is inferable from parameter names, so the description adds minimal value beyond the schema.

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 the tool's function: adding one or more unchecked items to an Obsidian list in the default vault. It uses a specific verb ('add') and resource ('list'), and differentiates from sibling tools like obsidian_list_remove and obsidian_list_update by focusing on addition.

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?

Explicitly states when to use: 'when the user asks to add items to a named list.' It also directs users to call obsidian_list_lists when the list name is uncertain, providing a clear alternative for name resolution. However, it does not explicitly exclude related tools like obsidian_append_note, so it misses some negative guidance.

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

obsidian_list_listsA

List existing Obsidian lists in the configured default vault. Use before adding/removing/updating list items when the user gives an approximate list name. Prefer an existing compatible list to avoid creating duplicates such as mercado, compras, or lista-de-compras.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/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 mentions the default vault scope and frames the operation as a read-only lookup ('List existing... avoid creating duplicates'), implying no side effects. It does not specify return format, but the output schema exists and the tool is simple.

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?

Three concise sentences, with the primary purpose front-loaded in the first sentence. Each subsequent sentence adds clear usage guidance without repetition or fluff.

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?

For a zero-parameter, output-schema-provided tool, the description completely covers its purpose, when to use it, and why it matters. The mention of duplicate avoidance (e.g., mercado, compras) gives practical context for real-world usage.

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 description need not explain parameter semantics. The baseline of 4 applies because there is no parameter complexity to clarify and schema coverage is 100% by virtue of having an empty schema.

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 the tool's verb and resource: 'List existing Obsidian lists in the configured default vault.' It distinguishes itself from sibling tools like obsidian_list_tasks and obsidian_list_notes by focusing specifically on lists rather than notes or tasks.

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?

Explicitly instructs when to use the tool: 'before adding/removing/updating list items when the user gives an approximate list name.' It also provides a clear rationale—'Prefer an existing compatible list to avoid creating duplicates'—which helps the agent decide between this and mutation tools.

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

obsidian_list_notesA

List existing notes in the configured default vault. Use before creating or updating a note when the user mentions a note by an approximate name. Prefer an existing compatible note instead of creating a duplicate.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing side effects. It implicitly indicates a read-only operation via 'List', and adds context about the default vault and duplicate avoidance. However, it does not explicitly state that it makes no modifications, which could be ambiguous given the mutation-heavy sibling set.

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 concise sentences: the first delivers the core purpose, the second adds actionable usage guidance. No redundant text or filler, every sentence earns its place.

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 tool's simple no-parameter interface and the presence of an output schema (so return values need no explanation), the description fully covers purpose and usage. It is complete for the level of complexity.

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 baseline is 4. The description avoids cluttering with parameter details, which is appropriate since there are none to explain.

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 the verb ('List') and resource ('existing notes') with a specific scope ('configured default vault'). It distinguishes itself from siblings like obsidian_read_note (reading a single note) and obsidian_create_note (creating) by explicitly framing its purpose as a preliminary step to avoid duplicates.

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?

Provides clear when-to-use guidance: before creating or updating when the user gives an approximate note name. It implies when-not-to-use (when you have an exact name, use read_note) but does not explicitly name alternatives, so it falls just short of full explicit exclusions.

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

obsidian_list_removeA

Remove one or more items from an Obsidian list in the configured default vault. Use when the user asks to remove items from a named list. Before using this tool, call obsidian_list_lists when there is doubt about the exact list name.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
list_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the burden of behavioral disclosure. It states the basic removal action but does not mention permanence, behavior when a list or item is not found, side effects, or permissions. For a mutating tool, this is insufficient transparency.

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 concise sentences with no redundant words. The first sentence states the purpose directly, and the second adds practical usage guidance. 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 simple tool with two plain string/array parameters and an output schema, the description covers the core purpose and usage, including a helpful precaution about list names. It lacks some behavioral details, but given the tool's simplicity and the existence of an output schema, it is reasonably 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 coverage is 0%, so the description must compensate. It does clarify that 'items' are removed one or more at a time and that 'list_name' refers to an exact named list. However, it does not provide details on string formatting, whether items must already exist, or any constraints, leaving some gaps.

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 the action ('Remove'), the resource ('Obsidian list'), and the scope ('configured default vault'). It distinguishes itself from sibling tools like obsidian_list_add and obsidian_list_update by focusing specifically on removal.

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?

It explicitly says to use when the user asks to remove items from a named list, and provides a conditional prerequisite to call obsidian_list_lists if the exact list name is uncertain. This gives clear usage context and points to a relevant alternative/verification step.

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

obsidian_list_tasksA

List structured Obsidian Tasks-compatible tasks from a vault. Use when the user asks what tasks/todos/reminders are pending, completed, cancelled, or all. By default lists pending todo tasks from the configured default vault.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
vaultNo
statusNotodo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, description carries full burden. It discloses default status (todo), default vault behavior, and scope (lists tasks, not files or notes). This conveys the read-only nature implicitly and adds useful context about how the tool behaves by default, even though it doesn't discuss edge cases like pagination or limit handling.

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?

Three sentences pack purpose, usage, and default behavior with no fluff. The core action is front-loaded, and every sentence adds information. This is concise and well-structured.

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?

Given the tool has an output schema (thus return format is already defined), the description is complete enough: it covers purpose, when to use, and default behavior. It mentions vault selection and task statuses, covering most relevant scenarios. It could add a mention of the limit parameter, but that's a minor gap given the output schema and straightforward functionality.

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 0%, so description must compensate. It explains status values (pending, completed, cancelled, all) and mentions vault (default vault), but does not explain the 'limit' parameter at all. Since limit is a common parameter and schema only provides the name, description partially compensates but leaves one parameter ambiguous, so score stays average.

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 it lists structured Obsidian Tasks-compatible tasks from a vault, which is a specific verb+resource (list tasks). It also differentiates from siblings by focusing on tasks rather than notes, lists, or other operations, and mentions statuses (pending, completed, cancelled, all) that align with the tool's unique role.

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?

Explicitly says 'Use when the user asks what tasks/todos/reminders are pending, completed, cancelled, or all,' providing clear context on when to invoke. It does not name alternatives or exclusions, but the guidance is specific and distinguishes this from siblings like obsidian_list_lists or obsidian_read_inbox.

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

obsidian_list_updateA

Update list items in an Obsidian list in the configured default vault. Use when the user asks to rename/change existing list items. Before using this tool, call obsidian_list_lists when there is doubt about the exact list name.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_nameYes
new_itemsYes
old_itemsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It only states the basic operation and a prerequisite, but does not disclose how old_items and new_items are mapped (e.g., replacement semantics), error handling when old_items are not found, or whether the modification is irreversible. This is a significant gap for a mutation tool.

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 extremely concise, with the main action in the first sentence and usage guidance in the second. It is front-loaded, free of filler, and each 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 relatively simple 3-parameter tool, the description covers the core purpose, when to use it, and a useful prerequisite. The output schema likely documents return values, so that omission is acceptable. However, it lacks explicit parameter semantics and edge-case behavior, making it not fully 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?

The schema has 0% description coverage, so the description must compensate. It implies list_name is the list identifier and old_items/new_items correspond to existing and desired items, respectively. However, it does not explicitly describe each parameter or their expected format (e.g., full list vs. partial), providing only minimal clarity.

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 the tool updates list items in an Obsidian list, with a specific verb ('update') and resource ('list items'). It also notes the scope ('configured default vault') and differentiates from sibling tools like obsidian_list_add and obsidian_list_remove by focusing on changing existing items.

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 says when to use this tool: 'Use when the user asks to rename/change existing list items.' It also provides a concrete instruction to call obsidian_list_lists first if there is doubt about the exact list name, which is clear guidance for selection and prerequisite usage.

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

obsidian_read_inboxA

Read inbox items for a specific day from the configured default vault. Use when the user asks what was captured/saved in the inbox today or on a specific date. Date must be YYYY-MM-DD; when omitted, obsidian-writer uses today.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
vaultNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the date default ('when omitted, obsidian-writer uses today') and mentions the configured default vault, adding useful behavior. However, it doesn't address edge cases like invalid dates or vault override behavior, making it adequate but not rich.

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 sentences, front-loaded with the core purpose, followed by usage and date format. Every sentence contributes value with no redundancy or filler, earning a 5.

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 tool with an output schema and only optional parameters, the description covers the essential aspects: purpose, usage, date format, and default behavior. The only notable gap is the missing explanation of the vault parameter, but given the tool's simplicity and presence of an output schema, this is a minor omission.

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?

With 0% schema description coverage, the description must compensate. It explains the date parameter format and default ('Date must be YYYY-MM-DD; when omitted, uses today'), but it does not explain the vault parameter at all, leaving its semantics ambiguous. Partial compensation justifies a 3.

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 'Read inbox items for a specific day from the configured default vault,' specifying the verb (read), resource (inbox items), and scope (specific day). This distinctively separates it from siblings like obsidian_read_note (reads a note) and obsidian_append_inbox (writes to inbox), earning a 5.

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?

Explicitly provides a use case: 'Use when the user asks what was captured/saved in the inbox today or on a specific date.' This is clear context, though it doesn't mention when not to use it or name alternative tools explicitly, so it stops short of a 5.

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

obsidian_read_noteA

Read an existing note from the configured default vault. Use before appending to a note or answering about its content. Use the slug returned by obsidian_list_notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It says 'Read' and 'existing note,' implying a read-only operation, and adds context about the default vault. However, it does not disclose details such as error behavior if the note is missing, or explicit confirmation that it returns the note content, though an output schema exists.

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, front-loaded with the core purpose ('Read an existing note from the configured default vault'), followed by concise usage guidance. Every sentence earns its place without redundancy.

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 tool with an output schema, the description covers purpose, input source, and when to use it. It could add error-handling notes, but the output schema likely covers return values, and the description is sufficiently complete for an agent to select and invoke the tool.

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 sole parameter 'slug' has no schema description, but the description explains it is the slug returned by obsidian_list_notes, giving practical meaning and reducing ambiguity. This compensates for the lack of schema-level documentation.

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 the tool's function with a specific verb and resource: 'Read an existing note from the configured default vault.' It distinguishes from sibling tools like obsidian_append_note and obsidian_list_notes by specifying the read intent and the prerequisite slug from obsidian_list_notes.

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 explicitly instructs when to use the tool: 'Use before appending to a note or answering about its content,' and provides the prerequisite of using the slug from obsidian_list_notes. While it does not explicitly mention when not to use it or alternative tools like obsidian_read_inbox, the context is clear.

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.

  1. 13 tool updatesv0.1.0
    • First observedobsidian_append_inbox
    • First observedobsidian_append_note
    • First observedobsidian_create_note
    • First observedobsidian_create_or_append_note
    • First observedobsidian_create_task
    • First observedobsidian_list_add
    • First observedobsidian_list_lists
    • First observedobsidian_list_notes
    • First observedobsidian_list_remove
    • First observedobsidian_list_tasks
    • First observedobsidian_list_update
    • First observedobsidian_read_inbox
    • First observedobsidian_read_note

TDQS

A3.9/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target distinct resources and actions (list operations vs note operations vs tasks vs inbox). The only potential confusion is among create_note, append_note, and create_or_append_note, but descriptions clarify their intended use cases.

Naming Consistency4/5

All tools use the obsidian_ prefix and snake_case. However, list operations use a noun-first pattern (list_add, list_remove) while others use verb-first (read_note, create_task), which is a minor structural inconsistency.

Tool Count5/5

13 tools is well within the ideal range for a domain-specific server focused on notes, lists, tasks, and inbox. Each tool has a clear role and contributes to the overall functionality.

Completeness3/5

Core workflows are covered (create/read/append notes, list management, tasks, inbox). Gaps include no delete for notes, no update/complete for tasks, and no explicit list creation, but these can often be worked around.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides an MCP server that allows AI assistants to interact with Obsidian vaults, enabling reading/writing notes, managing metadata, searching content, and working with daily notes.
    37
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server providing tools to interact with Obsidian via the Local REST API community plugin.
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that provides read and write access to an Obsidian vault by interacting directly with markdown files on disk. Supports searching, listing, reading, creating, editing, and appending notes without requiring any Obsidian plugins.
    3,699 npm
    ISC