Skip to main content
Glama
9Ninety
by 9Ninety

📝 MCP 注释

MCP 笔记封面图片

✨ 概述

MCP Notes Server是一款基于 MCP 协议构建的简易笔记应用。其目标是帮助用户记录和查看复杂的笔记和任务,同时利用 AI 模型,例如记录个人想法、笔记、灵感和见解。它无需创建项目文件,用户可以记录任何内容,而无需在项目内部公开。

该项目包括两个服务器:一个使用模型上下文协议 (MCP) 进行 AI 驱动的笔记管理的 Node.js 服务器,以及一个提供用户友好界面以便与笔记进行手动交互的 Web 服务器。

**注意:**本项目需要使用 DynamoDB 来存储笔记。您需要一个 AWS 账户才能使用它。AWS 为 DynamoDB 提供了慷慨的免费套餐,非常适合个人频繁使用且无需支付任何费用。


Related MCP server: Anki MCP Server

🎯 核心功能

  • 🖥️**双服务器架构:**用于 AI 驱动的笔记管理的 MCP 服务器和用于用户界面的 Web 服务器

  • 🤖**人工智能笔记:**通过人工智能互动记录想法、见解和任务

  • 🗂️**全面的笔记管理:**通过 AI 或 Web 界面创建、列出、检索、更新和删除笔记

  • 📋**可靠的存储:**使用 AWS DynamoDB 进行安全高效的笔记存储

  • 🔐**灵活的身份验证:**通过连接字符串或环境变量支持 AWS 凭证

  • 📝**独立于项目:**存储个人笔记而不影响项目文件或结构


🤖 模型支持

只要您的客户端支持 MCP,您就可以使用任何支持函数调用的模型。以下模型已测试并确认可以正常工作:

  • 克劳德3.5系列

  • 双子座 1.5 和 2.0 系列

  • GPT-4 系列

  • 米斯特拉尔大号

  • Grok-2

  • DeepSeek 聊天


🛠️ 安装

受到推崇的

直接使用npx或bunx运行,请参阅下面的示例。

选择

  1. 确保您的系统上安装了Node.js。

  2. 克隆此存储库并使用以下命令安装依赖项: npm install

  3. 配置 Claude Desktop 或任何其他工具,如下所示


⚙️ 凭证配置

连接字符串

dynamodb://<access_key>:<secret_key>@<region>/<table>

例如: dynamodb://AKIAXXXXXXXX:SKXXXXXXXX@us-east-1/mcp-notes

环境变量

  1. 导出AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY 。

  2. 在 URI 中提供不带凭证的连接信息: dynamodb://us-east-1/mcp-notes


🤖 与工具集成

克劳德桌面

将此代码片段添加到claude_desktop_config.json :

{
  "mcpServers": {
    "mcp-notes": {
      "command": "npx",
      "args": [
        "-y",
        "-p",
        "mcp-notes",
        "mcp-notes-server",
        "--dynamodb",
        "dynamodb://access_key:secret_key@region/table"
      ]
    }
  }
}

或本地磁盘上的文件:

{
  "mcpServers": {
    "mcp-notes": {
      "command": "node",
      "args": [
        "file://path/to/notes-mcp-server.js",
        "--dynamodb",
        "dynamodb://access_key:secret_key@region/table"
      ]
    }
  }
}

科迪

**注意:**目前,Cody 对 MCP 服务器的支持有限。
它仅允许连接一个服务器,并且无法进行工具调用。您需要使用 Web 界面创建和管理笔记,然后在 AI 聊天对话中引用它们。

将此代码片段添加到您的 VS Code 设置中:

{
  "openctx.providers": {
    "https://openctx.org/npm/@openctx/provider-modelcontextprotocol": {
      "nodeCommand": "node",
      "mcp.provider.uri": "file://path/to/notes-mcp-server.js",
      "mcp.provider.args": [
        "--dynamodb",
        "dynamodb://access_key:secret_key@region/table"
      ]
    }
  }
}

或者,与npx一起使用(不保证有效):

{
  "openctx.providers": {
    "https://openctx.org/npm/@openctx/provider-modelcontextprotocol": {
      "nodeCommand": "node",
      "mcp.provider.uri": "file:///usr/local/bin/npx",
      "mcp.provider.args": [
        "-y",
        "-p",
        "mcp-notes",
        "mcp-notes-server",
        "--dynamodb",
        "dynamodb://access_key:secret_key@region/table"
      ]
    }
  }
}

克莱恩

将此代码片段添加到cline_mcp_settings.json :

