Skip to main content
Glama
omcar04

MCP Local File Saver

by omcar04

MCP Local File Saver

A Python-based MCP server for Claude Desktop that lets you save, append, read, and list local text notes.

Features

  • Save a note as a local .txt file

  • Append new content to an existing note

  • Append Claude’s response to a note

  • Read a note by title

  • List all saved notes

  • Expose saved notes through an MCP resource

  • Summarize note content with an MCP prompt

Related MCP server: NotePilot

Built With

  • Python

  • MCP Python SDK

  • Claude Desktop

  • uv

Project Structure

mcp-local-file-saver/
├── main.py
├── .gitignore
├── pyproject.toml
├── uv.lock
└── notes/   # ignored from git

MCP Capabilities

Tools

  • save_note(title, content)

  • append_note(title, content)

  • append_response_to_note(note_name, response_text)

  • read_note(title)

  • list_notes()

Resources

  • notes://all

Prompts

  • summarize_note(...)

Example Use Cases

You can ask Claude things like:

  • Save this response to mcp-learning

  • Append that answer to oracle-notes

  • Read my fav players note

  • List all my saved notes

  • Summarize my interview prep note

Setup

1. Clone the repo

git clone <your-repo-url>
cd mcp-local-file-saver

2. Install dependencies

uv sync

3. Run locally with MCP Inspector

uv run mcp dev main.py

4. Run with Claude Desktop

Add the server to your Claude Desktop config using your local Python interpreter inside .venv.

Example:

{
  "mcpServers": {
    "Local File Saver": {
      "command": "/absolute/path/to/project/.venv/bin/python",
      "args": [
        "/absolute/path/to/project/main.py"
      ]
    }
  }
}

Notes

  • Notes are stored locally in the notes/ folder

  • The notes/ folder is ignored in git

  • The server runs over stdio

Why I Built This

I built this project to get hands-on experience with MCP by creating a practical local productivity tool. It helped me understand how MCP tools, resources, and prompts work together in a real Claude Desktop integration.

Future Improvements

  • Support Apple Pages

  • Support Google Docs

  • Search notes by keyword

  • Read notes by exact filename

  • Add tags or metadata to notes

  • Add better summarization workflows

License

MIT

Available Tools

5 tools
append_noteB

Append content to an existing note. Fails if the note does not exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/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 behavioral burden, and it does disclose one important trait: the failure mode when the target note is absent. It does not state where content is appended, whether the operation is idempotent, what permissions are required, or how errors surface.

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?

Two short sentences with zero filler; the primary action is front-loaded and the constraint follows immediately. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 the key failure condition is covered. For a mutation tool with no annotations and 0% parameter coverage, though, the definition omits permissions, append position/ordering, and any note-creation guidance, leaving meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so both parameters (title, content) are undocumented in the schema and the description must compensate. The phrase 'append content to an existing note' loosely maps 'content' to the appended data and 'title' to the note identifier, but it never confirms this, so the mapping for the required 'title' parameter is left to inference.

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 states a specific verb ('Append') and resource ('an existing note'), making the core action unambiguous. It is clearly distinct from a hypothetical overwrite/create tool, though it never names siblings like save_note or append_response_to_note to sharpen the differentiation.

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?

'Fails if the note does not exist' implicitly signals that this is not for creating notes and that a creation tool is needed otherwise, which is useful routing context. However, it never explicitly says when to choose this over save_note or append_response_to_note, leaving the agent to infer the boundaries.

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

append_response_to_noteC

Append Claude's response text to an existing note.

