@kage-core/kage-graph-mcp 2.3.2 → 2.4.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.
Files changed (2) hide show
  1. package/dist/index.js +47 -36
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -114,6 +114,7 @@ function listTools() {
114
114
  // separate deferred schemas. Cuts session start from 4 schema loads to 1.
115
115
  name: "kage_context",
116
116
  description: "Primary kage entry point. Validates memory health, recalls relevant packets, and queries both the code graph and knowledge graph — all in one call. Call this at the start of every task; it answers caller/usage questions from the code graph too, so you rarely need a separate graph tool.",
117
+ annotations: { title: "Recall verified memory and query the code/knowledge graph", readOnlyHint: true },
117
118
  inputSchema: {
118
119
  type: "object",
119
120
  properties: {
@@ -218,10 +219,11 @@ function listTools() {
218
219
  {
219
220
  name: "kage_risk",
220
221
  description: "Assess modification risk for files using Kage's code graph plus local git history: dependents, impact surface, churn, ownership, co-change partners, and test gaps. Use before editing hotspot or shared files.",
222
+ annotations: { title: "Assess file modification risk", readOnlyHint: true },
221
223
  inputSchema: {
222
224
  type: "object",
223
225
  properties: {
224
- project_dir: { type: "string" },
226
+ project_dir: { type: "string", description: "Absolute path to the repository root." },
225
227
  targets: { type: "array", items: { type: "string" }, description: "File paths to assess" },
226
228
  changed_files: { type: "array", items: { type: "string" }, description: "Optional PR/branch changed files. If targets is omitted, these are assessed." },
227
229
  },
@@ -231,10 +233,11 @@ function listTools() {
231
233
  {
232
234
  name: "kage_dependency_path",
233
235
  description: "Find how two files are connected in Kage's source-derived code graph. Reports direct dependency direction, reverse impact direction, or undirected graph connection.",
236
+ annotations: { title: "Trace the dependency path between two files", readOnlyHint: true },
234
237
  inputSchema: {
235
238
  type: "object",
236
239
  properties: {
237
- project_dir: { type: "string" },
240
+ project_dir: { type: "string", description: "Absolute path to the repository root." },
238
241
  from: { type: "string", description: "Source file path or unique suffix" },
239
242
  to: { type: "string", description: "Target file path or unique suffix" },
240
243
  },
@@ -352,11 +355,12 @@ function listTools() {
352
355
  },
353
356
  {
354
357
  name: "kage_decisions",
355
- description: "Summarize Kage why-memory for a repo: decisions, gotchas, runbooks, conventions, code explanations, path coverage, weak/stale memory, and important code paths that still lack decision memory.",
358
+ description: "Summarize the repo's 'why' memory at a glance: the decisions, gotchas, runbooks, conventions, and code explanations Kage has captured, plus which high-traffic code paths still have no decision memory. Use it to brief yourself on a repo before changing it, or to audit where institutional knowledge is thin or going stale. Read-only: returns grouped entries with titles, types, cited file paths, and call-outs for weak, stale, or undocumented hot paths. Does not modify any memory.",
359
+ annotations: { title: "Summarize the repo's decision memory", readOnlyHint: true },
356
360
  inputSchema: {
357
361
  type: "object",
358
362
  properties: {
359
- project_dir: { type: "string" },
363
+ project_dir: { type: "string", description: "Absolute path to the repository root to summarize." },
360
364
  },
361
365
  required: ["project_dir"],
362
366
  },
@@ -386,12 +390,13 @@ function listTools() {
386
390
  {
387
391
  name: "kage_docs_search",
388
392
  description: "Search this repo's OWN committed documentation (README, docs/**, *.md, common doc dirs — including any framework/API docs checked into the repo). BM25 over heading-anchored chunks from .agent_memory/indexes/docs-index.json. Returns ranked doc hits with doc_path, heading, line, and snippet. This indexes only files on disk in the project, never the internet.",
393
+ annotations: { title: "Search the repo's own committed docs", readOnlyHint: true },
389
394
  inputSchema: {
390
395
  type: "object",
391
396
  properties: {
392
- query: { type: "string" },
393
- project_dir: { type: "string" },
394
- limit: { type: "number" },
397
+ query: { type: "string", description: "Search terms to match against the repo's documentation." },
398
+ project_dir: { type: "string", description: "Absolute path to the repository root." },
399
+ limit: { type: "number", description: "Max ranked doc hits to return (default 5)." },
395
400
  },
396
401
  required: ["query", "project_dir"],
397
402
  },
@@ -489,10 +494,11 @@ function listTools() {
489
494
  {
490
495
  name: "kage_refresh",
491
496
  description: "Rebuild repo indexes, code graph, memory graph, metrics, and stale-memory metadata. Agents should run this after meaningful file/content changes before PR checks; push-only or same-tree commits do not need another refresh. On non-default git branches metadata-only packet rewrites are skipped (quiet refresh) to avoid merge conflicts; pass force to persist them anyway.",
497
+ annotations: { title: "Rebuild Kage indexes and graphs", readOnlyHint: false, idempotentHint: true },
492
498
  inputSchema: {
493
499
  type: "object",
494
500
  properties: {
495
- project_dir: { type: "string" },
501
+ project_dir: { type: "string", description: "Absolute path to the repository root." },
496
502
  force: { type: "boolean", description: "Persist packet metadata rewrites even on a non-default branch" },
497
503
  },
498
504
  required: ["project_dir"],
@@ -521,10 +527,11 @@ function listTools() {
521
527
  {
522
528
  name: "kage_pr_check",
523
529
  description: "Check whether repo memory, code graph, memory graph, and stale-memory state are ready for merge. Leads with a human summary of team memories invalidated by the current change — relay it to the developer.",
530
+ annotations: { title: "Check memory readiness for merge", readOnlyHint: true },
524
531
  inputSchema: {
525
532
  type: "object",
526
533
  properties: {
527
- project_dir: { type: "string" },
534
+ project_dir: { type: "string", description: "Absolute path to the repository root." },
528
535
  },
529
536
  required: ["project_dir"],
530
537
  },
@@ -612,14 +619,15 @@ function listTools() {
612
619
  },
613
620
  {
614
621
  name: "kage_supersede",
615
- description: "Mark one repo-local memory packet as superseded by a replacement packet and write bidirectional lineage edges.",
622
+ description: "Replace one repo-local memory packet with a newer one that corrects or obsoletes it. Marks the old packet superseded, links it to the replacement, and writes bidirectional lineage edges so the history stays traceable. Use this instead of deleting when new knowledge updates an old fact, or to resolve a contradiction surfaced by kage_conflicts. Mutates both packets on disk: the superseded packet is withheld from recall but kept for lineage.",
623
+ annotations: { title: "Supersede a memory packet with a newer one", readOnlyHint: false, destructiveHint: false, idempotentHint: true },
616
624
  inputSchema: {
617
625
  type: "object",
618
626
  properties: {
619
- project_dir: { type: "string" },
620
- packet_id: { type: "string" },
621
- replacement_packet_id: { type: "string" },
622
- reason: { type: "string" },
627
+ project_dir: { type: "string", description: "Absolute path to the repository root." },
628
+ packet_id: { type: "string", description: "Id of the existing packet to retire (the one being replaced)." },
629
+ replacement_packet_id: { type: "string", description: "Id of the newer packet that wins and stays active." },
630
+ reason: { type: "string", description: "Optional human note recorded on the lineage edge explaining why it was superseded." },
623
631
  },
624
632
  required: ["project_dir", "packet_id", "replacement_packet_id"],
625
633
  },
@@ -638,12 +646,13 @@ function listTools() {
638
646
  {
639
647
  name: "kage_skills",
640
648
  description: "Codify durable, verified repo memory (runbooks, workflows, actionable decisions) into git-native SKILL.md files under .claude/skills/ that every teammate's agent auto-loads. Only grounded, non-stale packets become skills. Pass dry_run to preview without writing. dir overrides the output directory.",
649
+ annotations: { title: "Codify verified memory into agent skills", readOnlyHint: false, idempotentHint: true },
641
650
  inputSchema: {
642
651
  type: "object",
643
652
  properties: {
644
- project_dir: { type: "string" },
645
- dry_run: { type: "boolean" },
646
- dir: { type: "string" },
653
+ project_dir: { type: "string", description: "Absolute path to the repository root." },
654
+ dry_run: { type: "boolean", description: "Preview which skills would be written without creating any files." },
655
+ dir: { type: "string", description: "Override the output directory (default .claude/skills/)." },
647
656
  },
648
657
  required: ["project_dir"],
649
658
  },
@@ -735,21 +744,22 @@ function listTools() {
735
744
  },
736
745
  {
737
746
  name: "kage_learn",
738
- description: "Capture an actual reusable learning from the current session as repo-local memory. Prefer this over diff proposal when the agent knows what was learned. Capture is rejected if every referenced path is missing from the repo; set allow_missing_paths to record anyway (e.g. a file you are about to create).",
739
- inputSchema: {
740
- type: "object",
741
- properties: {
742
- project_dir: { type: "string" },
743
- learning: { type: "string" },
744
- title: { type: "string" },
745
- type: { type: "string" },
746
- evidence: { type: "string" },
747
- verified_by: { type: "string" },
748
- tags: { type: "array", items: { type: "string" } },
749
- paths: { type: "array", items: { type: "string" } },
750
- stack: { type: "array", items: { type: "string" } },
751
- graph_nodes: { type: "array", items: { type: "string" } },
752
- allow_missing_paths: { type: "boolean" },
747
+ description: "Capture a durable, reusable learning from the current session as a verified repo-local memory packet (committed under .agent_memory/, shared with the team via git). Use it the moment you discover something a future session should know: a decision and its rationale, a bug's root cause and fix, a convention, or a setup step. Prefer it over diff-based proposals when you already know what was learned. The write is rejected if every cited path is missing from the repo (set allow_missing_paths for a file you are about to create), and secrets/PII are scanned out before writing. Returns the new packet id plus any contradiction warnings against existing memory.",
748
+ annotations: { title: "Capture a verified learning to repo memory", readOnlyHint: false },
749
+ inputSchema: {
750
+ type: "object",
751
+ properties: {
752
+ project_dir: { type: "string", description: "Absolute path to the repository root." },
753
+ learning: { type: "string", description: "The insight to store, in full sentences: what was learned and why it matters to a future session." },
754
+ title: { type: "string", description: "Short headline for the packet. Derived from the learning if omitted." },
755
+ type: { type: "string", description: "Memory type: decision, bug_fix, runbook, convention, gotcha, workflow, code_explanation. Inferred if omitted." },
756
+ evidence: { type: "string", description: "How the learning was confirmed (e.g. test output, a reproduced behavior)." },
757
+ verified_by: { type: "string", description: "What verified it (e.g. a command run, a passing test, a reviewer)." },
758
+ tags: { type: "array", items: { type: "string" }, description: "Optional keywords to aid future recall." },
759
+ paths: { type: "array", items: { type: "string" }, description: "Repo files this memory is about; used to verify the citation now and to recall the memory when those files are touched later." },
760
+ stack: { type: "array", items: { type: "string" }, description: "Optional technologies/frameworks the learning relates to." },
761
+ graph_nodes: { type: "array", items: { type: "string" }, description: "Optional code-graph symbol or file ids this memory is grounded to." },
762
+ allow_missing_paths: { type: "boolean", description: "Allow the write even if cited paths do not exist yet (e.g. a file you are about to create)." },
753
763
  discovery_tokens: { type: "number", description: "Approximate token cost of producing this knowledge (exploration + reasoning). Stored on the packet so recall receipts can report replay value; a conservative per-type default is estimated when omitted." },
754
764
  },
755
765
  required: ["project_dir", "learning"],
@@ -872,13 +882,14 @@ function listTools() {
872
882
  },
873
883
  {
874
884
  name: "kage_feedback",
875
- description: "Record usefulness feedback on an approved repo-local memory packet: helpful, wrong, or stale.",
885
+ description: "Record how useful a recalled repo-local memory packet was, which tunes Kage's trust and future recall. 'helpful' reinforces the packet, 'wrong' flags it as disputed, and 'stale' marks it for re-verification and withholds it from recall until refreshed. Use it right after a recalled packet helped you, misled you, or no longer matched the code. Mutates the packet's quality signals on disk.",
886
+ annotations: { title: "Rate a recalled memory packet", readOnlyHint: false },
876
887
  inputSchema: {
877
888
  type: "object",
878
889
  properties: {
879
- project_dir: { type: "string" },
880
- packet_id: { type: "string" },
881
- kind: { type: "string", enum: ["helpful", "wrong", "stale"] },
890
+ project_dir: { type: "string", description: "Absolute path to the repository root." },
891
+ packet_id: { type: "string", description: "Id of the memory packet you are rating." },
892
+ kind: { type: "string", enum: ["helpful", "wrong", "stale"], description: "helpful = it was accurate and useful; wrong = it was incorrect (flag as disputed); stale = it no longer matches the code (mark for re-verification)." },
882
893
  },
883
894
  required: ["project_dir", "packet_id", "kind"],
884
895
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kage-core/kage-graph-mcp",
3
- "version": "2.3.2",
3
+ "version": "2.4.0",
4
4
  "description": "Team memory for coding agents: captures the decisions, runbooks, and bug fixes that get lost, verified against your code and shared via git. MCP server, zero deps, no account.",
5
5
  "main": "dist/index.js",
6
6
  "files": [