@cachly-dev/mcp-server 0.10.97 → 0.10.99

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
@@ -22,7 +22,7 @@
22
22
  <img src="https://img.shields.io/badge/GDPR-EU%20servers-green" alt="GDPR: EU servers" />
23
23
  </a>
24
24
  &nbsp;
25
- <img src="https://img.shields.io/badge/120%20MCP%20tools-violet" alt="120 MCP tools" />
25
+ <img src="https://img.shields.io/badge/121%20MCP%20tools-violet" alt="121 MCP tools" />
26
26
  &nbsp;
27
27
  <img src="https://img.shields.io/badge/License-Apache--2.0-yellow" alt="License: Apache-2.0" />
28
28
  </p>
@@ -191,6 +191,7 @@ close without breaking its own lock-in. **That gap is where cachly wins.**
191
191
  | **`brain_file_map`** | Before you touch a file: who's worked on it and which lessons reference it. |
192
192
  | **`team_expertise_map`** | The whole team's skills matrix in one table — onboarding and bus-factor insurance. |
193
193
  | **`brain_collab_pairs`** | Person↔Person Collaboration Graph — *"Frag X und Y, die haben das zusammen gelöst."* Bus-factor alerts included. |
194
+ | **`brain_portability`** | W9 Model-Neutrality — config for 7 clients (Claude, Cursor, Copilot, Windsurf, Cline, Zed, Continue). *"Same Brain, any model."* |
194
195
  | **`brain_from_git`** | Reads your entire git history and populates the team knowledge graph (people + files + lessons) — zero setup, retroactively. |
195
196
  | **`brain_coverage` / `skill_gaps`** | A 0–100 health score for your knowledge + a ranked list of blind spots to fix. |
196
197
  | **`brain_predict`** | Predicts likely failures *before* they happen, from past incident patterns. |
@@ -271,6 +272,7 @@ npx @cachly-dev/mcp-server@latest learn-git # Auto-learn lessons from recent git
271
272
  | **`brain_file_map`** | Experts + lessons per file, before you touch it |
272
273
  | **`team_expertise_map`** | Full team skills matrix in one table |
273
274
  | **`brain_collab_pairs`** | Person↔Person Collaboration Graph — who collaborates with whom, bus-factor alerts |
275
+ | **`brain_portability`** | Config snippets for 7 MCP clients — proves model-neutrality, same Brain everywhere |
274
276
  | **`skill_gaps`** | Knowledge blind spots: unresolved failures, missing attribution |
275
277
  | **`brain_coverage`** | 0–100 knowledge-health score for your codebase |
276
278
  | `madc_deliberate` | Specialist AI agents vote to resolve contradictory lessons |