你会发现“新建任务”按钮旁边有一个“MCP 服务器”图标,然后有一个“编辑 MCP 设置”按钮来打开这个文件。

{
  "mcpServers": {
    "mcp-notes": {
      "command": "npx",
      "args": [
        "-y",
        "-p",
        "mcp-notes",
        "mcp-notes-server",
        "--dynamodb",
        "dynamodb://access_key:secret_key@region/table"
      ]
    }
  }
}

🚀 运行 Web 服务器

Web 服务器提供了一个用户友好的界面来管理您的笔记。您可以启动 Web 界面来管理您的笔记,为 AI 添加新笔记,或修改 AI 生成的笔记的部分内容。

npx -p mcp-notes mcp-notes-web-server --dynamodb "dynamodb://access_key:secret_key@region/table"
bun src/notes-web-server.ts --dynamodb "dynamodb://access_key:secret_key@region/table"

或者,使用npm run build进行编译并运行node dist/notes-mcp-server.js或node dist/notes-web-server.js

然后在浏览器中导航至http://localhost:3100查看笔记。


🔧 可用的 MCP 工具

列表注释

  • 输入: { tags?: string[] }

  • **输出:**所有注释的数组,可选择按标签进行过滤。

获取注释

  • 输入: { id: string }

  • **输出:**与给定 ID 匹配的单个注释对象,如果不存在匹配,则显示“未找到”消息。

写笔记

  • 输入: { id: string, title: string, summary: string, tags: string[], content: string }

  • **输出:**成功确认消息。

删除注释

  • 输入: { id: string }

  • **输出:**删除确认消息🚮。


📝 数据结构

注释使用以下结构存储:

  • id :笔记的唯一标识符。它应该具有描述性,并带有随机数字后缀,例如“meeting-notes-1362”。

  • title :笔记的标题。

  • summary :笔记内容的简短摘要。

  • tags :与笔记相关的标签数组(例如,[“meeting”,“project-x”])。

  • content :笔记的主要内容。


📸 截图

克劳德桌面

✅ 功能齐全

Claude Desktop 中 MCP Notes 工具调用截图Claude Desktop 中的 MCP Notes 资源截图

科迪

✅ 通过资源提及注释

❎ 不支持工具调用

Cody 中的 MCP Notes 截图

克莱恩

✅ 具有工具调用的完整功能

❓ 资源似乎不起作用;需要帮助。

Available Tools

4 tools
deleteNoteC

Deletes a specific note by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID of the note to delete

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Deletes' which implies a destructive mutation, but lacks details on permissions needed, whether deletion is permanent or reversible, error handling (e.g., invalid ID), or side effects. This leaves significant gaps for a destructive operation.

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 zero wasted words. It is front-loaded with the core action ('Deletes'), making it easy to scan and understand quickly.

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 destructive tool with no annotations and no output schema, the description is incomplete. It lacks critical information such as success/error responses, confirmation prompts, or behavioral nuances (e.g., cascading effects). The schema covers the parameter, but overall context for safe and effective use is insufficient.

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 description coverage is 100%, with the parameter 'id' documented as 'ID of the note to delete'. The description adds minimal value beyond this, only reiterating 'by its ID' without providing additional context like ID format or examples. Baseline 3 is appropriate given the schema does the heavy lifting.

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 clearly states the verb ('Deletes') and resource ('a specific note'), making the purpose unambiguous. It specifies 'by its ID' which helps differentiate it from siblings like 'listNotes' or 'writeNote', though it doesn't explicitly contrast with them in the description text.

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 description provides no guidance on when to use this tool versus alternatives like 'writeNote' for updates or 'getNote' for retrieval. It mentions the 'ID' parameter but doesn't explain prerequisites (e.g., note must exist) or exclusions (e.g., cannot delete non-existent notes).

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

getNoteB

Retrieves a specific note by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID of the note to retrieve

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 the tool retrieves a note, implying a read-only operation, but doesn't cover aspects like error handling (e.g., what happens if the ID is invalid), authentication needs, rate limits, or return format. This leaves gaps in understanding how the tool behaves beyond the basic action.

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, clear sentence with zero waste—it directly states the tool's purpose without redundancy. It's appropriately sized for a simple retrieval tool and front-loaded with the essential information.

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?

