Dynalist文档协议服务器

为Dynalist无限文档大纲工具提供的模型上下文协议服务器,支持AI助手通过编程方式读写、搜索和组织文档。

  • by JDNdeveloper
  • TypeScript
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 JDNdeveloper/dynalist-mcp

使用说明

动态列表MCP服务器

A. 模型上下文协议 服务器 Dynalist.io,无限文档大纲视图。

Claude和其他人工智能助手可以以编程方式读取、写入、搜索和组织Dynalist文档。

特征

  • 19工具 用于阅读、写作、搜索和组织文档。
  • 基于路径的访问控制 具有拒绝/读取/允许策略、全局匹配和ID锚定。
  • 可配置的默认值 用于读取深度、折叠项目、注释、已检查项目、尺寸警告等。
  • 结构化响应 使用JSON(structuredContent)关于成功和错误的明文,以实现广泛的客户端兼容性。
  • 本土感觉输出 通过MCP指令,指导代理渲染大纲,在写入前显示差异预览,并优雅地处理大型文档。
  • 并发编辑检测 因此,对过时数据的写入在发生之前或之后立即被捕获。
  • 内置缓存 以最小化重复读取、访问控制检查和配置重新加载过程中的API调用。
  • 经过彻底测试 使用内存中的API mock,在每个写路径窗口进行竞赛模拟,并使用Claude Haiku进行弱模型指令验证。

有关Dynalist API文档,请参阅 apidocs.dynalist.io.

入门

1.安装

git clone https://github.com/JDNdeveloper/dynalist-mcp.git
cd dynalist-mcp
bun install

需要 包子 v1.0+。

2.获取您的API代币

访问 dynalist.io/开发者 并生成API令牌。

3.连接

配置中的所有路径都必须是绝对路径。MCP客户端不扩展 ~ 或 $HOME。参见 docs/client-setup.md 有关故障排除和环境隔离的详细信息。

克劳德代码

添加 .mcp.json 在项目根目录中(或 ~/.claude.json 全球):

{
  "mcpServers": {
    "dynalist": {
      "command": "/absolute/path/to/bun",
      "args": ["/absolute/path/to/dynalist-mcp/src/index.ts"],
      "env": {
        "DYNALIST_API_TOKEN": "your-api-token"
      }
    }
  }
}

法典

添加 ~/.codex/config.toml:

[mcp_servers.dynalist]
command = "/absolute/path/to/bun"
args = ["/absolute/path/to/dynalist-mcp/src/index.ts"]
env = { DYNALIST_API_TOKEN = "your-api-token" }

开源代码

添加 ~/.config/opencode/opencode.json:

{
  "mcp": {
    "dynalist": {
      "type": "local",
      "command": ["/absolute/path/to/bun", "/absolute/path/to/dynalist-mcp/src/index.ts"],
      "env": {
        "DYNALIST_API_TOKEN": "your-api-token"
      }
    }
  }
}

克劳德桌面

选项A: .mcpb 捆

下载最新 .mcpb 文件来自 发布页面首选 设置>扩展>高级设置>安装扩展 并选择下载的文件。在安装过程中,系统将提示您输入API令牌。

选项B:手动配置

将与Claude Code配置片段相同的JSON添加到您的Claude Desktop配置文件中:

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

  • 视窗: %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json

  • Windows(旧版): %APPDATA%\Claude\claude_desktop_config.json

提示

代理技能

您可以在Dynalist中创建“技能”:包含代理如何完成任务的分步说明的项目。然后,你可以要求你的经纪人,例如,“按照我的测功技能进行每周复习”。

要使用此功能,请在代理说明文件中添加一个指向您的技能项目或文档的动态列表URL(例如。 CLAUDE.md, AGENTS.md,或克劳德桌面系统提示):

Dynalist skills: https://dynalist.io/d/...

示例:

  • “遵循我的测功技能进行每周回顾”
  • “运用我的测功技能来计划冲刺”

快速复制项目链接

