@projitive/mcp 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Language: English | [简体中文](README_CN.md)
4
4
 
5
- **Current Spec Version: projitive-spec v1.0.0 | MCP Version: 1.0.5**
5
+ **Current Spec Version: projitive-spec v1.0.0 | MCP Version: 1.0.6**
6
6
 
7
7
  Projitive MCP server (semantic interface edition) helps agents discover projects, select tasks, locate evidence, and execute under governance workflows.
8
8
 
@@ -149,7 +149,7 @@ npm run test
149
149
  #### `projectInit`
150
150
 
151
151
  - **Purpose**: manually initialize governance directory structure for a project (default `.projitive`).
152
- - **Input**: `projectPath?`, `governanceDir?`, `force?`
152
+ - **Input**: `projectPath`, `governanceDir?`, `force?`
153
153
  - **Output Example (Markdown)**:
154
154
 
155
155
  ```markdown
@@ -177,7 +177,7 @@ npm run test
177
177
  #### `projectNext`
178
178
 
179
179
  - **Purpose**: directly list recently actionable projects (ranked by actionable task count and recency).
180
- - **Input**: `rootPath?`, `maxDepth?`, `limit?`
180
+ - **Input**: `maxDepth?`, `limit?`
181
181
  - **Output Example (Markdown)**:
182
182
 
183
183
  ```markdown
@@ -294,7 +294,7 @@ npm run test
294
294
  #### `taskNext`
295
295
 
296
296
  - **Purpose**: one-step workflow for project discovery + best task selection + evidence/read-order output.
297
- - **Input**: `rootPath?`, `maxDepth?`, `topCandidates?`
297
+ - **Input**: `maxDepth?`, `topCandidates?`
298
298
  - **Output Example (Markdown)**:
299
299
 
300
300
  ```markdown
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projitive/mcp",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "Projitive MCP Server for project and task discovery/update",
5
5
  "license": "ISC",
6
6
  "author": "",
@@ -84,8 +84,11 @@ export function registerDesignContextPrompts(server) {
84
84
  text: [
85
85
  "Execute Projitive task with minimal calls:",
86
86
  "",
87
+ "Prerequisite:",
88
+ "- If target project has no `.projitive`, run: projectInit(projectPath=<project-dir>)",
89
+ "",
87
90
  "STEP 1: Get task (1 call)",
88
- "- Run: taskNext(rootPath=workspace)",
91
+ "- Run: taskNext()",
89
92
  "- Result: selectedTaskId, suggestedReadOrder",
90
93
  "",
91
94
  "STEP 2: Load context (1-2 calls)",
@@ -47,7 +47,7 @@ function renderMethodCatalogMarkdown() {
47
47
  "## Start Here",
48
48
  "- Unknown project path: `projectScan` -> `projectLocate` -> `projectContext` -> `taskNext`.",
49
49
  "- Known project path: `projectContext` -> `taskNext` (or `taskList`) -> `taskContext`.",
50
- "- Need to bootstrap governance: call `projectInit` only when `.projitive` is missing.",
50
+ "- Need to bootstrap governance: call `projectInit(projectPath=\"<project-dir>\")` only when `.projitive` is missing.",
51
51
  "",
52
52
  "## Methods",
53
53
  "| Order | Group | Method | Agent Use |",
@@ -61,7 +61,7 @@ function renderMethodCatalogMarkdown() {
61
61
  "| 7 | Roadmap | roadmapList | inspect roadmap-task linkage |",
62
62
  "| 8 | Roadmap | roadmapContext | inspect one roadmap with references |",
63
63
  "| 9 | Project | projectNext | rank actionable projects across workspace |",
64
- "| 10 | Project | projectInit | bootstrap governance files if missing |",
64
+ "| 10 | Project | projectInit | bootstrap governance files if missing |"
65
65
  ].join("\n");
66
66
  }
