mcpField
U

ultra-e2e-test tasks

本地服务
github.com/hynix666生产力04 周前更新

关于 ultra-e2e-test tasks

为任务 API 提供 MCP 接口,供 AI 助手列出、创建任务并在待办、进行中和完成状态间移动。它通过 stdio 连接客户端,并在工具调用前拒绝非法状态转换。

主要功能

  1. 01列出任务及允许的状态转换
  2. 02创建待办任务
  3. 03移动任务状态
  4. 04通过 HTTP 调用任务 API
  5. 05非法状态转换返回可执行错误

适用场景

  1. 01查看所有任务及其状态
  2. 02创建新的待办事项
  3. 03推进任务并检查合法状态转换

MCP 相关

该 MCP 服务通过 stdio 向 MCP 客户端提供 list_tasks、create_task 和 move_task 工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"hynix666-ultra-e2e-test": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"TASK_API_URL",
"-e",
"TASK_API_TIMEOUT_MS",
"ghcr.io/hynix666/ultra-e2e-test-mcp-server:0.1.1"
],
"env": {
"TASK_API_URL": "<TASK_API_URL>",
"TASK_API_TIMEOUT_MS": "<TASK_API_TIMEOUT_MS>"
}
}
}
}
启动命令docker run -i --rm -e TASK_API_URL -e TASK_API_TIMEOUT_MS ghcr.io/hynix666/ultra-e2e-test-mcp-server:0.1.1
需要配置的环境变量
TASK_API_URLWhere the task API is: an absolute http or https URL.
TASK_API_TIMEOUT_MSHow long one call to the task API may take, in milliseconds.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/hynix666/ultra-e2e-test-mcp-server:0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcp-server

一个 MCP 服务,通过任务 API 为 AI 助手提供三个工具:list_tasks、create_task 和 move_task。它通过 stdio 使用该协议,因此客户端会将其作为子进程启动。

它采用与旁边的服务相同的架构,只更换了传输方式(ADR-0007):src/domain 存放规则,src/application 存放通过出站端口实现的用例,src/adapters 存放与外部世界交互的两个部分——调用任务 API 的 HTTP 客户端,以及将用例发布为工具的 MCP 层——src/main.ts 负责将它们连接起来。当某一层越过其允许列表时,npm run check:boundaries 会使构建失败。

这里会重复这些规则,而不是从另一个模块导入(ADR-0004),这也有其必要:非法的状态变更会在此处被拒绝,并指出合法的变更,而不会以模型通常会重试的 409 错误返回给模型。

运行

npm install
npm start          # serves over stdio; the task API must be running

将其注册到客户端——对于 Claude Code,运行 claude mcp add tasks -- node /absolute/path/to/services/mcp-server/src/main.ts;对于其他客户端,则在其配置中添加等效条目:

{
  "mcpServers": {
    "tasks": {
      "command": "node",
      "args": ["/absolute/path/to/services/mcp-server/src/main.ts"],
      "env": { "TASK_API_URL": "http://localhost:8080" }
    }
  }
}
变量默认值含义
TASK_API_URLhttp://localhost:8080任务 API 的地址。必须是绝对 http 或 https URL
TASK_API_TIMEOUT_MS10000单次 API 调用在放弃前最多等待的时间

如果某个值无法使用,进程会在启动时停止。启动后每次工具调用都失败的服务,不如根本无法启动的服务:模型会不断重试。

绝不会向 stdout 写入任何内容。 对于 stdio 服务,stdout 是协议通道,一条意外的 console.log 就会破坏数据流。诊断信息会写入 stderr。

工具

工具输入返回内容
list_tasks—每个任务、其状态,以及该状态允许的变更
create_tasktitle创建的任务,状态为 todo
move_taskid、status已变更的任务,或说明当前状态允许哪些变更

调用方可以处理的失败情况——例如违反规则或 API 无法访问——会作为工具结果返回,并带有 isError: true 和失败原因。只有此处的程序错误才会抛出异常,因为抛出的错误会作为模型无法检查的协议错误传给模型。

检查

npm run verify    # import boundaries, type-check, tests

测试会通过一对内存传输通道,让真实 MCP 客户端驱动服务,因此已注册却无法调用的工具——例如模式错误或处理程序抛出异常——会在此处失败,而不是等到有人在编辑器中使用时才发现。

发布

.github/workflows/mcp-publish.yml 会将镜像发布到 GitHub Container Registry,并将 server.json 发布到 MCP Registry,客户端可在其中发现服务。它不会使用存储的令牌:镜像使用本次运行的 GITHUB_TOKEN 推送,注册表则信任 GitHub 的 OIDC 身份,用于 io.github.<owner>/ 命名空间。镜像针对 linux/amd64 和 linux/arm64 构建,每种架构都使用原生运行器,并发布为一个标签,因此可在 Apple Silicon Mac 上原生运行。两个构建也会以 <version>-amd64 和 <version>-arm64 的形式保留在注册表中。在私有仓库中,免费额度用完后,arm64 运行器会消耗付费 Actions 分钟数。

每次创建版本标签的发布完成后,工作流都会运行;也可以按需指定版本运行。第一个作业在 GitHub 环境 mcp-registry 中运行,该环境会由 GitHub 在首次使用时创建;在该环境中设置必需的审核者或允许发布的 refs 范围后,整个发布流程都会受到限制。一次性设置步骤:

  1. 至少发布一次,以便创建 v* 标签(release 功能会创建该标签;也可以使用 gh release create)。
  2. 将仓库变量 MCP_PUBLISH_ENABLED=true,然后手动使用该版本运行一次工作流。首次运行预计会在最后一步失败,即 将 server.json 发布到 MCP Registry,并显示 “is private or requires authentication”。此时镜像已推送,但 GitHub 会将新建的容器包设为私有,而注册表只接受任何人都能拉取的镜像。
  3. 将软件包设为公开:在其页面中,选择 Package settings → Danger Zone → Change visibility → Public。该软件包为 OWNER/ultra-e2e-test-mcp-server,列在仓库的 Packages 下。注册表会读取镜像的 io.modelcontextprotocol.server.name 标签,以确认你拥有该镜像;私有镜像无法通过此验证。继续之前请检查:执行 curl -s -o /dev/null -w '%{http_code}\n' "https://ghcr.io/token?scope=repository:OWNER/ultra-e2e-test-mcp-server:pull";软件包公开后会输出 200,仍为私有时则会输出 401。
  4. 重新运行该次运行中失败的作业(Re-run failed jobs)。它会发布 server.json,之后的每次发布都会自动完成发布。

test/server-json.test.ts 会确保清单内容准确:镜像标签必须与服务的 name 相同,且每个声明的变量都必须是 src/config.ts 会读取的变量,并且使用其实际采用的默认值。

容器

docker build --tag mcp-server .
docker run --rm -i --env TASK_API_URL=http://host.docker.internal:8080 mcp-server

-i 很重要:协议通过 stdin 和 stdout 传输。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。