Frontmatter MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FRONTMATTER_BASE_DIR | Yes | Base directory for files | |
| FRONTMATTER_CACHE_DIR | No | Cache directory for embeddings | FRONTMATTER_BASE_DIR/.frontmatter-mcp |
| FRONTMATTER_EMBEDDING_MODEL | No | Embedding model name | cl-nagoya/ruri-v3-30m |
| FRONTMATTER_ENABLE_SEMANTIC | No | Enable semantic search | false |
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
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {
"tasks": {
"list": {},
"cancel": {},
"requests": {
"tools": {
"call": {}
},
"prompts": {
"get": {}
},
"resources": {
"read": {}
}
}
}
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| query_inspectA | Get frontmatter schema from files matching glob pattern. Args: glob: Glob pattern relative to base directory (e.g. "atoms/**/*.md"). Returns: Dict with file_count, schema (type, nullable, examples). |
| queryA | Query frontmatter with DuckDB SQL. Args: glob: Glob pattern relative to base directory (e.g. "atoms/**/*.md"). sql: SQL query string. Reference 'files' table. Columns are frontmatter properties plus 'path'. Semantic search (when enabled and indexing is complete): - embedding: document embedding vector (NULL if not indexed) - embed('text'): converts text to embedding vector - array_cosine_similarity(a, b): similarity score (0-1) Returns: Dict with results array, row_count, and columns. |
| updateA | Update frontmatter properties in a single file. Args: path: File path relative to base directory. set: Properties to add or overwrite. Values are applied as-is (null becomes YAML null, empty string becomes empty value). unset: Property names to remove completely. Returns: Dict with path and updated frontmatter. Notes: - If same key appears in both set and unset, unset takes priority. - If file has no frontmatter, it will be created. |
| batch_updateA | Update frontmatter properties in multiple files matching glob pattern. Args: glob: Glob pattern relative to base directory (e.g. "atoms/**/*.md"). set: Properties to add or overwrite in all matched files. unset: Property names to remove from all matched files. Returns: Dict with updated_count, updated_files, and warnings. Notes: - If same key appears in both set and unset, unset takes priority. - If a file has no frontmatter, it will be created. - Errors in individual files are recorded in warnings, not raised. |
| batch_array_addA | Add a value to an array property in multiple files. Args: glob: Glob pattern relative to base directory (e.g. "atoms/**/*.md"). property: Name of the array property. value: Value to add. If value is an array, it's added as a single element. allow_duplicates: If False (default), skip files where value already exists. Returns: Dict with updated_count, updated_files, and warnings. Notes: - If property doesn't exist, it will be created with [value]. - If property is not an array, file is skipped with a warning. - Files are only included in updated_files if actually modified. |
| batch_array_removeA | Remove a value from an array property in multiple files. Args: glob: Glob pattern relative to base directory (e.g. "atoms/**/*.md"). property: Name of the array property. value: Value to remove. Returns: Dict with updated_count, updated_files, and warnings. Notes: - If property doesn't exist, file is skipped. - If value doesn't exist in array, file is skipped. - If property is not an array, file is skipped with a warning. - Files are only included in updated_files if actually modified. |
| batch_array_replaceA | Replace a value in an array property in multiple files. Args: glob: Glob pattern relative to base directory (e.g. "atoms/**/*.md"). property: Name of the array property. old_value: Value to replace. new_value: New value. Returns: Dict with updated_count, updated_files, and warnings. Notes: - If property doesn't exist, file is skipped. - If old_value doesn't exist in array, file is skipped. - If property is not an array, file is skipped with a warning. - Files are only included in updated_files if actually modified. |
| batch_array_sortA | Sort an array property in multiple files. Args: glob: Glob pattern relative to base directory (e.g. "atoms/**/*.md"). property: Name of the array property. reverse: If True, sort in descending order. Default is ascending. Returns: Dict with updated_count, updated_files, and warnings. Notes: - If property doesn't exist, file is skipped. - If array is empty, file is skipped. - If array is already sorted, file is skipped. - If property is not an array, file is skipped with a warning. - Files are only included in updated_files if actually modified. |
| batch_array_uniqueA | Remove duplicate values from an array property in multiple files. Args: glob: Glob pattern relative to base directory (e.g. "atoms/**/*.md"). property: Name of the array property. Returns: Dict with updated_count, updated_files, and warnings. Notes: - Preserves the order of first occurrence. - If property doesn't exist, file is skipped. - If array is empty or has single element, file is skipped. - If array has no duplicates, file is skipped. - If property is not an array, file is skipped with a warning. - Files are only included in updated_files if actually modified. |
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 9 tools
Each tool has a clearly distinct purpose: query_inspect for schema, query for SQL queries, update/batch_update for generic property updates, and specialized batch_array_* tools for array operations. No overlap in functionality.
All tools follow a consistent verb_noun pattern with underscores, using 'batch_' prefix for batch operations. Names like batch_array_add are predictable and clear.
With 9 tools, the server covers the essential frontmatter operations without being bloated. Each tool serves a specific need, and the count is well-scoped for the domain.
The tool set covers inspection, querying, and updating frontmatter, including batch operations and array manipulations. A minor gap is the lack of a dedicated tool to delete entire frontmatter blocks, though unset can remove properties.