Markdown Frontmatter MCP
markdown-frontmatter-mcp
A Model Context Protocol (MCP) server that queries Markdown files by front matter metadata. Designed for Obsidian vaults and other Markdown-based knowledge bases.
The Problem
You have a Markdown knowledge base (Obsidian, etc.) with front matter like:
---
created: 2025-12-09
updated: 2025-12-11
tags: [ai-systems, strategy]
---You want to ask an AI: "What have I been thinking about [X] lately?"
Existing tools can search by keywords or do semantic search, but none let you query by front matter metadata — filtering by tags AND recency.
The Solution
This MCP server exposes one tool: query_recent_notes
query_recent_notes(
tags: ["ai-systems"], # Filter by these tags (matches ANY)
days: 7, # How far back to look
folders: ["thoughts"], # Which folders to search
limit: 10 # Max results
)Returns:
File path
Title (from H1 or filename)
Tags
Created/updated dates
Excerpt (first ~200 chars)
Installation
From PyPI (coming soon)
pip install markdown-frontmatter-mcpFrom Source
git clone https://github.com/caffeinatedwes/markdown-frontmatter-mcp
cd markdown-frontmatter-mcp
pip install -e .Configuration
Environment Variable
Set KB_PATH to point to your knowledge base:
export KB_PATH=/path/to/your/obsidian/vaultMCP Client Configuration
TypingMind
Add to your MCP config:
{
"mcpServers": {
"markdown-kb": {
"command": "python3",
"args": ["/path/to/markdown-frontmatter-mcp/src/server.py"],
"env": {
"KB_PATH": "/path/to/your/obsidian/vault"
}
}
}
}Claude Desktop
Add to ~/.config/Claude/claude_desktop_config.json:
{
"mcpServers": {
"markdown-kb": {
"command": "python3",
"args": ["/path/to/markdown-frontmatter-mcp/src/server.py"],
"env": {
"KB_PATH": "/path/to/your/obsidian/vault"
}
}
}
}Usage Examples
Once configured, you can ask the AI:
"Get my recent thinking on AI systems"
The AI will call:
query_recent_notes(tags=["ai-systems"], days=7)"What personal growth stuff have I been working on?"
query_recent_notes(tags=["personal-growth", "therapy"], days=14)"Catch me up on what's been on my mind"
query_recent_notes(days=3, limit=5)Front Matter Requirements
For files to be queryable, they need YAML front matter with:
createdordate: When the note was created (YYYY-MM-DD)updated(optional): When last meaningfully edited (YYYY-MM-DD)tags(optional): List of tags for filtering
Example:
---
created: 2025-12-09
updated: 2025-12-11
tags:
- ai-systems
- knowledge-management
---
# My Note Title
Content here...How It Works
Walks the specified folders in your knowledge base
Parses YAML front matter from each
.mdfileFilters by:
Date:
createdorupdatedwithin thedayswindowTags: matches ANY of the specified tags
Returns results sorted by most recently touched
Skipped Directories
The server automatically skips:
.obsidian.git.smart-env.versiondbnode_modulesAny directory starting with
.
Development
Testing Locally
# Set your KB path
export KB_PATH=~/your-obsidian-vault
# Run the server directly (for testing)
python3 src/server.pyThen send JSON-RPC messages via stdin:
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"query_recent_notes","arguments":{"tags":["ai-systems"],"days":7}}}License
MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/caffeinatedwes/markdown-frontmatter-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server