ParametersJSON Schema
NameRequiredDescriptionDefault
note_nameYes
response_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. 'Append' implies mutation and 'existing note' implies a precondition, but it never states what happens if the note does not exist, whether it can create one, whether appends are reversible, or what the return looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or redundancy. It is efficiently written, though its brevity is partly under-specification rather than genuine density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and 0% parameter documentation, the description is too thin. An output schema exists so return values need no explanation, but preconditions, failure behavior, and the distinction from the append_note sibling are all missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both parameters. The description weakly echoes 'response text' and 'existing note', but does not clarify how note_name identifies a note (filename, title, path) or any constraints on response_text, so it fails to compensate for the coverage gap.

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 states a specific verb (append) and resource (note) plus the content type (Claude's response text), so the operation is unambiguous. However, it does nothing to distinguish itself from the sibling 'append_note', leaving the agent to guess why two append-like tools exist.

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?

The phrase 'an existing note' faintly implies the note must already exist (unlike save_note), but there is no explicit when-to-use guidance, no statement of what happens with a missing note, and no naming of alternatives such as append_note.

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

list_notesB

List all .txt files in the notes directory.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states a read-like list operation but doesn't clarify whether the listing is recursive, sorted, paginated, or subject to permissions, nor does it describe the return shape even though an output schema exists (which mitigates somewhat).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It is appropriately sized for a simple listing tool, though it could add a clause about ordering or recursion without becoming bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with an output schema, the description covers the essential purpose. However, with no annotations and no mention of ordering, filtering, or relationship to sibling read/save tools, it leaves meaningful gaps for an agent deciding when and how to invoke it.

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 baseline is 4. The description adds no parameter information, which is fine given there are none to document; the scope is only implied by the text and output schema.

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?

States a specific verb (List) and resource (.txt files in the notes directory), which is clear enough for an agent to understand. Siblings save_note, append_note, and read_note_by_filename are distinct operations, but the description doesn't explicitly differentiate itself from any of them beyond what the verb implies.

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 guidance on when to use this tool versus alternatives. An agent must infer that it should call this before read_note_by_filename to discover filenames, but the description provides no such routing or prerequisite context.

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

read_note_by_filenameA

Read a note by exact filename. Use notes://all to find the filename first.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about case sensitivity, whether partial names or paths are accepted, or what happens when the filename does not exist (error vs empty). For a lookup tool with zero annotation coverage this is a notable 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?

Two short sentences with no waste; the core action is front-loaded and the prerequisite follows it. Every sentence earns its place.

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?

An output schema exists, so return values need not be described, and the description supplies the one operational detail an agent needs: how to obtain the filename. Behavior on missing/invalid filenames is the only meaningful omission.

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?

Schema coverage is 0% and the single 'filename' parameter has no schema description, but the description compensates with the key semantic qualifier 'exact,' implying exact-match rather than fuzzy or prefix matching. It stops short of clarifying path handling or case rules, so it only partially covers the gap.

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?

States a specific verb and resource ('Read a note') and narrows it with 'by exact filename,' which distinguishes it from a general list/browse operation. It does not explicitly name a sibling, but the lookup-by-key semantics make it distinguishable from list_notes and the write siblings without opening the schema.

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?

Provides a concrete prerequisite step: consult notes://all to obtain the filename before calling. That is real routing guidance, though it points at a resource URI rather than naming the sibling list_notes, and it offers no when-not-to-use or exclusivity guidance.

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

save_noteC

Save a note to a local text file.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It says the note goes to a local text file but does not state overwrite vs create semantics (critical given the append siblings), filename derivation from title, permissions, or error behavior. For a write tool with zero annotation coverage this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste and the key fact front-loaded. It is efficient, though it is efficient at saying too little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with no annotations, no parameter documentation, and no stated overwrite/appending semantics. The output schema exists so return values need not be explained, but the write behavior itself is under-specified against a crowded sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, with two required parameters (title, content) documented only by their bare names. The description adds nothing about how title maps to a filename or how content is stored, and does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (save) and resource (note to a local text file), which is clear enough. However, it fails to distinguish itself from siblings like append_note and append_response_to_note — the boundary between 'save a note' and 'append to a note' is exactly what an agent needs and is left unaddressed.

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 guidance, no mention of alternatives, and no exclusions. With four sibling note tools, the description gives no signal for choosing save_note over append_note, which is a real selection risk.

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. 5 tool updatesv0.1.0
    • First observedappend_note
    • First observedappend_response_to_note
    • First observedlist_notes
    • First observedread_note_by_filename
    • First observedsave_note

TDQS

B3.2/5.0

Scored across 5 tools

Disambiguation4/5

save_note, append_note, and append_response_to_note have distinct purposes, though append_note and append_response_to_note overlap in that both append content to a note; the latter is specialized for Claude's response. The distinction is clear from descriptions.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (save_note, append_note, read_note_by_filename, list_notes), but append_response_to_note adds a qualifier that breaks the pattern slightly. Still largely predictable.

Tool Count5/5

Five tools are well-scoped for a local file note-taking server, covering create, append, read, and list operations. No redundant or trivial tools.

Completeness3/5

Core operations like create, append, read, and list are present, but there is no delete, rename, or update tool. Agents may hit dead ends when needing to remove or modify notes beyond appending.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    A Python MCP server that exposes note management tools (create, search, update, delete notes) over stdio, enabling Claude AI to manage notes through natural language conversation.
    8
    -
  • A
    license
    A
    quality
    D
    maintenance
    A beginner-friendly MCP server for managing personal notes. Enables Claude to create, list, read, search, update, and delete notes saved as Markdown files.
    6
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A note-taking MCP server for Claude-based agents that provides persistent markdown files for easily referable notes, supporting create, read, update, append, and delete operations.
    5
    Apache 2.0