Skip to main content
Glama
hanoak

sample-notes-mcp-server

by hanoak

sample-notes-mcp-server

A tiny Model Context Protocol (MCP) server for saving, listing, searching, and deleting text notes — over stdio.

It knows nothing about any particular client. It just speaks MCP over stdio, so any MCP client (Claude Desktop, Claude Code, or your own) can use it. Notes persist as a JSON file on disk.

Install

No install required — run it straight from npm with npx:

npx sample-notes-mcp-server

Or install it globally:

npm install -g sample-notes-mcp-server
sample-notes-mcp-server

Related MCP server: live2d-mcp

Usage

sample-notes-mcp-server [notes-file]
  • notes-file (optional) — path to the JSON file where notes are stored. Defaults to ./notes.json in the current working directory. The file is created on first write.

The server communicates over stdio: stdout is reserved for the MCP protocol, so all human-facing logging goes to stderr. You normally don't run it by hand — an MCP client launches it for you (see below).

Tools

Tool

Arguments

Description

add_note

text: string

Save a short text note. Returns the new note's id.

list_notes

(none)

List all saved notes.

search_notes

query: string

Find notes containing query (case-insensitive substring match).

delete_note

id: number

Delete a saved note by its id.

Each note is stored as { id, text, createdAt }, where id auto-increments and createdAt is an ISO 8601 timestamp.

MCP client configuration

Add the server to your MCP client's config. Most clients use a JSON block like this:

{
  "mcpServers": {
    "notes": {
      "command": "npx",
      "args": ["-y", "sample-notes-mcp-server", "/absolute/path/to/notes.json"]
    }
  }
}

The trailing path argument is optional — omit it to use ./notes.json relative to the client's working directory. Using an absolute path is recommended so your notes land in a predictable place.

Claude Desktop

Add the block above to claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Then restart Claude Desktop.

Claude Code

claude mcp add notes -- npx -y sample-notes-mcp-server /absolute/path/to/notes.json

Development

npm install      # install dependencies
npm run build    # compile TypeScript to dist/
npm run start    # run the built server
npm run smoke-test  # spawn the built server via a real MCP stdio client and exercise every tool

The build uses a two-config split: tsconfig.json drives the editor and typecheck (and covers the smoke test), while tsconfig.build.json excludes the smoke test so it never ships in dist/.

License

MIT — see LICENSE.

Available Tools

4 tools
add_noteA

Save a short text note for later. Returns the new note's id.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe note text to save.

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 should bear the full burden. It mentions saving and returning an ID, but lacks details on side effects, constraints, or error behavior.

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 sentences, 12 words, front-loaded with action and result. Extremely concise.

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?

Given the tool's simplicity (1 param, no output schema), the description adequately covers purpose and return value, though it could mention potential issues like duplicate checking.

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 100%, so parameter description is already covered. The description adds no additional meaning beyond the schema.

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 clearly states the tool saves a short text note and returns its ID, distinguishing it from sibling tools like list_notes, search_notes, and delete_note.

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?

No explicit usage guidance or comparisons to siblings are given, but the purpose is clear enough that an agent can infer when to use it.

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

delete_noteA

Delete a saved note by its id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe id of the note to delete.

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It accurately indicates a destructive action, but does not explicitly state whether the deletion is permanent or if any permissions are required. The behavior is implied, but additional clarity would be beneficial.

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 consists of a single, clear sentence that efficiently conveys the tool's purpose without any unnecessary words or fluff.

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 delete operation with one parameter and no output schema, the description is largely adequate. It could be improved by noting irreversibility or confirmation requirements, but it is sufficiently complete for an agent to understand the tool's core function.

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 100% as the only parameter 'id' is described in the schema. The tool description does not add any additional meaning beyond what the schema already provides.

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 clearly states the action 'delete', the resource 'saved note', and the method 'by its id'. It distinguishes itself from sibling tools like add_note, list_notes, and search_notes by specifying the destructive operation.

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 usage when a note needs to be deleted, but it does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusion criteria.

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 saved notes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations exist, and the description lacks behavioral details such as whether the operation is read-only, the scope of notes returned, or any pagination/limits.

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, efficient sentence with no wasted words. It is front-loaded and to the point.

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?

Given no output schema, the description should clarify what is returned (e.g., list of note IDs/titles). It does not, leaving the agent without key response expectations.

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?

There are no parameters; schema coverage is 100% by default. The description adds no param-specific details, but none are needed.

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 clearly states the verb 'list' and resource 'notes', distinguishing it from sibling tools like add_note, search_notes, and delete_note.

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 is provided on when to use list_notes versus alternatives like search_notes. The agent has no context for choosing this tool over similar ones.

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

search_notesA

Find saved notes containing the given text (case-insensitive).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSubstring to search for.

TDQS

A3.9/5.0
Behavior3/5

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

The description adds case-insensitivity as a behavioral trait not in the schema. However, it does not disclose search scope (title/body), ordering, pagination, or return format. With no annotations, the burden is higher.

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?

Single sentence, no wasted words. Efficiently conveys the essential action and a key behavioral detail.

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 simple search tool, the description is adequate but lacks output format details (e.g., returns note IDs, full notes) and does not mention ordering or pagination. Could be more complete.

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?

Schema has 100% coverage with parameter description 'Substring to search for.' The description adds 'case-insensitive,' which provides important search behavior not in the schema.

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 clearly states the tool finds saved notes containing given text, with case-insensitive matching. It distinguishes from siblings: list_notes lists all, add_note adds, delete_note deletes.

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?

Usage is implied by the tool name and description: use when you need to search notes by text. No explicit when-to-use or when-not-to-use guidance, nor mention of alternatives.

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. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.0
    • First observedadd_note
    • First observeddelete_note
    • First observedlist_notes
    • First observedsearch_notes

TDQS

A4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose (add, list, search, delete) with no overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (add_note, list_notes, search_notes, delete_note).

Tool Count5/5

4 tools is well-scoped for a simple notes application, covering core operations without excess.

Completeness4/5

Basic CRUD is covered except update; search provides an alternative to get-by-id. Minor gap.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/hanoak/sample-notes-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server