umtri-mcp 1.0.2 → 1.2.0
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 +1 -1
- package/core/api-client.js +6 -1
- package/core/instructions.js +20 -0
- package/core/policy.js +87 -0
- package/core/resources/commit-sync.md +55 -0
- package/core/resources/plan.md +1 -1
- package/core/resources/seasons.md +47 -0
- package/core/resources/transplant.md +16 -12
- package/core/resources/vision.md +1 -1
- package/core/resources/vocabulary.md +1 -1
- package/core/resources/wiki.md +210 -0
- package/core/resources.js +19 -5
- package/core/tools.js +390 -52
- package/package.json +1 -1
- package/server.js +2 -1
- package/core/resources/seasons-human-only.md +0 -33
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -19,6 +19,7 @@ import { dirname, join } from 'node:path';
|
|
|
19
19
|
import { createApiClient } from './core/api-client.js';
|
|
20
20
|
import { registerTools } from './core/tools.js';
|
|
21
21
|
import { registerResources } from './core/resources.js';
|
|
22
|
+
import { SERVER_INSTRUCTIONS } from './core/instructions.js';
|
|
22
23
|
|
|
23
24
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
24
25
|
const RESOURCES_DIR = join(__dirname, 'core', 'resources');
|
|
@@ -44,7 +45,7 @@ const api = createApiClient({
|
|
|
44
45
|
const server = new McpServer({
|
|
45
46
|
name: 'umtri-mcp',
|
|
46
47
|
version: VERSION,
|
|
47
|
-
});
|
|
48
|
+
}, { instructions: SERVER_INSTRUCTIONS });
|
|
48
49
|
|
|
49
50
|
registerTools(server, { api });
|
|
50
51
|
registerResources(server, { resourcesDir: RESOURCES_DIR });
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# Rule: Seasons Are Created by Humans Only
|
|
2
|
-
|
|
3
|
-
**AI tools and automation MUST NOT create new seasons.**
|
|
4
|
-
|
|
5
|
-
## What a season is
|
|
6
|
-
|
|
7
|
-
A `season` is a deliberate growth epoch declared by a human — for example
|
|
8
|
-
"Q3 2026", "v2 redesign", "post-launch hardening". It is the unit by which
|
|
9
|
-
project owners *consciously break time* in their ground.
|
|
10
|
-
|
|
11
|
-
## Why this rule exists
|
|
12
|
-
|
|
13
|
-
Seasons carry intent. They mark moments where a person decides "this chapter
|
|
14
|
-
is done, the next one begins." If an AI agent silently opens a new season
|
|
15
|
-
when it can't decide which existing one to use, the metaphor collapses and
|
|
16
|
-
the project's timeline becomes meaningless noise.
|
|
17
|
-
|
|
18
|
-
## What this means in practice
|
|
19
|
-
|
|
20
|
-
- The MCP tool `create_season` is intentionally **not exposed**.
|
|
21
|
-
- When creating a new node and unsure which season it belongs to:
|
|
22
|
-
- Default to the most recent existing `season` whose state is `now`.
|
|
23
|
-
- If no `now` season exists, ask the user which season to attach to.
|
|
24
|
-
- Never call `POST /api/projects/:slug/seasons` from automation.
|
|
25
|
-
- A user explicitly saying "create a new season called X" is the only valid
|
|
26
|
-
trigger. Even then, prefer to confirm before acting.
|
|
27
|
-
|
|
28
|
-
## What is allowed
|
|
29
|
-
|
|
30
|
-
- Reading seasons (`list_seasons`).
|
|
31
|
-
- Attaching new nodes to existing seasons via `season` field.
|
|
32
|
-
- Suggesting to the user that a new season *might* be useful — but waiting
|
|
33
|
-
for them to create it.
|