67
67
  function registerGovernanceResources() {
@@ -132,14 +132,13 @@ function registerGovernancePrompts() {
132
132
  title: "Execute Task Workflow",
133
133
  description: "Primary execution prompt: select one task, execute, and verify evidence consistency",
134
134
  argsSchema: {
135
- rootPath: z.string().optional(),
136
135
  projectPath: z.string().optional(),
137
136
  taskId: z.string().optional(),
138
137
  },
139
- }, async ({ rootPath, projectPath, taskId }) => {
138
+ }, async ({ projectPath, taskId }) => {
140
139
  const taskEntry = taskId && projectPath
141
140
  ? `1) Run taskContext(projectPath=\"${projectPath}\", taskId=\"${taskId}\").`
142
- : `1) Run taskNext(${rootPath ? `rootPath=\"${rootPath}\"` : ""}).`;
141
+ : "1) Run taskNext().";
143
142
  const text = [
144
143
  "You are executing Projitive governance workflow in agent-first mode.",
145
144
  "",
@@ -150,6 +149,7 @@ function registerGovernancePrompts() {
150
149
  "4) Re-run taskContext for the selected task and verify references.",
151
150
  "",
152
151
  "Fallbacks:",
152
+ "- If `.projitive` is missing for a known project, run `projectInit(projectPath=\"<project-dir>\")` first.",
153
153
  "- If taskNext returns no actionable task, follow its no-task checklist and create 1-3 TODO tasks.",
154
154
  "- If project is unknown, run projectScan -> projectLocate -> projectContext before task tools.",
155
155
  "",
@@ -189,17 +189,16 @@ function registerGovernancePrompts() {
189
189
  server.registerPrompt("triageProjectGovernance", {
190
190
  title: "Triage Project Governance",
191
191
  description: "Discovery-first triage prompt to pick project and next executable task",
192
- argsSchema: {
193
- rootPath: z.string().optional(),
194
- },
195
- }, async ({ rootPath }) => {
192
+ argsSchema: {},
193
+ }, async () => {
196
194
  const text = [
197
195
  "Triage governance and pick one execution target quickly.",
198
196
  "",
197
+ "0) If known project has no `.projitive`, run projectInit(projectPath=<project-dir>) first.",
199
198
  "1) If project path is unknown, run projectScan() and pick one discovered project.",
200
- `2) Run projectNext(${rootPath ? `rootPath=\"${rootPath}\"` : ""}) to rank projects.`,
199
+ "2) Run projectNext() to rank projects.",
201
200
  "3) Run projectContext(projectPath=<selectedProject>).",
202
- "4) Run taskNext(rootPath=<workspaceRootIfNeeded>) for best actionable task.",
201
+ "4) Run taskNext() for best actionable task.",
203
202
  "5) If manual filtering is needed, run taskList(projectPath=<selectedProject>, status=IN_PROGRESS).",
204
203
  "6) Continue with taskContext(projectPath=<selectedProject>, taskId=<selectedTaskId>).",
205
204
  ].join("\n");
@@ -276,7 +276,7 @@ export function registerProjectTools(server) {
276
276
  title: "Project Init",
277
277
  description: "Bootstrap governance files when a project has no .projitive yet",
278
278
  inputSchema: {
279
- projectPath: z.string().optional(),
279
+ projectPath: z.string(),
280
280
  governanceDir: z.string().optional(),
281
281
  force: z.boolean().optional(),
282
282
  },
@@ -356,12 +356,11 @@ export function registerProjectTools(server) {
356
356
  title: "Project Next",
357
357
  description: "Rank actionable projects and return the best execution target",
358
358
  inputSchema: {
359
- rootPath: z.string().optional(),
360
359
  maxDepth: z.number().int().min(0).max(8).optional(),
361
360
  limit: z.number().int().min(1).max(50).optional(),
362
361
  },
363
- }, async ({ rootPath, maxDepth, limit }) => {
364
- const root = resolveScanRoot(rootPath);
362
+ }, async ({ maxDepth, limit }) => {
363
+ const root = resolveScanRoot();
365
364
  const depth = resolveScanDepth(maxDepth);
366
365
  const projects = await discoverProjects(root, depth);
367
366
  const snapshots = await Promise.all(projects.map(async (governanceDir) => {
@@ -545,12 +545,11 @@ export function registerTaskTools(server) {
545
545
  title: "Task Next",
546
546
  description: "Start here to auto-select the highest-priority actionable task",
547
547
  inputSchema: {
548
- rootPath: z.string().optional(),
549
548
  maxDepth: z.number().int().min(0).max(8).optional(),
550
549
  topCandidates: z.number().int().min(1).max(20).optional(),
551
550
  },
552
- }, async ({ rootPath, maxDepth, topCandidates }) => {
553
- const root = resolveScanRoot(rootPath);
551
+ }, async ({ maxDepth, topCandidates }) => {
552
+ const root = resolveScanRoot();
554
553
  const depth = resolveScanDepth(maxDepth);
555
554
  const projects = await discoverProjects(root, depth);
556
555
  const rankedCandidates = rankActionableTaskCandidates(await readActionableTaskCandidates(projects));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projitive/mcp",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "Projitive MCP Server for project and task discovery/update",
5
5
  "license": "ISC",
6
6
  "author": "",