Given the tool's low complexity (single parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic action but lacks details on behavior, usage context, or output, which could be helpful for an agent. It meets the minimum viable standard but has clear gaps in completeness.

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 description coverage is 100%, with the parameter 'id' fully documented in the schema as 'ID of the note to retrieve'. The description adds no additional meaning beyond this, such as format examples or constraints. Since the schema does the heavy lifting, the baseline score of 3 is appropriate.

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 clearly states the action ('Retrieves') and resource ('a specific note by its ID'), making the purpose immediately understandable. It doesn't explicitly distinguish from sibling tools like listNotes (which likely lists multiple notes) or deleteNote (which deletes), but the specificity of 'by its ID' implies it's for fetching a single, known 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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like listNotes for browsing notes or writeNote for creating/updating, nor does it specify prerequisites (e.g., needing a valid note ID). Usage is implied by the action but lacks explicit context.

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

listNotesB

Lists all notes, or search notes with tags you seen in previous list operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional tags to filter notes. do not specify this if you didn't certainly sure what tags you want.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool can list all notes or search with tags, but fails to describe critical behaviors: whether it's read-only (implied but not stated), how results are returned (e.g., pagination, format), error conditions, or any rate limits. This leaves significant gaps for an agent to understand operational traits.

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?

The description is concise with two clear clauses, front-loading the main purpose ('Lists all notes') and adding a secondary function ('or search notes with tags'). There's no wasted text, though the phrasing 'tags you seen in previous list operation' is slightly awkward but still functional.

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 the tool's moderate complexity (list/search functionality), lack of annotations, and no output schema, the description is insufficiently complete. It doesn't explain return values, error handling, or behavioral constraints, leaving the agent with incomplete operational context. This is a significant gap for a tool without structured support.

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 input schema has 100% description coverage, with the 'tags' parameter well-documented in the schema itself. The description adds minimal value beyond the schema by mentioning tags are for filtering and should be used only if certain, but doesn't provide additional context like tag format examples or interaction details. This meets the baseline for high schema coverage.

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 clearly states the tool's purpose: 'Lists all notes, or search notes with tags'. It specifies the verb ('Lists'/'search') and resource ('notes'), making the function understandable. However, it doesn't explicitly differentiate from sibling tools like 'getNote' (which presumably retrieves a single note) or mention scope limitations, preventing a perfect score.

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 provides some implied guidance: it suggests using tags for filtering based on previous operations ('tags you seen in previous list operation'), which hints at a workflow. However, it lacks explicit instructions on when to use this tool versus alternatives like 'getNote' for single notes or 'writeNote' for creation, and doesn't specify prerequisites or exclusions, leaving usage context incomplete.

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

writeNoteC

Creates or updates a note with a unique ID suffixed by a random number.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesContent of the note
idYesUnique identifier of the note, should be unique enough like "a-note-about-python-file-server-design-109".
summaryYesShort summary of the note
tagsYesTags of the note
titleYesTitle of the note, describe what was inside the content.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden but provides minimal behavioral insight. It mentions the ID includes a random number suffix, hinting at uniqueness, but lacks details on permissions, error handling, or whether updates overwrite or merge. For a mutation tool, this is inadequate disclosure.

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 that directly states the tool's function without redundancy. It's front-loaded and wastes no words, making it easy for an agent to parse quickly.

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 5 required parameters and no annotations or output schema, the description is insufficient. It doesn't explain return values, error conditions, or the implications of 'creates or updates' (e.g., idempotency), leaving significant gaps for agent usage.

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 description coverage is 100%, so parameters are well-documented in the schema. The description adds no additional meaning beyond implying ID uniqueness with a random suffix, which is partially covered in the schema. Baseline 3 is appropriate as the schema handles most semantics.

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 clearly states the verb ('Creates or updates') and resource ('a note'), making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'getNote' or 'listNotes', which would require mentioning that this is the primary write operation versus read-only siblings.

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 this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an ID), compare to siblings like 'deleteNote', or specify scenarios for creation versus updates, leaving the agent without contextual usage cues.

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. 4 tool updatesv1.0.0
    • First observeddeleteNote
    • First observedgetNote
    • First observedlistNotes
    • First observedwriteNote

TDQS

A3.6/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: deleteNote removes notes, getNote retrieves single notes, listNotes lists or searches notes, and writeNote creates or updates notes. There is no overlap in functionality, making tool selection straightforward for an agent.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in camelCase (e.g., deleteNote, getNote, listNotes, writeNote). This uniformity enhances readability and predictability across the toolset.

Tool Count5/5

With 4 tools, this server is well-scoped for a notes management system. Each tool serves a distinct CRUD operation (create, read, update, delete), which is appropriate and efficient for the domain without being overly sparse or bloated.

Completeness5/5

The toolset provides complete CRUD coverage for notes: writeNote handles creation and updates, getNote and listNotes cover retrieval, and deleteNote handles deletion. There are no obvious gaps, enabling agents to perform full lifecycle operations on notes.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers