@ 关键路径/ mcp
模式背景协议(MCP)和客户端-Side WebMCP 关键路径整合
连接 AI 编码代理,背景工作者, 以及浏览器副驾驶直接与您的项目管理工作流程连接 .
升级? 升级一次
@critical-path/*组合在一起。 编码代理: 遵循 更新(md); 已标记断开的更改 刹车 此软件包中CHANGELOG.md。 。 。 .
* 概览
@critical-path/mcp 桥 关键路径 通过两个补充协议与AI代理商建立无头项目管理框架:
- 标准服务器 MCP (S)
@critical-path/mcp/server(中文(简体) )数字 : 标准 示范背景协议(MCP) 使用@modelcontextprotocol/sdk运行 静态 或者说 可流式HTTP/SSE,允许外部AI助手(如克洛德桌面,Cursor,和Antigravity)管理项目,任务,短跑,可交付品和评论. - 客户端- Side WebMCP (
@critical-path/mcp/web(中文(简体) )数字 : 浏览器工具注册 W3C 网络机器学习社区小组 WebMCP 规格直接打开的登记册结构化工具document.modelContext编号 :navigator.modelContext与环境项目范围界定,允许浏览器 AI 助手和页面副驾驶启动项目状态而无需脆弱的 DOM 刮取.
* 安装
pnpm add @critical-path/mcp
QQ 标准服务器 MCP( Claude 桌面、 光标、 CLI)
通过 CLI 运行
您可以在 Stdio 上立即对一个本地的 SQLite 数据库、内存存储器或远程关键路径 REST API 旋转 MCP 服务器:
# Against a local SQLite database
npx @critical-path/mcp --db ./path/to/critical-path.db
# Against a remote Next.js or SvelteKit route handler
npx @critical-path/mcp --api http://localhost:3000/api/critical-path
# Temporary in-memory store (for testing)
npx @critical-path/mcp
# Expose only some tools: toolsets, exact names, read-only
npx @critical-path/mcp --db ./critical-path.db --toolsets scheduling,analytics,guidance --read-only
# Install the bundled agent skills for coding agents
npx @critical-path/mcp skills install
对于保护的 APIs requireAuth设置 CRITICAL_PATH_API_TOKEN (同意为 Authorization: Bearer <token>)或通过 --header "Name: value" (可重现. 偏好环境变量为机密,因为命令行旗帜在进程列表中可见. CLI警告什么时候会寄出证书 http 给非本地主机.
{
"mcpServers": {
"critical-path": {
"command": "npx",
"args": ["-y", "@critical-path/mcp", "--api", "https://app.example.com/api/critical-path"],
"env": { "CRITICAL_PATH_API_TOKEN": "<token>" }
}
}
}
Claude 桌面配置
在您的 claude_desktop_config.json数字 :
{
"mcpServers": {
"critical-path": {
"command": "npx",
"args": ["-y", "@critical-path/mcp", "--db", "/absolute/path/to/critical-path.db"]
}
}
}
程序服务器创建
import { createCriticalPathMcpServer, startStdioServer } from '@critical-path/mcp/server';
import { CriticalPathEngine, SQLiteStore } from '@critical-path/core';
const engine = new CriticalPathEngine({
store: new SQLiteStore({ filename: 'projects.db' })
});
const server = createCriticalPathMcpServer({
engine,
name: 'my-project-pm',
toolsets: ['core', 'collaboration', 'guidance'] // optional; default: every tool
});
await startStdioServer(server);
QQ 客户端- Side WebMCP (浏览器副驾驶)
WebMCP在浏览器的JavaScript环境中直接曝光客户端工具而无需刮去DOM元素.
反应整合( R)useWebMCP(中文(简体) )
import { useWebMCP } from '@critical-path/react';
export function ProjectDashboard({ projectId }: { projectId: string }) {
// Automatically registers tools scoped to the active project
// and cleans up on unmount or project change via AbortController.
// `instructions` briefs the agent; add it to your copilot's system prompt.
const { registered, tools, instructions } = useWebMCP({
projectId,
tools: ['create_task', 'list_tasks', 'update_task', 'add_comment']
});
return (
<div>
<h1>Project View</h1>
{registered && <p>AI Copilot Active ({tools.length} tools available)</p>}
</div>
);
}
Svelte 5 集成( R)WebMcpState 编号 : createWebMcpState(中文(简体) )
<script lang="ts">
import { createCriticalPathClient, createWebMcpState } from '@critical-path/svelte';
const client = createCriticalPathClient({ baseUrl: '/api/critical-path' });
const mcp = createWebMcpState(client, { projectId: 'proj-123' });
</script>
<div>
{#if mcp.registered}
<span>🤖 In-browser AI assistant enabled for project {mcp.activeProjectId}</span>
{/if}
</div>
香草/框架-不可知网络MCP
import { registerWebMcpTools } from '@critical-path/mcp/web';
import { CriticalPathClient } from '@critical-path/client';
const client = new CriticalPathClient({ baseUrl: '/api/critical-path' });
const handle = registerWebMcpTools({
client,
projectId: 'proj-main',
onToolExecuted: (name, input, result) => {
console.log(`[WebMCP] Executed ${name}:`, input, result);
}
});
// To clean up and unregister:
handle.unregister();
QQ 支持的工具
| 工具 | 工具集 | 用它来 | 关键参数 |
|---|---|---|---|
list_projects | 核心项目 | 查找工程 ID; 返回 { projects } | {} |
get_project | 核心项目 | 项目的工作流程状况、自定义字段和日历 | { id } |
create_project | 核心项目 | 一个新的空项目 | { name, description?, key? } |
list_tasks | 核心项目 | 查找任务; 返回 { tasks, nextCursor } | { projectId?, status?, priority?, assigneeId?, iterationId?, deliverableId?, containerId?, parentId? ('none' = top-level), limit?, cursor? } |
get_task | 核心项目 | 一个任务是完整记录 includeDependencies,它等待着什么dependsOn和什么等待它(英语:dependents(中文(简体) ) | { id, includeDependencies? } |
create_task | 核心项目 | 添加工作( 在 WebMCP 中自动扫描) | { projectId?, title, description?, priority?, status?, estimatedHours?, allocation?, deadline?, isMilestone? } |
update_task | 核心项目 | 变化状况、优先权、受让人、估计数、最后期限 | { id, title?, status?, priority?, assigneeId?, allocation?, deadline?, isMilestone? } |
log_time | 核心项目 | 记录工作时间(增加记录时间的唯一途径) | { taskId, hours, description?, isBillable?, loggedAt? } |
update_time_entry | 核心项目 | 纠正记录的时间(任务时数按差额移动) | { id, hours?, description?, isBillable?, loggedAt? } |
delete_time_entry | 核心项目 | 删除错误记录的时间 | { id } |
delete_task | 核心项目 | 永久删除( E)destructiveHint(中文(简体) ) | { id } |
add_dependency | 核心项目 | 做一个任务等待另一个,所以关键路径命令他们;一能,拒绝循环 | { taskId, dependsOnTaskId, type? ('blocking' | 'relates_to') } |
remove_dependency | 核心项目 | 以相同的两个任务编号去除链接; 返回 { removed, dependencyIds } | { taskId, dependsOnTaskId, type? } |
list_deliverables | 协作 | 项目的可交付成果(组任务的产出);返回 { deliverables } | { projectId? } |
create_deliverable | 协作 | 若干任务产生的产出 | { projectId?, title, dueDate?, taskIds? } |
list_comments | 协作 | 任务讨论, 最早; 返回 { comments, nextCursor } | { taskId, limit?, cursor? } |
add_comment | 协作 | 记录决定或注释(由服务器的演员编写) | { taskId, content } |
calculate_critical_path | 时间安排 | 完成预测,关键任务,松懈calendars: 'assignee' 使用每个受让人或团队的日历; levelResources 将每个受让人限制在一个任务上) | { projectId?, calendars?, levelResources?, levelingPriority?, effort?, defaultEstimateHours?, baselineId? } |
calculate_portfolio_critical_path | 时间安排 | 多个项目( 默认: 全部可读), 平分时共享人员和团队 | { projectIds?, projectOrder?, includeHiddenWork?, calendars?, levelResources?, levelingPriority?, effort? } |
create_baseline | 时间安排 | 节省商定的计划,以跟踪延误情况 | { projectId?, name, calendars?, levelResources? } |
list_baselines | 时间安排 | 寻找一个基准与(baselineId 打开 calculate_critical_path(中文(简体) ) | { projectId? } |
get_workload_distribution | 时间安排 | 时间、容量和使用情况 | { projectId?, startDate?, endDate?, interval?, groupBy?, metric? } |
get_timeline_ladder | 分析 | 项目状况:阶段保健(宏观)、时间表(标准)、证据(具体) | { projectId?, level?, containerId?, iterationId? } |
get_task_ladder | 分析 | 一项任务阶段、时间表位置和证据 | { taskId } |
get_task_metrics | 分析 | 进度、差异和所得价值(CPI、SPI) | { taskId } |
get_task_progress_history | 分析 | 时间和曲线形状的进展 | { taskId } |
get_skill | 指导 | 为多步任务装入游戏本 | { name? } |
每个工具的JSON inputSchema 财务报告和审定财务报表 outputSchema 由它的zod计划产生 defineTool,所以模型所看到的总是与所执行的一致。 在标准服务器和WebMCP上,工具参数在执行前都会被验证. 无效或未声明的参数返回 isError 结果命名问题(例如, projectId 无法传递到 update_task) (中文(简体) ). 结果为 JSON 对象,返回为 structuredContent 作为文本; 查找一无所获即为错误, 并提示如何找到有效的 id .
身份 : 带有 engine,更改可归于服务器的 actor 选项(默认) DEFAULT_MCP_ACTOR, (中文(简体) ), mcp-agent;工具从不采纳作者或演员的参数. 如果引擎有一个 authorize 策略中,检查参与者时会像任何用户一样: 给予其项目成员(或 roles: ['admin']页:1 tenantId 在多租房的情况下, 与一个 clientAPI的认证决定了打电话者是谁 工具在 tools 编号 : toolsets 选择既不列出也不可调用。 每个工具都会发送标准的 MCP 注释 readOnlyHint, (中文(简体) ), destructiveHint, (中文(简体) ), idempotentHint 财务报告和审定财务报表 openWorldHint。 。 。 .
QQ代理发现: 工具、 指令和技能
特工从描述中选择工具. 此套件有助于他们很好地选择:
- 工具集 列表简短。 过
toolsets(单位:千美元)core, (中文(简体) ),collaboration, (中文(简体) ),scheduling, (中文(简体) ),analytics, (中文(简体) ),guidance, (中文(简体) ),tools(确切名称,结合工具)和readOnly改为createCriticalPathMcpServer, (中文(简体) ),registerWebMcpTools, (中文(简体) ),useWebMCP或者说createWebMcpState,或--toolsets, (中文(简体) ),--tools财务报告和审定财务报表--read-only给CLI的 未知名称丢出 . - 服务器指令 发送到连接上:数据模型, IDs来自何处, 哪个工具符合哪个请求, 以及技能索引。 WebMCP 返回与
handle.instructions(另见:instructions从useWebMCP财务报告和审定财务报表WebMcpState为了你的副驾驶系统迅速.buildAgentInstructions(tools)为自定义主机构建它 . - 技能 用于多步骤工作的游戏本,在代理技能中
SKILL.md格式 :
| 技能 | 用它来 |
|---|---|
plan-project | 将目标转化为一个具有可达到的目标、估计任务、优先事项及其依赖性的项目 |
triage-tasks | 确定积压的优先事项、估计数、标签和封堵状态 |
analyze-schedule | 查找最终日期和建议修正 |
report-status | 撰写项目状况报告 |
plan-capacity | 寻找超负荷或闲置人员并重新平衡工作 |
investigate-task | 找出为什么一项任务迟到、停滞或超出预算 |
特工们装上 get_skill 工具,将其读作 criticalpath://skills/{name} 资源,或将其作为文件使用 :
# Writes .claude/skills/<name>/SKILL.md (edited files are kept unless you pass --force)
npx @critical-path/mcp skills install [--dir <path>]
包中的文件船 (@critical-path/mcp/skills/<name>/SKILL.md),以及 SKILLS 编号 : getSkill() 导出.
测量工具选择 : pnpm --filter @critical-path/mcp eval:tools (需要Anthropic 证书)请克洛德为每个请求选择一个工具 evals/tool-selection.cases.json 并报告得分。 单位测试没有 API 密钥的每个描述 .
QQ 资源与提示( 标准 MCP 服务器)
资源
criticalpath://projects:所有项目的活JSON流.criticalpath://tasks所有任务中的JSON流.criticalpath://tasks/{id}具体任务的详细JSON载荷.criticalpath://skills/{name}:被捆绑的代理技能(Markdown).
提示
summarize_project: 项目健康、完成率和阻塞器的执行摘要.triage_task:AI指导分辨分析优先性,估计和接受标准.
许可证
麻省理工学院 杰克・詹姆斯