Skip to main content
Glama

测试覆盖率:83.7% 😍👌

slivingdoc 横幅

特性

  • 类 Git 语义:slivingdoc 使用我们(和智能体)都熟悉的术语,设计简单易用

  • 自动冲突解决:放心提交,所有冲突必须解决后才能被接受

  • 高速处理:解决方案概念上非常简洁,支持极高规模和并行处理

  • 即插即用:设置存储桶,指向它,然后开始同步笔记!

docs/slivingdoc-v1.md 是这些保证背后的完整已接受合约。

Related MCP server: Cellar

快速开始

将其添加到您的智能体框架中:

{
  "mcpServers": {
    "slivingdoc": {
      "command": "npx",
      "args": [
        "-y",
        "slivingdoc",
        "serve",
        "--bucket",
        "my-notes",
        "--workspace-root",
        "/srv/notes"
      ],
      "env": {
        "AWS_ACCESS_KEY_ID": "<your-access-key-id>",
        "AWS_SECRET_ACCESS_KEY": "<your-secret-access-key>",
        "AWS_REGION": "us-east-1"
      }
    }
  }
}

存储桶必须存在,凭证来自标准的 AWS 链。 还没有 S3 账户?examples/seaweedfs/ 提供了一个分步指南,运行本地 SeaweedFS 容器。您也可以直接从 GitHub release 下载原生二进制文件(slivingdoc-v<semver>-<os>-<arch>)并就地运行。

支持的平台:Linux(amd64、32-bit ARMv7、arm64)、macOS(amd64、arm64)和 Windows(amd64)。32 位 Linux ARM 构件支持 Raspberry Pi OS armhf。

工作原理

服务器通过 stdio 暴露两个 MCP 工具:

工具

输入

成功结果

notes_pull

path

OK

notes_commit

path, message

OK

notes_pull 将当前笔记本写入您的目录。notes_commit 发布您的更改并合并并发的非冲突更改。两次调用之间没有任何协议 —— 智能体使用已有的工具编辑文件,人类可以使用任何编辑器在同一目录中编写。下一次提交也会带上他们的更改。

人类也可以直接驱动这两个操作,无需 MCP 主机。相对路径相对于工作目录解析:

slivingdoc pull notes
# edit UTF-8 text files under notes/
slivingdoc commit notes -m "meeting summary"

成功后打印统一的结果报告:OK 状态、接受的远程世代、每个文件的插入和删除计数,以及总计尾部。域错误以非零退出并打印一个坦诚的报告:错误类别、可重试性判定,以及每个冲突文件及其行范围。颜色仅在实际终端上显示,任何非空的 NO_COLOR 都会禁用颜色。

Git 部分

如果让所有智能体同时写入,虽然可以工作,但会被竞态条件淹没。因此 slivingdoc 内置了通过 libgit2 实现的 git,它实际上执行以下操作:

  1. git pull

  2. (本地潜在冲突解决)

  3. git add .

  4. git commit -m "<agent message>"

  5. git push

  6. (本地潜在冲突解决)

所有这些 git 操作都在笔记目录的私有镜像中本地处理,形成一条“精简的” git 序列。这基于两个妥协:首先,本地笔记目录在 notes_pull 时容易被更改,远程状态优先,留下冲突标记。其次,系统仅适用于文本(干净的 UTF-8)。

配置

serve、pull 和 commit 读取相同的标志和环境变量。--bucket 是必需的。最常用的标志:

标志

环境变量

默认值

--bucket

SLIVINGDOC_BUCKET

— (必需)

--workspace-root

SLIVINGDOC_WORKSPACE_ROOT

启动时工作目录

--endpoint

AWS_ENDPOINT_URL_S3

AWS 解析

--region

AWS_REGION

us-east-1

slivingdoc serve -h 打印完整的参考信息,docs/running.md 涵盖了操作员所需的一切:所有标志、确切的 S3 权限、日志记录(stderr 上的 LOG_LEVEL)、笔记本规则、冲突恢复和检查点保留。位于 terraform/ 的 Terraform 模块为单个笔记本提供了一个存储桶和一个最小权限的 IAM 用户。

开发

  • AGENTS.md — 开发者和智能体指南:包结构、操作流程、约定和质量检查关卡。

  • docs/slivingdoc-v1.md — 已接受的架构合约。

  • docs/build.md — 原生构建,从固定的 libgit2 源代码到依赖检查。

  • docs/testing.md — 测试命令、测试层次结构和不使用真实 AWS 的规则。

  • docs/releasing.md — 发布构件、npm 受信任发布和 make release。

make qa #lint plus the full Go and npm test suites

许可证

MIT — 参见 LICENSE。静态链接的 libgit2 的第三方通知在 NOTICE 中。

与帕丽斯·希尔顿无关。