当将您的代理定向到特定的Dynalist项目时(例如“处理此项目:https://...“),您需要项目的URL。获取它的最快方法是将键盘快捷键绑定到 复制当前项目链接 在 设置>键盘映射。有了这个绑定,一个按键就可以将深度链接复制到剪贴板,准备直接粘贴到您的代理工具中。

文档

  • 工具参考:所有工具的参数表、响应形状和示例。
  • 配置:配置文件引用、环境变量、字段表和日志记录。
  • 访问控制:基于路径的ACL规则、glob语法、特殊性优先级、ID锚定和示例。
  • 客户端设置:故障排除、环境隔离和其他MCP客户端详细信息。
  • API覆盖范围:动态列表API端点和MCP工具之间的映射。
  • 用户体验代理:MCP指令如何塑造代理行为,以实现渲染、确认、大小管理和可组合性。
  • 并发:版本保护、位置解析、删除顺序、缓存失效和竞争模拟测试。
  • 演出:文档缓存、文件树缓存、配置重新加载、速率限制重试、更改批处理和节点映射。
  • 测试:虚拟服务器、竞赛模拟、代理驱动的实时测试和弱模型指令验证。

发展

bun run start        # Run the MCP server
bun run typecheck    # Type-check without emitting (run after making changes)
bun test             # Run the full test suite
bun test --watch     # Run tests in watch mode
bun run inspector    # Debug with MCP Inspector

更改后需要进行类型检查 在提交之前捕获类型错误。

MCP检验员测试

警告: MCP Inspector和MCP客户端(如Claude Code)连接到实时动态列表帐户,可以修改和删除数据。确保你的 DYNALIST_API_TOKEN 指向a 测试账户不是你的真命天子。

DYNALIST_API_TOKEN=your_token bun run inspector

项目结构

src/
├── index.ts                      # Entry point, server identity, instructions
├── config.ts                     # Zod-validated config with mtime-based reloading
├── access-control.ts             # Path-based ACL (deny/read/allow policies)
├── document-store.ts             # LRU-cached document reader with version checks
├── types.ts                      # Shared types (OutputNode, NodeSummary, etc.)
├── dynalist-client.ts            # Wrapper for the Dynalist API
├── sync-token.ts                 # Opaque sync token generation (sha256-based)
├── version-guard.ts              # Pre/post-write version checks for race detection
├── tools/
│   ├── index.ts                  # Aggregator - registers all tools
│   ├── descriptions.ts           # Shared parameter descriptions and guidance constants
│   ├── node-metadata.ts          # Heading/color string enums and API translation maps
│   ├── meta.ts                   # Meta tools (get_instructions)
│   ├── read.ts                   # Read tools
│   ├── write.ts                  # Write tools
│   ├── structure.ts              # Structure tools (delete, move, reorder)
│   └── files.ts                  # File management tools
├── utils/
│   └── dynalist-helpers.ts       # Shared tool helpers
└── tests/
    └── tools/                    # Tool integration tests against dummy server

捆绑和释放

该项目可以打包为 .mcpb 用于在MCP客户端中单击安装的捆绑包。捆绑的服务器以Node.js为目标,因此最终用户不需要安装Bun。

bun run bundle       # Typecheck, test, build dist/index.js, generate manifest, pack .mcpb
bun run release      # Bundle + git tag + GitHub release with .mcpb asset (maintainer only)

bun run release 需要维护者推送访问,在 main 分支,以及版本碰撞 package.json (包和生成的数据都是单一的真实来源 manifest.json).

安全模型

运输

此服务器使用MCP stdio传输:它作为MCP客户端的本地子进程(例如Claude Desktop、Claude Code)运行,并通过stdin/stdout进行通信。没有网络侦听器,没有HTTP服务器,没有端口绑定。无法从计算机外部或同一计算机上的其他进程访问服务器。

LLM访问风险

虽然服务器本身仅在本地,但与之交互的LLM对您的Dynalist数据具有完全的读/写访问权限(如果配置了访问控制策略)。LLM可以读取敏感内容,修改或删除项目,或通过将其包含在响应中来泄露数据。使用门禁系统限制暴露。

要强制全局只读模式(允许所有读取,阻止所有写入):

{
  "access": {
    "default": "read"
  }
}

看 docs/access-controll.md 以获得更精细的选项。

访问控制限制

访问控制系统是最好的努力,不应被视为硬安全边界。已知限制:

  1. 内容物泄漏:允许文档中的内容可能包含指向被拒绝文档的链接或引用,从而暴露其ID或标题。ACL系统不会清除内容。
  2. 缓存过期:文件树缓存(默认5分钟TTL)意味着外部重命名/移动可能会导致规则不正确匹配,直到缓存刷新。
  3. 收件箱旁路:the send_to_inbox 该工具无法检查每个文档的访问权限,因为在发送之前收件箱文件ID未知。当全局访问策略不可写时,它会被阻止,但更窄的拒绝规则无法阻止收件箱写入。

需要严格隔离的用户应使用单独的Dynalist帐户,而不是仅依赖ACL。

特异性优先

规则优先级基于路径特异性, 不 政策严重性。与AWS IAM(明确拒绝总是获胜)不同 allow 覆盖不太具体的 deny.

例如,如果 /Private/** 是 deny 但是 /Private/Shopping List 是 allow,购物清单是可访问的,因为确切的匹配更具体。拒绝规则不是绝对的上限。它们可以被下面更具体的规则所覆盖。

审核你的规则,这样就不会有更具体的允许/读取规则穿透更广泛的拒绝规则。

致谢

最初分叉自 cristip73/测力计mcp.