Skip to main content
Glama

palace-mcp

MCP server that exposes an Obsidian vault to AI assistants via the Local REST API plugin.

Built with FastMCP. Agents can list, read, write, search, and delete notes — and read whichever note is currently open in Obsidian.

Prerequisites

  • Obsidian with the Local REST API plugin installed and running

  • Python 3.12+

  • uv (recommended) or pip

Copy your API key from the plugin settings in Obsidian before continuing.

Related MCP server: obsidian-local-mcp

Installation

git clone <repo-url> palace-mcp
cd palace-mcp
uv sync

Configuration

Variable

Required

Default

Description

OBSIDIAN_API_KEY

yes

Bearer token from the Local REST API plugin

OBSIDIAN_HOST

no

127.0.0.1

Host where Obsidian's REST API listens

OBSIDIAN_PORT

no

27123

Port for the REST API

OBSIDIAN_PROTOCOL

no

http

http or https

PALACE_APPEND_DENY

no

/Context/,/System/,Index.md

Comma-separated paths where append_note is blocked

When using HTTPS with the plugin's self-signed certificate, certificate verification is skipped automatically.

Running

Start the server over stdio (the default transport for MCP clients):

export OBSIDIAN_API_KEY="your-api-key"
uv run python server.py

Or via FastMCP:

uv run fastmcp run server.py

Cursor setup

Add to your MCP config (e.g. ~/.cursor/mcp.json):

{
  "mcpServers": {
    "obsidian-palace": {
      "command": "uv",
      "args": ["run", "python", "server.py"],
      "cwd": "/path/to/palace-mcp",
      "env": {
        "OBSIDIAN_API_KEY": "your-api-key-here"
      }
    }
  }
}

Restart Cursor or reload MCP servers after saving.

Tools

Tool

Description

list_notes

List files and folders. Pass a subdirectory path, or leave empty for the vault root.

read_note

Read a note's full contents by vault-relative path (e.g. People/Alice.md).

write_note

Create a new note or overwrite an existing one.

append_note

Append text to the end of a note. Creates the note if it doesn't exist.

search_notes

Full-text search; returns matching filenames ranked by relevance.

active_note

Return the contents of the note currently open in Obsidian.

delete_note

Permanently delete a note. Irreversible — use with care.

Append protection

Some vault paths are treated as overwrite-only. Appending to them can silently stack duplicate content inside a single note, which is hard to detect later.

By default, append_note is refused for paths matching:

  • /Context/ (any note under a Context folder)

  • /System/ (any note under a System folder)

  • Index.md (any file named Index.md)

Use write_note to replace these notes instead. Override the deny list with the PALACE_APPEND_DENY environment variable.

License

MIT

Available Tools

7 tools
active_noteA

Return the contents of the note currently open in Obsidian.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does convey that the operation is a read/return operation, which implies non-mutating behavior, but it doesn't say what happens if no note is open or whether the returned content includes metadata beyond the raw contents.

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 a single, direct, front-loaded sentence with no filler or redundant information. Every word contributes to defining the tool's purpose and behavior.

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 parameterless tool with an output schema, the description is sufficiently complete to guide invocation. It states what the tool returns and the context in which it applies, and it doesn't need to explain return values because the output schema already provides that structure.

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 there is no parameter semantics for the description to clarify. With 100% schema coverage and an empty properties object, the description's silence on parameters is appropriate and complete.

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 uses a specific verb ('Return') and a specific resource ('contents of the note currently open in Obsidian'). This clearly distinguishes it from siblings like read_note (which reads a note by identifier/path) and list_notes, because it targets the contextually active note rather than a user-specified one.

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: this tool is for retrieving the note currently open in Obsidian. It doesn't explicitly mention when not to use it or name alternatives such as read_note, but the condition ('currently open') is enough for an agent to infer the appropriate situation.

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

append_noteA

