lablog-mcp
Scans and parses local Markdown experiment notes, extracting date, changed parameters, results, and conclusions from headings, and exposes them as a chronological timeline or full note detail via MCP tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lablog-mcpShow me the timeline of my prompt tuning experiments this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
lablog-mcp 🧪
A lightweight, zero-dependency Model Context Protocol (MCP) server that transforms fragmented Markdown experiment notes into an interactive, chronological timeline for AI.
中文介绍
在进行 AI 调优、提示词工程(Prompt Engineering)、模型微调或算法开发时,很多开发者习惯用 AI 随手生成一篇篇 Markdown 实验记录。但随着实验积累:
历史记录碎片化,极难横向对比;
容易忘记“上次为什么放弃了这个参数”;
重新复现最佳结果时缺乏连贯的演进脉络。
lablog-mcp 是一个专为解决该痛点打造的轻量 MCP 插件服务。它让 AI 客户端(如 Claude Desktop、Cursor、Cline 等)拥有自动扫描并理解你本地 Markdown 笔记的能力。
只需对 AI 说一句:
“查看实验日志,帮我对比过去一周在提示词上的改动和最终采用结果。”
AI 即可自动调用该服务,提取关键维度:
时间与主题(Date & Topic)
实验改动(What was changed / Delta)
结果好坏评定(Outcome / Eval metrics)
决策理由(Decision & Rationale: 采纳还是放弃,以及核心原因)
Related MCP server: Obsidian MCP Tools
Features
⚡ Zero Hassle: Pure file-system driven. No heavy databases or external embedding servers required.
🔍 Smart Heuristics: Automatically detects section headings like
## 改动,## 结果,## 结论or## Changes,## Results,## Conclusion.🛡️ Strictly Read-Only: Guarantees zero writes or modifications to your original notes.
🕒 Three-Tier Date Fallback: Frontmatter
date→ FilenameYYYY-MM-DD→ File system timestamp (mtime).🤖 Universal MCP Support: Compatible with Claude Desktop, Cursor, Cline, and any MCP 1.x/2.x host.
Installation & Setup
1. Run with uvx (Recommended)
No manual clone needed:
uvx lablog-mcp2. Install via pip
git clone https://github.com/your-username/lablog-mcp.git
cd lablog-mcp
pip install -e .Client Configuration
Claude Desktop
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"lablog": {
"command": "python",
"args": ["-m", "lablog_mcp.server"],
"env": {
"LABLOG_NOTES_DIR": "C:/path/to/your/experiment/notes"
}
}
}
}Cursor
In Cursor Settings -> Features -> MCP Servers -> Add New MCP Server:
Name:
lablogType:
commandCommand:
python -m lablog_mcp.serverEnvironment Variables:
LABLOG_NOTES_DIR=C:/path/to/your/experiment/notes
Provided MCP Tools
Tool | Parameters | Description |
|
| Returns a chronological timeline of all scanned experiments with their deltas, outcomes, and decisions. |
|
| Retrieves the full markdown text and parsed metadata of a specific experiment. |
Note Writing Tips (Optional)
lablog-mcp is designed to be highly forgiving. Your notes can be as simple as:
# 实验:Temperature 调优
## 实验改动
将 temperature 从 0.7 降为 0.2。
## 实验结果
数学逻辑题推导正确率提升 15%。
## 结论
采用。低温极大降低了计算过程中的随机计算失误。Testing & Quality
Run the automated test suite:
pytest tests/ -vAll contributions, issue reports, and PRs are welcome!
License
MIT © 2026 Developer
Available Tools
2 toolsget_experiment_detailB
获取单篇实验笔记的完整原文、环境配置与结构化详情.
参数: file_path: 实验笔记的具体文件路径。
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the return includes full raw text, environment config, and structured details, which implies a read-only fetch. However, it never states read-only status explicitly, permission requirements, or whether a missing/invalid path errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded: the purpose sentence comes first, followed by the parameter gloss. No filler, though the parameter line largely restates the parameter name and could carry more value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be re-explained. For a single-parameter read tool this is adequate, but it omits how the agent should source a valid file_path and gives no relationship to the timeline sibling, leaving a gap in a multi-tool context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the single parameter, and it does label file_path as the specific path of the experiment note. That is the minimum viable meaning — it adds no format guidance, no relative-vs-absolute hint, and no indication of where a valid path is obtained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (获取/retrieve) and resource (单篇实验笔记/single experiment note), and enumerates what is returned: full original text, environment configuration, and structured details. The '单篇' (single) framing implicitly separates it from the get_experiment_timeline sibling, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: retrieving one specific note by path, as opposed to the timeline sibling. There is no explicit statement of when to prefer this tool over get_experiment_timeline, no prerequisites, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_experiment_timelineB
扫描指定目录下的 Markdown 实验笔记,提取改动、好坏评定与采纳决策,生成按时间排序的实验时间线.
参数: notes_dir: 存放实验笔记的目录路径。若不提供,优先读取环境变量 LABLOG_NOTES_DIR 或当前工作目录。 limit: 最多返回的实验条目数,默认 20。 topic: 可选的关键词过滤(如 'LoRA', 'prompt', 'temperature')。 order: 时间排序方式,'desc' (最新实验优先) 或 'asc' (最早实验优先)。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| order | No | desc | |
| topic | No | ||
| notes_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose genuine behavior beyond the schema: the notes_dir resolution fallback (env var LABLOG_NOTES_DIR, then cwd) and the default/output-limiting behavior. However it never states the read-only nature explicitly, nor what happens when the directory is missing or unreadable. Adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence purpose followed by a tight parameter list, with no filler or repetition. It is appropriately sized for a four-parameter tool, though the parameter block could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and all four parameters are documented in the description. The remaining gap is the absence of guidance on when to use this versus the sibling detail tool, which leaves the selection decision under-supported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply all parameter meaning, and it does: it explains notes_dir's fallback chain, limit's default of 20, topic's filter semantics with examples ('LoRA', 'prompt'), and supplies the 'desc'/'asc' enum values that the schema itself omits. Only minor formatting/path details are left out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb chain and resource: it scans Markdown experiment notes in a directory, extracts changes/ratings/decisions, and produces a time-ordered timeline. That is far more concrete than the tool name alone. It stops short of differentiating itself from the sibling get_experiment_detail, so it doesn't reach a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of the sibling get_experiment_detail, which is the obvious alternative for drill-down. The only contextual hints (sort order, topic filtering) are parameter semantics, not usage framing. An agent must infer when this tool is preferable.
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.
2 tool updates
v0.1.0- First observed
get_experiment_detail - First observed
get_experiment_timeline
TDQS
Scored across 2 tools
两个工具职责清晰:一个按目录聚合并生成时间线,另一个读取单篇笔记全文与结构化详情。二者的作用域(目录级 vs 单文件级)区分明确,仅因共享 get_experiment_ 前缀与同为只读获取操作,存在轻微的初始混淆可能。
两个工具均采用一致的 verb_noun 模式(get_experiment_timeline / get_experiment_detail),共享 get_experiment 前缀,风格统一、可预测。
仅 2 个工具,对于“实验笔记”这一域来说偏薄;不过服务定位较为聚焦(时间线浏览 + 单篇详情),勉强自洽。
覆盖了实验笔记的检索与查看(列表+详情),但完全缺少写入类操作,无法创建、更新或删除实验笔记,对“log(记录)”这一核心用途构成明显缺口。
Maintenance
Related MCP Connectors
Markdown notes in folders, with files, that your AI assistant can read, write and organise.
Markdown notes in folders, with files, that your AI assistant can read, write and organise.
Personal context for every AI: search, read, and write back to your private Markdown library.
Markdown notes and whiteboards your AI agent can read and write.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables reading and managing markdown note files from a specified directory through natural language interactions.-
- AlicenseNot gradedqualityDmaintenanceA read-only toolkit for searching and analyzing Markdown note directories and Obsidian vaults through AI clients. It enables metadata extraction, full-text search, and natural language querying of note content, tags, and backlinks.10 npm4AGPL 3.0
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with a local folder of Markdown notes, supporting listing, reading, searching, creating, and appending to notes with strict security boundaries.5MIT
- AlicenseAqualityBmaintenanceEnables AI clients to read Markdown notes from a single explicitly granted local folder, read-only, with strict containment against access outside that folder.1496 npmMIT