Ygdria MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| YGDRIA_ETAPI_URL | No | The base URL of the Ygdria ETAPI server, e.g. http://127.0.0.1:4318. Must be an HTTP(S) origin without path. Defaults to http://127.0.0.1:4318. | http://127.0.0.1:4318 |
| YGDRIA_ALLOW_WRITE | No | Whether to enable write tools. Set to 'true' to allow write operations. Defaults to 'false'. | false |
| YGDRIA_CONFIG_FILE | No | Path to an alternative INI configuration file. Defaults to ygdria-mcp.ini in the project root. | ygdria-mcp.ini |
| YGDRIA_ETAPI_TOKEN | No | Your ETAPI token. If not set, the token from the configuration file (ygdria-mcp.ini) is used. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_tree_overviewA | Explore roots or a placement's descendants automatically within node, depth, item-byte, and request budgets. Pass returned continuation to continue; depth-limited nodes are listed separately. Byte budget covers items; continuation is additional bounded navigation data. |
| get_notesA | Read up to 50 notes with per-note results. Choose metadata, excerpt, or full Markdown; a byte budget defers remaining IDs for another call. Protected notes remain inaccessible. |
| get_sectionA | Read a unique heading section body and current version. Pass the returned content unchanged as oldText to replace_section; headingPath lists ancestor titles and the target heading. |
| append_contentA | Append Markdown blocks (or literal code) to the latest note without replacing existing content. Required idempotencyKey makes retries safe for 30 days on the same local Ygdria database. Optionally require expectedVersion. |
| update_tagsB | Add and remove tags on the latest note without replacing unrelated tags. Additions win if a tag appears in both lists. |
| replace_sectionA | Replace the body under a unique hierarchy of heading titles, preserving its heading and all outside Tiptap nodes. Use get_section first. oldText is the exact returned Markdown section body, including nested subsections. Requires current expectedVersion. Ambiguous paths fail atomically. |
| move_placementsA | Move up to 50 placements sequentially. Each move is independent; returns per-item results and partial success, without cross-request atomicity. Stops on authentication or permission errors. |
| search_notesB | Search Ygdria notes through ETAPI. Optionally limit results to a placement and all its descendants. Results use noteId for follow-up note tools; snippets are plain text. |
| search_by_tagA | Find notes with an exact Ygdria tag, optionally limited to a placement and all its descendants. |
| list_tagsB | List all tags available through Ygdria ETAPI. |
| list_tree_rootsA | List only top-level tree nodes, paginated. Use resolve_tree_nodes for direct lookup or get_tree_overview for a budgeted overview. |
| get_tree_nodeC | Read compact metadata for exactly one placement node. |
| list_tree_childrenB | List direct child placement nodes, paginated. Use hasChildren to decide whether further expansion is useful. |
| get_tree_subtreeA | Read one placement and its descendants within explicit depth and node limits; use get_tree_overview to explore across roots within a response budget. |
| resolve_tree_nodesB | Find candidate placement nodes by a title fragment, then navigate with their placementId values. |
| get_noteB | Read a note through ETAPI. Read current content before replacing existing text; retain the returned version. A current note resource or prior write response can also supply the version. |
| create_noteB | Create a note within the user-authorized task, including necessary notes for organizing or summarizing. Use a unique idempotencyKey; on an uncertain network result retry only with the same key and identical parameters within 30 days. |
| update_noteA | Update title, body, or tags using the current version from a read, resource, or prior write response. On conflict, this tool reads and returns the latest note; reconsider the edit and never retry the stale version. |
| edit_contentA | Apply atomic literal oldText/newText edits to a note read earlier with get_note. Each target must match exactly as expected; use dryRun to preview. |
| replace_contentA | Replace the complete Markdown body using the version from a prior get_note call as If-Match. |
| move_placementC | Move a placement tree node. placementId, not noteId, identifies the item being moved. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
The set has several overlapping clusters: tree exploration is split across list_tree_roots, get_tree_node, list_tree_children, get_tree_subtree, resolve_tree_nodes, and get_tree_overview, and content modification is split across update_note, edit_content, replace_content, append_content, and replace_section. Descriptions do provide guidance on when to use each, but an agent can still hesitate between the budgeted overview tools and the explicit subtree tools.
Tool names consistently use snake_case and a predictable verb_noun or verb_prep_noun pattern, such as search_notes, get_note, create_note, update_tags, replace_section, and move_placement. Singular/plural distinctions like move_placement versus move_placements are also clear and intentional.
With 21 tools, the server is on the heavy side for a note/tree API and has many specialized navigation and editing operations. The count is not extreme, but it is borderline enough that agents must choose among several similarly scoped tree and content tools.
The surface covers note search, reading, creation, updates, content editing, tag updates, and placement moves well. However, there are notable lifecycle gaps: no delete_note or delete_placement tools and no explicit tool for creating or deleting placement tree nodes, which may cause dead ends for full resource management.