Available Tools

2 tools
notes_commitA

Publish the caller's changes in the notebook directory and incorporate concurrent non-conflicting changes. Omit path or pass an empty string to use the server's notebook directory, which the result reports. message must be non-blank UTF-8 without U+0000, at most 16,384 bytes; it is retained in recent internal history only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional absolute UTF-8 host path of the notebook directory, 1 through 4,096 bytes. Omit it or pass an empty string to use the server's notebook directory.
messageYesCommit message: non-blank UTF-8 without U+0000, at most 16,384 bytes.

TDQS

A3.6/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 does add real behavioral context beyond the name: default-path fallback, merge semantics for concurrent non-conflicting changes, and the notable fact that the message is retained only in recent internal history. However, it says nothing about permissions, failure/conflict behavior, or reversibility for what is effectively a mutation.

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?

Two sentences, front-loaded with the action and scope, followed by the constraints. The dense run of message constraints is necessary detail, though it makes the second sentence slightly overloaded.

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 two-parameter tool with no annotations and no output schema, the definition covers the default path, the merge behavior, and the message rules, and notes that the resolved directory is reported in the result. Error and conflict-resolution outcomes remain unstated, 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?

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning the schema lacks: the message's limited retention in internal history, and that the resolved notebook directory comes back in the result. These clarify semantics rather than restating constraints.

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+resource (publish changes in the notebook directory) and adds the merge scope (incorporate concurrent non-conflicting changes). It never names the sibling notes_pull, so an agent must infer the pairing from the name alone, which keeps it short of a 5.

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 only implied: an agent can guess this is the write-side counterpart to notes_pull, but the description never says when to commit versus pull, nor any prerequisite such as needing local changes first. Minimum viable guidance, no explicit when/when-not.

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

notes_pullA

Write the current notebook into the notebook directory and record the accepted state. Omit path or pass an empty string to use the server's notebook directory, which the result reports. Edit UTF-8 text files (without U+0000) there between notes_pull and notes_commit; notes_commit publishes the changes and incorporates concurrent non-conflicting changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional absolute UTF-8 host path of the notebook directory, 1 through 4,096 bytes. Omit it or pass an empty string to use the server's notebook directory.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full load and does disclose meaningful behavior: the path-default rule, the UTF-8/no-U+0000 constraint on editable files, the accepted-state recording, and that notes_commit merges concurrent non-conflicting changes. It omits whether existing local files are overwritten or what permissions are required, which a mutation-adjacent tool would ideally state.

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?

Three tight sentences with the primary action front-loaded and the default-behavior detail immediately after. Dense but every clause carries information; no filler.

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 one-optional-parameter tool with no annotations and no output schema, the description covers the default path, the edit window, file-format constraints, and the sibling's role. Return values are only partially addressed (it notes the result reports the directory), which keeps it from a 5.

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% and the single path parameter is fully documented there, including the 1–4,096 byte range. The description only restates the omit/empty-string default and adds that the result reports the directory, so baseline 3 is correct.

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 action (materialize the current notebook into a notebook directory and record the accepted state) and clearly distinguishes itself from the sibling notes_commit, which 'publishes the changes.' The phrasing 'write the current notebook into the notebook directory' is slightly ambiguous about data direction, but the pull/commit pairing makes the intent recoverable.

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?

Gives an explicit workflow: edit the UTF-8 files 'between notes_pull and notes_commit,' with notes_commit handling publication and merge. It does not state when not to use it (e.g. if local edits already exist) or what happens on re-pull, so it stops short of full when/when-not guidance.

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. 2 tool updatesv0.1.0
    • First observednotes_commit
    • First observednotes_pull

TDQS

A3.7/5.0

Scored across 2 tools

Disambiguation5/5

notes_commit and notes_pull have clearly distinct purposes: one publishes local changes and incorporates concurrent changes, the other writes the current notebook into the directory. Their descriptions make the boundary unambiguous.

Naming Consistency5/5

Both tools follow a consistent notes_<verb> snake_case pattern. There are no deviations or mixed conventions.

Tool Count3/5

With only two tools, the set is borderline thin for a notebook version control system. While each tool earns its place, typical workflows require more operations.

Completeness2/5

The toolset covers only pull and commit, missing critical operations such as conflict resolution, status, history, and initialization. These significant gaps will cause agent failures in realistic use.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A secure and scalable Git MCP server giving AI agents powerful version control for local and (soon) serverless environments.
    91 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    An interactive notebook server that enables humans and AI agents to collaboratively edit and run Jupyter notebooks on a shared kernel, with real-time streaming and automatic MCP integration for agent access.
    18 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that gives AI agents a full, safe interface to Git with automatic backups, isolated worktrees, and structured JSON outputs.
    43
    MIT