
ultra-e2e-test tasks
io.github.hynix666由 GitHub 账号 hynix666 发布v0.1.1更新于 Oct 24, 2026
List, create and move tasks through todo, in progress and done.
概览
一个本地 MCP 服务器,让助手通过任务 API 列出、创建和移动任务,并由服务器校验状态流转。
- 可以做什么
- 列出所有任务及其状态和该状态允许的移动;在待办状态下创建新任务;把任务移动到其他状态,非法移动会被拒绝并列出合法选项。
- 适用场景
- 适合任务保存在遵循待办、进行中、已完成模型的任务 API 中,并希望助手读取和更新这些任务,同时让非法状态变更在到达模型前被拒绝的场景。
- 运行要求
- 以本地 Node.js 进程通过 stdio 运行,由客户端作为子进程启动;需要有一个可访问且正在运行的任务 API。设置 TASK_API_URL(绝对 http 或 https URL,默认 TASK_API_TIMEOUT_MS(默认 10000)。另提供容器镜像。
安装
在 SourceWeft 中
- 打开 控制台中的 ultra-e2e-test tasks,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
mcp-server
An MCP server that gives an AI assistant three tools over the task API: list_tasks, create_task and move_task. It speaks the protocol over stdio, so a client starts it as a subprocess.
It is the same architecture as the services beside it, with the transport changed (ADR-0007): src/domain holds the rules, src/application the use cases behind an outbound port, src/adapters the two things that touch the outside world — the HTTP client that calls the task API, and the MCP layer that publishes the use cases as tools — and src/main.ts wires them. npm run check:boundaries fails the build when a layer reaches past its allowlist.
The rules are repeated here rather than imported from another module (ADR-0004), and they earn their place: an illegal status move is refused here, with the legal moves named, instead of reaching the model as a 409 it usually retries.
Run it
Register it with a client — for Claude Code, claude mcp add tasks -- node /absolute/path/to/services/mcp-server/src/main.ts, or the equivalent entry in another client's configuration:
A value it cannot use stops the process at startup. A server that starts and then fails every tool call is worse than one that never started: the model keeps trying.
Nothing is ever written to stdout. On a stdio server stdout is the protocol channel, and one stray console.log corrupts the stream. Diagnostics go to stderr.
Tools
A failure the caller can act on — a broken rule, an unreachable API — comes back as a tool result with isError: true and the reason. Only a bug here throws, because a thrown error reaches the model as a protocol error it cannot inspect.
Check
The tests drive the server through a real MCP client over an in-memory transport pair, so a tool that is registered but unreachable — a bad schema, a handler that throws — fails here rather than in someone's editor.
Publish
.github/workflows/mcp-publish.yml publishes the image to GitHub Container Registry and server.json to the MCP Registry, where clients discover servers. It uses no stored token: the image is pushed with the run's GITHUB_TOKEN, and the registry trusts GitHub's OIDC identity for the io.github.<owner>/ namespace. The image is built for linux/amd64 and linux/arm64, each on a native runner, and published as one tag, so it runs natively on an Apple Silicon Mac. The two builds also stay in the registry as <version>-amd64 and <version>-arm64. In a private repository the arm64 runner uses paid Actions minutes once the free allowance is spent.
It runs after each release that creates a version tag, and on demand with a version. Its first job runs in the GitHub environment mcp-registry, which GitHub creates on first use; a required reviewer or a limit on which refs may publish, set there, holds the whole publish. One-time setup:
- Release at least once, so a
v*tag exists (thereleasefeature does this;gh release createworks too). - Set the repository variable
MCP_PUBLISH_ENABLED=true, then run the workflow once by hand with that version. This first run is expected to fail at its last step, Publish server.json to the MCP Registry, with "is private or requires authentication". The images are pushed by then, but GitHub creates a new container package as private, and the registry only accepts an image anyone can pull. - Make the package public: on its page, Package settings → Danger Zone → Change visibility → Public. It is
OWNER/ultra-e2e-test-mcp-server, listed under the repository's Packages. The registry reads the image'sio.modelcontextprotocol.server.namelabel to confirm you own it, which it cannot do for a private image. Check before going on:curl -s -o /dev/null -w '%{http_code}\n' "https://ghcr.io/token?scope=repository:OWNER/ultra-e2e-test-mcp-server:pull"prints200once the package is public, and401while it is still private. - Re-run the failed job of that run (Re-run failed jobs). It publishes
server.json, and every later release publishes on its own.
test/server-json.test.ts keeps the manifest honest in the meantime: the image label must equal the server's name, and every advertised variable must be one src/config.ts reads, with the default it really uses.
Container
-i matters: the protocol is stdin and stdout.
来源:services/mcp-server/README.md,提交 c35a494
工具
0版本历史
1- v0.1.1最新Sep 19, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分