@@ -7,8 +7,15 @@ import { keywordSearch, tokenize, splitMultiQuery, levenshtein, indexVocab as _i
7
7
  import { rerankByQuality } from '../rerank.js';
8
8
  import { computeEmbedding, hasEmbedProvider } from '../embeddings.js';
9
9
  // ── Changelog (shown once per version in session_start) ──────────────────────
10
- const MCP_VERSION = '0.10.97';
10
+ const MCP_VERSION = '0.10.98';
11
11
  const WHATS_NEW = {
12
+ '0.10.98': [
13
+ `🌐 **Model-Neutrality as Feature (W9) — "Bring your own model, keep your brain."**`,
14
+ ` 🔌 New \`brain_portability()\` — shows your Brain ID, all compatible MCP clients, and ready-to-paste config snippets for each; proves the same Brain works in Claude, Cursor, Copilot, Windsurf, Cline, Zed and more`,
15
+ ` 🧠 Your lessons, crystals, and predictions are model-agnostic — no vendor lock-in at the memory layer`,
16
+ ` 📖 New docs: cachly.dev/docs/model-neutral — "Same Brain, Any Model" guide with live config examples`,
17
+ ` 📊 121 MCP tools (new: \`brain_portability\`)`,
18
+ ],
12
19
  '0.10.97': [
13
20
  `💠 **Team Crystallize (W8) — the team-wide, causal counter to per-user "Dreaming"**`,
14
21
  ` 🧬 New \`team_crystallize()\` — surfaces fixes that 2+ teammates *independently converged on*, the one thing a single-user memory structurally can't build`,
@@ -108,7 +115,7 @@ const WHATS_NEW = {
108
115
  '0.10.84': [
109
116
  `🤖 **M2M & agent-ecosystem reach — cachly for every caller, human or machine**`,
110
117
  ` 🔑 OAuth2 \`client_credentials\` grant — set CACHLY_CLIENT_ID + CACHLY_CLIENT_SECRET for fully headless auth (CI, agents, AI-to-AI)`,
111
- ` 🗂️ \`npx ... tool-specs --format=openai|anthropic|langchain\` — export all 120 tools in any framework's dialect`,
118
+ ` 🗂️ \`npx ... tool-specs --format=openai|anthropic|langchain\` — export all 121 tools in any framework's dialect`,
112
119
  ` 🌐 \`npx ... openapi\` — OpenAPI 3.1 doc (1 POST path per tool) for Assistants / codegen / Postman`,
113
120
  ` 🧪 14 new tests: client_credentials helpers, all four spec dialects, OpenAPI required-body inference`,
114
121
  ],
@@ -292,6 +299,7 @@ export const BRAIN_TOOL_NAMES = new Set([
292
299
  'session_start', 'session_end', 'session_ping', 'session_handoff', 'auto_learn_session',
293
300
  'brain_who_knows', 'brain_file_map', 'team_expertise_map',
294
301
  'skill_gaps', 'brain_coverage', 'brain_metrics', 'brain_service_map',
302
+ 'brain_collab_pairs', 'brain_portability',
295
303
  ]);
296
304
  export async function handleBrainTool(name, args, getConnection, apiFetch) {
297
305
  switch (name) {
@@ -2926,6 +2934,137 @@ export async function handleBrainTool(name, args, getConnection, apiFetch) {
2926
2934
  lines.push(``, `---`, `_Collaboration edges build from \`learn_from_attempts(author=..., file_paths=[...])\` and \`smart_recall(requester=...)\` cross-author reuse._`);
2927
2935
  return lines.join('\n');
2928
2936
  }
2937
+ // ── brain_portability ─────────────────────────────────────────────────────
2938
+ case 'brain_portability': {
2939
+ const { instance_id } = args;
2940
+ const clients = [
2941
+ {
2942
+ name: 'Claude Code',
2943
+ slug: 'claude-code',
2944
+ icon: '🤖',
2945
+ configPath: '~/.claude/settings.json',
2946
+ configBlock: JSON.stringify({
2947
+ mcpServers: {
2948
+ cachly: {
2949
+ command: 'npx',
2950
+ args: ['@cachly-dev/mcp-server@latest'],
2951
+ env: { CACHLY_INSTANCE_ID: instance_id },
2952
+ },
2953
+ },
2954
+ }, null, 2),
2955
+ },
2956
+ {
2957
+ name: 'Cursor',
2958
+ slug: 'cursor',
2959
+ icon: '🖱️',
2960
+ configPath: '~/.cursor/mcp.json',
2961
+ configBlock: JSON.stringify({
2962
+ mcpServers: {
2963
+ cachly: {
2964
+ command: 'npx',
2965
+ args: ['@cachly-dev/mcp-server@latest'],
2966
+ env: { CACHLY_INSTANCE_ID: instance_id },
2967
+ },
2968
+ },
2969
+ }, null, 2),
2970
+ },
2971
+ {
2972
+ name: 'Windsurf',
2973
+ slug: 'windsurf',
2974
+ icon: '🏄',
2975
+ configPath: '~/.windsurf/mcp.json',
2976
+ configBlock: JSON.stringify({
2977
+ mcpServers: {
2978
+ cachly: {
2979
+ command: 'npx',
2980
+ args: ['@cachly-dev/mcp-server@latest'],
2981
+ env: { CACHLY_INSTANCE_ID: instance_id },
2982
+ },
2983
+ },
2984
+ }, null, 2),
2985
+ },
2986
+ {
2987
+ name: 'GitHub Copilot (VS Code)',
2988
+ slug: 'copilot',
2989
+ icon: '🐙',
2990
+ configPath: '.vscode/mcp.json (workspace)',
2991
+ configBlock: JSON.stringify({
2992
+ servers: {
2993
+ cachly: {
2994
+ type: 'stdio',
2995
+ command: 'npx',
2996
+ args: ['@cachly-dev/mcp-server@latest'],
2997
+ env: { CACHLY_INSTANCE_ID: instance_id },
2998
+ },
2999
+ },
3000
+ }, null, 2),
3001
+ },
3002
+ {
3003
+ name: 'Cline',
3004
+ slug: 'cline',
3005
+ icon: '⚡',
3006
+ configPath: '~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json',
3007
+ configBlock: JSON.stringify({
3008
+ mcpServers: {
3009
+ cachly: {
3010
+ command: 'npx',
3011
+ args: ['@cachly-dev/mcp-server@latest'],
3012
+ env: { CACHLY_INSTANCE_ID: instance_id },
3013
+ },
3014
+ },
3015
+ }, null, 2),
3016
+ },
3017
+ {
3018
+ name: 'Zed',
3019
+ slug: 'zed',
3020
+ icon: '⚡',
3021
+ configPath: '~/.config/zed/settings.json',
3022
+ configBlock: JSON.stringify({
3023
+ context_servers: {
3024
+ cachly: {
3025
+ command: { path: 'npx', args: ['@cachly-dev/mcp-server@latest'] },
3026
+ env: { CACHLY_INSTANCE_ID: instance_id },
3027
+ },
3028
+ },
3029
+ }, null, 2),
3030
+ },
3031
+ {
3032
+ name: 'Continue',
3033
+ slug: 'continue',
3034
+ icon: '▶️',
3035
+ configPath: '~/.continue/config.json',
3036
+ configBlock: JSON.stringify({
3037
+ mcpServers: [
3038
+ {
3039
+ name: 'cachly',
3040
+ command: 'npx @cachly-dev/mcp-server@latest',
3041
+ env: { CACHLY_INSTANCE_ID: instance_id },
3042
+ },
3043
+ ],
3044
+ }, null, 2),
3045
+ },
3046
+ ];
3047
+ const lines = [
3048
+ `## 🌐 Brain Portability — Same Brain, Any Model`,
3049
+ ``,
3050
+ `> _"Bring your own model, keep your brain."_`,
3051
+ ``,
3052
+ `**Your Brain ID:** \`${instance_id}\``,
3053
+ ``,
3054
+ `This Brain ID is model-agnostic. Every lesson you've learned, every Memory Crystal you've distilled,`,
3055
+ `and every prediction from your Causal Knowledge Graph is accessible from **any MCP-compatible AI client**.`,
3056
+ ``,
3057
+ `---`,
3058
+ ``,
3059
+ `### Compatible Clients (${clients.length} supported)`,
3060
+ ``,
3061
+ ];
3062
+ for (const c of clients) {
3063
+ lines.push(`#### ${c.icon} ${c.name}`, `Config: \`${c.configPath}\``, ``, '```json', c.configBlock, '```', ``);
3064
+ }
3065
+ lines.push(`---`, ``, `### What travels with you`, ``, `| Data | Model-neutral? |`, `|------|---------------|`, `| Lessons (learn_from_attempts) | ✅ Full access in all clients |`, `| Memory Crystals (memory_crystalize) | ✅ Included in every session_start |`, `| Causal Knowledge Graph (brain_predict) | ✅ Same graph, same predictions |`, `| Team lessons (team_learn, team_confirm) | ✅ Team is per-Brain, not per-model |`, `| Domain Brain Marketplace installs | ✅ Installed once, available everywhere |`, `| Session handoffs (session_handoff) | ✅ Cross-client continuity |`, ``, `---`, ``, `### One-command setup for any new client`, ``, '```bash', `npx @cachly-dev/mcp-server@latest autopilot`, '```', ``, `Autopilot detects all installed editors and writes the config for each — with your \`${instance_id}\` Brain ID pre-filled.`, ``, `---`, `_Docs: cachly.dev/docs/model-neutral • Your Brain, Any Model_`);
3066
+ return lines.join('\n');
3067
+ }
2929
3068
  // ── sync_file_changes ─────────────────────────────────────────────────────
2930
3069
  default:
2931
3070
  return null;