umtri-mcp 1.3.0 → 1.3.2

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.
@@ -26,6 +26,10 @@ back onto the nodes. The human commits when satisfied.
26
26
  didn't draw (child leaves/veins, an extra twig), create them with
27
27
  `metadata.plan = true` too — everything you add stays reviewable until the
28
28
  human commits. Do not create finalized (non-plan) nodes during realization.
29
+ **Except a trunk:** trunks are the frame of the tree and are never plan —
30
+ `create_node`/`update_node` reject a trunk with `metadata.plan`. If the brief
31
+ needs a new trunk (a new app or service), ask the human to add it; then
32
+ draw the plan as limbs under it.
29
33
  5. **Commit when realized.** Promote a plan node to the real tree with
30
34
  `commit_plan` — it clears `metadata.plan`. The tool **rejects the commit
31
35
  unless the node already has `metadata.implements`** (step 3), so attach the
package/core/tools.js CHANGED
@@ -660,7 +660,7 @@ export function registerTools(server, { api }) {
660
660
  'The tool validates against protocol policies. Hierarchy violations are rejected. Soft issues (reserved-domain labels, leaf↔vein heuristic, trunk naming) come back as warnings in the response — reconsider before continuing if warnings appear.',
661
661
  'After creating a leaf/vein, consider its connections: if it calls/feeds another node add an api (create_api), if it depends on/is built on another add an edge (create_edge). The response carries a connectionCheck reminder. See umtri://rules/system-structure (Connections).',
662
662
  'Do not open a new season just because none fits — attach to the now-season, or ask the user. create_season needs their confirmation (umtri://rules/seasons).',
663
- 'When realizing a human-drawn plan brief, any detail nodes you add should carry metadata.plan=true and the realized node needs metadata.implements — see umtri://rules/plan.',
663
+ 'When realizing a human-drawn plan brief, any detail nodes you add should carry metadata.plan=true and the realized node needs metadata.implements — see umtri://rules/plan. A trunk is never plan: metadata.plan on a trunk is rejected.',
664
664
  ].join(' '),
665
665
  inputSchema: z.object({
666
666
  slug: z.string().min(1).describe('Ground slug.'),
@@ -857,7 +857,10 @@ export function registerTools(server, { api }) {
857
857
  slug: z.string().min(1).describe('Ground slug.'),
858
858
  source: z.string().min(1).describe('Source node id.'),
859
859
  target: z.string().min(1).describe('Target node id.'),
860
- type: z.string().optional().describe('Edge type. Backend defaults if omitted.'),
860
+ // 서버(store.createEdge)가 type을 필수로 요구한다. 예전엔 optional + "Backend defaults"라고
861
+ // 안내해 생략한 에이전트가 매번 한 번씩 거부당했다. 그라운드마다 edge_types가 있어 enum으로
862
+ // 못 박지 않고 필수 문자열로 둔다.
863
+ type: z.string().min(1).describe('Edge type — required. "dependency" (source is built on / needs target) or "data_flow" (data moves source → target) — use one of the ground\'s edgeTypes.'),
861
864
  label: z.string().optional(),
862
865
  metadata: z.record(z.any()).optional(),
863
866
  }),
@@ -867,8 +870,7 @@ export function registerTools(server, { api }) {
867
870
  const { ok, rejectReason } = validateEdge({ sourceId: source, targetId: target });
868
871
  if (!ok) throw new Error(`Rejected by protocol: ${rejectReason}`);
869
872
 
870
- const body = { source, target };
871
- if (type !== undefined) body.type = type;
873
+ const body = { source, target, type };
872
874
  if (label !== undefined) body.label = label;
873
875
  if (metadata !== undefined) body.metadata = metadata;
874
876
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "umtri-mcp",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "MCP server for Umtri — give your AI coding agent a persistent map of your project's structure, dependencies, and bugs.",
5
5
  "mcpName": "io.umtri/umtri",
6
6
  "keywords": [