Skip to main content
Glama
malganis35

Blog Helper MCP Server

by malganis35

Blog Helper MCP Server (FastMCP + uv)

Un serveur MCP (Model Context Protocol) d'exemple en Python utilisant FastMCP et géré avec uv.

Ce serveur expose des notes Markdown locales via des Tools et une Resource, avec protection contre les attaques de traversée de chemin (Path Traversal).

📖 Tutoriel Débutant

Pour apprendre à construire ce serveur pas à pas, consultez le guide complet : 👉 Lire le Tutoriel Débutant (tutorial/TUTORIAL.md)


Related MCP server: agent-notes-mcp

🚀 Démarrage rapide

1. Prérequis

  • uv installé (curl -LsSf https://astral.sh/uv/install.sh | sh)

  • Python >= 3.10

2. Installation

uv sync

3. Exécuter les tests du client MCP

uv run python client_test.py

4. Lancer le serveur

uv run python server.py

🛠️ Outils & Ressources exposés

Type

Nom / URI

Description

Tool

list_notes()

Liste les fichiers Markdown disponibles dans notes/

Tool

read_note(name)

Lit le contenu d'une note spécifique de manière sécurisée

Tool

search_notes(query)

Recherche les notes contenant un mot-clé

Resource

note://{name}

Expose une note comme ressource de contexte


🔗 Intégration dans Claude Desktop / Claude Code / Antigravity

Exemple de configuration claude_desktop_config.json ou mcp_config.json :

{
  "mcpServers": {
    "blog-helper": {
      "command": "uv",
      "args": [
        "--directory",
        "/chemin/absolu/vers/blog-helper-mcp",
        "run",
        "server.py"
      ]
    }
  }
}

Available Tools

3 tools
list_notesA

Liste l'ensemble des notes Markdown disponibles.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It clearly indicates a read-only listing operation with no destructive intent, but it does not mention output format, ordering, or whether full content or only metadata is returned. The presence of an output schema partially mitigates this 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, front-loaded sentence with no redundant words. Every part contributes to understanding the tool's basic purpose, and there is no filler or repeated information from the schema.

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 parameterless listing tool, the description is largely sufficient: it states the object, scope, and format. It could additionally clarify how it differs from read_note and search_notes, but given the simplicity and the existence of an output schema, the missing guidance is a minor gap.

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 the description needs to explain none. The schema coverage is effectively 100%, and the description adds no unnecessary parameter information. Baseline 4 is appropriate given the absence of parameters.

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 clear verb ('Liste') and a specific resource ('notes Markdown disponibles'), and indicates the scope ('l'ensemble'). It is distinguishable from siblings read_note and search_notes by its all-notes scope, though it does not explicitly contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is provided. The description implies it is for retrieving all notes, but it never mentions alternatives like read_note for a single note or search_notes for filtered results, so an agent must infer the appropriate choice.

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

read_noteA

Lit et renvoie le contenu complet d'une note Markdown par son nom de fichier.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

Without annotations, the description carries the behavioral burden. It states that the operation reads and returns full content, which implies a non-mutating read, but it does not disclose behavior for missing files, filename formats, or potential truncation. It provides basic transparency but not deep behavioral context.

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 element contributes to understanding the tool's purpose and the meaning of its key parameter.

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?

The tool is simple, has only one required parameter, and includes an output schema, so the description does not need to explain return values. The main missing element is guidance on what happens when the note does not exist or how filenames are resolved, but overall the description is adequate for correct invocation.

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 schema only names the parameter 'name' with no description, so the description's phrase 'par son nom de fichier' adds crucial meaning by clarifying that the parameter is a filename. It does not specify whether a full path or extension is required, but for a single-parameter tool this is reasonably sufficient.

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 'Lit et renvoie' (reads and returns) with a clear resource: the full content of a Markdown note identified by filename. This distinguishes it from sibling tools like list_notes and search_notes, which would not return file content.

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 implies usage when the caller already knows the note's filename, which is the key selection criterion. It does not explicitly mention list_notes or search_notes as alternatives for discovering filenames, but the context is clear enough for an agent to decide when to use this tool.

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

search_notesA

Renvoie la liste des noms de notes dont le contenu contient le terme recherché.

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, the description carries the full burden. It discloses the core behavior: returns only note names for notes whose content contains the term. It does not specify matching semantics such as case sensitivity, partial vs. exact matching, or whether titles are excluded from the search.

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?

A single, front-loaded sentence with no filler or repetition. Every word contributes to understanding the tool's 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 one-parameter search tool with an output schema present, the description is nearly complete: it identifies the input and the returned object (list of note names). It loses a point only because match semantics are not clarified.

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 provides only a string named 'query' with no description. The tool description adds meaning by clarifying that the query is the term searched within note content. However, it does not explain expected format, empty-string handling, or search nuances.

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 (Renvoie), a concrete resource (list of note names), and the selection criterion (note content contains the searched term). This clearly distinguishes it from list_notes and read_note even without naming them.

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: when you need to find notes by content matching a term. However, it does not explicitly mention alternatives or exclusion cases such as 'use list_notes to get all notes' or 'use read_note to fetch a full note.'

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.

  1. 3 tool updatesv0.1.0
    • First observedlist_notes
    • First observedread_note
    • First observedsearch_notes

TDQS

A3.6/5.0

Scored across 3 tools

Disambiguation5/5

Each tool serves a distinct purpose: listing, reading, and searching notes. There is no overlap or ambiguity in their functions.

Naming Consistency4/5

All tools follow the verb_noun pattern, but list_notes and search_notes use plural nouns while read_note uses singular, causing minor inconsistency.

Tool Count3/5

Three tools is on the low end, but for a simple read-only blog notes server, it is borderline acceptable. More tools might be expected for full blog management.

Completeness2/5

The server only covers reading and searching operations. It lacks create, update, and delete capabilities, which are significant gaps for a blog helper.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that gives AI agents read and write access to a folder of Markdown notes, supporting full-text search, reading, listing, and writing notes. It is deliberately small, with no dependencies beyond the MCP SDK, and includes proper path traversal protection.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Lets MCP clients search, read, create, append, replace, move, and batch-update local Markdown notes safely, with conflict detection via SHA-256 and optional managed update blocks, without requiring a vector database.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables managing local Markdown notes by creating, viewing, listing, and searching notes and their contents through MCP tools.
    -