Append text to the end of a note (creates the note if it doesn't exist).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Since no annotations are provided, the description carries the behavioral disclosure burden. It does disclose a non-obvious side effect: the note is created if it does not exist. However, it does not mention whether a newline/separator is inserted, how path resolution behaves, or what happens on failure.

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 a single, front-loaded sentence with no filler. Every part earns its place by stating the operation, the target, and the creation behavior.

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-string-parameter tool with an output schema, the description covers the core behavior and the main gotcha (auto-creation). The remaining gaps are path semantics and explicit alternative routing, which are relatively minor given the sibling names and low complexity.

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 maps 'content' to 'text' and 'path' to 'note'. It does not explain what path should refer to, whether it is a filesystem path or note identifier, or whether content is appended verbatim. The compensation is thin given the lack of schema descriptions.

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 action ('Append text to the end of a note') on a clear resource ('note'). The parenthetical 'creates the note if it doesn't exist' adds a distinguishing behavior that separates it from similar siblings like write_note or read_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 clearly conveys when to use this tool: when the goal is to add content to an existing note, or create a note by appending initial text. It does not explicitly name alternatives or exclusions, but the append-versus-write context is clear 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.

delete_noteA

Permanently delete a note. Use with care — this is irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 behavioral disclosure burden. It explicitly states that deletion is permanent and irreversible, which is the most important behavioral trait for a destructive tool. It does not cover permissions or error behavior, but the key risk is clearly 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 short sentences with no filler. The operation is front-loaded, and the irreversibility warning immediately follows it, giving the agent the essential caution without extra prose.

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 simple one-parameter destructive tool with an output schema, the description is close to adequate. However, the lack of any detail about the path parameter's format or how the note is identified leaves a noticeable gap for correct 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 meaning to the 'path' parameter. An agent only knows that path is a required string and must infer what path format or location is expected.

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 clear verb-resource pair: 'Permanently delete a note.' The irreversibility warning and the deletion action clearly distinguish it from siblings like read_note, write_note, and search_notes.

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 intended use is implied by the operation itself: delete a note when it should be removed. However, the description gives no explicit guidance about when not to use it, nor does it mention any alternatives from the sibling set.

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

list_notesA

List files and folders. Pass a subdirectory path, or leave empty for the vault root.

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 must carry the behavioral burden. 'List' strongly implies a non-mutating read operation, and the description adds useful root/subdirectory behavior, but it does not explicitly state whether the listing is read-only, recursive, or sorted.

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 one sentence, front-loaded with the core action, and adds the parameter usage immediately. Every word earns its place with no filler or 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 one-parameter list tool with an output schema available, the description covers the essential invocation detail (directory or root). It could add a note about whether the listing is restricted to immediate children, but nothing critical is missing.

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

Parameters5/5

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

Schema coverage is 0%, but the description fully compensates by explaining the single parameter: 'Pass a subdirectory path, or leave empty for the vault root.' This adds meaning beyond the schema's bare 'directory' property and covers the default behavior.

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 uses a specific verb-resource pair ('List files and folders') and clarifies the scope by referencing the vault root and subdirectory paths. This distinguishes it from sibling tools like read_note, write_note, and delete_note, though it does not explicitly mention 'notes' in the first clause.

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 implies when to use the tool: whenever you need a directory listing, with a subdirectory path or the root. However, it does not explicitly contrast it with siblings like search_notes or read_note, so the guidance is present but only implicit.

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

read_noteA

Read a note's full contents by vault-relative path, e.g. 'People/Alice.md'.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/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 explicitly frames the operation as a read, clarifies that the full contents are returned, and defines the path format. It does not discuss error behavior for missing paths, but for a simple one-parameter read this is a minor gap.

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 a single, well-structured sentence with no wasted words. It front-loads the action, names the target, and includes a useful example; every element 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?

For a low-complexity tool with one required parameter and an output schema, the description is complete enough. It tells the agent exactly how to identify the note and what operation will be performed; nothing needed to invoke the tool correctly 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 input schema only defines 'path' as a required string with no description. The tool description adds essential meaning: the path is vault-relative and gives a concrete example. This compensates well for the 0% schema description coverage.

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 ('Read'), resource ('a note'), and the exact selection mechanism ('vault-relative path'). The example 'People/Alice.md' makes the meaning concrete, and 'full contents' helps distinguish this from listing or searching 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 makes the usage context clear: call this when you have a vault-relative path and need the full note contents. It does not explicitly name alternatives or exclusions, but the purpose is specific enough that an agent can route to it correctly among the sibling tools.

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

search_notesA

Full-text search the vault; returns matching filenames ranked by relevance.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral burden. It usefully discloses that results are filenames ranked by relevance, but it does not clarify search semantics like case sensitivity, partial matches, result limits, or whether the search is strictly read-only.

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 a single, well-structured sentence with no filler. It front-loads the core action and immediately follows with the result shape, making it easy to parse.

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 one-parameter search tool with an existing output schema, the description is mostly complete: it names the resource, the operation, and the output. Minor gaps remain around usage guidance and search behavior details, but these are not critical for a basic call.

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 only one string parameter, 'query', with 0% description coverage. The phrase 'Full-text search' gives it contextual meaning, but the description does not explicitly elaborate on query syntax, formatting, or edge cases, leaving the agent to infer the parameter's semantics from the tool name and context.

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 action ('Full-text search'), the target resource ('the vault'), and the output ('matching filenames ranked by relevance'). This immediately distinguishes it from siblings like list_notes and read_note.

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 tool's purpose implies when to use it: when the agent needs to find notes by full-text query. However, it does not explicitly mention alternatives or exclusion criteria, such as using list_notes when browsing without a search query, so usage guidance is only implied rather than stated.

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

write_noteA

Create a new note or OVERWRITE an existing one at the given vault-relative path.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/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 full burden of behavioral disclosure. It clearly exposes the destructive overwrite behavior, which is the most critical risk. It does not cover secondary side effects, but the core consequence is unambiguous.

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?

One efficient sentence with the action and destructive caveat front-loaded and the path qualifier appended. There is no filler, redundancy, or unnecessary detail.

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 two-string-parameter write operation with an output schema, the description covers the essential semantics: full overwrite and vault-relative path. Minor gaps such as directory creation or failure behavior exist, but the basic invocation requirements are satisfied.

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 0%, so the description must compensate. It usefully specifies that path is vault-relative, which is meaningful context absent from the schema. Content, however, is not elaborated beyond its parameter name, and no format or path conventions are given.

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 and resource: create or overwrite a note at a given vault-relative path. The explicit 'OVERWRITE' wording differentiates it from append_note and makes the tool's scope immediately clear.

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 implies full replacement and thereby hints at when to use this tool, but it never explicitly names append_note or states when to choose one over the other. An agent is left to infer the boundary between full-write and append behavior.

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. 7 tool updatesv0.1.0
    • First observedactive_note
    • First observedappend_note
    • First observeddelete_note
    • First observedlist_notes
    • First observedread_note
    • First observedsearch_notes
    • First observedwrite_note

TDQS

A4.1/5.0
Disambiguation5/5

Each tool maps to a distinct file operation: listing, reading, writing, appending, searching, accessing the active note, and deleting. There is no meaningful overlap between tool purposes.

Naming Consistency4/5

Most tools follow a clear verb_note pattern: read_note, write_note, append_note, delete_note, and search_notes. The deviations are minor: list_notes uses plural and active_note is adjective_noun, but the overall convention is still predictable.

Tool Count5/5

Seven tools is a well-scoped set for an Obsidian vault server. Each tool covers a necessary note operation without unnecessary bloat.

Completeness4/5

The core note lifecycle is covered: list, read, write, append, search, and delete. Missing operations like rename, move, or folder management are minor gaps that agents can usually work around by writing to a new path.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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 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
  • F
    license
    Not graded
    quality
    D
    maintenance
    A local MCP server that wraps the Obsidian CLI to give AI assistants direct access to read, edit, and manage notes within an Obsidian vault. It enables advanced operations such as frontmatter property management, context-aware searching, and the execution of internal Obsidian commands.
    2
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    A lightweight MCP server that enables AI assistants to securely read, create, and modify notes in an Obsidian vault, with support for semantic search and web scraping.
    5,361
    MIT

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/anis-meliti/palace-mcp'

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