tack-mcp 服务端
使用说明(简要概览)
-
项目简介
- Tack 提供一个 MCP 服务器,实现对“资源(Resources)”、“工具(Tools)”和“Prompt 模板(Prompts)”的对外暴露,方便 LLM 客户端通过 MCP 协议读取上下文、调用外部功能与获取提示模板,并进行安全的上下文写回与协作。
-
主要功能点
- 资源暴露(Resources):如 tack://context/intent、tack://context/facts、tack://context/machine_state 等,允许客户端获取项目上下文、实现状态、以及最近的 handoff 信息等。
- 工具(Tools):提供写回通道,例如 log_decision、log_agent_note 等,允许代理将决策与 Agent 备注写入 Tack 的状态文件。
- Prompts/上下文:服务器读取并结合 .tack/ 下的文档,向客户端提供结构化的上下文信息。
- 会话与审计:在处理请求时记录事件日志、实现状态与每次请求的审计信息,便于追踪和复现。
- 传输与协议:遵循 MCP 的资源/工具模型,通过 JSON-RPC 风格的请求/响应交互,当前实现通过 STDIO 传输(StdioServerTransport)进行通信,便于在命令行、脚本或集成工具中嵌入运行。
-
安装步骤
- 该仓库包含整套 MCP 服务端实现,直接构建并运行即可。
- 基本流程(在项目根目录执行):
- 安装依赖:npm install
- 构建源码(如需要):npm run build
- 启动 MCP 服务端:node dist/index.js mcp
-
服务器配置(给 MCP 客户端的配置信息,JSON 格式,需对接客户端使用)
- 注意:以下信息用于 MCP 客户端对接,实际连接方式依赖客户端工具的配置要求。MCP 客户端通常需要知道服务器的启动命令及参数,以便能够启动并连接到 MCP 服务端。
- 配置示例(需按实际环境调整路径与工作目录): { "server_name": "tack-mcp", "command": "node", "args": ["dist/index.js", "mcp"], "cwd": "<项目根目录的路径,例如 /path/to/your/project>" }
- 说明
- server_name:MCP 服务器在工具链中的标识名称,优先使用“tack-mcp”以保持与仓库文档的一致性。
- command:启动 MCP 服务的命令。若你的环境中 tack 命令在 PATH 中,也可以使用 "tack"。
- args:启动参数,通常为 ["dist/index.js", "mcp"],或者在 PATH 情况下为 ["mcp"]。
- cwd:服务器工作目录,务必设为包含 .tack/ 的项目根目录,以确保服务器能够正确访问上下文文件与手动写入内容。
-
基本使用方法
- 启动后,LLM 客户端或工具链通过 MCP 协议向服务器发起请求,例如读取上下文资源、调用工具、获取提示模板等。
- 客户端通常通过 JSON-RPC 调用 MCP 服务器提供的资源/工具接口,服务器返回对应的内容或执行结果。
- 对于写回类操作,客户端应使用约定的工具(如 log_decision、log_agent_note),服务器端会将写入操作落到 .tack/ 相关文件中,并记录日志事件。
- 如需停止服务,按常规进程退出即可(Ctrl+C)。
-
运行与扩展
- 本实现以 STDIO 作为传输通道,适合在脚本化工作流、CLI 集成及测试场景中使用。若需要扩展到 SSE/WebSocket 等传输,现有结构提供了扩展点,可在后续迭代中引入。
- 未来可为 Codex、Claude Code 等客户端提供更多传输方式与更丰富的资源/工具渲染能力。
-
关键注意
- MCP 资源与工具的实现以 .tack/ 目录下的真实文件为数据源,服务器行为与文件变更紧密耦合。
- 安全性相关:资源返回会对上下文进行包装,确保对未信任内容的处理有一定的保护策略(wrapUntrustedContext)。
-
其他
- 如需帮助、改进或贡献,可参考仓库中的 README、测试用例与现有实现细节。