名称: tensorpm
描述: "AI 驱动的项目管理工具 —— 采用本地优先架构的 Notion 和 Jira 替代方案。通过 MCP 工具或 A2A 智能体通信管理项目、跟踪行动项并协调团队。已签名并公证。https://tensorpm.com"
compatibility: 使用 MCP 工具和 A2A 通信需要 TensorPM 桌面应用处于运行状态。支持 macOS、Windows 和 Linux。
元数据:
homepage: https://tensorpm.com
author: tensorpm 团队
AI 驱动的项目管理 —— 通过上下文驱动的优先级排序,智能管理项目、跟踪行动项并协调团队。
本地优先,无需账户。 完整应用,永久免费 —— 使用您自己的 API 密钥(OpenAI、Claude、Gemini、Mistral)或本地模型(Ollama、vLLM、LLM studio)。可选:创建账户并启用云端同步,可实现跨设备和团队的端到端加密协作。
通过 MCP 工具或 A2A 智能体通信与 TensorPM 交互。
已签名并公证: macOS 版本由 Apple 进行代码签名和公证。Windows 版本通过 Azure Trusted Signing 进行签名。
brew tap neo552/tensorpm
brew install --cask tensorpm
curl -fsSL https://tensorpm.com/download/linux -o ~/TensorPM.AppImage
chmod +x ~/TensorPM.AppImage
发布说明: https://github.com/Neo552/TensorPM-Releases/releases/latest
备选方案: https://tensorpm.com
TensorPM 包含一个内置的本地 MCP 服务器。从应用内安装:
要求: MCP 工具正常工作需要 TensorPM 处于运行状态。
使用 set_api_key 工具直接从您的 AI 客户端配置 AI 提供商:
set_api_key
provider: "openai" # openai, anthropic, google, mistral
api_key: "sk-..."
密钥将安全地存储在 TensorPM 中。此操作为只写 —— 密钥无法被读取。
TensorPM 在端口 37850 上公开一个本地 A2A 智能体端点。
无需身份验证 —— A2A 仅在 localhost 上运行,所有本地请求均被信任。
步骤 1: 获取根智能体卡片
curl http://localhost:37850/.well-known/agent.json
返回包含所有项目智能体链接的根智能体卡片。
步骤 2: 列出项目
curl http://localhost:37850/projects
返回:
[
{
"id": "project-uuid",
"name": "我的项目",
"agentUrl": "http://localhost:37850/projects/project-uuid/a2a",
"agentCardUrl": "http://localhost:37850/projects/project-uuid/.well-known/agent.json"
}
]
步骤 3: 获取项目智能体卡片
curl http://localhost:37850/projects/{projectId}/.well-known/agent.json
返回特定项目的 A2A 智能体卡片,包含其能力和支持的方法。
使用 JSON-RPC 向项目的 AI 智能体发送消息:
curl -X POST http://localhost:37850/projects/{projectId}/a2a \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "message/send",
"id": "1",
"params": {
"message": {
"role": "user",
"parts": [{"kind": "text", "text": "列出高优先级事项"}]
}
}
}'
支持的 JSON-RPC 方法:
| 方法 | 描述 |
|---|---|
message/send |
发送消息并获取阻塞式响应 |
message/stream |
发送消息并通过 SSE 流式传输响应 |
tasks/get |
按 ID 检索任务及其完整状态历史 |
tasks/list |
列出项目的任务(支持可选过滤器) |
tasks/cancel |
取消正在运行的任务 |
tasks/resubscribe |
恢复对正在运行任务的流式更新订阅 |
继续对话 通过传递 contextId:
{
"jsonrpc": "2.0",
"method": "message/send",
"id": "2",
"params": {
"contextId": "context-uuid-from-previous-response",
"message": {
"role": "user",
"parts": [{"kind": "text", "text": "告诉我更多关于第一项的信息"}]
}
}
}
任务跟踪消息请求的生命周期。状态包括:submitted, working, input-required, completed, canceled, failed。
{
"jsonrpc": "2.0",
"method": "tasks/get",
"id": "1",
"params": {"id": "task-uuid", "historyLength": 10}
}
| 方法 | 端点 | 描述 |
|---|---|---|
GET |
/.well-known/agent.json |
根智能体卡片 |
GET |
/projects |
列出所有项目及其智能体 URL |
POST |
/projects |
创建新项目 |
GET |
/projects/:id |
获取完整的项目数据 |
GET |
/projects/:id/.well-known/agent.json |
项目智能体卡片 |
GET |
/projects/:id/contexts |
列出对话 |
GET |
/projects/:id/contexts/:ctxId/messages |
获取消息历史记录 |
GET |
/projects/:id/action-items |
列出行动项(支持过滤器) |
POST |
/projects/:id/action-items |
创建行动项 |
PATCH |
/projects/:id/action-items/:itemId |
更新行动项 |
POST |
/projects/:id/a2a |
JSON-RPC 消息传递 |
GET |
/workspaces |
列出所有工作区及当前活动工作区 ID |
POST |
/workspaces/:id/activate |
切换到指定工作区 |
可选身份验证: 在启动 TensorPM 前设置 A2A_HTTP_AUTH_TOKEN 环境变量以启用令牌验证。
| 工具 | 描述 |
|---|---|
list_projects |
列出所有项目及其名称和 ID |
create_project |
创建新项目(basic、fromPrompt 或 fromFile 模式) |
get_project |
获取完整的项目数据(只读) |
list_action_items |
查询和筛选行动项 |
submit_action_items |
创建新的行动项 |
update_action_items |
更新现有行动项 |
propose_updates |
提交项目更新供人工审核 |
set_api_key |
设置 AI 提供商 API 密钥(openai, anthropic, google, mistral) |
list_workspaces |
列出所有工作区(本地+云端)及当前活动工作区 ID |
set_active_workspace |
切换到不同的工作区 |
注意: MCP 工具提供对行动项的直接访问。核心项目上下文(简介、预算、人员、类别)只能由 TensorPM 项目管理智能体修改 —— 请使用 A2A message/send 来请求更改。
工具参数: 请参考 MCP 工具模式以获取详细的参数信息。
| 字段 | 类型 | 描述 |
|---|---|---|
id |
string | 唯一标识符(创建时自动生成) |
displayId |
number | 人类可读的序列 ID(例如 1, 2, 3) |
text |
string | 简短标题/摘要 |
description |
string | 详细描述 |
status |
string | open, inProgress, completed, blocked |
categoryId |
string | 类别 UUID |
assignedPeople |
string[] | 人员 UUID 或姓名的数组 |
dueDate |
string | ISO 日期 (YYYY-MM-DD) - 必需,不可清空 |
startDate |
string | ISO 日期 (YYYY-MM-DD),或 null 以清空 |
urgency |
string | very low, low, medium, high, overdue |
impact |
string | minimal, low, medium, high, critical |
complexity |
string | very simple, simple, moderate, complex, very complex |
priority |
number | 优先级分数 (1-100) |
planEffort |
object | {value: number, unit: "hours" \| "days"}, 或 null 以清空 |
planBudget |
object | {amount: number, currency?: string}, 或 null 以清空 |
manualEffort |
object | 实际工作量:{value: number, unit: "hours" \| "days"}, 或 null 以清空 |
isBudget |
object | 实际花费预算:{amount: number, currency?: string}, 或 null 以清空 |
blockReason |
string | 状态为 blocked 时的原因 |
dependencies |
array | 任务依赖关系(sourceId + type) |
行动项支持依赖关系以实现顺序任务执行。依赖关系定义了哪些任务必须完成(或开始)后,其他任务才能开始。
| 类型 | 名称 | 含义 |
|---|---|---|
FS |
完成-开始 | 任务 A 完成前,任务 B 不能开始(最常见) |
SS |
开始-开始 | 任务 A 开始前,任务 B 不能开始 |
FF |
完成-完成 | 任务 A 完成前,任务 B 不能完成 |
SF |
开始-完成 | 任务 A 开始前,任务 B 不能完成(罕见) |
通过 submit_action_items 创建行动项时,按如下方式指定依赖关系:
{
"actionItems": [
{
"text": "任务 A - 调研",
"complexity": "simple"
},
{
"text": "任务 B - 实施",
"complexity": "moderate",
"dependencies": [
{"sourceId": "<任务A的id>", "type": "FS"}
]
}
]
}
注意: sourceId 必须引用项目中已存在的行动项。在 MCP 工具中,targetId 会自动设置为当前项,因此您只需提供 sourceId 和 type。
使用 update_action_items 修改依赖关系。设置 dependencies 将替换所有现有依赖关系:
{
"updates": [
{
"id": "<行动项-id>",
"dependencies": [
{"sourceId": "<其他项-id>", "type": "FS"},
{"sourceId": "<另一项-id>", "type": "SS"}
]
}
]
}
设置为空数组 [] 以清除所有依赖关系。
基本 (即时):
curl -X POST http://localhost:37850/projects \
-H "Content-Type: application/json" \
-d '{"name": "新项目", "description": "可选描述"}'
从提示生成 (AI 生成,异步):
curl -X POST http://localhost:37850/projects \
-H "Content-Type: application/json" \
-d '{"name": "移动应用", "mode": "fromPrompt", "prompt": "构建一个带有连续记录功能的习惯追踪器"}'
从文件生成 (从文档 AI 生成,异步):
curl -X POST http://localhost:37850/projects \
-H "Content-Type: application/json" \
-d '{"name": "来自简报", "mode": "fromFile", "documentPath": "/path/to/brief.pdf"}'
异步模式返回 status: "generating"。AI 会在后台填充目标、范围、里程碑、风险等信息。
curl http://localhost:37850/projects/{projectId}
curl "http://localhost:37850/projects/{projectId}/action-items?status=open&limit=10"
curl -X POST http://localhost:37850/projects/{projectId}/action-items \
-H "Content-Type: application/json" \
-d '{
"actionItems": [
{"text": "新任务", "urgency": "high", "complexity": "moderate"}
]
}'
curl -X PATCH http://localhost:37850/projects/{projectId}/action-items/{itemId} \
-H "Content-Type: application/json" \
-d '{"status": "completed"}'
curl http://localhost:37850/workspaces
返回所有可访问的工作区(本地和云端),包含项目数量和当前活动工作区 ID。
curl -X POST http://localhost:37850/workspaces/{workspaceId}/activate
切换到指定的工作区。会关闭所有已打开的项目。
list_projects 获取可用的项目 IDget_project 获取用于筛选的类别和人员 IDpropose_updates 的提交需要人工批准后才能应用localhost:37850 —— 无需身份验证(仅限 localhost)set_api_key) 或在 TensorPM 设置中设置